| Offset 4, 27 lines modified | Offset 4, 27 lines modified | ||
| 4 | ·995d8c512911c3241de9b1783d24ac43·15462716·debug·optional·erlang-base-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 4 | ·995d8c512911c3241de9b1783d24ac43·15462716·debug·optional·erlang-base-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| 5 | ·0f3f53d9edc33a2b0c717eeef3910dec·11414572·interpreters·optional·erlang-base_27.3.4.1+dfsg-1_amd64.deb | 5 | ·0f3f53d9edc33a2b0c717eeef3910dec·11414572·interpreters·optional·erlang-base_27.3.4.1+dfsg-1_amd64.deb |
| 6 | ·77848a14c941b7991c9ea5dc2f805d82·41432·debug·optional·erlang-common-test-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 6 | ·77848a14c941b7991c9ea5dc2f805d82·41432·debug·optional·erlang-common-test-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| 7 | ·d404ab997aee9c72b9ae0cc076a6a5b8·1314304·interpreters·optional·erlang-common-test_27.3.4.1+dfsg-1_amd64.deb | 7 | ·d404ab997aee9c72b9ae0cc076a6a5b8·1314304·interpreters·optional·erlang-common-test_27.3.4.1+dfsg-1_amd64.deb |
| 8 | ·e697e502c901933e5224c3c1b5b730af·123036·debug·optional·erlang-crypto-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 8 | ·e697e502c901933e5224c3c1b5b730af·123036·debug·optional·erlang-crypto-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| 9 | ·a4cb0db6e0327920e68e816c92e41afa·179916·interpreters·optional·erlang-crypto_27.3.4.1+dfsg-1_amd64.deb | 9 | ·a4cb0db6e0327920e68e816c92e41afa·179916·interpreters·optional·erlang-crypto_27.3.4.1+dfsg-1_amd64.deb |
| 10 | ·27d54f66c320dfa13cd1731e08896e94·479548·interpreters·optional·erlang-debugger_27.3.4.1+dfsg-1_amd64.deb | 10 | ·27d54f66c320dfa13cd1731e08896e94·479548·interpreters·optional·erlang-debugger_27.3.4.1+dfsg-1_amd64.deb |
| 11 | · | 11 | ·a60ec89f4cb2cb1f63a349f5d8201680·303408·interpreters·optional·erlang-dev_27.3.4.1+dfsg-1_amd64.deb |
| 12 | ·b55bdd014c7321573953c3c1ce87de89·78292·debug·optional·erlang-dialyzer-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 12 | ·b55bdd014c7321573953c3c1ce87de89·78292·debug·optional·erlang-dialyzer-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| 13 | ·4bfbf642ecd4196d0c47fa6c249f3ac7·1077152·interpreters·optional·erlang-dialyzer_27.3.4.1+dfsg-1_amd64.deb | 13 | ·4bfbf642ecd4196d0c47fa6c249f3ac7·1077152·interpreters·optional·erlang-dialyzer_27.3.4.1+dfsg-1_amd64.deb |
| 14 | ·ce2038917b4ecd6836c34bed45223158·812540·interpreters·optional·erlang-diameter_27.3.4.1+dfsg-1_amd64.deb | 14 | ·ce2038917b4ecd6836c34bed45223158·812540·interpreters·optional·erlang-diameter_27.3.4.1+dfsg-1_amd64.deb |
| 15 | · | 15 | ·5c1323d7963415bfed1978ccaf542f32·16813400·doc·optional·erlang-doc_27.3.4.1+dfsg-1_all.deb |
| 16 | ·4eff1ab7c5f33fa7dfc7febad1c0fc45·459944·interpreters·optional·erlang-edoc_27.3.4.1+dfsg-1_amd64.deb | 16 | ·4eff1ab7c5f33fa7dfc7febad1c0fc45·459944·interpreters·optional·erlang-edoc_27.3.4.1+dfsg-1_amd64.deb |
| 17 | ·6dbb18be38c7d7f214f912780a94e66b·137912·interpreters·optional·erlang-eldap_27.3.4.1+dfsg-1_amd64.deb | 17 | ·6dbb18be38c7d7f214f912780a94e66b·137912·interpreters·optional·erlang-eldap_27.3.4.1+dfsg-1_amd64.deb |
| 18 | ·b01cf29a7fed7a6b6ced0f2d08d3dd98·185452·interpreters·optional·erlang-et_27.3.4.1+dfsg-1_amd64.deb | 18 | ·b01cf29a7fed7a6b6ced0f2d08d3dd98·185452·interpreters·optional·erlang-et_27.3.4.1+dfsg-1_amd64.deb |
| 19 | ·f48db04a8923739d64e6bccbebfb275b·172044·interpreters·optional·erlang-eunit_27.3.4.1+dfsg-1_amd64.deb | 19 | ·f48db04a8923739d64e6bccbebfb275b·172044·interpreters·optional·erlang-eunit_27.3.4.1+dfsg-1_amd64.deb |
| 20 | ·663794b9722de31a8eca4bcead45cde6·962900·interpreters·optional·erlang-examples_27.3.4.1+dfsg-1_all.deb | 20 | ·663794b9722de31a8eca4bcead45cde6·962900·interpreters·optional·erlang-examples_27.3.4.1+dfsg-1_all.deb |
| 21 | ·45b9b231f49fcd699da4408933efdcdb·106544·interpreters·optional·erlang-ftp_27.3.4.1+dfsg-1_amd64.deb | 21 | ·45b9b231f49fcd699da4408933efdcdb·106544·interpreters·optional·erlang-ftp_27.3.4.1+dfsg-1_amd64.deb |
| 22 | ·50d0c74263d0480a646c73fa9bc0854b·671680·interpreters·optional·erlang-inets_27.3.4.1+dfsg-1_amd64.deb | 22 | ·50d0c74263d0480a646c73fa9bc0854b·671680·interpreters·optional·erlang-inets_27.3.4.1+dfsg-1_amd64.deb |
| 23 | · | 23 | ·73c35b9700189c7bec2e29e998107a01·113796·interpreters·optional·erlang-jinterface_27.3.4.1+dfsg-1_all.deb |
| 24 | ·f330c672f2f5a3cc0e9610ef1376e8dd·64256·debug·optional·erlang-megaco-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 24 | ·f330c672f2f5a3cc0e9610ef1376e8dd·64256·debug·optional·erlang-megaco-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| 25 | ·17592dea944ae77fe5e410f9d9d33b6b·3691260·interpreters·optional·erlang-megaco_27.3.4.1+dfsg-1_amd64.deb | 25 | ·17592dea944ae77fe5e410f9d9d33b6b·3691260·interpreters·optional·erlang-megaco_27.3.4.1+dfsg-1_amd64.deb |
| 26 | ·9483479e05aff217772711a532362ac0·898772·interpreters·optional·erlang-mnesia_27.3.4.1+dfsg-1_amd64.deb | 26 | ·9483479e05aff217772711a532362ac0·898772·interpreters·optional·erlang-mnesia_27.3.4.1+dfsg-1_amd64.deb |
| 27 | ·8ca2371cfac0f4d7544a7e1e5fd3e1b2·93484·interpreters·optional·erlang-mode_27.3.4.1+dfsg-1_all.deb | 27 | ·8ca2371cfac0f4d7544a7e1e5fd3e1b2·93484·interpreters·optional·erlang-mode_27.3.4.1+dfsg-1_all.deb |
| 28 | ·c7454806034648e869214f3c55bf293c·15104·interpreters·optional·erlang-nox_27.3.4.1+dfsg-1_all.deb | 28 | ·c7454806034648e869214f3c55bf293c·15104·interpreters·optional·erlang-nox_27.3.4.1+dfsg-1_all.deb |
| 29 | ·d23ab4ba058beb239984def35cfb114a·1028820·interpreters·optional·erlang-observer_27.3.4.1+dfsg-1_amd64.deb | 29 | ·d23ab4ba058beb239984def35cfb114a·1028820·interpreters·optional·erlang-observer_27.3.4.1+dfsg-1_amd64.deb |
| 30 | ·586ffafe7fac635092182e36eb4f11fc·62300·debug·optional·erlang-odbc-dbgsym_27.3.4.1+dfsg-1_amd64.deb | 30 | ·586ffafe7fac635092182e36eb4f11fc·62300·debug·optional·erlang-odbc-dbgsym_27.3.4.1+dfsg-1_amd64.deb |
| Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
| 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary |
| 2 | -rw-r--r--···0········0········0·····3656·2025-07-08·07:27:28.000000·control.tar.xz | 2 | -rw-r--r--···0········0········0·····3656·2025-07-08·07:27:28.000000·control.tar.xz |
| 3 | -rw-r--r--···0········0········0···2995 | 3 | -rw-r--r--···0········0········0···299560·2025-07-08·07:27:28.000000·data.tar.xz |
| Offset 7, 308 lines modified | Offset 7, 308 lines modified | ||
| 7 | -define(VERSION,·"1:27.3.4.1+dfsg"). | 7 | -define(VERSION,·"1:27.3.4.1+dfsg"). |
| 8 | -define(ABI_VERSION,·"17.0"). | 8 | -define(ABI_VERSION,·"17.0"). |
| 9 | -define(PCRE_VERSION,·"8.45"). | 9 | -define(PCRE_VERSION,·"8.45"). |
| 10 | %·Since·all·packages·required·built·application·to·run·may·be·unavailable | 10 | %·Since·all·packages·required·built·application·to·run·may·be·unavailable |
| 11 | %·on·build·stage·it's·necessary·to·list·all·module-package·relationships | 11 | %·on·build·stage·it's·necessary·to·list·all·module-package·relationships |
| 12 | %·explicitly: | 12 | %·explicitly: |
| 13 | -define(MODULES,·[{" | 13 | -define(MODULES,·[{"sasl",·"erlang-base"}, |
| 14 | {"er | 14 | {"erlsrv",·"erlang-base"}, |
| 15 | {"sasl_report",·"erlang-base"}, | ||
| 16 | {"systools",·"erlang-base"}, | ||
| 17 | {"sasl_report_tty_h",·"erlang-base"}, | ||
| 18 | {"sasl_report_file_h",·"erlang-base"}, | ||
| 19 | {"systools_relup",·"erlang-base"}, | ||
| 20 | {"release_handler_1",·"erlang-base"}, | ||
| 21 | {"release_handler",·"erlang-base"}, | ||
| 22 | {"misc_supp",·"erlang-base"}, | ||
| 23 | {"rb",·"erlang-base"}, | ||
| 24 | {"systools_lib",·"erlang-base"}, | ||
| 25 | {"format_lib_supp",·"erlang-base"}, | ||
| 26 | {"alarm_handler",·"erlang-base"}, | ||
| 27 | {"systools_make",·"erlang-base"}, | ||
| 28 | {"systools_rc",·"erlang-base"}, | ||
| 29 | {"rb_format_supp",·"erlang-base"}, | ||
| 30 | {"target_system",·"erlang-base"}, | ||
| 31 | {"gen",·"erlang-base"}, | ||
| 32 | {"edlin",·"erlang-base"}, | ||
| 33 | {"dict",·"erlang-base"}, | ||
| 34 | {"json",·"erlang-base"}, | ||
| 35 | {"string",·"erlang-base"}, | ||
| 36 | {"file_sorter",·"erlang-base"}, | ||
| 37 | {"unicode_util",·"erlang-base"}, | ||
| 38 | {"base64",·"erlang-base"}, | ||
| 39 | {"erl_abstract_code",·"erlang-base"}, | ||
| 40 | {"otp_internal",·"erlang-base"}, | ||
| 41 | {"uri_string",·"erlang-base"}, | ||
| 42 | {"proc_lib",·"erlang-base"}, | ||
| 43 | {"zip",·"erlang-base"}, | ||
| 44 | {"erl_features",·"erlang-base"}, | ||
| 45 | {"erl_lint",·"erlang-base"}, | ||
| 46 | {"calendar",·"erlang-base"}, | ||
| 47 | {"lists",·"erlang-base"}, | ||
| 48 | {"epp",·"erlang-base"}, | ||
| 49 | {"qlc_pt",·"erlang-base"}, | ||
| 50 | {"erl_bits",·"erlang-base"}, | ||
| 51 | {"peer",·"erlang-base"}, | ||
| 52 | {"error_logger_tty_h",·"erlang-base"}, | ||
| 53 | {"erl_internal",·"erlang-base"}, | ||
| 54 | {"edlin_expand",·"erlang-base"}, | ||
| 55 | {"gb_trees",·"erlang-base"}, | ||
| 56 | {"dets_sup",·"erlang-base"}, | ||
| 57 | {"io_lib_pretty",·"erlang-base"}, | ||
| 58 | {"unicode",·"erlang-base"}, | ||
| 59 | {"argparse",·"erlang-base"}, | ||
| 60 | {"edlin_type_suggestion",·"erlang-base"}, | ||
| 61 | {"filename",·"erlang-base"}, | ||
| 62 | {"win32reg",·"erlang-base"}, | ||
| 63 | {"gb_sets",·"erlang-base"}, | ||
| 64 | {"shell",·"erlang-base"}, | ||
| 65 | {"error_logger_file_h",·"erlang-base"}, | ||
| 66 | {"dets_v9",·"erlang-base"}, | ||
| 67 | {"erl_parse",·"erlang-base"}, | ||
| 68 | {"gen_fsm",·"erlang-base"}, | ||
| 69 | {"erl_scan",·"erlang-base"}, | ||
| 70 | {"gen_server",·"erlang-base"}, | ||
| 71 | {"io_lib_format",·"erlang-base"}, | ||
| 72 | {"ets",·"erlang-base"}, | ||
| 73 | {"erl_posix_msg",·"erlang-base"}, | ||
| 74 | {"random",·"erlang-base"}, | ||
| 75 | {"re",·"erlang-base"}, | ||
| 76 | {"rand",·"erlang-base"}, | ||
| 77 | {"qlc",·"erlang-base"}, | ||
| 78 | {"erl_tar",·"erlang-base"}, | ||
| 79 | {"dets_server",·"erlang-base"}, | ||
| 80 | {"math",·"erlang-base"}, | ||
| 81 | {"shell_docs_markdown",·"erlang-base"}, | ||
| 82 | {"shell_default",·"erlang-base"}, | ||
| 83 | {"maps",·"erlang-base"}, | ||
| 84 | {"dets_utils",·"erlang-base"}, | ||
| 85 | {"timer",·"erlang-base"}, | ||
| 86 | {"c",·"erlang-base"}, | ||
| 87 | {"array",·"erlang-base"}, | ||
| 88 | {"erl_stdlib_errors",·"erlang-base"}, | ||
| 89 | {"erl_eval",·"erlang-base"}, | ||
| 90 | {"pool",·"erlang-base"}, | ||
| 91 | {"orddict",·"erlang-base"}, | ||
| 92 | {"queue",·"erlang-base"}, | ||
| 93 | {"io_lib_fread",·"erlang-base"}, | ||
| 94 | {"log_mf_h",·"erlang-base"}, | ||
| 95 | {"ms_transform",·"erlang-base"}, | ||
| 96 | {"binary",·"erlang-base"}, | ||
| 97 | {"digraph",·"erlang-base"}, | ||
| 98 | {"escript",·"erlang-base"}, | ||
| 99 | {"digraph_utils",·"erlang-base"}, | ||
| 100 | {"filelib",·"erlang-base"}, | ||
| 101 | {"ordsets",·"erlang-base"}, | ||
| 102 | {"sys",·"erlang-base"}, | ||
| 103 | {"gen_event",·"erlang-base"}, | ||
| 104 | {"erl_anno",·"erlang-base"}, | ||
| 105 | {"shell_docs",·"erlang-base"}, | ||
| 106 | {"erl_compile",·"erlang-base"}, | ||
| 107 | {"dets",·"erlang-base"}, | ||
| 108 | {"io_lib",·"erlang-base"}, | ||
| 109 | {"erl_expand_records",·"erlang-base"}, | ||
| 110 | {"sofs",·"erlang-base"}, | ||
| 111 | {"beam_lib",·"erlang-base"}, | ||
| 112 | {"edlin_key",·"erlang-base"}, | ||
| 113 | {"supervisor_bridge",·"erlang-base"}, | ||
| 114 | {"proplists",·"erlang-base"}, | ||
| 115 | {"slave",·"erlang-base"}, | ||
| 116 | {"io",·"erlang-base"}, | ||
| 117 | {"eval_bits",·"erlang-base"}, | ||
| 118 | {"sets",·"erlang-base"}, | ||
| 119 | {"edlin_context",·"erlang-base"}, | ||
| 120 | {"erl_pp",·"erlang-base"}, | ||
| 121 | {"erl_error",·"erlang-base"}, | ||
| 122 | {"supervisor",·"erlang-base"}, | ||
| 123 | {"gen_statem",·"erlang-base"}, | ||
| 124 | {"prim_net",·"erlang-base"}, | ||
| 15 | {"atomics",·"erlang-base"}, | 125 | {"atomics",·"erlang-base"}, |
| 16 | {"prim_zip",·"erlang-base"}, | ||
| 17 | {" | 126 | {"zlib",·"erlang-base"}, |
| 18 | {"erl_tracer",·"erlang-base"}, | ||
| 19 | {"erts_internal",·"erlang-base"}, | ||
| 20 | {"counters",·"erlang-base"}, | ||
| 21 | {"erts_dirty_process_signal_handler",·"erlang-base"}, | ||
| 22 | {"erts_tra | 127 | {"erts_literal_area_collector",·"erlang-base"}, |
| Max diff block lines reached; 14091/18432 bytes (76.45%) of diff not shown. | |||
| Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
| 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary |
| 2 | -rw-r--r--···0········0········0····396 | 2 | -rw-r--r--···0········0········0····39620·2025-07-08·07:27:28.000000·control.tar.xz |
| 3 | -rw-r--r--···0········0········0·16773 | 3 | -rw-r--r--···0········0········0·16773588·2025-07-08·07:27:28.000000·data.tar.xz |
| Offset 1, 13 lines modified | Offset 1, 13 lines modified | ||
| 1 | Package:·erlang-doc | 1 | Package:·erlang-doc |
| 2 | Source:·erlang | 2 | Source:·erlang |
| 3 | Version:·1:27.3.4.1+dfsg-1 | 3 | Version:·1:27.3.4.1+dfsg-1 |
| 4 | Architecture:·all | 4 | Architecture:·all |
| 5 | Maintainer:·Debian·Erlang·Packagers·<pkg-erlang-devel@lists.alioth.debian.org> | 5 | Maintainer:·Debian·Erlang·Packagers·<pkg-erlang-devel@lists.alioth.debian.org> |
| 6 | Installed-Size:·959 | 6 | Installed-Size:·95980 |
| 7 | Depends:·libjs-jquery,·libjs-jquery-ui | 7 | Depends:·libjs-jquery,·libjs-jquery-ui |
| 8 | Suggests:·erlang:any | 8 | Suggests:·erlang:any |
| 9 | Conflicts:·erlang-base:any·(<<·1:13.b.4),·erlang-base-hipe:any,·erlang-doc-html | 9 | Conflicts:·erlang-base:any·(<<·1:13.b.4),·erlang-base-hipe:any,·erlang-doc-html |
| 10 | Replaces:·erlang-doc-html | 10 | Replaces:·erlang-doc-html |
| 11 | Provides:·erlang-doc-html | 11 | Provides:·erlang-doc-html |
| 12 | Section:·doc | 12 | Section:·doc |
| 13 | Priority:·optional | 13 | Priority:·optional |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | -rw-r--r--···0·root·········(0)·root·········(0)······292·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/ssh.html | 137 | -rw-r--r--···0·root·········(0)·root·········(0)······292·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/ssh.html |
| 138 | -rw-r--r--···0·root·········(0)·root·········(0)······293·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/ssl.html | 138 | -rw-r--r--···0·root·········(0)·root·········(0)······293·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/ssl.html |
| 139 | -rw-r--r--···0·root·········(0)·root·········(0)······294·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/stdlib.html | 139 | -rw-r--r--···0·root·········(0)·root·········(0)······294·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/stdlib.html |
| 140 | -rw-r--r--···0·root·········(0)·root·········(0)······298·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/syntax_tools.html | 140 | -rw-r--r--···0·root·········(0)·root·········(0)······298·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/syntax_tools.html |
| 141 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/ | 141 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/ |
| 142 | -rw-r--r--···0·root·········(0)·root·········(0)·····2286·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/.build | 142 | -rw-r--r--···0·root·········(0)·root·········(0)·····2286·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/.build |
| 143 | -rw-r--r--···0·root·········(0)·root·········(0)·····5648·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/404.html | 143 | -rw-r--r--···0·root·········(0)·root·········(0)·····5648·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/404.html |
| 144 | -rw-r--r--···0·root·········(0)·root·········(0)···6545 | 144 | -rw-r--r--···0·root·········(0)·root·········(0)···654591·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/Erlang·System·Documentation.epub |
| 145 | -rw-r--r--···0·root·········(0)·root·········(0)····53540·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/applications.html | 145 | -rw-r--r--···0·root·········(0)·root·········(0)····53540·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/applications.html |
| 146 | -rw-r--r--···0·root·········(0)·root·········(0)····97489·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/appup_cookbook.html | 146 | -rw-r--r--···0·root·········(0)·root·········(0)····97489·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/appup_cookbook.html |
| 147 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/ | 147 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/ |
| 148 | -rw-r--r--···0·root·········(0)·root·········(0)·····7982·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/ballpoint-pen.svg | 148 | -rw-r--r--···0·root·········(0)·root·········(0)·····7982·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/ballpoint-pen.svg |
| 149 | -rw-r--r--···0·root·········(0)·root·········(0)·····2284·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist1.gif | 149 | -rw-r--r--···0·root·········(0)·root·········(0)·····2284·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist1.gif |
| 150 | -rw-r--r--···0·root·········(0)·root·········(0)·····5214·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist2.gif | 150 | -rw-r--r--···0·root·········(0)·root·········(0)·····5214·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist2.gif |
| 151 | -rw-r--r--···0·root·········(0)·root·········(0)·····5007·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist3.gif | 151 | -rw-r--r--···0·root·········(0)·root·········(0)·····5007·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/doc/system/assets/dist3.gif |
| Offset 351, 15 lines modified | Offset 351, 15 lines modified | ||
| 351 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/ | 351 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/ |
| 352 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/ | 352 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/ |
| 353 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/ | 353 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/ |
| 354 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/ | 354 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/ |
| 355 | -rw-r--r--···0·root·········(0)·root·········(0)·····1060·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/.build | 355 | -rw-r--r--···0·root·········(0)·root·········(0)·····1060·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/.build |
| 356 | -rw-r--r--···0·root·········(0)·root·········(0)·····6010·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/404.html | 356 | -rw-r--r--···0·root·········(0)·root·········(0)·····6010·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/404.html |
| 357 | -rw-r--r--···0·root·········(0)·root·········(0)·····6692·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/api-reference.html | 357 | -rw-r--r--···0·root·········(0)·root·········(0)·····6692·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/api-reference.html |
| 358 | -rw-r--r--···0·root·········(0)·root·········(0)····968 | 358 | -rw-r--r--···0·root·········(0)·root·········(0)····96830·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1.epub |
| 359 | -rw-r--r--···0·root·········(0)·root·········(0)···140490·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_getting_started.html | 359 | -rw-r--r--···0·root·········(0)·root·········(0)···140490·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_getting_started.html |
| 360 | -rw-r--r--···0·root·········(0)·root·········(0)·····9328·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_introduction.html | 360 | -rw-r--r--···0·root·········(0)·root·········(0)·····9328·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_introduction.html |
| 361 | -rw-r--r--···0·root·········(0)·root·········(0)·····7454·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_overview.html | 361 | -rw-r--r--···0·root·········(0)·root·········(0)·····7454·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_overview.html |
| 362 | -rw-r--r--···0·root·········(0)·root·········(0)····78800·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_spec.html | 362 | -rw-r--r--···0·root·········(0)·root·········(0)····78800·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1_spec.html |
| 363 | -rw-r--r--···0·root·········(0)·root·········(0)····35427·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1ct.html | 363 | -rw-r--r--···0·root·········(0)·root·········(0)····35427·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/asn1ct.html |
| 364 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/assets/ | 364 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/assets/ |
| 365 | -rw-r--r--···0·root·········(0)·root·········(0)·····1340·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/assets/exclusive_Win_But.gif | 365 | -rw-r--r--···0·root·········(0)·root·········(0)·····1340·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/assets/exclusive_Win_But.gif |
| Offset 380, 15 lines modified | Offset 380, 15 lines modified | ||
| 380 | -rw-r--r--···0·root·········(0)·root·········(0)····23236·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-300-normal-YUMVEFOL.woff2 | 380 | -rw-r--r--···0·root·········(0)·root·········(0)····23236·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 381 | -rw-r--r--···0·root·········(0)·root·········(0)····23580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-400-normal-W7754I4D.woff2 | 381 | -rw-r--r--···0·root·········(0)·root·········(0)····23580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-400-normal-W7754I4D.woff2 |
| 382 | -rw-r--r--···0·root·········(0)·root·········(0)····23040·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-700-normal-2XVSBPG4.woff2 | 382 | -rw-r--r--···0·root·········(0)·root·········(0)····23040·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 383 | -rw-r--r--···0·root·········(0)·root·········(0)·····5624·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 383 | -rw-r--r--···0·root·········(0)·root·········(0)·····5624·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 384 | -rw-r--r--···0·root·········(0)·root·········(0)·····5472·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 384 | -rw-r--r--···0·root·········(0)·root·········(0)·····5472·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 385 | -rw-r--r--···0·root·········(0)·root·········(0)·····5368·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 385 | -rw-r--r--···0·root·········(0)·root·········(0)·····5368·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 386 | -rw-r--r--···0·root·········(0)·root·········(0)·····1956·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/remixicon-NKANDIL5.woff2 | 386 | -rw-r--r--···0·root·········(0)·root·········(0)·····1956·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/remixicon-NKANDIL5.woff2 |
| 387 | -rw-r--r--···0·root·········(0)·root·········(0)···149660·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/search_data- | 387 | -rw-r--r--···0·root·········(0)·root·········(0)···149660·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/search_data-79B97512.js |
| 388 | -rw-r--r--···0·root·········(0)·root·········(0)·····5647·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/sidebar_items-524E8C43.js | 388 | -rw-r--r--···0·root·········(0)·root·········(0)·····5647·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/dist/sidebar_items-524E8C43.js |
| 389 | -rw-r--r--···0·root·········(0)·root·········(0)······264·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/index.html | 389 | -rw-r--r--···0·root·········(0)·root·········(0)······264·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/index.html |
| 390 | -rw-r--r--···0·root·········(0)·root·········(0)····98315·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/notes.html | 390 | -rw-r--r--···0·root·········(0)·root·········(0)····98315·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/notes.html |
| 391 | -rw-r--r--···0·root·········(0)·root·········(0)·····5926·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/search.html | 391 | -rw-r--r--···0·root·········(0)·root·········(0)·····5926·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/asn1-5.3.4.1/doc/html/search.html |
| 392 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/ | 392 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/ |
| 393 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/ | 393 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/ |
| 394 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ | 394 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ |
| Offset 397, 15 lines modified | Offset 397, 15 lines modified | ||
| 397 | -rw-r--r--···0·root·········(0)·root·········(0)····10672·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/api-reference.html | 397 | -rw-r--r--···0·root·········(0)·root·········(0)····10672·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/api-reference.html |
| 398 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/ | 398 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/ |
| 399 | -rw-r--r--···0·root·········(0)·root·········(0)·····4963·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/config.gif | 399 | -rw-r--r--···0·root·········(0)·root·········(0)·····4963·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/config.gif |
| 400 | -rw-r--r--···0·root·········(0)·root·········(0)····10726·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/html_logs.gif | 400 | -rw-r--r--···0·root·········(0)·root·········(0)····10726·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/html_logs.gif |
| 401 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/logo.png | 401 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/logo.png |
| 402 | -rw-r--r--···0·root·········(0)·root·········(0)·····9561·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/tc_execution.gif | 402 | -rw-r--r--···0·root·········(0)·root·········(0)·····9561·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/assets/tc_execution.gif |
| 403 | -rw-r--r--···0·root·········(0)·root·········(0)····21795·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/basics_chapter.html | 403 | -rw-r--r--···0·root·········(0)·root·········(0)····21795·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/basics_chapter.html |
| 404 | -rw-r--r--···0·root·········(0)·root·········(0)···3993 | 404 | -rw-r--r--···0·root·········(0)·root·········(0)···399367·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/common_test.epub |
| 405 | -rw-r--r--···0·root·········(0)·root·········(0)·····7502·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/common_test_app.html | 405 | -rw-r--r--···0·root·········(0)·root·········(0)·····7502·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/common_test_app.html |
| 406 | -rw-r--r--···0·root·········(0)·root·········(0)····59626·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/config_file_chapter.html | 406 | -rw-r--r--···0·root·········(0)·root·········(0)····59626·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/config_file_chapter.html |
| 407 | -rw-r--r--···0·root·········(0)·root·········(0)····25541·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/cover_chapter.html | 407 | -rw-r--r--···0·root·········(0)·root·········(0)····25541·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/cover_chapter.html |
| 408 | -rw-r--r--···0·root·········(0)·root·········(0)···182222·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct.html | 408 | -rw-r--r--···0·root·········(0)·root·········(0)···182222·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct.html |
| 409 | -rw-r--r--···0·root·········(0)·root·········(0)····12294·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_cover.html | 409 | -rw-r--r--···0·root·········(0)·root·········(0)····12294·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_cover.html |
| 410 | -rw-r--r--···0·root·········(0)·root·········(0)····30006·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_ftp.html | 410 | -rw-r--r--···0·root·········(0)·root·········(0)····30006·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_ftp.html |
| 411 | -rw-r--r--···0·root·········(0)·root·········(0)····77102·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_hooks.html | 411 | -rw-r--r--···0·root·········(0)·root·········(0)····77102·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/common_test-1.27.7/doc/html/ct_hooks.html |
| Offset 466, 15 lines modified | Offset 466, 15 lines modified | ||
| 466 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/assets/ | 466 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/assets/ |
| 467 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/assets/logo.png | 467 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/assets/logo.png |
| 468 | -rw-r--r--···0·root·········(0)·root·········(0)····24220·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/beam_ssa.html | 468 | -rw-r--r--···0·root·········(0)·root·········(0)····24220·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/beam_ssa.html |
| 469 | -rw-r--r--···0·root·········(0)·root·········(0)···450427·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl.html | 469 | -rw-r--r--···0·root·········(0)·root·········(0)···450427·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl.html |
| 470 | -rw-r--r--···0·root·········(0)·root·········(0)····28687·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl_clauses.html | 470 | -rw-r--r--···0·root·········(0)·root·········(0)····28687·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl_clauses.html |
| 471 | -rw-r--r--···0·root·········(0)·root·········(0)····28945·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl_trees.html | 471 | -rw-r--r--···0·root·········(0)·root·········(0)····28945·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/cerl_trees.html |
| 472 | -rw-r--r--···0·root·········(0)·root·········(0)····84316·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/compile.html | 472 | -rw-r--r--···0·root·········(0)·root·········(0)····84316·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/compile.html |
| 473 | -rw-r--r--···0·root·········(0)·root·········(0)···1820 | 473 | -rw-r--r--···0·root·········(0)·root·········(0)···182060·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/compiler.epub |
| 474 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/ | 474 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/ |
| 475 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/handlebars.runtime-CFQAK6SD.js | 475 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/handlebars.runtime-CFQAK6SD.js |
| 476 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/handlebars.templates-K7URE6B4.js | 476 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/handlebars.templates-K7URE6B4.js |
| 477 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/html-55NP3CS6.js | 477 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/html-55NP3CS6.js |
| 478 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/html-erlang-WGRVP7UZ.css | 478 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/html-erlang-WGRVP7UZ.css |
| 479 | -rw-r--r--···0·root·········(0)·root·········(0)····17732·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/inconsolata-latin-400-normal-OXLHDACS.woff2 | 479 | -rw-r--r--···0·root·········(0)·root·········(0)····17732·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/inconsolata-latin-400-normal-OXLHDACS.woff2 |
| 480 | -rw-r--r--···0·root·········(0)·root·········(0)····17976·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/inconsolata-latin-700-normal-S55P5GAG.woff2 | 480 | -rw-r--r--···0·root·········(0)·root·········(0)····17976·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/compiler-8.6.1/doc/html/dist/inconsolata-latin-700-normal-S55P5GAG.woff2 |
| Offset 500, 15 lines modified | Offset 500, 15 lines modified | ||
| 500 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/ | 500 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/ |
| 501 | -rw-r--r--···0·root·········(0)·root·········(0)······992·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/.build | 501 | -rw-r--r--···0·root·········(0)·root·········(0)······992·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/.build |
| 502 | -rw-r--r--···0·root·········(0)·root·········(0)·····6016·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/404.html | 502 | -rw-r--r--···0·root·········(0)·root·········(0)·····6016·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/404.html |
| 503 | -rw-r--r--···0·root·········(0)·root·········(0)····35139·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/algorithm_details.html | 503 | -rw-r--r--···0·root·········(0)·root·········(0)····35139·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/algorithm_details.html |
| 504 | -rw-r--r--···0·root·········(0)·root·········(0)·····6670·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/api-reference.html | 504 | -rw-r--r--···0·root·········(0)·root·········(0)·····6670·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/api-reference.html |
| 505 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/assets/ | 505 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/assets/ |
| 506 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/assets/logo.png | 506 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/assets/logo.png |
| 507 | -rw-r--r--···0·root·········(0)·root·········(0)···12704 | 507 | -rw-r--r--···0·root·········(0)·root·········(0)···127048·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/crypto.epub |
| 508 | -rw-r--r--···0·root·········(0)·root·········(0)···294565·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/crypto.html | 508 | -rw-r--r--···0·root·········(0)·root·········(0)···294565·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/crypto.html |
| 509 | -rw-r--r--···0·root·········(0)·root·········(0)····10016·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/crypto_app.html | 509 | -rw-r--r--···0·root·········(0)·root·········(0)····10016·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/crypto_app.html |
| 510 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/ | 510 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/ |
| 511 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/handlebars.runtime-CFQAK6SD.js | 511 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/handlebars.runtime-CFQAK6SD.js |
| 512 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/handlebars.templates-K7URE6B4.js | 512 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/handlebars.templates-K7URE6B4.js |
| 513 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/html-55NP3CS6.js | 513 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/html-55NP3CS6.js |
| 514 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/html-erlang-WGRVP7UZ.css | 514 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/html-erlang-WGRVP7UZ.css |
| Offset 521, 15 lines modified | Offset 521, 15 lines modified | ||
| 521 | -rw-r--r--···0·root·········(0)·root·········(0)····23236·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-300-normal-YUMVEFOL.woff2 | 521 | -rw-r--r--···0·root·········(0)·root·········(0)····23236·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 522 | -rw-r--r--···0·root·········(0)·root·········(0)····23580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-400-normal-W7754I4D.woff2 | 522 | -rw-r--r--···0·root·········(0)·root·········(0)····23580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-400-normal-W7754I4D.woff2 |
| 523 | -rw-r--r--···0·root·········(0)·root·········(0)····23040·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-700-normal-2XVSBPG4.woff2 | 523 | -rw-r--r--···0·root·········(0)·root·········(0)····23040·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 524 | -rw-r--r--···0·root·········(0)·root·········(0)·····5624·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 524 | -rw-r--r--···0·root·········(0)·root·········(0)·····5624·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 525 | -rw-r--r--···0·root·········(0)·root·········(0)·····5472·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 525 | -rw-r--r--···0·root·········(0)·root·········(0)·····5472·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 526 | -rw-r--r--···0·root·········(0)·root·········(0)·····5368·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 526 | -rw-r--r--···0·root·········(0)·root·········(0)·····5368·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 527 | -rw-r--r--···0·root·········(0)·root·········(0)·····1956·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/remixicon-NKANDIL5.woff2 | 527 | -rw-r--r--···0·root·········(0)·root·········(0)·····1956·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/remixicon-NKANDIL5.woff2 |
| 528 | -rw-r--r--···0·root·········(0)·root·········(0)···215062·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/search_data- | 528 | -rw-r--r--···0·root·········(0)·root·········(0)···215062·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/search_data-F51EF764.js |
| 529 | -rw-r--r--···0·root·········(0)·root·········(0)····24500·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/sidebar_items-14E9F638.js | 529 | -rw-r--r--···0·root·········(0)·root·········(0)····24500·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/dist/sidebar_items-14E9F638.js |
| 530 | -rw-r--r--···0·root·········(0)·root·········(0)····19808·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/engine_keys.html | 530 | -rw-r--r--···0·root·········(0)·root·········(0)····19808·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/engine_keys.html |
| 531 | -rw-r--r--···0·root·········(0)·root·········(0)····20888·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/engine_load.html | 531 | -rw-r--r--···0·root·········(0)·root·········(0)····20888·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/engine_load.html |
| 532 | -rw-r--r--···0·root·········(0)·root·········(0)····15685·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/fips.html | 532 | -rw-r--r--···0·root·········(0)·root·········(0)····15685·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/fips.html |
| 533 | -rw-r--r--···0·root·········(0)·root·········(0)······264·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/index.html | 533 | -rw-r--r--···0·root·········(0)·root·········(0)······264·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/index.html |
| 534 | -rw-r--r--···0·root·········(0)·root·········(0)····13091·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/licenses.html | 534 | -rw-r--r--···0·root·········(0)·root·········(0)····13091·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/licenses.html |
| 535 | -rw-r--r--···0·root·········(0)·root·········(0)····54377·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/new_api.html | 535 | -rw-r--r--···0·root·········(0)·root·········(0)····54377·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/crypto-5.5.3/doc/html/new_api.html |
| Offset 583, 15 lines modified | Offset 583, 15 lines modified | ||
| 583 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/ | 583 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/ |
| 584 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/ | 584 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/ |
| 585 | -rw-r--r--···0·root·········(0)·root·········(0)······921·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/.build | 585 | -rw-r--r--···0·root·········(0)·root·········(0)······921·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/.build |
| 586 | -rw-r--r--···0·root·········(0)·root·········(0)·····6028·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/404.html | 586 | -rw-r--r--···0·root·········(0)·root·········(0)·····6028·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/404.html |
| 587 | -rw-r--r--···0·root·········(0)·root·········(0)·····6794·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/api-reference.html | 587 | -rw-r--r--···0·root·········(0)·root·········(0)·····6794·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/api-reference.html |
| 588 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/assets/ | 588 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/assets/ |
| 589 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/assets/logo.png | 589 | -rw-r--r--···0·root·········(0)·root·········(0)·····5837·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/assets/logo.png |
| 590 | -rw-r--r--···0·root·········(0)·root·········(0)····6638 | 590 | -rw-r--r--···0·root·········(0)·root·········(0)····66388·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dialyzer.epub |
| 591 | -rw-r--r--···0·root·········(0)·root·········(0)····53628·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dialyzer.html | 591 | -rw-r--r--···0·root·········(0)·root·········(0)····53628·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dialyzer.html |
| 592 | -rw-r--r--···0·root·········(0)·root·········(0)····25902·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dialyzer_chapter.html | 592 | -rw-r--r--···0·root·········(0)·root·········(0)····25902·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dialyzer_chapter.html |
| 593 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/ | 593 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/ |
| 594 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/handlebars.runtime-CFQAK6SD.js | 594 | -rw-r--r--···0·root·········(0)·root·········(0)····20933·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/handlebars.runtime-CFQAK6SD.js |
| 595 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/handlebars.templates-K7URE6B4.js | 595 | -rw-r--r--···0·root·········(0)·root·········(0)····33580·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/handlebars.templates-K7URE6B4.js |
| 596 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/html-55NP3CS6.js | 596 | -rw-r--r--···0·root·········(0)·root·········(0)····70589·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/html-55NP3CS6.js |
| 597 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/html-erlang-WGRVP7UZ.css | 597 | -rw-r--r--···0·root·········(0)·root·········(0)····67213·2025-07-08·07:27:28.000000·./usr/share/doc/erlang-doc/html/lib/dialyzer-5.3.1/doc/html/dist/html-erlang-WGRVP7UZ.css |
| Max diff block lines reached; 75011/95975 bytes (78.16%) of diff not shown. | |||
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | ······<p·class="built-using"> | 127 | ······<p·class="built-using"> |
| 128 | ········Built·using | 128 | ········Built·using |
| 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 131 | ······</p> | 131 | ······</p> |
| 132 | <p>Copyright·©·1996-202 | 132 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 133 | ····</footer> | 133 | ····</footer> |
| 134 | ··</div> | 134 | ··</div> |
| 135 | </main> | 135 | </main> |
| 136 | </div> | 136 | </div> |
| 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 138 | ··<script> | 138 | ··<script> |
| 139 | ··let·initialized·=·false; | 139 | ··let·initialized·=·false; |
| Offset 467, 15 lines modified | Offset 467, 15 lines modified | ||
| 467 | ······<p·class="built-using"> | 467 | ······<p·class="built-using"> |
| 468 | ········Built·using | 468 | ········Built·using |
| 469 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 469 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 470 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 470 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 471 | ······</p> | 471 | ······</p> |
| 472 | <p>Copyright·©·1996-202 | 472 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 473 | ····</footer> | 473 | ····</footer> |
| 474 | ··</div> | 474 | ··</div> |
| 475 | </main> | 475 | </main> |
| 476 | </div> | 476 | </div> |
| 477 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 477 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 478 | ··<script> | 478 | ··<script> |
| 479 | ··let·initialized·=·false; | 479 | ··let·initialized·=·false; |
| Offset 158, 15 lines modified | Offset 158, 15 lines modified | ||
| 158 | ······<p·class="built-using"> | 158 | ······<p·class="built-using"> |
| 159 | ········Built·using | 159 | ········Built·using |
| 160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 162 | ······</p> | 162 | ······</p> |
| 163 | <p>Copyright·©·1996-202 | 163 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 164 | ····</footer> | 164 | ····</footer> |
| 165 | ··</div> | 165 | ··</div> |
| 166 | </main> | 166 | </main> |
| 167 | </div> | 167 | </div> |
| 168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 169 | ··<script> | 169 | ··<script> |
| 170 | ··let·initialized·=·false; | 170 | ··let·initialized·=·false; |
| Offset 149, 15 lines modified | Offset 149, 15 lines modified | ||
| 149 | ······<p·class="built-using"> | 149 | ······<p·class="built-using"> |
| 150 | ········Built·using | 150 | ········Built·using |
| 151 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 151 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 152 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 152 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 153 | ······</p> | 153 | ······</p> |
| 154 | <p>Copyright·©·1996-202 | 154 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 155 | ····</footer> | 155 | ····</footer> |
| 156 | ··</div> | 156 | ··</div> |
| 157 | </main> | 157 | </main> |
| 158 | </div> | 158 | </div> |
| 159 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 159 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 160 | ··<script> | 160 | ··<script> |
| 161 | ··let·initialized·=·false; | 161 | ··let·initialized·=·false; |
| Offset 388, 15 lines modified | Offset 388, 15 lines modified | ||
| 388 | ······<p·class="built-using"> | 388 | ······<p·class="built-using"> |
| 389 | ········Built·using | 389 | ········Built·using |
| 390 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 390 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 391 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 391 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 392 | ······</p> | 392 | ······</p> |
| 393 | <p>Copyright·©·1996-202 | 393 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 394 | ····</footer> | 394 | ····</footer> |
| 395 | ··</div> | 395 | ··</div> |
| 396 | </main> | 396 | </main> |
| 397 | </div> | 397 | </div> |
| 398 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 398 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 399 | ··<script> | 399 | ··<script> |
| 400 | ··let·initialized·=·false; | 400 | ··let·initialized·=·false; |
| Offset 212, 15 lines modified | Offset 212, 15 lines modified | ||
| 212 | ······<p·class="built-using"> | 212 | ······<p·class="built-using"> |
| 213 | ········Built·using | 213 | ········Built·using |
| 214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 216 | ······</p> | 216 | ······</p> |
| 217 | <p>Copyright·©·1996-202 | 217 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 218 | ····</footer> | 218 | ····</footer> |
| 219 | ··</div> | 219 | ··</div> |
| 220 | </main> | 220 | </main> |
| 221 | </div> | 221 | </div> |
| 222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 223 | ··<script> | 223 | ··<script> |
| 224 | ··let·initialized·=·false; | 224 | ··let·initialized·=·false; |
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | ······<p·class="built-using"> | 127 | ······<p·class="built-using"> |
| 128 | ········Built·using | 128 | ········Built·using |
| 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 131 | ······</p> | 131 | ······</p> |
| 132 | <p>Copyright·©·1996-202 | 132 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 133 | ····</footer> | 133 | ····</footer> |
| 134 | ··</div> | 134 | ··</div> |
| 135 | </main> | 135 | </main> |
| 136 | </div> | 136 | </div> |
| 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 138 | ··<script> | 138 | ··<script> |
| 139 | ··let·initialized·=·false; | 139 | ··let·initialized·=·false; |
| Offset 131, 15 lines modified | Offset 131, 15 lines modified | ||
| 131 | ······<p·class="built-using"> | 131 | ······<p·class="built-using"> |
| 132 | ········Built·using | 132 | ········Built·using |
| 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 135 | ······</p> | 135 | ······</p> |
| 136 | <p>Copyright·©·1996-202 | 136 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 137 | ····</footer> | 137 | ····</footer> |
| 138 | ··</div> | 138 | ··</div> |
| 139 | </main> | 139 | </main> |
| 140 | </div> | 140 | </div> |
| 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 142 | ··<script> | 142 | ··<script> |
| 143 | ··let·initialized·=·false; | 143 | ··let·initialized·=·false; |
| Offset 135, 34 lines modified | Offset 135, 34 lines modified | ||
| 135 | <a·href="applications.html#app_dir">directory·structure</a>.</p><p><a·href=""·id="callback_module"></a></p><h2·id="application-callback-module"·class="section-heading"> | 135 | <a·href="applications.html#app_dir">directory·structure</a>.</p><p><a·href=""·id="callback_module"></a></p><h2·id="application-callback-module"·class="section-heading"> |
| 136 | ··<a·href="#application-callback-module"·class="hover-link"> | 136 | ··<a·href="#application-callback-module"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Application·Callback·Module</span> | 139 | ··<span·class="text">Application·Callback·Module</span> |
| 140 | </h2> | 140 | </h2> |
| 141 | <p>How·to·start·and·stop·the·code·for·the·application,·including·its·supervision | 141 | <p>How·to·start·and·stop·the·code·for·the·application,·including·its·supervision |
| 142 | tree,·is·described·by·two·callback·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id="4459990404-1">(</span><span·class="n">StartType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StartArgs</span><span·class="p"·data-group-id="4459990404-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="4459990404-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="4459990404-2">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4459990404-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="4459990404-3">}</span><span·class="w"> | ||
| 143 | 142 | tree,·is·described·by·two·callback·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id="7697323178-1">(</span><span·class="n">StartType</span><span·class="p">,</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·740,·SHA:·c0f50728969f33e03a1d2cd11410e24f35da730a3e19e107077398b05d84d582·...·] | |
| 143 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="7697323178-4">(</span><span·class="n">State</span><span·class="p"·data-group-id="7697323178-4">)</span></code></pre><ul><li><code·class="inline">start/2</code>·is·called·when·starting·the·application·and·is·to·create·the | ||
| 144 | supervision·tree·by·starting·the·top·supervisor.·It·is·expected·to·return·the | 144 | supervision·tree·by·starting·the·top·supervisor.·It·is·expected·to·return·the |
| 145 | pid·of·the·top·supervisor·and·an·optional·term,·<code·class="inline">State</code>,·which·defaults·to | 145 | pid·of·the·top·supervisor·and·an·optional·term,·<code·class="inline">State</code>,·which·defaults·to |
| 146 | <code·class="inline">[]</code>.·This·term·is·passed·as·is·to·<code·class="inline">stop/1</code>.</li><li><code·class="inline">StartType</code>·is·usually·the·atom·<code·class="inline">normal</code>.·It·has·other·values·only·in·the·case | 146 | <code·class="inline">[]</code>.·This·term·is·passed·as·is·to·<code·class="inline">stop/1</code>.</li><li><code·class="inline">StartType</code>·is·usually·the·atom·<code·class="inline">normal</code>.·It·has·other·values·only·in·the·case |
| 147 | of·a·takeover·or·failover;·see | 147 | of·a·takeover·or·failover;·see |
| 148 | <a·href="distributed_applications.html">Distributed·Applications</a>.</li><li><code·class="inline">StartArgs</code>·is·defined·by·the·key·<code·class="inline">mod</code>·in·the | 148 | <a·href="distributed_applications.html">Distributed·Applications</a>.</li><li><code·class="inline">StartArgs</code>·is·defined·by·the·key·<code·class="inline">mod</code>·in·the |
| 149 | <a·href="applications.html#appl_res_file">application·resource·file</a>.</li><li><code·class="inline">stop/1</code>·is·called·<em>after</em>·the·application·has·been·stopped·and·is·to·do·any | 149 | <a·href="applications.html#appl_res_file">application·resource·file</a>.</li><li><code·class="inline">stop/1</code>·is·called·<em>after</em>·the·application·has·been·stopped·and·is·to·do·any |
| 150 | necessary·cleaning·up.·The·actual·stopping·of·the·application,·that·is, | 150 | necessary·cleaning·up.·The·actual·stopping·of·the·application,·that·is, |
| 151 | shutting·down·the·supervision·tree,·is·handled·automatically·as·described·in | 151 | shutting·down·the·supervision·tree,·is·handled·automatically·as·described·in |
| 152 | <a·href="applications.html#stopping">Starting·and·Stopping·Applications</a>.</li></ul><p><a·href=""·id="ch_app"></a></p><p>Example·of·an·application·callback·module·for·packaging·the·supervision·tree | 152 | <a·href="applications.html#stopping">Starting·and·Stopping·Applications</a>.</li></ul><p><a·href=""·id="ch_app"></a></p><p>Example·of·an·application·callback·module·for·packaging·the·supervision·tree |
| 153 | from·<a·href="sup_princ.html#ex">Supervisor·Behaviour</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 153 | from·<a·href="sup_princ.html#ex">Supervisor·Behaviour</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2760825586-1">(</span><span·class="ss">ch_app</span><span·class="p"·data-group-id="2760825586-1">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 154 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="2760825586-2">(</span><span·class="ss">application</span><span·class="p"·data-group-id="2760825586-2">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="w"> | 155 | </span><span·class="w"> |
| 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="2760825586-3">(</span><span·class="p"·data-group-id="2760825586-4">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·7b0a2373499f3b20214b56bd61421839c8c3bc5eacb66fe3e294011fbe28ad17·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">start</span><span·class="p"·data-group-id="2760825586-5">(</span><span·class="p">_</span><span·class="n">Type</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="2760825586-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="nc">ch_sup</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="nc">ch_sup</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="2760825586-6">(</span><span·class="p"·data-group-id="2760825586-6">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="2760825586-7">(</span><span·class="p">_</span><span·class="n">State</span><span·class="p"·data-group-id="2760825586-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>A·library·application·that·cannot·be·started·or·stopped·does·not·need·any | 160 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>A·library·application·that·cannot·be·started·or·stopped·does·not·need·any |
| 161 | application·callback·module.</p><p><a·href=""·id="appl_res_file"></a></p><h2·id="application-resource-file"·class="section-heading"> | 161 | application·callback·module.</p><p><a·href=""·id="appl_res_file"></a></p><h2·id="application-resource-file"·class="section-heading"> |
| 162 | ··<a·href="#application-resource-file"·class="hover-link"> | 162 | ··<a·href="#application-resource-file"·class="hover-link"> |
| 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 164 | ··</a> | 164 | ··</a> |
| 165 | ··<span·class="text">Application·Resource·File</span> | 165 | ··<span·class="text">Application·Resource·File</span> |
| 166 | </h2> | 166 | </h2> |
| Offset 173, 22 lines modified | Offset 173, 22 lines modified | ||
| 173 | keys.</li></ul><p>The·contents·of·a·minimal·<code·class="inline">.app</code>·file·for·a·library·application·<code·class="inline">libapp</code>·looks | 173 | keys.</li></ul><p>The·contents·of·a·minimal·<code·class="inline">.app</code>·file·for·a·library·application·<code·class="inline">libapp</code>·looks |
| 174 | as·follows:</p><pre><code·class="text">{application,·libapp,·[]}.</code></pre><p>The·contents·of·a·minimal·<code·class="inline">.app</code>·file·<code·class="inline">ch_app.app</code>·for·a·supervision·tree | 174 | as·follows:</p><pre><code·class="text">{application,·libapp,·[]}.</code></pre><p>The·contents·of·a·minimal·<code·class="inline">.app</code>·file·<code·class="inline">ch_app.app</code>·for·a·supervision·tree |
| 175 | application·like·<code·class="inline">ch_app</code>·looks·as·follows:</p><pre><code·class="text">{application,·ch_app, | 175 | application·like·<code·class="inline">ch_app</code>·looks·as·follows:</p><pre><code·class="text">{application,·ch_app, |
| 176 | ·[{mod,·{ch_app,[]}}]}.</code></pre><p>The·key·<code·class="inline">mod</code>·defines·the·callback·module·and·start·argument·of·the·application, | 176 | ·[{mod,·{ch_app,[]}}]}.</code></pre><p>The·key·<code·class="inline">mod</code>·defines·the·callback·module·and·start·argument·of·the·application, |
| 177 | in·this·case·<code·class="inline">ch_app</code>·and·<code·class="inline">[]</code>,·respectively.·This·means·that·the·following·is | 177 | in·this·case·<code·class="inline">ch_app</code>·and·<code·class="inline">[]</code>,·respectively.·This·means·that·the·following·is |
| 178 | called·when·the·application·is·to·be·started:</p><pre><code·class="text">ch_app:start(normal,·[])</code></pre><p>The·following·is·called·when·the·application·is·stopped:</p><pre><code·class="text">ch_app:stop([])</code></pre><p>When·using·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>,·the·Erlang/OTP·tools·for·packaging·code·(see·Section | 178 | called·when·the·application·is·to·be·started:</p><pre><code·class="text">ch_app:start(normal,·[])</code></pre><p>The·following·is·called·when·the·application·is·stopped:</p><pre><code·class="text">ch_app:stop([])</code></pre><p>When·using·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>,·the·Erlang/OTP·tools·for·packaging·code·(see·Section |
| 179 | <a·href="release_structure.html">Releases</a>),·the·keys·<code·class="inline">description</code>,·<code·class="inline">vsn</code>,·<code·class="inline">modules</code>, | 179 | <a·href="release_structure.html">Releases</a>),·the·keys·<code·class="inline">description</code>,·<code·class="inline">vsn</code>,·<code·class="inline">modules</code>, |
| 180 | <code·class="inline">registered</code>,·and·<code·class="inline">applications</code>·are·also·to·be·specified:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 180 | <code·class="inline">registered</code>,·and·<code·class="inline">applications</code>·are·also·to·be·specified:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5251541214-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w"> |
| 181 | ·</span><span·class="p"·data-group-id=" | 181 | ·</span><span·class="p"·data-group-id="5251541214-2">[</span><span·class="p"·data-group-id="5251541214-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Channel·allocator"</span><span·class="p"·data-group-id="5251541214-3">}</span><span·class="p">,</span><span·class="w"> |
| 182 | ··</span><span·class="p"·data-group-id=" | 182 | ··</span><span·class="p"·data-group-id="5251541214-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="5251541214-4">}</span><span·class="p">,</span><span·class="w"> |
| 183 | ··</span><span·class="p"·data-group-id=" | 183 | ··</span><span·class="p"·data-group-id="5251541214-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5251541214-6">[</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_sup<[·...·truncated·by·diffoscope;·len:·175,·SHA:·ea866d18ab6211518ce78eea61ad622166ddea234b77e09073c28aeb048b50d8·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 184 | ··</span><span·class="p"·data-group-id=" | 184 | ··</span><span·class="p"·data-group-id="5251541214-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5251541214-8">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="5251541214-8">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·0f12178c3d0d988074b22541e60cba494481535199ab61175527b64b9636d0e5·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 185 | ··</span><span·class="p"·data-group-id=" | 185 | ··</span><span·class="p"·data-group-id="5251541214-9">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5251541214-10">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">s[·...·truncated·by·diffoscope;·len:·183,·SHA:·dca6ac95e07b64e8d00ac6b65a23dd7f54b3591da32722e23e5dd2a03e31d557·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 186 | ··</span><span·class="p"·data-group-id=" | 186 | ··</span><span·class="p"·data-group-id="5251541214-11">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5251541214-12">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="p"·data-group-id="5251541214-13">[</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·39a710ecbf1d090567a4c736dcc6b7808e4c7f3940453287aada3c9a4c308512·...·]-11">}</span><span·class="w"> |
| 187 | ·</span><span·class="p"·data-group-id=" | 187 | ·</span><span·class="p"·data-group-id="5251541214-2">]</span><span·class="p"·data-group-id="5251541214-1">}</span><span·class="p">.</span></code></pre><ul><li><code·class="inline">description</code>·-·A·short·description,·a·string.·Defaults·to·<code·class="inline">""</code>.</li><li><code·class="inline">vsn</code>·-·Version·number,·a·string.·Defaults·to·<code·class="inline">""</code>.</li><li><code·class="inline">modules</code>·-·All·modules·<em>introduced</em>·by·this·application.·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·uses |
| 188 | this·list·when·generating·boot·scripts·and·tar·files.·A·module·must·only | 188 | this·list·when·generating·boot·scripts·and·tar·files.·A·module·must·only |
| 189 | be·included·in·one·application.·Defaults·to·<code·class="inline">[]</code>.</li><li><code·class="inline">registered</code>·-·All·names·of·registered·processes·in·the·application. | 189 | be·included·in·one·application.·Defaults·to·<code·class="inline">[]</code>.</li><li><code·class="inline">registered</code>·-·All·names·of·registered·processes·in·the·application. |
| 190 | <a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·uses·this·list·to·detect·name·clashes·between·applications. | 190 | <a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·uses·this·list·to·detect·name·clashes·between·applications. |
| 191 | Defaults·to·<code·class="inline">[]</code>.</li><li><code·class="inline">applications</code>·-·All·applications·that·must·be·started·before·this | 191 | Defaults·to·<code·class="inline">[]</code>.</li><li><code·class="inline">applications</code>·-·All·applications·that·must·be·started·before·this |
| 192 | application·is·started.·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·uses·this·list·to·generate·correct·boot | 192 | application·is·started.·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·uses·this·list·to·generate·correct·boot |
| 193 | scripts.·Defaults·to·<code·class="inline">[]</code>.·Notice·that·all·applications·have·dependencies·to | 193 | scripts.·Defaults·to·<code·class="inline">[]</code>.·Notice·that·all·applications·have·dependencies·to |
| 194 | at·least·Kernel·and·STDLIB.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>For·details·about·the·syntax·and·contents·of·the·application·resource·file, | 194 | at·least·Kernel·and·STDLIB.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>For·details·about·the·syntax·and·contents·of·the·application·resource·file, |
| Offset 300, 38 lines modified | Offset 300, 38 lines modified | ||
| 300 | stop·applications.</p><h2·id="loading-and-unloading-applications"·class="section-heading"> | 300 | stop·applications.</p><h2·id="loading-and-unloading-applications"·class="section-heading"> |
| 301 | ··<a·href="#loading-and-unloading-applications"·class="hover-link"> | 301 | ··<a·href="#loading-and-unloading-applications"·class="hover-link"> |
| 302 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 302 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 303 | ··</a> | 303 | ··</a> |
| 304 | ··<span·class="text">Loading·and·Unloading·Applications</span> | 304 | ··<span·class="text">Loading·and·Unloading·Applications</span> |
| 305 | </h2> | 305 | </h2> |
| 306 | <p>Before·an·application·can·be·started,·it·must·be·<em>loaded</em>.·The·application | 306 | <p>Before·an·application·can·be·started,·it·must·be·<em>loaded</em>.·The·application |
| 307 | controller·reads·and·stores·the·information·from·the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">load</span><span·class="p"·data-group-id=" | 307 | controller·reads·and·stores·the·information·from·the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">load</span><span·class="p"·data-group-id="7142790691-1">(</span><span·class="ss">ch_app</span><span·class="p"·data-group-id="7142790691-1">)</span><span·class="p">.</span><span·class="w"> |
| 308 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 308 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 309 | 2>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">loaded_applications</span><span·class="p"·data-group-id=" | 309 | 2>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">loaded_applications</span><span·class="p"·data-group-id="7142790691-2">(</span><span·class="p"·data-group-id="7142790691-2">)</span><span·class="p">.</span><span·class="w"> |
| 310 | </span><span·class="p"·data-group-id=" | 310 | </span><span·class="p"·data-group-id="7142790691-3">[</span><span·class="p"·data-group-id="7142790691-4">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"2.8.1.3"</span><span·clas[·...·truncated·by·diffoscope;·len:·31,·SHA:·6f9d599bac407e78e52def2bedadf6fd7e4ada21f1704777e34554d93c26ad9b·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 311 | ·</span><span·class="p"·data-group-id=" | 311 | ·</span><span·class="p"·data-group-id="7142790691-5">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"1.11.4.3"</span><span·class="p"·data-group-id="7142790691-5">}</span><span·class="p">,</span><span·class="w"> |
| 312 | ·</span><span·class="p"·data-group-id=" | 312 | ·</span><span·class="p"·data-group-id="7142790691-6">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="s">"Channel·allocator"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group-id="7142790691-6">}</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·9b85c124237d0aa22bab0dbebcdd7e6840ca0f67f9a17668474194a85cb2547f·...·]-3">]</span></code></pre><p>An·application·that·has·been·stopped,·or·has·never·been·started,·can·be |
| 313 | unloaded.·The·information·about·the·application·is·erased·from·the·internal | 313 | unloaded.·The·information·about·the·application·is·erased·from·the·internal |
| 314 | database·of·the·application·controller.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">unload</span><span·class="p"·data-group-id=" | 314 | database·of·the·application·controller.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">unload</span><span·class="p"·data-group-id="0306603014-1">(</span><span·class="ss">ch_app</span><span·class="p"·data-group-id="0306603014-1">)</span><span·class="p">.</span><span·class="w"> |
| 315 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 315 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 316 | 4>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">loaded_applications</span><span·class="p"·data-group-id=" | 316 | 4>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">loaded_applications</span><span·class="p"·data-group-id="0306603014-2">(</span><span·class="p"·data-group-id="0306603014-2">)</span><span·class="p">.</span><span·class="w"> |
| 317 | </span><span·class="p"·data-group-id=" | 317 | </span><span·class="p"·data-group-id="0306603014-3">[</span><span·class="p"·data-group-id="0306603014-4">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"2.8.1.3"</span><span·clas[·...·truncated·by·diffoscope;·len:·31,·SHA:·3f79d7eff138e5c9ba0c6a22e02695cb213af5bff248c7a2b36fbbc58f9e5d29·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 318 | ·</span><span·class="p"·data-group-id=" | 318 | ·</span><span·class="p"·data-group-id="0306603014-5">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"1.11.4.3"</span><span·class="p"·data-group-id="0306603014-5">}</span><span·cla[·...·truncated·by·diffoscope;·len:·32,·SHA:·8d1831f965bfbb3ea6a6b3dd9fa2c1c82dc7faeb23abb41aa0651ef467c171e3·...·]-3">]</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Loading/unloading·an·application·does·not·load/unload·the·code·used·by·the |
| 319 | application.·Code·loading·is·handled·in·the·usual·way·by·the·code·server.</p></section><p><a·href=""·id="stopping"></a></p><h2·id="starting-and-stopping-applications"·class="section-heading"> | 319 | application.·Code·loading·is·handled·in·the·usual·way·by·the·code·server.</p></section><p><a·href=""·id="stopping"></a></p><h2·id="starting-and-stopping-applications"·class="section-heading"> |
| 320 | ··<a·href="#starting-and-stopping-applications"·class="hover-link"> | 320 | ··<a·href="#starting-and-stopping-applications"·class="hover-link"> |
| 321 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 321 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 322 | ··</a> | 322 | ··</a> |
| 323 | ··<span·class="text">Starting·and·Stopping·Applications</span> | 323 | ··<span·class="text">Starting·and·Stopping·Applications</span> |
| 324 | </h2> | 324 | </h2> |
| 325 | <p>An·application·is·started·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="18 | 325 | <p>An·application·is·started·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="6218261028-1">(</span><span·class="ss">ch_app</span><span·class="p"·data-group-id="6218261028-1">)</span><span·class="p">.</span><span·class="w"> |
| 326 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 326 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 327 | 6>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">which_applications</span><span·class="p"·data-group-id="18 | 327 | 6>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">which_applications</span><span·class="p"·data-group-id="6218261028-2">(</span><span·class="p"·data-group-id="6218261028-2">)</span><span·class="p">.</span><span·class="w"> |
| 328 | </span><span·class="p"·data-group-id="18 | 328 | </span><span·class="p"·data-group-id="6218261028-3">[</span><span·class="p"·data-group-id="6218261028-4">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"2.8.1.3"</span><span·clas[·...·truncated·by·diffoscope;·len:·31,·SHA:·03f2d0726cd302d03e1139d422ab6ae18233ab0f8f0e3af74a02677f942dfd06·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 329 | ·</span><span·class="p"·data-group-id="18 | 329 | ·</span><span·class="p"·data-group-id="6218261028-5">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="s">"ERTS··CXC·138·10"</span><span·class="p">,</span><span·class="s">"1.11.4.3"</span><span·class="p"·data-group-id="6218261028-5">}</span><span·class="p">,</span><span·class="w"> |
| 330 | ·</span><span·class="p"·data-group-id="18 | 330 | ·</span><span·class="p"·data-group-id="6218261028-6">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="s">"Channel·allocator"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group-id="6218261028-6">}</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·899950ed817f54a112de2c7f64c2519a0632f2ce67206df505db659a023078cf·...·]-3">]</span></code></pre><p>If·the·application·is·not·already·loaded,·the·application·controller·first·loads |
| 331 | it·using·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html#load/1"><code·class="inline">application:load/1</code></a>.·It·checks·the·value·of·the·<code·class="inline">applications</code>·key·to | 331 | it·using·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html#load/1"><code·class="inline">application:load/1</code></a>.·It·checks·the·value·of·the·<code·class="inline">applications</code>·key·to |
| 332 | ensure·that·all·applications·that·are·to·be·started·before·this·application·are | 332 | ensure·that·all·applications·that·are·to·be·started·before·this·application·are |
| 333 | running.</p><p><a·href=""·id="application_master"></a></p><p>Following·that,·the·application·controller·creates·an·<em>application·master</em>·for | 333 | running.</p><p><a·href=""·id="application_master"></a></p><p>Following·that,·the·application·controller·creates·an·<em>application·master</em>·for |
| 334 | the·application.</p><p>The·application·master·establishes·itself·as·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#group_leader/0">group | 334 | the·application.</p><p>The·application·master·establishes·itself·as·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#group_leader/0">group |
| 335 | leader</a>·of·all·processes·in·the·application | 335 | leader</a>·of·all·processes·in·the·application |
| 336 | and·will·forward·I/O·to·the·previous·group·leader.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·purpose·of·the·application·master·being·the·group·leader·is·to·easily | 336 | and·will·forward·I/O·to·the·previous·group·leader.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·purpose·of·the·application·master·being·the·group·leader·is·to·easily |
| 337 | keep·track·of·which·processes·that·belong·to·the·application.·That·is·needed | 337 | keep·track·of·which·processes·that·belong·to·the·application.·That·is·needed |
| Offset 347, 55 lines modified | Offset 347, 55 lines modified | ||
| 347 | defined·by·the·<code·class="inline">mod</code>·key.</p><h2·id="configuring-an-application"·class="section-heading"> | 347 | defined·by·the·<code·class="inline">mod</code>·key.</p><h2·id="configuring-an-application"·class="section-heading"> |
| 348 | ··<a·href="#configuring-an-application"·class="hover-link"> | 348 | ··<a·href="#configuring-an-application"·class="hover-link"> |
| 349 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 349 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 350 | ··</a> | 350 | ··</a> |
| 351 | ··<span·class="text">Configuring·an·Application</span> | 351 | ··<span·class="text">Configuring·an·Application</span> |
| 352 | </h2> | 352 | </h2> |
| 353 | <p>An·application·can·be·configured·using·<em>configuration·parameters</em>.·These·are·a | 353 | <p>An·application·can·be·configured·using·<em>configuration·parameters</em>.·These·are·a |
| 354 | list·of·<code·class="inline">{Par,Val}</code>·tuples·specified·by·a·key·<code·class="inline">env</code>·in·the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="81 | 354 | list·of·<code·class="inline">{Par,Val}</code>·tuples·specified·by·a·key·<code·class="inline">env</code>·in·the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8168097545-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w"> |
| 355 | ·</span><span·class="p"·data-group-id="81 | 355 | ·</span><span·class="p"·data-group-id="8168097545-2">[</span><span·class="p"·data-group-id="8168097545-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Channel·allocator"</span><span·class="p"·data-group-id="8168097545-3">}</span><span·class="p">,</span><span·class="w"> |
| 356 | ··</span><span·class="p"·data-group-id="81 | 356 | ··</span><span·class="p"·data-group-id="8168097545-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="8168097545-4">}</span><span·class="p">,</span><span·class="w"> |
| 357 | ··</span><span·class="p"·data-group-id="81 | 357 | ··</span><span·class="p"·data-group-id="8168097545-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8168097545-6">[</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_sup</s[·...·truncated·by·diffoscope;·len:·173,·SHA:·27383781a630e0b7ae48df9debb7eec3b5b2a8b5771ae6fd5d096c6ffada50b7·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 358 | ··</span><span·class="p"·data-group-id="81 | 358 | ··</span><span·class="p"·data-group-id="8168097545-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8168097545-8">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="8168097545-8">]</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·f0fa004524ca6a227c22a23a379b665a56894b8ad92768393ab59066a8a6f76d·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 359 | ··</span><span·class="p"·data-group-id="81 | 359 | ··</span><span·class="p"·data-group-id="8168097545-9">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8168097545-10">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">std[·...·truncated·by·diffoscope;·len:·181,·SHA:·56378db363a098acd4db1d19472651ce9f7d0cdcccf0a0313ee6bcaa53d229a6·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 360 | ··</span><span·class="p"·data-group-id="81 | 360 | ··</span><span·class="p"·data-group-id="8168097545-11">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8168097545-12">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="p"·data-group-id="8168097545-13">[</spa[·...·truncated·by·diffoscope;·len:·151,·SHA:·ee6591ec1e5f24ba12fe088037e75b43aea5153749a114bf0e31a9dd0a69e21f·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 361 | ··</span><span·class="p"·data-group-id="81 | 361 | ··</span><span·class="p"·data-group-id="8168097545-14">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8168097545-15">[</span><span·class="p"·data-group-id="8168097545-16">{</span><span·class="ss">file</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·222,·SHA:·39d72a8d781a9b3918377119457f68c23f8e5a036be453f933c1c2055accb994·...·]-14">}</span><span·class="w"> |
| 362 | ·</span><span·class="p"·data-group-id="81 | 362 | ·</span><span·class="p"·data-group-id="8168097545-2">]</span><span·class="p"·data-group-id="8168097545-1">}</span><span·class="p">.</span></code></pre><p><code·class="inline">Par</code>·is·to·be·an·atom.·<code·class="inline">Val</code>·is·any·term.·The·application·can·retrieve·the |
| 363 | value·of·a·configuration·parameter·by·calling·<code·class="inline">application:get_env(App,·Par)</code>·or | 363 | value·of·a·configuration·parameter·by·calling·<code·class="inline">application:get_env(App,·Par)</code>·or |
| 364 | a·number·of·similar·functions.·For·more·information,·see·module·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html"><code·class="inline">application</code></a> | 364 | a·number·of·similar·functions.·For·more·information,·see·module·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html"><code·class="inline">application</code></a> |
| 365 | in·Kernel.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl</span><span·class="w"> | 365 | in·Kernel.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl</span><span·class="w"> |
| 366 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id=" | 366 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id="5575396723-1">(</span><span·class="n">BEAM</span><span·class="p"·data-group-id="5575396723-1">)</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="mf">5.[·...·truncated·by·diffoscope;·len:·415,·SHA:·5697b6df93bbca37e81d4bbe895e2563e9ea191057a309edaa1ca18df78d150b·...·]-3">]</span><span·class="w"> |
| 367 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">2.3</span><span·class="p">.</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id=" | 367 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">2.3</span><span·class="p">.</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="5575396723-4">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="5575396723-4">)</span><span·class="gp·unselectable"> |
| 368 | 1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 368 | 1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5575396723-5">(</span><span·class="ss">ch_app</span><span·class="p"·data-group-id="5575396723-5">)</span><span·class="p">.</span><span·class="w"> |
| 369 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 369 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 370 | 2>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">get_env</span><span·class="p"·data-group-id=" | 370 | 2>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">get_env</span><span·class="p"·data-group-id="5575396723-6">(</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">file</span><span·class="p"·data-group-id="5575396723-6">)</span><span·class="p">.</span><span·class="w"> |
| 371 | </span><span·class="p"·data-group-id=" | 371 | </span><span·class="p"·data-group-id="5575396723-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="s">"/usr/local/log"</span><span·class="p"·data-group-id="5575396723-7">}</span></code></pre><p>The·values·in·the·<code·class="inline">.app</code>·file·can·be·overridden·by·values·in·a·<em>system |
| 372 | configuration·file</em>.·This·is·a·file·that·contains·configuration·parameters·for | 372 | configuration·file</em>.·This·is·a·file·that·contains·configuration·parameters·for |
| 373 | relevant·applications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 373 | relevant·applications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6204975082-1">[</span><span·class="p"·data-group-id="6204975082-2">{</span><span·class="n">Application1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6204975082-3">[</span><span·class="p"·data-group-id="6204975082-4">[·...·truncated·by·diffoscope;·len:·331,·SHA:·b4cad1642d9b0fdab4f115498aa1d936347ceee063f817b0e4d9d4012e39bfe8·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 374 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> | 374 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 11352/58111 bytes (19.54%) of diff not shown. | |||
| Offset 120, 18 lines modified | Offset 120, 18 lines modified | ||
| 120 | ··<a·href="#changing-a-functional-module"·class="hover-link"> | 120 | ··<a·href="#changing-a-functional-module"·class="hover-link"> |
| 121 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 121 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 122 | ··</a> | 122 | ··</a> |
| 123 | ··<span·class="text">Changing·a·Functional·Module</span> | 123 | ··<span·class="text">Changing·a·Functional·Module</span> |
| 124 | </h2> | 124 | </h2> |
| 125 | <p>When·a·functional·module·has·been·changed,·for·example,·if·a·new·function·has | 125 | <p>When·a·functional·module·has·been·changed,·for·example,·if·a·new·function·has |
| 126 | been·added·or·a·bug·has·been·corrected,·simple·code·replacement·is·sufficient, | 126 | been·added·or·a·bug·has·been·corrected,·simple·code·replacement·is·sufficient, |
| 127 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 127 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5037456115-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 128 | ·</span><span·class="p"·data-group-id="0208975445-2">[</span><span·class="p"·data-group-id="0208975445-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0208975445-4">[</span><span·class="p"·data-group-id="0208975445-5">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">m</span><span·class="p"·data-group-id="0208975445-5">}</span><span·class="p"·data-group-id="0208975445-4">]</span><span·class="p"·data-group-id="0208975445-3">}</span><span·class="p"·data-group-id="0208975445-2">]</span><span·class="p">,</span><span·class="w"> | ||
| 129 | ·</span><span·class="p"·data-group-id=" | 128 | ·</span><span·class="p"·data-group-id="5037456115-2">[</span><span·class="p"·data-group-id="5037456115-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5037456115-4">[</span><span·class="p"·data-group-id="5037456115-5"[·...·truncated·by·diffoscope;·len:·346,·SHA:·0eb990b609978476cfa789d4434db578c8abbf8981758c58bded790fad14c76c·...·]</span><span·class="w"> |
| 129 | ·</span><span·class="p"·data-group-id="5037456115-6">[</span><span·class="p"·data-group-id="5037456115-7">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5037456115-8">[</span><span·class="p"·data-group-id="5037456115-9">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">m</span><span·class="p"·data-group-id="5037456115-9">}</span><span·class="p"·data-group-id="5037456115-8">]</span><span·class="p"·data-group-id="5037456115-7">}</span><span·class="p"·data-group-id="5037456115-6">]</span><span·class="w"> | ||
| 130 | </span><span·class="p"·data-group-id=" | 130 | </span><span·class="p"·data-group-id="5037456115-1">}</span><span·class="p">.</span></code></pre><h2·id="changing-a-residence-module"·class="section-heading"> |
| 131 | ··<a·href="#changing-a-residence-module"·class="hover-link"> | 131 | ··<a·href="#changing-a-residence-module"·class="hover-link"> |
| 132 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 132 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 133 | ··</a> | 133 | ··</a> |
| 134 | ··<span·class="text">Changing·a·Residence·Module</span> | 134 | ··<span·class="text">Changing·a·Residence·Module</span> |
| 135 | </h2> | 135 | </h2> |
| 136 | <p>In·a·system·implemented·according·to·the·OTP·design·principles,·all·processes, | 136 | <p>In·a·system·implemented·according·to·the·OTP·design·principles,·all·processes, |
| 137 | except·system·processes·and·special·processes,·reside·in·one·of·the·behaviours | 137 | except·system·processes·and·special·processes,·reside·in·one·of·the·behaviours |
| Offset 142, 46 lines modified | Offset 142, 46 lines modified | ||
| 142 | ··<a·href="#changing-a-callback-module"·class="hover-link"> | 142 | ··<a·href="#changing-a-callback-module"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text">Changing·a·Callback·Module</span> | 145 | ··<span·class="text">Changing·a·Callback·Module</span> |
| 146 | </h2> | 146 | </h2> |
| 147 | <p>A·callback·module·is·a·functional·module,·and·for·code·extensions·simple·code | 147 | <p>A·callback·module·is·a·functional·module,·and·for·code·extensions·simple·code |
| 148 | replacement·is·sufficient.</p><p><em>Example</em></p><p>When·adding·a·function·to·<code·class="inline">ch3</code>,·as·described·in·the·example·in | 148 | replacement·is·sufficient.</p><p><em>Example</em></p><p>When·adding·a·function·to·<code·class="inline">ch3</code>,·as·described·in·the·example·in |
| 149 | <a·href="release_handling.html#appup">Release·Handling</a>,·<code·class="inline">ch_app.appup</code>·looks·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 149 | <a·href="release_handling.html#appup">Release·Handling</a>,·<code·class="inline">ch_app.appup</code>·looks·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8767837499-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 150 | ·</span><span·class="p"·data-group-id=" | 150 | ·</span><span·class="p"·data-group-id="8767837499-2">[</span><span·class="p"·data-group-id="8767837499-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8767837499-4">[</span><span·class="p"·data-group-id="8767837499-5"[·...·truncated·by·diffoscope;·len:·317,·SHA:·fac2ad39adeccaeb61025071e990fe26e5c78190092675e25922fe876a5b3c00·...·]99-2">]</span><span·class="p">,</span><span·class="w"> |
| 151 | ·</span><span·class="p"·data-group-id=" | 151 | ·</span><span·class="p"·data-group-id="8767837499-6">[</span><span·class="p"·data-group-id="8767837499-7">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8767837499-8">[</span><span·class="p"·data-group-id="8767837499-9"[·...·truncated·by·diffoscope;·len:·317,·SHA:·12345728c48f96a454da0366caf2724fec16884cd97c84ca6a02b5895f73182a·...·]99-6">]</span><span·class="w"> |
| 152 | </span><span·class="p"·data-group-id=" | 152 | </span><span·class="p"·data-group-id="8767837499-1">}</span><span·class="p">.</span></code></pre><p>OTP·also·supports·changing·the·internal·state·of·behaviour·processes;·see |
| 153 | <a·href="appup_cookbook.html#int_state">Changing·Internal·State</a>.</p><p><a·href=""·id="int_state"></a></p><h2·id="changing-internal-state"·class="section-heading"> | 153 | <a·href="appup_cookbook.html#int_state">Changing·Internal·State</a>.</p><p><a·href=""·id="int_state"></a></p><h2·id="changing-internal-state"·class="section-heading"> |
| 154 | ··<a·href="#changing-internal-state"·class="hover-link"> | 154 | ··<a·href="#changing-internal-state"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Changing·Internal·State</span> | 157 | ··<span·class="text">Changing·Internal·State</span> |
| 158 | </h2> | 158 | </h2> |
| 159 | <p>In·this·case,·simple·code·replacement·is·not·sufficient.·The·process·must | 159 | <p>In·this·case,·simple·code·replacement·is·not·sufficient.·The·process·must |
| 160 | explicitly·transform·its·state·using·the·callback·function·<code·class="inline">code_change/3</code>·before | 160 | explicitly·transform·its·state·using·the·callback·function·<code·class="inline">code_change/3</code>·before |
| 161 | switching·to·the·new·version·of·the·callback·module.·Thus,·synchronized·code | 161 | switching·to·the·new·version·of·the·callback·module.·Thus,·synchronized·code |
| 162 | replacement·is·used.</p><p><em>Example</em></p><p>Consider·the·<code·class="inline">ch3</code>·module·from | 162 | replacement·is·used.</p><p><em>Example</em></p><p>Consider·the·<code·class="inline">ch3</code>·module·from |
| 163 | <a·href="gen_server_concepts.html#ex">gen_server·Behaviour</a>.·The·internal·state·is·a·term | 163 | <a·href="gen_server_concepts.html#ex">gen_server·Behaviour</a>.·The·internal·state·is·a·term |
| 164 | <code·class="inline">Chs</code>·representing·the·available·channels.·Assume·you·want·to·add·a·counter·<code·class="inline">N</code>, | 164 | <code·class="inline">Chs</code>·representing·the·available·channels.·Assume·you·want·to·add·a·counter·<code·class="inline">N</code>, |
| 165 | which·keeps·track·of·the·number·of·<code·class="inline">alloc</code>·requests·so·far.·This·means·that·the | 165 | which·keeps·track·of·the·number·of·<code·class="inline">alloc</code>·requests·so·far.·This·means·that·the |
| 166 | format·must·be·changed·to·<code·class="inline">{Chs,N}</code>.</p><p>The·<code·class="inline">.appup</code>·file·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 166 | format·must·be·changed·to·<code·class="inline">{Chs,N}</code>.</p><p>The·<code·class="inline">.appup</code>·file·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8393918222-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 167 | ·</span><span·class="p"·data-group-id=" | 167 | ·</span><span·class="p"·data-group-id="8393918222-2">[</span><span·class="p"·data-group-id="8393918222-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8393918222-4">[</span><span·class="p"·data-group-id="8393918222-5"[·...·truncated·by·diffoscope;·len:·654,·SHA:·094e45f9809b849e74b27300e76eece45bdac422dbec25ca6b21af58810dbaa9·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 168 | ·</span><span·class="p"·data-group-id=" | 168 | ·</span><span·class="p"·data-group-id="8393918222-8">[</span><span·class="p"·data-group-id="8393918222-9">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8393918222-10">[</span><span·class="p"·data-group-id="8393918222-1[·...·truncated·by·diffoscope;·len:·662,·SHA:·8315333d503d5b968c1434f8fd1ce931fdc76935044520c11b8decc615df7f30·...·]-8">]</span><span·class="w"> |
| 169 | </span><span·class="p"·data-group-id=" | 169 | </span><span·class="p"·data-group-id="8393918222-1">}</span><span·class="p">.</span></code></pre><p>The·third·element·of·the·<code·class="inline">update</code>·instruction·is·a·tuple·<code·class="inline">{advanced,Extra}</code>, |
| 170 | which·says·that·the·affected·processes·are·to·do·a·state·transformation·before | 170 | which·says·that·the·affected·processes·are·to·do·a·state·transformation·before |
| 171 | loading·the·new·version·of·the·module.·This·is·done·by·the·processes·calling·the | 171 | loading·the·new·version·of·the·module.·This·is·done·by·the·processes·calling·the |
| 172 | callback·function·<code·class="inline">code_change/3</code>·(see·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a>·in·STDLIB). | 172 | callback·function·<code·class="inline">code_change/3</code>·(see·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a>·in·STDLIB). |
| 173 | The·term·<code·class="inline">Extra</code>,·in·this·case·<code·class="inline">[]</code>,·is·passed·as·is·to·the·function:</p><p><a·href=""·id="code_change"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 173 | The·term·<code·class="inline">Extra</code>,·in·this·case·<code·class="inline">[]</code>,·is·passed·as·is·to·the·function:</p><p><a·href=""·id="code_change"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2993589813-1">(</span><span·class="ss">ch3</span><span·class="p"·data-group-id="2993589813-1">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 174 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 175 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="2993589813-2">(</span><span·class="p"·data-group-id="2993589813-3">[</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">3</span><span·class="p"·data-group-id="2993589813-3">]</span><span·class="p"·data-group-id="2993589813-2">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 176 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id=" | 177 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id="2993589813-4">(</span><span·class="p"·data-group-id="2993589813-5">{</span><span·class="ss">down</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Vsn</span><span·class="p"·data-group-id="2993589813-5">}</span><s[·...·truncated·by·diffoscope;·len:·391,·SHA:·0bfd770e00b3ebbbcb86044a0cb9b9a02f4e39b2caa82dc29cffcf3ca65e153f·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 178 | ····</span><span·class="p"·data-group-id=" | 178 | ····</span><span·class="p"·data-group-id="2993589813-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="2993589813-7">}</span><span·class="p">;</span><span·class="w"> |
| 179 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id=" | 179 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id="2993589813-8">(</span><span·class="p">_</span><span·class="n">Vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Extra</span><span·clas[·...·truncated·by·diffoscope;·len:·31,·SHA:·d625f39cb9bebe237820e821a5092967dd350a8c7823b4a16080f3a29537e8df·...·]-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="2993589813-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2993589813-10">{</span><span·class="n">Chs</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·c[·...·truncated·by·diffoscope;·len:·88,·SHA:·ca6d8edb0e9e72ebbd4b00763f24885c7ced96b3618f25a5f564a253feedd821·...·]-9">}</span><span·class="p">.</span></code></pre><p>The·first·argument·is·<code·class="inline">{down,Vsn}</code>·if·there·is·a·downgrade,·or·<code·class="inline">Vsn</code>·if·there·is |
| 181 | a·upgrade.·The·term·<code·class="inline">Vsn</code>·is·fetched·from·the·'original'·version·of·the·module, | 181 | a·upgrade.·The·term·<code·class="inline">Vsn</code>·is·fetched·from·the·'original'·version·of·the·module, |
| 182 | that·is,·the·version·you·are·upgrading·from,·or·downgrading·to.</p><p>The·version·is·defined·by·the·module·attribute·<code·class="inline">vsn</code>,·if·any.·There·is·no·such | 182 | that·is,·the·version·you·are·upgrading·from,·or·downgrading·to.</p><p>The·version·is·defined·by·the·module·attribute·<code·class="inline">vsn</code>,·if·any.·There·is·no·such |
| 183 | attribute·in·<code·class="inline">ch3</code>,·so·in·this·case·the·version·is·the·checksum·(a·huge·integer) | 183 | attribute·in·<code·class="inline">ch3</code>,·so·in·this·case·the·version·is·the·checksum·(a·huge·integer) |
| 184 | of·the·beam·file,·an·uninteresting·value,·which·is·ignored.</p><p>The·other·callback·functions·of·<code·class="inline">ch3</code>·must·also·be·modified·and·perhaps·a·new | 184 | of·the·beam·file,·an·uninteresting·value,·which·is·ignored.</p><p>The·other·callback·functions·of·<code·class="inline">ch3</code>·must·also·be·modified·and·perhaps·a·new |
| 185 | interface·function·must·be·added,·but·this·is·not·shown·here.</p><h2·id="module-dependencies"·class="section-heading"> | 185 | interface·function·must·be·added,·but·this·is·not·shown·here.</p><h2·id="module-dependencies"·class="section-heading"> |
| 186 | ··<a·href="#module-dependencies"·class="hover-link"> | 186 | ··<a·href="#module-dependencies"·class="hover-link"> |
| 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 190, 67 lines modified | Offset 190, 67 lines modified | ||
| 190 | </h2> | 190 | </h2> |
| 191 | <p>Assume·that·a·module·is·extended·by·adding·an·interface·function,·as·in·the | 191 | <p>Assume·that·a·module·is·extended·by·adding·an·interface·function,·as·in·the |
| 192 | example·in·<a·href="release_handling.html#appup">Release·Handling</a>,·where·a·function | 192 | example·in·<a·href="release_handling.html#appup">Release·Handling</a>,·where·a·function |
| 193 | <code·class="inline">available/0</code>·is·added·to·<code·class="inline">ch3</code>.</p><p>If·a·call·is·added·to·this·function,·say·in·module·<code·class="inline">m1</code>,·a·runtime·error·could | 193 | <code·class="inline">available/0</code>·is·added·to·<code·class="inline">ch3</code>.</p><p>If·a·call·is·added·to·this·function,·say·in·module·<code·class="inline">m1</code>,·a·runtime·error·could |
| 194 | can·occur·during·release·upgrade·if·the·new·version·of·<code·class="inline">m1</code>·is·loaded·first·and | 194 | can·occur·during·release·upgrade·if·the·new·version·of·<code·class="inline">m1</code>·is·loaded·first·and |
| 195 | calls·<code·class="inline">ch3:available/0</code>·before·the·new·version·of·<code·class="inline">ch3</code>·is·loaded.</p><p>Thus,·<code·class="inline">ch3</code>·must·be·loaded·before·<code·class="inline">m1</code>,·in·the·upgrade·case,·and·conversely·in | 195 | calls·<code·class="inline">ch3:available/0</code>·before·the·new·version·of·<code·class="inline">ch3</code>·is·loaded.</p><p>Thus,·<code·class="inline">ch3</code>·must·be·loaded·before·<code·class="inline">m1</code>,·in·the·upgrade·case,·and·conversely·in |
| 196 | the·downgrade·case.·<code·class="inline">m1</code>·is·said·to·be·<em>dependent·on</em>·<code·class="inline">ch3</code>.·In·a·release | 196 | the·downgrade·case.·<code·class="inline">m1</code>·is·said·to·be·<em>dependent·on</em>·<code·class="inline">ch3</code>.·In·a·release |
| 197 | handling·instruction,·this·is·expressed·by·the·<code·class="inline">DepMods</code>·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 197 | handling·instruction,·this·is·expressed·by·the·<code·class="inline">DepMods</code>·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4725718340-1">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DepMods</span><span·class="p"·data-group-id="4725718340-1">}</span><span·class="w"> |
| 198 | </span><span·class="p"·data-group-id=" | 198 | </span><span·class="p"·data-group-id="4725718340-2">{</span><span·class="ss">update</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4725718340-3">{</span><span·class="ss">advanced<[·...·truncated·by·diffoscope;·len:·254,·SHA:·a2cb0192bb3c04ef9b5cf66a6a1c3611380b86b184b5097c8d8284688e5212c5·...·]-2">}</span></code></pre><p><code·class="inline">DepMods</code>·is·a·list·of·modules,·on·which·<code·class="inline">Module</code>·is·dependent.</p><p><em>Example</em></p><p>The·module·<code·class="inline">m1</code>·in·application·<code·class="inline">myapp</code>·is·dependent·on·<code·class="inline">ch3</code>·when |
| 199 | upgrading·from·"1"·to·"2",·or·downgrading·from·"2"·to·"1":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">myapp</span><span·class="p">.</span><span·class="nc">appup</span><span·class="p">:</span><span·class="w"> | 199 | upgrading·from·"1"·to·"2",·or·downgrading·from·"2"·to·"1":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">myapp</span><span·class="p">.</span><span·class="nc">appup</span><span·class="p">:</span><span·class="w"> |
| 200 | </span><span·class="p"·data-group-id=" | 200 | </span><span·class="p"·data-group-id="7964730200-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 201 | ·</span><span·class="p"·data-group-id=" | 201 | ·</span><span·class="p"·data-group-id="7964730200-2">[</span><span·class="p"·data-group-id="7964730200-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7964730200-4">[</span><span·class="p"·data-group-id="7964730200-5"[·...·truncated·by·diffoscope;·len:·499,·SHA:·453b28eff83d6608dc738db753f453ce6bae3d5d10a0b86e379b0b6e344eae4b·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 202 | ·</span><span·class="p"·data-group-id=" | 202 | ·</span><span·class="p"·data-group-id="7964730200-7">[</span><span·class="p"·data-group-id="7964730200-8">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7964730200-9">[</span><span·class="p"·data-group-id="7964730200-10[·...·truncated·by·diffoscope;·len:·503,·SHA:·dceca67035ffac7d072054302b0650eb84ad467af0f63b191c8d78891df19d5f·...·]-7">]</span><span·class="w"> |
| 203 | </span><span·class="p"·data-group-id=" | 203 | </span><span·class="p"·data-group-id="7964730200-1">}</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="ss">ch_app</span><span·class="p">.</span><span·class="nc">appup</span><span·class="p">:</span><span·class="w"> | 204 | </span><span·class="ss">ch_app</span><span·class="p">.</span><span·class="nc">appup</span><span·class="p">:</span><span·class="w"> |
| 205 | </span><span·class="p"·data-group-id=" | 205 | </span><span·class="p"·data-group-id="7964730200-12">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 206 | ·</span><span·class="p"·data-group-id=" | 206 | ·</span><span·class="p"·data-group-id="7964730200-13">[</span><span·class="p"·data-group-id="7964730200-14">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7964730200-15">[</span><span·class="p"·data-group-id="7964730200[·...·truncated·by·diffoscope;·len:·326,·SHA:·a8deb919183733a8c2ae6ed95f288878706a015c60c399b4ad033bb9108e6682·...·]-13">]</span><span·class="p">,</span><span·class="w"> |
| 207 | ·</span><span·class="p"·data-group-id=" | 207 | ·</span><span·class="p"·data-group-id="7964730200-17">[</span><span·class="p"·data-group-id="7964730200-18">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7964730200-19">[</span><span·class="p"·data-group-id="7964730200[·...·truncated·by·diffoscope;·len:·326,·SHA:·ed0f0369ac9c24dc07789fd925539365bb48d8727f0373f49ba3a711d69c1005·...·]-17">]</span><span·class="w"> |
| 208 | </span><span·class="p"·data-group-id=" | 208 | </span><span·class="p"·data-group-id="7964730200-12">}</span><span·class="p">.</span></code></pre><p>If·instead·<code·class="inline">m1</code>·and·<code·class="inline">ch3</code>·belong·to·the·same·application,·the·<code·class="inline">.appup</code>·file·can |
| 209 | look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 209 | look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3002636985-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 210 | ·</span><span·class="p"·data-group-id=" | 210 | ·</span><span·class="p"·data-group-id="3002636985-2">[</span><span·class="p"·data-group-id="3002636985-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w"> |
| 211 | ···</span><span·class="p"·data-group-id=" | 211 | ···</span><span·class="p"·data-group-id="3002636985-4">[</span><span·class="p"·data-group-id="3002636985-5">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p"·data-group-id="3002636985-5">}</span><span·class="p">,</span><span·class="w"> |
| 212 | ····</span><span·class="p"·data-group-id=" | 212 | ····</span><span·class="p"·data-group-id="3002636985-6">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">m1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3002636985-7">[</span><span·class="ss">ch3</sp[·...·truncated·by·diffoscope;·len:·256,·SHA:·7be54d649dbd1e40d2d4f145ee23fed32ffa38452d8319396c0053f007cdac66·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 213 | ·</span><span·class="p"·data-group-id=" | 213 | ·</span><span·class="p"·data-group-id="3002636985-8">[</span><span·class="p"·data-group-id="3002636985-9">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w"> |
| 214 | ···</span><span·class="p"·data-group-id=" | 214 | ···</span><span·class="p"·data-group-id="3002636985-10">[</span><span·class="p"·data-group-id="3002636985-11">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p"·data-group-id="3002636985-11">}</span><span·class="p">,</span><span·class="w"> |
| 215 | ····</span><span·class="p"·data-group-id=" | 215 | ····</span><span·class="p"·data-group-id="3002636985-12">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">m1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3002636985-13">[</span><span·class="ss">ch3</[·...·truncated·by·diffoscope;·len:·261,·SHA:·fb095df4dcc9ea254c9011ac829e34d0557f0b2a015f00654e44355fc7cabf8b·...·]-8">]</span><span·class="w"> |
| 216 | </span><span·class="p"·data-group-id=" | 216 | </span><span·class="p"·data-group-id="3002636985-1">}</span><span·class="p">.</span></code></pre><p><code·class="inline">m1</code>·is·dependent·on·<code·class="inline">ch3</code>·also·when·downgrading.·<code·class="inline">systools</code>·knows·the |
| 217 | difference·between·up-·and·downgrading·and·generates·a·correct·<code·class="inline">relup</code>,·where | 217 | difference·between·up-·and·downgrading·and·generates·a·correct·<code·class="inline">relup</code>,·where |
| 218 | <code·class="inline">ch3</code>·is·loaded·before·<code·class="inline">m1</code>·when·upgrading,·but·<code·class="inline">m1</code>·is·loaded·before·<code·class="inline">ch3</code>·when | 218 | <code·class="inline">ch3</code>·is·loaded·before·<code·class="inline">m1</code>·when·upgrading,·but·<code·class="inline">m1</code>·is·loaded·before·<code·class="inline">ch3</code>·when |
| 219 | downgrading.</p><p><a·href=""·id="spec"></a></p><h2·id="changing-code-for-a-special-process"·class="section-heading"> | 219 | downgrading.</p><p><a·href=""·id="spec"></a></p><h2·id="changing-code-for-a-special-process"·class="section-heading"> |
| 220 | ··<a·href="#changing-code-for-a-special-process"·class="hover-link"> | 220 | ··<a·href="#changing-code-for-a-special-process"·class="hover-link"> |
| 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 222 | ··</a> | 222 | ··</a> |
| 223 | ··<span·class="text">Changing·Code·for·a·Special·Process</span> | 223 | ··<span·class="text">Changing·Code·for·a·Special·Process</span> |
| 224 | </h2> | 224 | </h2> |
| 225 | <p>In·this·case,·simple·code·replacement·is·not·sufficient.·When·a·new·version·of·a | 225 | <p>In·this·case,·simple·code·replacement·is·not·sufficient.·When·a·new·version·of·a |
| 226 | residence·module·for·a·special·process·is·loaded,·the·process·must·make·a·fully | 226 | residence·module·for·a·special·process·is·loaded,·the·process·must·make·a·fully |
| 227 | qualified·call·to·its·loop·function·to·switch·to·the·new·code.·Thus, | 227 | qualified·call·to·its·loop·function·to·switch·to·the·new·code.·Thus, |
| 228 | synchronized·code·replacement·must·be·used.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·name(s)·of·the·user-defined·residence·module(s)·must·be·listed·in·the | 228 | synchronized·code·replacement·must·be·used.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·name(s)·of·the·user-defined·residence·module(s)·must·be·listed·in·the |
| 229 | <code·class="inline">Modules</code>·part·of·the·child·specification·for·the·special·process.·Otherwise | 229 | <code·class="inline">Modules</code>·part·of·the·child·specification·for·the·special·process.·Otherwise |
| 230 | the·release·handler·cannot·find·the·process.</p></section><p><em>Example</em></p><p>Consider·the·example·<code·class="inline">ch4</code>·in·<a·href="spec_proc.html#ex">sys·and·proc_lib</a>. | 230 | the·release·handler·cannot·find·the·process.</p></section><p><em>Example</em></p><p>Consider·the·example·<code·class="inline">ch4</code>·in·<a·href="spec_proc.html#ex">sys·and·proc_lib</a>. |
| 231 | When·started·by·a·supervisor,·the·child·specification·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 231 | When·started·by·a·supervisor,·the·child·specification·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6390381817-1">{</span><span·class="ss">ch4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6390381817-2">{</span><span·class="ss">ch4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</sp[·...·truncated·by·diffoscope;·len:·198,·SHA:·5bcc68adef9e3bb5d337c3a97f88a189aa5e42648a30bfa43237b276fd8eea90·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 232 | ·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 232 | ·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6390381817-4">[</span><span·class="ss">ch4</span><span·class="p"·data-group-id="6390381817-4">]</span><span·class="p"·data-group-id="6390381817-1">}</span></code></pre><p>If·<code·class="inline">ch4</code>·is·part·of·the·application·<code·class="inline">sp_app</code>·and·a·new·version·of·the·module·is |
| 233 | to·be·loaded·when·upgrading·from·version·"1"·to·"2"·of·this·application, | 233 | to·be·loaded·when·upgrading·from·version·"1"·to·"2"·of·this·application, |
| 234 | <code·class="inline">sp_app.appup</code>·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 234 | <code·class="inline">sp_app.appup</code>·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4229568076-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 235 | ·</span><span·class="p"·data-group-id=" | 235 | ·</span><span·class="p"·data-group-id="4229568076-2">[</span><span·class="p"·data-group-id="4229568076-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4229568076-4">[</span><span·class="p"·data-group-id="4229568076-5"[·...·truncated·by·diffoscope;·len:·654,·SHA:·a7d282631154d9dc4eedbae2e75d2af0d8b57207d238370c9bbedf391af590a5·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 236 | ·</span><span·class="p"·data-group-id=" | 236 | ·</span><span·class="p"·data-group-id="4229568076-8">[</span><span·class="p"·data-group-id="4229568076-9">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4229568076-10">[</span><span·class="p"·data-group-id="4229568076-1[·...·truncated·by·diffoscope;·len:·662,·SHA:·59937b310cd30a7d6a666b596c0a22b7fdf9f2cd0f79b3d56eb474dfeaeeba11·...·]-8">]</span><span·class="w"> |
| 237 | </span><span·class="p"·data-group-id=" | 237 | </span><span·class="p"·data-group-id="4229568076-1">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">update</code>·instruction·must·contain·the·tuple·<code·class="inline">{advanced,Extra}</code>.·The |
| 238 | instruction·makes·the·special·process·call·the·callback·function | 238 | instruction·makes·the·special·process·call·the·callback·function |
| 239 | <code·class="inline">system_code_change/4</code>,·a·function·the·user·must·implement.·The·term·<code·class="inline">Extra</code>,·in | 239 | <code·class="inline">system_code_change/4</code>,·a·function·the·user·must·implement.·The·term·<code·class="inline">Extra</code>,·in |
| 240 | this·case·<code·class="inline">[]</code>,·is·passed·as·is·to·<code·class="inline">system_code_change/4</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 240 | this·case·<code·class="inline">[]</code>,·is·passed·as·is·to·<code·class="inline">system_code_change/4</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5632540125-1">(</span><span·class="ss">ch4</span><span·class="p"·data-group-id="5632540125-1">)</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 241 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 242 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 242 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5632540125-2">(</span><span·class="p"·data-group-id="5632540125-3">[</span><span·class="ss">system_code_change</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="5632540125-3">]</span><span·class="p"·data-group-id="563254[·...·truncated·by·diffoscope;·len:·4,·SHA:·179f912d515ddb97a08feeb4e376996148da3bb7cb5d974b813c8afbdc61662b·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 243 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 244 | </span><span·class="nf">system_code_change</span><span·class="p"·data-group-id=" | 244 | </span><span·class="nf">system_code_change</span><span·class="p"·data-group-id="5632540125-4">(</span><span·class="n">Chs</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">OldVsn</span><span·[·...·truncated·by·diffoscope;·len:·135,·SHA:·043587aec4fe25eab245a099034650143594d8a99652928e16926043d7310b2a·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 245 | ····</span><span·class="p"·data-group-id=" | 245 | ····</span><span·class="p"·data-group-id="5632540125-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="5632540125-5">}</span><span·class="p">.</span></code></pre><ul><li>The·first·argument·is·the·internal·state·<code·class="inline">State</code>,·passed·from |
| Max diff block lines reached; 102436/153223 bytes (66.85%) of diff not shown. | |||
| Offset 144, 16 lines modified | Offset 144, 16 lines modified | ||
| 144 | fast·as·possible,·what·can·we·do?·One·way·could·be·to·generate·more | 144 | fast·as·possible,·what·can·we·do?·One·way·could·be·to·generate·more |
| 145 | than·two·bytes·at·the·time.</p><pre><code·class="text">%·erlperf·'rand:bytes(100).'·'crypto:strong_rand_bytes(100).' | 145 | than·two·bytes·at·the·time.</p><pre><code·class="text">%·erlperf·'rand:bytes(100).'·'crypto:strong_rand_bytes(100).' |
| 146 | Code···································||········QPS·······Time···Rel | 146 | Code···································||········QPS·······Time···Rel |
| 147 | rand:bytes(100).························1····2124·Ki·····470·ns··100% | 147 | rand:bytes(100).························1····2124·Ki·····470·ns··100% |
| 148 | crypto:strong_rand_bytes(100).··········1····1915·Ki·····522·ns···90%</code></pre><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/rand.html#bytes/1"><code·class="inline">rand:bytes/1</code></a>·is·still·faster·when·we·generate·100·bytes·at·the·time, | 148 | crypto:strong_rand_bytes(100).··········1····1915·Ki·····522·ns···90%</code></pre><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/rand.html#bytes/1"><code·class="inline">rand:bytes/1</code></a>·is·still·faster·when·we·generate·100·bytes·at·the·time, |
| 149 | but·the·relative·difference·is·smaller.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erlperf·'rand:bytes(1000).'·'crypto:strong_rand_bytes(1000).'</span><span·class="w"> | 149 | but·the·relative·difference·is·smaller.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erlperf·'rand:bytes(1000).'·'crypto:strong_rand_bytes(1000).'</span><span·class="w"> |
| 150 | </span><span·class="n">Code</span><span·class="w">····································</span><span·class="p">||</span><span·class="w">········</span><span·class="n">QPS</span><span·class="w">·······</span><span·class="n">Time</span><span·class="w">···</span><span·class="n">Rel</span><span·class="w"> | 150 | </span><span·class="n">Code</span><span·class="w">····································</span><span·class="p">||</span><span·class="w">········</span><span·class="n">QPS</span><span·class="w">·······</span><span·class="n">Time</span><span·class="w">···</span><span·class="n">Rel</span><span·class="w"> |
| 151 | </span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">strong_rand_bytes</span><span·class="p"·data-group-id=" | 151 | </span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">strong_rand_bytes</span><span·class="p"·data-group-id="1282457526-1">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="1282457526-1">)</span><span·class="p">.</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">····</span><span·class="mi">1518</span><span·class="w">·</span><span·class="n">Ki</span><span·class="w">·····</span><span·class="mi">658</span><span·class="w">·</span><span·class="ss">ns</span><span·class="w">··</span><span·class="mi">100</span><span·class="c1">%</span><span·class="w"> |
| 152 | </span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">bytes</span><span·class="p"·data-group-id=" | 152 | </span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">bytes</span><span·class="p"·data-group-id="1282457526-2">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="1282457526-2">)</span><span·class="p">.</span><span·class="w">························</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">284</span><span·class="w">·</span><span·class="n">Ki</span><span·class="w">····</span><span·class="mi">3521</span><span·class="w">·</span><span·class="ss">ns</span><span·class="w">···</span><span·class="mi">19</span><span·class="c1">%</span></code></pre><p>When·we·generate·1000·bytes·at·the·time,·<a·href="../../lib/crypto-5.5.3/doc/html/crypto.html#strong_rand_bytes/1"><code·class="inline">crypto:strong_rand_bytes/1</code></a>·is |
| 153 | now·the·fastest.</p><h2·id="benchmarking-using-erlang-otp-functionality"·class="section-heading"> | 153 | now·the·fastest.</p><h2·id="benchmarking-using-erlang-otp-functionality"·class="section-heading"> |
| 154 | ··<a·href="#benchmarking-using-erlang-otp-functionality"·class="hover-link"> | 154 | ··<a·href="#benchmarking-using-erlang-otp-functionality"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Benchmarking·using·Erlang/OTP·functionality</span> | 157 | ··<span·class="text">Benchmarking·using·Erlang/OTP·functionality</span> |
| 158 | </h2> | 158 | </h2> |
| 159 | <p>Benchmarks·can·measure·wall-clock·time·or·CPU·time.</p><ul><li><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/timer.html#tc/3"><code·class="inline">timer:tc/3</code></a>·measures·wall-clock·time.·The·advantage·with·wall-clock·time·is | 159 | <p>Benchmarks·can·measure·wall-clock·time·or·CPU·time.</p><ul><li><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/timer.html#tc/3"><code·class="inline">timer:tc/3</code></a>·measures·wall-clock·time.·The·advantage·with·wall-clock·time·is |
| Offset 219, 15 lines modified | Offset 219, 15 lines modified | ||
| 219 | ······<p·class="built-using"> | 219 | ······<p·class="built-using"> |
| 220 | ········Built·using | 220 | ········Built·using |
| 221 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 221 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 222 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 222 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 223 | ······</p> | 223 | ······</p> |
| 224 | <p>Copyright·©·1996-202 | 224 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 225 | ····</footer> | 225 | ····</footer> |
| 226 | ··</div> | 226 | ··</div> |
| 227 | </main> | 227 | </main> |
| 228 | </div> | 228 | </div> |
| 229 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 229 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 230 | ··<script> | 230 | ··<script> |
| 231 | ··let·initialized·=·false; | 231 | ··let·initialized·=·false; |
| Offset 114, 43 lines modified | Offset 114, 43 lines modified | ||
| 114 | ····<span>Constructing·and·Matching·Binaries</span> | 114 | ····<span>Constructing·and·Matching·Binaries</span> |
| 115 | ··</h1> | 115 | ··</h1> |
| 116 | <p>This·section·gives·a·few·examples·on·how·to·handle·binaries·in·an·efficient·way. | 116 | <p>This·section·gives·a·few·examples·on·how·to·handle·binaries·in·an·efficient·way. |
| 117 | The·sections·that·follow·take·an·in-depth·look·at·how·binaries·are·implemented | 117 | The·sections·that·follow·take·an·in-depth·look·at·how·binaries·are·implemented |
| 118 | and·how·to·best·take·advantages·of·the·optimizations·done·by·the·compiler·and | 118 | and·how·to·best·take·advantages·of·the·optimizations·done·by·the·compiler·and |
| 119 | runtime·system.</p><p>Binaries·can·be·efficiently·<em>built</em>·in·the·following·way:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id=" | 119 | runtime·system.</p><p>Binaries·can·be·efficiently·<em>built</em>·in·the·following·way:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id="5344540019-1">(</span><span·class="n">List</span><span·class="p"·data-group-id="5344540019-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 120 | ····</span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id=" | 120 | ····</span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id="5344540019-2">(</span><span·class="n">List</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5344540019-3"><<</span><span·class="p"·data-group-id="5344540019-3">>></span><span·class="p"·data-group-id="53445400[·...·truncated·by·diffoscope;·len:·1,·SHA:·6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b·...·]9-2">)</span><span·class="p">.</span><span·class="w"> |
| 121 | </span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id=" | 121 | </span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id="5344540019-4">(</span><span·class="p"·data-group-id="5344540019-5">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="5344540019-5">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·58,·SHA:·c06f845e08bd33688860b08a5d7055810412dd09ccc2f485ed6bcc150dfe913d·...·]9-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 122 | ····</span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id=" | 122 | ····</span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id="5344540019-6">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5344540019-7"><<</span><span·class="n">Acc</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·126,·SHA:·2fbdd48dbfb2628ab5ffbbc737f631f146a4006e4505730277cc181f039e414a·...·]9-6">)</span><span·class="p">;</span><span·class="w"> |
| 123 | </span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id=" | 123 | </span><span·class="nf">my_list_to_binary</span><span·class="p"·data-group-id="5344540019-8">(</span><span·class="p"·data-group-id="5344540019-9">[</span><span·class="p"·data-group-id="5344540019-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="5344540019-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 124 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Appending·data·to·a·binary·as·in·the·example·is·efficient·because·it·is | 124 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Appending·data·to·a·binary·as·in·the·example·is·efficient·because·it·is |
| 125 | specially·optimized·by·the·runtime·system·to·avoid·copying·the·<code·class="inline">Acc</code>·binary | 125 | specially·optimized·by·the·runtime·system·to·avoid·copying·the·<code·class="inline">Acc</code>·binary |
| 126 | every·time.</p><p>Prepending·data·to·a·binary·in·a·loop·is·not·efficient:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 126 | every·time.</p><p>Prepending·data·to·a·binary·in·a·loop·is·not·efficient:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6534850090-1">(</span><span·class="n">List</span><span·class="p"·data-group-id="6534850090-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 127 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 127 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6534850090-2">(</span><span·class="n">List</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6534850090-3"><<</span><span·class="p"·data-group-id="6534850090-3">>></span><span·class="p"·data-group-id="65348500[·...·truncated·by·diffoscope;·len:·2,·SHA:·69f59c273b6e669ac32a6dd5e1b2cb63333d8b004f9696447aee2d422ce63763·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 128 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 128 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6534850090-4">(</span><span·class="p"·data-group-id="6534850090-5">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="6534850090-5">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·59,·SHA:·443b8c9bcbfac4039d0c6e2745ebd38e4e3edf36552a5f8b16fb80b5ee601245·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 129 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 129 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6534850090-6">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6534850090-7"><<</span><span·class="n">H</span><span·class="p">,</span><span·class="n">Acc</span><span·class="o">/</span><spa[·...·truncated·by·diffoscope;·len:·127,·SHA:·185f4a21dd37af76a032fabfef8af4d43ef46affc49b94a8dc39a8fcb668f2d7·...·]-6">)</span><span·class="p">;</span><span·class="w"> |
| 130 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 130 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6534850090-8">(</span><span·class="p"·data-group-id="6534850090-9">[</span><span·class="p"·data-group-id="6534850090-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="6534850090-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 131 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>This·is·not·efficient·for·long·lists·because·the·<code·class="inline">Acc</code>·binary·is·copied·every | 131 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>This·is·not·efficient·for·long·lists·because·the·<code·class="inline">Acc</code>·binary·is·copied·every |
| 132 | time.·One·way·to·make·the·function·more·efficient·is·like·this:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 132 | time.·One·way·to·make·the·function·more·efficient·is·like·this:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="0507052462-1">(</span><span·class="n">List</span><span·class="p"·data-group-id="0507052462-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 133 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 133 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="0507052462-2">(</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="0507052462-3">(</span><span·class="n">List</span><span·class="p"·data-group-id="0507052462-3">)</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·191,·SHA:·e92b7f051491e13528f9398263226508e50e95dde0daaf3bb39f7a09afa852b9·...·]2-2">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 134 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="0507052462-5">(</span><span·class="p"·data-group-id="0507052462-6">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="0507052462-6">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·58,·SHA:·96d24966ec88efb0108f327413a058acabe66167f48793f2ae4e0997940ce456·...·]2-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 135 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 135 | ····</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="0507052462-7">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0507052462-8"><<</span><span·class="n">Acc</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·126,·SHA:·61a1fbac16fa5ddc22f3926afb89248e5e82103efe456d5c3029229f1a9721a1·...·]2-7">)</span><span·class="p">;</span><span·class="w"> |
| 136 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 136 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="0507052462-9">(</span><span·class="p"·data-group-id="0507052462-10">[</span><span·class="p"·data-group-id="0507052462-10">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="0507052462-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Another·way·to·avoid·copying·the·binary·each·time·is·like·this:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 137 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Another·way·to·avoid·copying·the·binary·each·time·is·like·this:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6305192407-1">(</span><span·class="p"·data-group-id="6305192407-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="6305192407-2">]</span><span·class="p"·data-group-id="6305192407-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 138 | ····</span><span·class="n">RevTail</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 138 | ····</span><span·class="n">RevTail</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6305192407-3">(</span><span·class="n">T</span><span·class="p"·data-group-id="6305192407-3">)</span><span·class="p">,</span><span·class="w"> |
| 139 | ····</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="p"·data-group-id="6305192407-4"><<</span><span·class="n">RevTail</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="n">H</span><span·class="p"·data-group-id="6305192407-4">>></span><span·class="p">;</span><span·class="w"> |
| 140 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">rev_list_to_binary</span><span·class="p"·data-group-id="6305192407-5">(</span><span·class="p"·data-group-id="6305192407-6">[</span><span·class="p"·data-group-id="6305192407-6">]</span><span·class="p"·data-group-id="6305192407-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ····</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="p"·data-group-id="6305192407-7"><<</span><span·class="p"·data-group-id="6305192407-7">>></span><span·class="p">.</span></code></pre><p>Note·that·in·each·of·the·<strong>DO</strong>·examples,·the·binary·to·be·appended·to·is·always |
| 142 | given·as·the·first·segment.</p><p>Binaries·can·be·efficiently·<em>matched</em>·in·the·following·way:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_binary_to_list</span><span·class="p"·data-group-id=" | 142 | given·as·the·first·segment.</p><p>Binaries·can·be·efficiently·<em>matched</em>·in·the·following·way:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_binary_to_list</span><span·class="p"·data-group-id="2614418386-1">(</span><span·class="p"·data-group-id="2614418386-2"><<</span><span·class="n">H</span><span·class="p">,</span><span·class="n">T</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p"·data-group-id="2614418386-2">>[·...·truncated·by·diffoscope;·len:·53,·SHA:·009ca0e5ac1b87cd956d438bd383da1cb42c8d893348fc52454b7bb29f4a848b·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 143 | ····</span><span·class="p"·data-group-id="0492439203-3">[</span><span·class="n">H</span><span·class="p">|</span><span·class="nf">my_binary_to_list</span><span·class="p"·data-group-id="0492439203-4">(</span><span·class="n">T</span><span·class="p"·data-group-id="0492439203-4">)</span><span·class="p"·data-group-id="0492439203-3">]</span><span·class="p">;</span><span·class="w"> | ||
| 144 | </span><span·class=" | 143 | ····</span><span·class="p"·data-group-id="2614418386-3">[</span><span·class="n">H</span><span·class="p">|</span><span·class="nf">my_binary_to_list</span><span·class="p"·data-group-id="2614418386-4">(</span><span·class="n">T</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·118,·SHA:·71d250258dbf33fa8ca5ada79be71e97a2be9630d6dd04530d702723ccfad5ef·...·]"> |
| 144 | </span><span·class="nf">my_binary_to_list</span><span·class="p"·data-group-id="2614418386-5">(</span><span·class="p"·data-group-id="2614418386-6"><<</span><span·class="p"·data-group-id="2614418386-6">>></span><span·class="p"·data-group-id="2614418386-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2614418386-7">[</span><span·class="p"·data-group-id="2614418386-7">]</span><span·class="p">.</span></code></pre><h2·id="how-binaries-are-implemented"·class="section-heading"> | ||
| 145 | ··<a·href="#how-binaries-are-implemented"·class="hover-link"> | 145 | ··<a·href="#how-binaries-are-implemented"·class="hover-link"> |
| 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 147 | ··</a> | 147 | ··</a> |
| 148 | ··<span·class="text">How·Binaries·are·Implemented</span> | 148 | ··<span·class="text">How·Binaries·are·Implemented</span> |
| 149 | </h2> | 149 | </h2> |
| 150 | <p>Internally,·binaries·and·bitstrings·are·implemented·in·the·same·way.·In·this | 150 | <p>Internally,·binaries·and·bitstrings·are·implemented·in·the·same·way.·In·this |
| 151 | section,·they·are·called·<em>binaries</em>·because·that·is·what·they·are·called·in·the | 151 | section,·they·are·called·<em>binaries</em>·because·that·is·what·they·are·called·in·the |
| Offset 205, 29 lines modified | Offset 205, 29 lines modified | ||
| 205 | called·referential·transparency)·of·Erlang·would·break.</p><h2·id="constructing-binaries"·class="section-heading"> | 205 | called·referential·transparency)·of·Erlang·would·break.</p><h2·id="constructing-binaries"·class="section-heading"> |
| 206 | ··<a·href="#constructing-binaries"·class="hover-link"> | 206 | ··<a·href="#constructing-binaries"·class="hover-link"> |
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Constructing·Binaries</span> | 209 | ··<span·class="text">Constructing·Binaries</span> |
| 210 | </h2> | 210 | </h2> |
| 211 | <p>Appending·to·a·binary·or·bitstring·in·the·following·way·is·specially·optimized | 211 | <p>Appending·to·a·binary·or·bitstring·in·the·following·way·is·specially·optimized |
| 212 | to·avoid·copying·the·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 212 | to·avoid·copying·the·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3830949155-1"><<</span><span·class="n">Binary</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·a17985e41fe1d3eaff6cce02184dac0add4ee3be1521c99086041a11a01e05aa·...·]-1">>></span><span·class="w"> |
| 213 | </span><span·class="c1">%%·-·OR·-</span><span·class="w"> | 213 | </span><span·class="c1">%%·-·OR·-</span><span·class="w"> |
| 214 | </span><span·class="p"·data-group-id=" | 214 | </span><span·class="p"·data-group-id="3830949155-2"><<</span><span·class="n">Binary</span><span·class="o">/</span><span·class="ss">bitstring</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·0fc8c5def33e5c936c4edcd873a1fa18ce31f4fc61979a5362a475da16df658a·...·]-2">>></span></code></pre><p>This·optimization·is·applied·by·the·runtime·system·in·a·way·that·makes·it |
| 215 | effective·in·most·circumstances·(for·exceptions,·see | 215 | effective·in·most·circumstances·(for·exceptions,·see |
| 216 | <a·href="binaryhandling.html#forced_copying">Circumstances·That·Force·Copying</a>).·The | 216 | <a·href="binaryhandling.html#forced_copying">Circumstances·That·Force·Copying</a>).·The |
| 217 | optimization·in·its·basic·form·does·not·need·any·help·from·the·compiler. | 217 | optimization·in·its·basic·form·does·not·need·any·help·from·the·compiler. |
| 218 | However,·the·compiler·add·hints·to·the·runtime·system·when·it·is·safe·to·apply | 218 | However,·the·compiler·add·hints·to·the·runtime·system·when·it·is·safe·to·apply |
| 219 | the·optimization·in·a·more·efficient·way.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>The·compiler·support·for·making·the·optimization·more·efficient·was·added·in | 219 | the·optimization·in·a·more·efficient·way.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>The·compiler·support·for·making·the·optimization·more·efficient·was·added·in |
| 220 | Erlang/OTP·26.</p></section><p>To·explain·how·the·basic·optimization·works,·let·us·examine·the·following·code | 220 | Erlang/OTP·26.</p></section><p>To·explain·how·the·basic·optimization·works,·let·us·examine·the·following·code |
| 221 | line·by·line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 221 | line·by·line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1178943646-1"><<</span><span·class="mi">0</span><span·class="p"·data-group-id="1178943646-1">>></span><span·class="p">,</span><span·class="w">····················</span><span·class="c1">%%·1</span><span·class="w"> |
| 222 | </span><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 222 | </span><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1178943646-2"><<</span><span·class="n">Bin0</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·2f4cab8200b2b7577527bb8e8c12d87ee4287f056a8672590a0ec374079faed4·...·]-2">>></span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%%·2</span><span·class="w"> |
| 223 | </span><span·class="n">Bin2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 223 | </span><span·class="n">Bin2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1178943646-3"><<</span><span·class="n">Bin1</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">6</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·2f4cab8200b2b7577527bb8e8c12d87ee4287f056a8672590a0ec374079faed4·...·]-3">>></span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%%·3</span><span·class="w"> |
| 224 | </span><span·class="n">Bin3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 224 | </span><span·class="n">Bin3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1178943646-4"><<</span><span·class="n">Bin2</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">9</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·2f4cab8200b2b7577527bb8e8c12d87ee4287f056a8672590a0ec374079faed4·...·]-4">>></span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%%·4</span><span·class="w"> |
| 225 | </span><span·class="n">Bin4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 225 | </span><span·class="n">Bin4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1178943646-5"><<</span><span·class="n">Bin1</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="mi">17</span><span·class="p"·data-group-id="1178943646-5">>></span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%%·5·!!!</span><span·class="w"> |
| 226 | </span><span·class="p"·data-group-id=" | 226 | </span><span·class="p"·data-group-id="1178943646-6">{</span><span·class="n">Bin4</span><span·class="p">,</span><span·class="n">Bin3</span><span·class="p"·data-group-id="1178943646-6">}</span><span·class="w">······················</span><span·class="c1">%%·6</span></code></pre><ul><li><p>Line·1·(marked·with·the·<code·class="inline">%%·1</code>·comment),·assigns·a |
| 227 | <a·href="binaryhandling.html#heap_binary">heap·binary</a>·to·the·<code·class="inline">Bin0</code>·variable.</p></li><li><p>Line·2·is·an·append·operation.·As·<code·class="inline">Bin0</code>·has·not·been·involved·in·an·append | 227 | <a·href="binaryhandling.html#heap_binary">heap·binary</a>·to·the·<code·class="inline">Bin0</code>·variable.</p></li><li><p>Line·2·is·an·append·operation.·As·<code·class="inline">Bin0</code>·has·not·been·involved·in·an·append |
| 228 | operation,·a·new·<a·href="binaryhandling.html#refc_binary">refc·binary</a>·is·created·and | 228 | operation,·a·new·<a·href="binaryhandling.html#refc_binary">refc·binary</a>·is·created·and |
| 229 | the·contents·of·<code·class="inline">Bin0</code>·is·copied·into·it.·The·<em>ProcBin</em>·part·of·the·refc | 229 | the·contents·of·<code·class="inline">Bin0</code>·is·copied·into·it.·The·<em>ProcBin</em>·part·of·the·refc |
| 230 | binary·has·its·size·set·to·the·size·of·the·data·stored·in·the·binary,·while | 230 | binary·has·its·size·set·to·the·size·of·the·data·stored·in·the·binary,·while |
| 231 | the·binary·object·has·extra·space·allocated.·The·size·of·the·binary·object·is | 231 | the·binary·object·has·extra·space·allocated.·The·size·of·the·binary·object·is |
| 232 | either·twice·the·size·of·<code·class="inline">Bin1</code>·or·256,·whichever·is·larger.·In·this·case·it | 232 | either·twice·the·size·of·<code·class="inline">Bin1</code>·or·256,·whichever·is·larger.·In·this·case·it |
| 233 | is·256.</p></li><li><p>Line·3·is·more·interesting.·<code·class="inline">Bin1</code>·<em>has</em>·been·used·in·an·append·operation,·and | 233 | is·256.</p></li><li><p>Line·3·is·more·interesting.·<code·class="inline">Bin1</code>·<em>has</em>·been·used·in·an·append·operation,·and |
| Offset 253, 23 lines modified | Offset 253, 23 lines modified | ||
| 253 | handle·an·append·operation·to·a·heap·binary·by·copying·it·to·a·refc·binary·(line | 253 | handle·an·append·operation·to·a·heap·binary·by·copying·it·to·a·refc·binary·(line |
| 254 | 2),·and·also·handle·an·append·operation·to·a·previous·version·of·the·binary·by | 254 | 2),·and·also·handle·an·append·operation·to·a·previous·version·of·the·binary·by |
| 255 | copying·it·(line·5).·The·support·for·doing·that·does·not·come·for·free.·For | 255 | copying·it·(line·5).·The·support·for·doing·that·does·not·come·for·free.·For |
| 256 | example,·to·make·it·possible·to·know·when·it·is·necessary·to·copy·the·binary, | 256 | example,·to·make·it·possible·to·know·when·it·is·necessary·to·copy·the·binary, |
| 257 | for·every·append·operation,·the·runtime·system·must·create·a·sub·binary.</p><p>When·the·compiler·can·determine·that·none·of·those·situations·need·to·be·handled | 257 | for·every·append·operation,·the·runtime·system·must·create·a·sub·binary.</p><p>When·the·compiler·can·determine·that·none·of·those·situations·need·to·be·handled |
| 258 | and·that·the·append·operation·cannot·possibly·fail,·the·compiler·generates·code | 258 | and·that·the·append·operation·cannot·possibly·fail,·the·compiler·generates·code |
| 259 | that·causes·the·runtime·system·to·apply·a·more·efficient·variant·of·the | 259 | that·causes·the·runtime·system·to·apply·a·more·efficient·variant·of·the |
| 260 | optimization.</p><p><strong>Example:</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7838774543-1">(</span><span·class="ss">repack</span><span·class="p"·data-group-id="7838774543-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 261 | </ | 260 | optimization.</p><p><strong>Example:</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4292888045-1">(</span><span·class="ss">repack</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·21,·SHA:·89346bce24bd9d3cb08d482a940b3a0800b6fdd5fec8eba154f5519cd33616d4·...·]">)</span><span·class="p">.</span><span·class="w"> |
| 261 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4292888045-2">(</span><span·class="p"·data-group-id="4292888045-3">[</span><span·class="ss">repack</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="4292888045-3">]</span><span·class="p"·data-group-id="4292888045-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 262 | </span><span·class="nf">repack</span><span·class="p"·data-group-id=" | 262 | </span><span·class="nf">repack</span><span·class="p"·data-group-id="4292888045-4">(</span><span·class="n">Bin</span><span·class="p"·data-group-id="4292888045-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_binary</span><span·class="p"·data-group-id="4292888045-5">(<[·...·truncated·by·diffoscope;·len:·73,·SHA:·5eb86af3622f7a64e723372316e21f1e9920d073a561cf330f4ccaceaf3a93d1·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 263 | ····</span><span·class="nf">repack</span><span·class="p"·data-group-id=" | 263 | ····</span><span·class="nf">repack</span><span·class="p"·data-group-id="4292888045-6">(</span><span·class="n">Bin</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4292888045-7"><<</span><span·class="p"·data-group-id="4292888045-7">>></span><span·class="p"·data-group-id="429288804[·...·truncated·by·diffoscope;·len:·1,·SHA:·ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 264 | </span><span·class="nf">repack</span><span·class="p"·data-group-id=" | 264 | </span><span·class="nf">repack</span><span·class="p"·data-group-id="4292888045-8">(</span><span·class="p"·data-group-id="4292888045-9"><<</span><span·class="n">C</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="n">T</span><span·class="o">/</span><span·class="ss">binary</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·dd33c8e5d1e9f1203a644fe300381fe1f403044ddee951d4b721f4d72a54e562·...·]-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 265 | ····</span><span·class="nf">repack</span><span·class="p"·data-group-id=" | 265 | ····</span><span·class="nf">repack</span><span·class="p"·data-group-id="4292888045-10">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4292888045-11"><<</span><span·class="n">Result</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·183,·SHA:·cd2414f416d20af2f14c22796ddb6d9bba619f39360c719cd1ce5dfe6bbeffc8·...·]-10">)</span><span·class="p">;</span><span·class="w"> |
| 266 | </span><span·class="nf">repack</span><span·class="p"·data-group-id=" | 266 | </span><span·class="nf">repack</span><span·class="p"·data-group-id="4292888045-12">(</span><span·class="p"·data-group-id="4292888045-13"><<</span><span·class="p"·data-group-id="4292888045-13">>></span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="429[·...·truncated·by·diffoscope;·len:·7,·SHA:·1301e46ca60baab3430896937eb3def92ed127ced0006b3db9ec84f7f8d44e04·...·]-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 267 | ····</span><span·class="n">Result</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">repack/2</code>·function·only·keeps·a·single·version·of·the·binary,·so·there·is | 267 | ····</span><span·class="n">Result</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">repack/2</code>·function·only·keeps·a·single·version·of·the·binary,·so·there·is |
| 268 | never·any·need·to·copy·the·binary.·The·compiler·rewrites·the·creation·of·the | 268 | never·any·need·to·copy·the·binary.·The·compiler·rewrites·the·creation·of·the |
| 269 | empty·binary·in·<code·class="inline">repack/1</code>·to·instead·create·a·refc·binary·with·256·bytes | 269 | empty·binary·in·<code·class="inline">repack/1</code>·to·instead·create·a·refc·binary·with·256·bytes |
| 270 | already·reserved;·thus,·the·append·operation·in·<code·class="inline">repack/2</code>·never·needs·to·handle | 270 | already·reserved;·thus,·the·append·operation·in·<code·class="inline">repack/2</code>·never·needs·to·handle |
| 271 | a·binary·not·prepared·for·appending.</p><p><a·href=""·id="forced_copying"></a></p><h3·id="circumstances-that-force-copying"·class="section-heading"> | 271 | a·binary·not·prepared·for·appending.</p><p><a·href=""·id="forced_copying"></a></p><h3·id="circumstances-that-force-copying"·class="section-heading"> |
| 272 | ··<a·href="#circumstances-that-force-copying"·class="hover-link"> | 272 | ··<a·href="#circumstances-that-force-copying"·class="hover-link"> |
| 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 281, 72 lines modified | Offset 281, 72 lines modified | ||
| 281 | reason·is·that·the·binary·object·can·be·moved·(reallocated)·during·an·append | 281 | reason·is·that·the·binary·object·can·be·moved·(reallocated)·during·an·append |
| 282 | operation,·and·when·that·happens,·the·pointer·in·the·ProcBin·must·be·updated.·If | 282 | operation,·and·when·that·happens,·the·pointer·in·the·ProcBin·must·be·updated.·If |
| 283 | there·would·be·more·than·one·ProcBin·pointing·to·the·binary·object,·it·would·not | 283 | there·would·be·more·than·one·ProcBin·pointing·to·the·binary·object,·it·would·not |
| 284 | be·possible·to·find·and·update·all·of·them.</p><p>Therefore,·certain·operations·on·a·binary·mark·it·so·that·any·future·append | 284 | be·possible·to·find·and·update·all·of·them.</p><p>Therefore,·certain·operations·on·a·binary·mark·it·so·that·any·future·append |
| 285 | operation·will·be·forced·to·copy·the·binary.·In·most·cases,·the·binary·object | 285 | operation·will·be·forced·to·copy·the·binary.·In·most·cases,·the·binary·object |
| 286 | will·be·shrunk·at·the·same·time·to·reclaim·the·extra·space·allocated·for | 286 | will·be·shrunk·at·the·same·time·to·reclaim·the·extra·space·allocated·for |
| 287 | growing.</p><p>When·appending·to·a·binary·as·follows,·only·the·binary·returned·from·the·latest | 287 | growing.</p><p>When·appending·to·a·binary·as·follows,·only·the·binary·returned·from·the·latest |
| 288 | append·operation·will·support·further·cheap·append·operations:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 288 | append·operation·will·support·further·cheap·append·operations:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0245614733-1"><<</span><span·class="n">Bin0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="0245614733-1">>></span></code></pre><p>In·the·code·fragment·in·the·beginning·of·this·section,·appending·to·<code·class="inline">Bin</code>·will |
| 289 | be·cheap,·while·appending·to·<code·class="inline">Bin0</code>·will·force·the·creation·of·a·new·binary·and | 289 | be·cheap,·while·appending·to·<code·class="inline">Bin0</code>·will·force·the·creation·of·a·new·binary·and |
| 290 | copying·of·the·contents·of·<code·class="inline">Bin0</code>.</p><p>If·a·binary·is·sent·as·a·message·to·a·process·or·port,·the·binary·will·be·shrunk | 290 | copying·of·the·contents·of·<code·class="inline">Bin0</code>.</p><p>If·a·binary·is·sent·as·a·message·to·a·process·or·port,·the·binary·will·be·shrunk |
| 291 | and·any·further·append·operation·will·copy·the·binary·data·into·a·new·binary. | 291 | and·any·further·append·operation·will·copy·the·binary·data·into·a·new·binary. |
| 292 | For·example,·in·the·following·code·fragment·<code·class="inline">Bin1</code>·will·be·copied·in·the·third | 292 | For·example,·in·the·following·code·fragment·<code·class="inline">Bin1</code>·will·be·copied·in·the·third |
| 293 | line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 293 | line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7630187777-1"><<</span><span·class="n">Bin0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7630187777-1">>></span><span·class="p">,</span><span·class="w"> |
| 294 | </span><span·class="n">PortOrPid</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Bin1</span><span·class="p">,</span><span·class="w"> | 294 | </span><span·class="n">PortOrPid</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Bin1</span><span·class="p">,</span><span·class="w"> |
| 295 | </span><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 295 | </span><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7630187777-2"><<</span><span·class="n">Bin1</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7630187777-2">>></span><span·class="w">··</span><span·class="c1">%%·Bin1·will·be·COPIED</span></code></pre><p>The·same·happens·if·you·insert·a·binary·into·an·Ets·table,·send·it·to·a·port |
| 296 | using·<a·href="../../erts-15.2.7/doc/html/erlang.html#port_command/2"><code·class="inline">erlang:port_command/2</code></a>,·or·pass·it·to | 296 | using·<a·href="../../erts-15.2.7/doc/html/erlang.html#port_command/2"><code·class="inline">erlang:port_command/2</code></a>,·or·pass·it·to |
| 297 | <a·href="../../erts-15.2.7/doc/html/erl_nif.html#enif_inspect_binary">enif_inspect_binary</a>·in·a·NIF.</p><p>Matching·a·binary·will·also·cause·it·to·shrink·and·the·next·append·operation | 297 | <a·href="../../erts-15.2.7/doc/html/erl_nif.html#enif_inspect_binary">enif_inspect_binary</a>·in·a·NIF.</p><p>Matching·a·binary·will·also·cause·it·to·shrink·and·the·next·append·operation |
| 298 | will·copy·the·binary·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 298 | will·copy·the·binary·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7030437595-1"><<</span><span·class="n">Bin0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7030437595-1">>></span><span·class="p">,</span><span·class="w"> |
| 299 | </span><span·class="p"·data-group-id=" | 299 | </span><span·class="p"·data-group-id="7030437595-2"><<</span><span·class="n">X</span><span·class="p">,</span><span·class="n">Y</span><span·class="p">,</span><span·class="n">Z</span><span·class="p">,</span><span·class="n">T</span><span·class="o">/</span><span·class="ss">binary</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·880d30618dd107d3ebefa9ecaf113185dc18a77db690bec8f04b6459ad2646ff·...·]-2">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Bin1</span><span·class="p">,</span><span·class="w"> |
| 300 | </span><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 300 | </span><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7030437595-3"><<</span><span·class="n">Bin1</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7030437595-3">>></span><span·class="w">··</span><span·class="c1">%%·Bin1·will·be·COPIED</span></code></pre><p>The·reason·is·that·a·<a·href="binaryhandling.html#match_context">match·context</a>·contains·a |
| 301 | direct·pointer·to·the·binary·data.</p><p>If·a·process·simply·keeps·binaries·(either·in·"loop·data"·or·in·the·process | 301 | direct·pointer·to·the·binary·data.</p><p>If·a·process·simply·keeps·binaries·(either·in·"loop·data"·or·in·the·process |
| 302 | dictionary),·the·garbage·collector·can·eventually·shrink·the·binaries.·If·only | 302 | dictionary),·the·garbage·collector·can·eventually·shrink·the·binaries.·If·only |
| 303 | one·such·binary·is·kept,·it·will·not·be·shrunk.·If·the·process·later·appends·to | 303 | one·such·binary·is·kept,·it·will·not·be·shrunk.·If·the·process·later·appends·to |
| 304 | a·binary·that·has·been·shrunk,·the·binary·object·will·be·reallocated·to·make | 304 | a·binary·that·has·been·shrunk,·the·binary·object·will·be·reallocated·to·make |
| 305 | place·for·the·data·to·be·appended.</p><h2·id="matching-binaries"·class="section-heading"> | 305 | place·for·the·data·to·be·appended.</p><h2·id="matching-binaries"·class="section-heading"> |
| 306 | ··<a·href="#matching-binaries"·class="hover-link"> | 306 | ··<a·href="#matching-binaries"·class="hover-link"> |
| 307 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 307 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Max diff block lines reached; 35074/81877 bytes (42.84%) of diff not shown. | |||
| Offset 119, 48 lines modified | Offset 119, 48 lines modified | ||
| 119 | ··<a·href="#introduction"·class="hover-link"> | 119 | ··<a·href="#introduction"·class="hover-link"> |
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Introduction</span> | 122 | ··<span·class="text">Introduction</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>The·complete·specification·for·the·bit·syntax·appears·in·the | 124 | <p>The·complete·specification·for·the·bit·syntax·appears·in·the |
| 125 | <a·href="../../doc/system/expressions.html#bit-syntax-expressions">Reference·Manual</a>.</p><p>In·Erlang,·a·Bin·is·used·for·constructing·binaries·and·matching·binary·patterns. | 125 | <a·href="../../doc/system/expressions.html#bit-syntax-expressions">Reference·Manual</a>.</p><p>In·Erlang,·a·Bin·is·used·for·constructing·binaries·and·matching·binary·patterns. |
| 126 | A·Bin·is·written·with·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 126 | A·Bin·is·written·with·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3078262790-1"><<</span><span·class="n">E1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E2</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·cla[·...·truncated·by·diffoscope;·len:·81,·SHA:·e2221ba6e87558d0092442574da1e4628c5cefc6e8c27fa039c0ca762a31fb1a·...·]-1">>></span></code></pre><p>A·Bin·is·a·low-level·sequence·of·bits·or·bytes.·The·purpose·of·a·Bin·is·to |
| 127 | enable·construction·of·binaries:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="653 | 127 | enable·construction·of·binaries:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6153040513-1"><<</span><span·class="n">E1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E2</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·clas[·...·truncated·by·diffoscope;·len:·581,·SHA:·468eb550c3a7ad6da98e8a752a1601011e0f9984e7e268a5086a075ed596aa24·...·]-1">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Bin</span></code></pre><p>Here,·<code·class="inline">Bin</code>·is·bound·and·the·elements·are·bound·or·unbound,·as·in·any·match.</p><p>A·Bin·does·not·need·to·consist·of·a·whole·number·of·bytes.</p><p>A·<em>bitstring</em>·is·a·sequence·of·zero·or·more·bits,·where·the·number·of·bits·does |
| 128 | not·need·to·be·divisible·by·8.·If·the·number·of·bits·is·divisible·by·8,·the | 128 | not·need·to·be·divisible·by·8.·If·the·number·of·bits·is·divisible·by·8,·the |
| 129 | bitstring·is·also·a·binary.</p><p>Each·element·specifies·a·certain·<em>segment</em>·of·the·bitstring.·A·segment·is·a·set | 129 | bitstring·is·also·a·binary.</p><p>Each·element·specifies·a·certain·<em>segment</em>·of·the·bitstring.·A·segment·is·a·set |
| 130 | of·contiguous·bits·of·the·binary·(not·necessarily·on·a·byte·boundary).·The·first | 130 | of·contiguous·bits·of·the·binary·(not·necessarily·on·a·byte·boundary).·The·first |
| 131 | element·specifies·the·initial·segment,·the·second·element·specifies·the | 131 | element·specifies·the·initial·segment,·the·second·element·specifies·the |
| 132 | following·segment,·and·so·on.</p><p>The·following·examples·illustrate·how·binaries·are·constructed,·or·matched,·and | 132 | following·segment,·and·so·on.</p><p>The·following·examples·illustrate·how·binaries·are·constructed,·or·matched,·and |
| 133 | how·elements·and·tails·are·specified.</p><h3·id="examples"·class="section-heading"> | 133 | how·elements·and·tails·are·specified.</p><h3·id="examples"·class="section-heading"> |
| 134 | ··<a·href="#examples"·class="hover-link"> | 134 | ··<a·href="#examples"·class="hover-link"> |
| 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 136 | ··</a> | 136 | ··</a> |
| 137 | ··<span·class="text">Examples</span> | 137 | ··<span·class="text">Examples</span> |
| 138 | </h3> | 138 | </h3> |
| 139 | <p><em>Example·1:</em>·A·binary·can·be·constructed·from·a·set·of·constants·or·a·string | 139 | <p><em>Example·1:</em>·A·binary·can·be·constructed·from·a·set·of·constants·or·a·string |
| 140 | literal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin11</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 140 | literal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bin11</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9200635889-1"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">17</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">42</span><span·class="p"·data-group-id="9200635889-1">>></span><span·class="p">,</span><span·class="w"> |
| 141 | </span><span·class="n">Bin12</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 141 | </span><span·class="n">Bin12</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9200635889-2"><<</span><span·class="s">"abc"</span><span·class="p"·data-group-id="9200635889-2">>></span></code></pre><p>This·gives·two·binaries·of·size·3,·with·the·following·evaluations:</p><ul><li><a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_list/1"><code·class="inline">binary_to_list(Bin11)</code></a>·evaluates·to·<code·class="inline">[1,·17,·42]</code>.</li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_list/1"><code·class="inline">binary_to_list(Bin12)</code></a>·evaluates·to·<code·class="inline">[97,·98,·99]</code>.</li></ul><p><em>Example·2:</em>Similarly,·a·binary·can·be·constructed·from·a·set·of·bound |
| 142 | variables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">17</span><span·class="p">,</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">,</span><span·class="w"> | 142 | variables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">17</span><span·class="p">,</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">,</span><span·class="w"> |
| 143 | </span><span·class="n">Bin2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 143 | </span><span·class="n">Bin2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9452537172-1"><<</span><span·class="n">A</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="p">,</span><span·class="w">·</span><span·class="n">C</span><span·class="p">:</span><span·class="mi">16</span><span·cla[·...·truncated·by·diffoscope;·len:·32,·SHA:·87b924885bc40d5209acf5329ee16544071dd1092e3e02a1ce6c22835b270727·...·]-1">>></span></code></pre><p>This·gives·a·binary·of·size·4.·Here,·a·<em>size·expression</em>·is·used·for·the |
| 144 | variable·<code·class="inline">C</code>·to·specify·a·16-bits·segment·of·<code·class="inline">Bin2</code>.</p><p><a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_list/1"><code·class="inline">binary_to_list(Bin2)</code></a>·evaluates·to·<code·class="inline">[1,·17,·00,·42]</code>.</p><p><em>Example·3:</em>·A·Bin·can·also·be·used·for·matching.·<code·class="inline">D</code>,·<code·class="inline">E</code>,·and·<code·class="inline">F</code>·are·unbound | 144 | variable·<code·class="inline">C</code>·to·specify·a·16-bits·segment·of·<code·class="inline">Bin2</code>.</p><p><a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_list/1"><code·class="inline">binary_to_list(Bin2)</code></a>·evaluates·to·<code·class="inline">[1,·17,·00,·42]</code>.</p><p><em>Example·3:</em>·A·Bin·can·also·be·used·for·matching.·<code·class="inline">D</code>,·<code·class="inline">E</code>,·and·<code·class="inline">F</code>·are·unbound |
| 145 | variables,·and·<code·class="inline">Bin2</code>·is·bound,·as·in·Example·2:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 145 | variables,·and·<code·class="inline">Bin2</code>·is·bound,·as·in·Example·2:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9016437674-1"><<</span><span·class="n">D</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="p">,</span><span·class="w">·</span><span·class="n">F</span><span·cla[·...·truncated·by·diffoscope;·len:·86,·SHA:·c8fb80c5b4c5587130f5f6b71246d0cd710b5e657cc63fc1f35493e137fd5ece·...·]-1">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Bin2</span></code></pre><p>This·gives·<code·class="inline">D·=·273</code>,·<code·class="inline">E·=·00</code>,·and·F·binds·to·a·binary·of·size·1: |
| 146 | <code·class="inline">binary_to_list(F)·=·[42]</code>.</p><p><em>Example·4:</em>·The·following·is·a·more·elaborate·example·of·matching.·Here, | 146 | <code·class="inline">binary_to_list(F)·=·[42]</code>.</p><p><em>Example·4:</em>·The·following·is·a·more·elaborate·example·of·matching.·Here, |
| 147 | <code·class="inline">Dgram</code>·is·bound·to·the·consecutive·bytes·of·an·IP·datagram·of·IP·protocol | 147 | <code·class="inline">Dgram</code>·is·bound·to·the·consecutive·bytes·of·an·IP·datagram·of·IP·protocol |
| 148 | version·4.·The·ambition·is·to·extract·the·header·and·the·data·of·the·datagram:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 148 | version·4.·The·ambition·is·to·extract·the·header·and·the·data·of·the·datagram:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8436377106-1">(</span><span·class="n">IP_VERSION</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="p"·data-group-id="8436377106-1">)</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 149 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8436377106-2">(</span><span·class="n">IP_MIN_HDR_LEN</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5</span><span·class="p"·data-group-id="8436377106-2">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="n">DgramSize</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">byte_size</span><span·class="p"·data-group-id=" | 150 | </span><span·class="n">DgramSize</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">byte_size</span><span·class="p"·data-group-id="8436377106-3">(</span><span·class="n">Dgram</span><span·class="p"·data-group-id="8436377106-3">)</span><span·class="p">,</span><span·class="w"> |
| 151 | </span><span·class="k">case</span><span·class="w">·</span><span·class="n">Dgram</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 151 | </span><span·class="k">case</span><span·class="w">·</span><span·class="n">Dgram</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 152 | ····</span><span·class="p"·data-group-id=" | 152 | ····</span><span·class="p"·data-group-id="8436377106-4"><<</span><span·class="o">?</span><span·class="n">IP_VERSION</span><span·class="p">:</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HLen</span><span·class="p">:</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SrvcType</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TotLen</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w"> |
| 153 | ······</span><span·class="n">ID</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Flgs</span><span·class="p">:</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FragOff</span><span·class="p">:</span><span·class="mi">13</span><span·class="p">,</span><span·class="w"> | 153 | ······</span><span·class="n">ID</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Flgs</span><span·class="p">:</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FragOff</span><span·class="p">:</span><span·class="mi">13</span><span·class="p">,</span><span·class="w"> |
| 154 | ······</span><span·class="n">TTL</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Proto</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HdrChkSum</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w"> | 154 | ······</span><span·class="n">TTL</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Proto</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HdrChkSum</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">,</span><span·class="w"> |
| 155 | ······</span><span·class="n">SrcIP</span><span·class="p">:</span><span·class="mi">32</span><span·class="p">,</span><span·class="w"> | 155 | ······</span><span·class="n">SrcIP</span><span·class="p">:</span><span·class="mi">32</span><span·class="p">,</span><span·class="w"> |
| 156 | ······</span><span·class="n">DestIP</span><span·class="p">:</span><span·class="mi">32</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RestDgram</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p"·data-group-id=" | 156 | ······</span><span·class="n">DestIP</span><span·class="p">:</span><span·class="mi">32</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RestDgram</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p"·data-group-id="8436377106-4">>></span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">HLen</span><span·class="o">>=</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">*</span><span·class="n">HLen</span><span·class="o">=<</span><span·class="n">DgramSize</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ········</span><span·class="n">OptsLen</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">*</span><span·class="p"·data-group-id=" | 157 | ········</span><span·class="n">OptsLen</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">*</span><span·class="p"·data-group-id="8436377106-5">(</span><span·class="n">HLen</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">?</span><span·class="n">IP_MIN_HDR_LEN</span><span·class="p"·data-group-id="8436377106-5">)</span><span·class="p">,</span><span·class="w"> |
| 158 | ········</span><span·class="p"·data-group-id=" | 158 | ········</span><span·class="p"·data-group-id="8436377106-6"><<</span><span·class="n">Opts</span><span·class="p">:</span><span·class="n">OptsLen</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="n">Data</span><span·class="o">/</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·54,·SHA:·4315a36f590126f7b5aad871c7aef6866915a0aacf0bd30cf9de51d20244b848·...·]-6">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RestDgram</span><span·class="p">,</span><span·class="w"> |
| 159 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 159 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Here,·the·segment·corresponding·to·the·<code·class="inline">Opts</code>·variable·has·a·<em>type·modifier</em>, | 160 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Here,·the·segment·corresponding·to·the·<code·class="inline">Opts</code>·variable·has·a·<em>type·modifier</em>, |
| 161 | specifying·that·<code·class="inline">Opts</code>·is·to·bind·to·a·binary.·All·other·variables·have·the | 161 | specifying·that·<code·class="inline">Opts</code>·is·to·bind·to·a·binary.·All·other·variables·have·the |
| 162 | default·type·equal·to·unsigned·integer.</p><p>An·IP·datagram·header·is·of·variable·length.·This·length·is·measured·in·the | 162 | default·type·equal·to·unsigned·integer.</p><p>An·IP·datagram·header·is·of·variable·length.·This·length·is·measured·in·the |
| 163 | number·of·32-bit·words·and·is·given·in·the·segment·corresponding·to·<code·class="inline">HLen</code>.·The | 163 | number·of·32-bit·words·and·is·given·in·the·segment·corresponding·to·<code·class="inline">HLen</code>.·The |
| 164 | minimum·value·of·<code·class="inline">HLen</code>·is·5.·It·is·the·segment·corresponding·to·<code·class="inline">Opts</code>·that·is | 164 | minimum·value·of·<code·class="inline">HLen</code>·is·5.·It·is·the·segment·corresponding·to·<code·class="inline">Opts</code>·that·is |
| 165 | variable,·so·if·<code·class="inline">HLen</code>·is·equal·to·5,·<code·class="inline">Opts</code>·becomes·an·empty·binary.</p><p>The·tail·variables·<code·class="inline">RestDgram</code>·and·<code·class="inline">Data</code>·bind·to·binaries,·as·all·tail | 165 | variable,·so·if·<code·class="inline">HLen</code>·is·equal·to·5,·<code·class="inline">Opts</code>·becomes·an·empty·binary.</p><p>The·tail·variables·<code·class="inline">RestDgram</code>·and·<code·class="inline">Data</code>·bind·to·binaries,·as·all·tail |
| Offset 218, 80 lines modified | Offset 218, 80 lines modified | ||
| 218 | <p>This·section·describes·the·rules·for·constructing·binaries·using·the·bit·syntax. | 218 | <p>This·section·describes·the·rules·for·constructing·binaries·using·the·bit·syntax. |
| 219 | Unlike·when·constructing·lists·or·tuples,·the·construction·of·a·binary·can·fail | 219 | Unlike·when·constructing·lists·or·tuples,·the·construction·of·a·binary·can·fail |
| 220 | with·a·<code·class="inline">badarg</code>·exception.</p><p>There·can·be·zero·or·more·segments·in·a·binary·to·be·constructed.·The·expression | 220 | with·a·<code·class="inline">badarg</code>·exception.</p><p>There·can·be·zero·or·more·segments·in·a·binary·to·be·constructed.·The·expression |
| 221 | <code·class="inline"><<>></code>·constructs·a·zero·length·binary.</p><p>Each·segment·in·a·binary·can·consist·of·zero·or·more·bits.·There·are·no | 221 | <code·class="inline"><<>></code>·constructs·a·zero·length·binary.</p><p>Each·segment·in·a·binary·can·consist·of·zero·or·more·bits.·There·are·no |
| 222 | alignment·rules·for·individual·segments·of·type·<code·class="inline">integer</code>·and·<code·class="inline">float</code>.·For | 222 | alignment·rules·for·individual·segments·of·type·<code·class="inline">integer</code>·and·<code·class="inline">float</code>.·For |
| 223 | binaries·and·bitstrings·without·size,·the·unit·specifies·the·alignment.·Since | 223 | binaries·and·bitstrings·without·size,·the·unit·specifies·the·alignment.·Since |
| 224 | the·default·alignment·for·the·<code·class="inline">binary</code>·type·is·8,·the·size·of·a·binary·segment | 224 | the·default·alignment·for·the·<code·class="inline">binary</code>·type·is·8,·the·size·of·a·binary·segment |
| 225 | must·be·a·multiple·of·8·bits,·that·is,·only·whole·bytes.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9 | 225 | must·be·a·multiple·of·8·bits,·that·is,·only·whole·bytes.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9238961683-1"><<</span><span·class="n">Bin</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="n">Bitstring</span><span·class="o">/</span><span·class="ss">bitstring</span><span·class="p"·data-group-id="9238[·...·truncated·by·diffoscope;·len:·6,·SHA:·e915c2d78c1aa4a003497f4dea44e70a28cf9f15171faef0e51134edb7658c05·...·]-1">>></span></code></pre><p>The·variable·<code·class="inline">Bin</code>·must·contain·a·whole·number·of·bytes,·because·the·<code·class="inline">binary</code> |
| 226 | type·defaults·to·<code·class="inline">unit:8</code>.·A·<code·class="inline">badarg</code>·exception·is·generated·if·<code·class="inline">Bin</code>·consist | 226 | type·defaults·to·<code·class="inline">unit:8</code>.·A·<code·class="inline">badarg</code>·exception·is·generated·if·<code·class="inline">Bin</code>·consist |
| 227 | of,·for·example,·17·bits.</p><p>The·<code·class="inline">Bitstring</code>·variable·can·consist·of·any·number·of·bits,·for·example,·0,·1, | 227 | of,·for·example,·17·bits.</p><p>The·<code·class="inline">Bitstring</code>·variable·can·consist·of·any·number·of·bits,·for·example,·0,·1, |
| 228 | 8,·11,·17,·42,·and·so·on.·This·is·because·the·default·<code·class="inline">unit</code>·for·bitstrings | 228 | 8,·11,·17,·42,·and·so·on.·This·is·because·the·default·<code·class="inline">unit</code>·for·bitstrings |
| 229 | is·1.</p><p>For·clarity,·it·is·recommended·not·to·change·the·unit·size·for·binaries. | 229 | is·1.</p><p>For·clarity,·it·is·recommended·not·to·change·the·unit·size·for·binaries. |
| 230 | Instead,·use·<code·class="inline">binary</code>·when·you·need·byte·alignment·and·<code·class="inline">bitstring</code>·when·you·need | 230 | Instead,·use·<code·class="inline">binary</code>·when·you·need·byte·alignment·and·<code·class="inline">bitstring</code>·when·you·need |
| 231 | bit·alignment.</p><p>The·following·example·successfully·constructs·a·bitstring·of·7·bits,·provided | 231 | bit·alignment.</p><p>The·following·example·successfully·constructs·a·bitstring·of·7·bits,·provided |
| 232 | that·all·of·X·and·Y·are·integers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 232 | that·all·of·X·and·Y·are·integers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9926879438-1"><<</span><span·class="n">X</span><span·class="p">:</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">Y</span><span·class="p">:</span><span·class="mi">6</span><span·class="p"·data-group-id="9926879438-1">>></span></code></pre><p>As·mentioned·earlier,·segments·have·the·following·general·syntax:</p><p><code·class="inline">Value:Size/TypeSpecifierList</code></p><p>When·constructing·binaries,·<code·class="inline">Value</code>·and·<code·class="inline">Size</code>·can·be·any·Erlang·expression. |
| 233 | However,·for·syntactical·reasons,·both·<code·class="inline">Value</code>·and·<code·class="inline">Size</code>·must·be·enclosed·in | 233 | However,·for·syntactical·reasons,·both·<code·class="inline">Value</code>·and·<code·class="inline">Size</code>·must·be·enclosed·in |
| 234 | parenthesis·if·the·expression·consists·of·anything·more·than·a·single·literal·or | 234 | parenthesis·if·the·expression·consists·of·anything·more·than·a·single·literal·or |
| 235 | a·variable.·The·following·gives·a·compiler·syntax·error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 235 | a·variable.·The·following·gives·a·compiler·syntax·error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2191018917-1"><<</span><span·class="n">X</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">8</span><span·class="p"·data-group-id="2191018917-1">>></span></code></pre><p>This·expression·must·be·rewritten·into·the·following,·to·be·accepted·by·the |
| 236 | compiler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 236 | compiler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8678753081-1"><<</span><span·class="p"·data-group-id="8678753081-2">(</span><span·class="n">X</span><span·class="o">+</span><span·class="mi">1</span><span·class="p"·data-group-id="8678753081-2">)</span><span·class="p">:</span><span·class="mi">8</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·ab6affbdc10cd7ecc2be200c3d9d39026dbb6bf54b9652a4de6c362f59dc70b8·...·]-1">>></span></code></pre><h3·id="including-literal-strings"·class="section-heading"> |
| 237 | ··<a·href="#including-literal-strings"·class="hover-link"> | 237 | ··<a·href="#including-literal-strings"·class="hover-link"> |
| 238 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 238 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 239 | ··</a> | 239 | ··</a> |
| 240 | ··<span·class="text">Including·Literal·Strings</span> | 240 | ··<span·class="text">Including·Literal·Strings</span> |
| 241 | </h3> | 241 | </h3> |
| 242 | <p>A·literal·string·can·be·written·instead·of·an·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 242 | <p>A·literal·string·can·be·written·instead·of·an·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6674227382-1"><<</span><span·class="s">"hello"</span><span·class="p"·data-group-id="6674227382-1">>></span></code></pre><p>This·is·syntactic·sugar·for·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·d[·...·truncated·by·diffoscope;·len:·310,·SHA:·8ecb8c9130c4306f518210c558376bb01c937d4a3b35801f0e00c3e02b5ec0b1·...·]-1">>></span></code></pre><h2·id="matching-binaries"·class="section-heading"> |
| 243 | ··<a·href="#matching-binaries"·class="hover-link"> | 243 | ··<a·href="#matching-binaries"·class="hover-link"> |
| 244 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 244 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 245 | ··</a> | 245 | ··</a> |
| 246 | ··<span·class="text">Matching·Binaries</span> | 246 | ··<span·class="text">Matching·Binaries</span> |
| 247 | </h2> | 247 | </h2> |
| 248 | <p>This·section·describes·the·rules·for·matching·binaries,·using·the·bit·syntax.</p><p>There·can·be·zero·or·more·segments·in·a·binary·pattern.·A·binary·pattern·can | 248 | <p>This·section·describes·the·rules·for·matching·binaries,·using·the·bit·syntax.</p><p>There·can·be·zero·or·more·segments·in·a·binary·pattern.·A·binary·pattern·can |
| 249 | occur·wherever·patterns·are·allowed,·including·inside·other·patterns.·Binary | 249 | occur·wherever·patterns·are·allowed,·including·inside·other·patterns.·Binary |
| 250 | patterns·cannot·be·nested.·The·pattern·<code·class="inline"><<>></code>·matches·a·zero·length·binary.</p><p>Each·segment·in·a·binary·can·consist·of·zero·or·more·bits.·A·segment·of·type | 250 | patterns·cannot·be·nested.·The·pattern·<code·class="inline"><<>></code>·matches·a·zero·length·binary.</p><p>Each·segment·in·a·binary·can·consist·of·zero·or·more·bits.·A·segment·of·type |
| 251 | <code·class="inline">binary</code>·must·have·a·size·evenly·divisible·by·8·(or·divisible·by·the·unit·size, | 251 | <code·class="inline">binary</code>·must·have·a·size·evenly·divisible·by·8·(or·divisible·by·the·unit·size, |
| 252 | if·the·unit·size·has·been·changed).·A·segment·of·type·<code·class="inline">bitstring</code>·has·no | 252 | if·the·unit·size·has·been·changed).·A·segment·of·type·<code·class="inline">bitstring</code>·has·no |
| 253 | restrictions·on·the·size.·A·segment·of·type·<code·class="inline">float</code>·must·have·size·64·or·32.</p><p>As·mentioned·earlier,·segments·have·the·following·general·syntax:</p><p><code·class="inline">Value:Size/TypeSpecifierList</code></p><p>When·matching·<code·class="inline">Value</code>,·value·must·be·either·a·variable·or·an·integer,·or·a | 253 | restrictions·on·the·size.·A·segment·of·type·<code·class="inline">float</code>·must·have·size·64·or·32.</p><p>As·mentioned·earlier,·segments·have·the·following·general·syntax:</p><p><code·class="inline">Value:Size/TypeSpecifierList</code></p><p>When·matching·<code·class="inline">Value</code>,·value·must·be·either·a·variable·or·an·integer,·or·a |
| 254 | floating·point·literal.·Expressions·are·not·allowed.</p><p><code·class="inline">Size</code>·must·be·a | 254 | floating·point·literal.·Expressions·are·not·allowed.</p><p><code·class="inline">Size</code>·must·be·a |
| 255 | <a·href="../../doc/system/expressions.html#guard-expressions">guard·expression</a>,·which·can·use | 255 | <a·href="../../doc/system/expressions.html#guard-expressions">guard·expression</a>,·which·can·use |
| 256 | literals·and·previously·bound·variables.·The·following·is·not·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 256 | literals·and·previously·bound·variables.·The·following·is·not·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="7828336016-1">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7828336016-2"><<</span><span·class="n">X</span><span·class="p">:</span><span·class="n">N</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·173,·SHA:·493f863ff8a7f269f328021a77a3a70988320b17dbbaf3a9922343d2352f2b80·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 257 | ···</span><span·class="p"·data-group-id=" | 257 | ···</span><span·class="p"·data-group-id="7828336016-3">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">T</span><span·class="p"·data-group-id="7828336016-3">}</span><span·class="p">.</span></code></pre><p>The·two·occurrences·of·<code·class="inline">N</code>·are·not·related.·The·compiler·will·complain·that·the |
| 258 | <code·class="inline">N</code>·in·the·size·field·is·unbound.</p><p>The·correct·way·to·write·this·example·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 258 | <code·class="inline">N</code>·in·the·size·field·is·unbound.</p><p>The·correct·way·to·write·this·example·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="1200824692-1">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p"·data-group-id="1200824692-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 259 | ···</span><span·class="p"·data-group-id=" | 259 | ···</span><span·class="p"·data-group-id="1200824692-2"><<</span><span·class="n">X</span><span·class="p">:</span><span·class="n">N</span><span·class="p">,</span><span·class="n">T</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p"·data-group-id="1200824692-2">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p">,</span><span·class="w"> |
| 260 | ···</span><span·class="p"·data-group-id=" | 260 | ···</span><span·class="p"·data-group-id="1200824692-3">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">T</span><span·class="p"·data-group-id="1200824692-3">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Before·OTP·23,·<code·class="inline">Size</code>·was·restricted·to·be·an·integer·or·a·variable·bound·to |
| 261 | an·integer.</p></section><h3·id="binding-and-using-a-size-variable"·class="section-heading"> | 261 | an·integer.</p></section><h3·id="binding-and-using-a-size-variable"·class="section-heading"> |
| 262 | ··<a·href="#binding-and-using-a-size-variable"·class="hover-link"> | 262 | ··<a·href="#binding-and-using-a-size-variable"·class="hover-link"> |
| 263 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 263 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 264 | ··</a> | 264 | ··</a> |
| 265 | ··<span·class="text">Binding·and·Using·a·Size·Variable</span> | 265 | ··<span·class="text">Binding·and·Using·a·Size·Variable</span> |
| 266 | </h3> | 266 | </h3> |
| 267 | <p>There·is·one·exception·to·the·rule·that·a·variable·that·is·used·as·size·must·be | 267 | <p>There·is·one·exception·to·the·rule·that·a·variable·that·is·used·as·size·must·be |
| 268 | previously·bound.·It·is·possible·to·match·and·bind·a·variable,·and·use·it·as·a | 268 | previously·bound.·It·is·possible·to·match·and·bind·a·variable,·and·use·it·as·a |
| 269 | size·within·the·same·binary·pattern.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bar</span><span·class="p"·data-group-id=" | 269 | size·within·the·same·binary·pattern.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bar</span><span·class="p"·data-group-id="8038180619-1">(</span><span·class="p"·data-group-id="8038180619-2"><<</span><span·class="n">Sz</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="n">Payload</span><span·class="p">:</span><span·class="n">Sz</sp[·...·truncated·by·diffoscope;·len:·364,·SHA:·bebd19f63fc9fe0ff93c75ea34d354a10a996cd3ed6eb867a7dc753163bb57a8·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 270 | ···</span><span·class="p"·data-group-id=" | 270 | ···</span><span·class="p"·data-group-id="8038180619-3">{</span><span·class="n">Payload</span><span·class="p">,</span><span·class="n">Rest</span><span·class="p"·data-group-id="8038180619-3">}</span><span·class="p">.</span></code></pre><p>Here·<code·class="inline">Sz</code>·is·bound·to·the·value·in·the·first·byte·of·the·binary.·<code·class="inline">Sz</code>·is·then |
| 271 | used·at·the·number·of·bytes·to·match·out·as·a·binary.</p><p>Starting·in·OTP·23,·the·size·can·be·a·guard·expression:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bar</span><span·class="p"·data-group-id=" | 271 | used·at·the·number·of·bytes·to·match·out·as·a·binary.</p><p>Starting·in·OTP·23,·the·size·can·be·a·guard·expression:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bar</span><span·class="p"·data-group-id="6886863068-1">(</span><span·class="p"·data-group-id="6886863068-2"><<</span><span·class="n">Sz</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="n">Payload</span><span·class="p">:</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·573,·SHA:·e321616a5b33cc05144b70fc18e4f9233154ce0790f069bbf82531d5bdb8f727·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 272 | ···</span><span·class="p"·data-group-id=" | 272 | ···</span><span·class="p"·data-group-id="6886863068-5">{</span><span·class="n">Payload</span><span·class="p">,</span><span·class="n">Rest</span><span·class="p"·data-group-id="6886863068-5">}</span><span·class="p">.</span></code></pre><p>Here·<code·class="inline">Sz</code>·is·the·combined·size·of·the·header·and·the·payload,·so·we·will·need·to |
| 273 | subtract·one·byte·to·get·the·size·of·the·payload.</p><h3·id="getting-the-rest-of-the-binary-or-bitstring"·class="section-heading"> | 273 | subtract·one·byte·to·get·the·size·of·the·payload.</p><h3·id="getting-the-rest-of-the-binary-or-bitstring"·class="section-heading"> |
| 274 | ··<a·href="#getting-the-rest-of-the-binary-or-bitstring"·class="hover-link"> | 274 | ··<a·href="#getting-the-rest-of-the-binary-or-bitstring"·class="hover-link"> |
| 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 276 | ··</a> | 276 | ··</a> |
| 277 | ··<span·class="text">Getting·the·Rest·of·the·Binary·or·Bitstring</span> | 277 | ··<span·class="text">Getting·the·Rest·of·the·Binary·or·Bitstring</span> |
| 278 | </h3> | 278 | </h3> |
| 279 | <p>To·match·out·the·rest·of·a·binary,·specify·a·binary·field·without·size:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 279 | <p>To·match·out·the·rest·of·a·binary,·specify·a·binary·field·without·size:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="0201645385-1">(</span><span·class="p"·data-group-id="0201645385-2"><<</span><span·class="n">A</span><span·class="p">:</span><span·class="mi">8</span><span·class="p">,</span><span·class="n">Rest</span><span·class="o">/</span><span·class="ss">binary</s[·...·truncated·by·diffoscope;·len:·784,·SHA:·dc6170fb81c683b50f916674c6a656f74f0bcb7cecdc58ec4571c25572e98d0e·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span></code></pre><p>There·are·no·restrictions·on·the·number·of·bits·in·the·tail.</p><h2·id="appending-to-a-binary"·class="section-heading"> |
| 280 | ··<a·href="#appending-to-a-binary"·class="hover-link"> | 280 | ··<a·href="#appending-to-a-binary"·class="hover-link"> |
| 281 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 281 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 282 | ··</a> | 282 | ··</a> |
| 283 | ··<span·class="text">Appending·to·a·Binary</span> | 283 | ··<span·class="text">Appending·to·a·Binary</span> |
| 284 | </h2> | 284 | </h2> |
| 285 | <p>Appending·to·a·binary·in·an·efficient·way·can·be·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id=" | 285 | <p>Appending·to·a·binary·in·an·efficient·way·can·be·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id="7689466840-1">(</span><span·class="n">T</span><span·class="p"·data-group-id="7689466840-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 286 | ····</span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id=" | 286 | ····</span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id="7689466840-2">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7689466840-3"><<</span><span·class="p"·data-group-id="7689466840-3">>></span><span·class="p"·data-group-id="7689466840-2">)</span><span·class="p">.</span><span·class="w"> |
| 287 | </span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id=" | 287 | </span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id="7689466840-4">(</span><span·class="p"·data-group-id="7689466840-5">[</span><span·class="p"·data-group-id="7689466840-6">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">Y</span><span·class="p">,</span><span·class="n">Z</span><span·cl[·...·truncated·by·diffoscope;·len:·309,·SHA:·be6d470f481783cad42e2582e6b3de824e862717ad68024abb1e315b76a6afd4·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 288 | ····</span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id=" | 288 | ····</span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id="7689466840-7">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7689466840-8"><<</span><span·class="n">Acc</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·373,·SHA:·eded725e2908dbce500fc1bde1d6fb340a6668b296367e29ade22926a156901e·...·]-7">)</span><span·class="p">;</span><span·class="w"> |
| 289 | </span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id=" | 289 | </span><span·class="nf">triples_to_bin</span><span·class="p"·data-group-id="7689466840-9">(</span><span·class="p"·data-group-id="7689466840-10">[</span><span·class="p"·data-group-id="7689466840-10">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="7689466840-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 290 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre> | 290 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre> |
| 291 | </div> | 291 | </div> |
| 292 | <div·class="bottom-actions"·id="bottom-actions"> | 292 | <div·class="bottom-actions"·id="bottom-actions"> |
| 293 | ··<div·class="bottom-actions-item"> | 293 | ··<div·class="bottom-actions-item"> |
| Max diff block lines reached; 783/49897 bytes (1.57%) of diff not shown. | |||
| Offset 148, 101 lines modified | Offset 148, 101 lines modified | ||
| 148 | external·program,·if·it·is·written·properly).</p><p>The·port·is·created·using·the·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>·with | 148 | external·program,·if·it·is·written·properly).</p><p>The·port·is·created·using·the·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>·with |
| 149 | <code·class="inline">{spawn,ExtPrg}</code>·as·the·first·argument.·The·string·<code·class="inline">ExtPrg</code>·is·the·name·of·the | 149 | <code·class="inline">{spawn,ExtPrg}</code>·as·the·first·argument.·The·string·<code·class="inline">ExtPrg</code>·is·the·name·of·the |
| 150 | external·program,·including·any·command·line·arguments.·The·second·argument·is·a | 150 | external·program,·including·any·command·line·arguments.·The·second·argument·is·a |
| 151 | list·of·options,·in·this·case·only·<code·class="inline">{packet,2}</code>.·This·option·says·that·a·2·byte | 151 | list·of·options,·in·this·case·only·<code·class="inline">{packet,2}</code>.·This·option·says·that·a·2·byte |
| 152 | length·indicator·is·to·be·used·to·simplify·the·communication·between·C·and | 152 | length·indicator·is·to·be·used·to·simplify·the·communication·between·C·and |
| 153 | Erlang.·The·Erlang·port·automatically·adds·the·length·indicator,·but·this·must | 153 | Erlang.·The·Erlang·port·automatically·adds·the·length·indicator,·but·this·must |
| 154 | be·done·explicitly·in·the·external·C·program.</p><p>The·process·is·also·set·to·trap·exits,·which·enables·detection·of·failure·of·the | 154 | be·done·explicitly·in·the·external·C·program.</p><p>The·process·is·also·set·to·trap·exits,·which·enables·detection·of·failure·of·the |
| 155 | external·program:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 155 | external·program:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8419850039-1">(</span><span·class="ss">complex1</span><span·class="p"·data-group-id="8419850039-1">)</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8419850039-2">(</span><span·class="p"·data-group-id="8419850039-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·33b8ac86a8f9128d175dce81281a751c8d64adba49c289365ab55ed629ffc710·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">start</span><span·class="p"·data-group-id="8419850039-4">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="8419850039-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ··</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 158 | ··</span><span·class="nf">spawn</span><span·class="p"·data-group-id="8419850039-5">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8419850039-6">[</span><spa[·...·truncated·by·diffoscope;·len:·119,·SHA:·2f2e2fe9946653b0c7c3581c9f2a81c323a5bc54ca507adc2b7c0405cbfaa5cb·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">init</span><span·class="p"·data-group-id="8419850039-7">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="8419850039-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ··</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 160 | ··</span><span·class="nf">register</span><span·class="p"·data-group-id="8419850039-8">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="8419850039-9">(</span><span·class="p"·data-group-id="8419850039-9">)</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·5a3aae6a26ab1c0540f49ce043f3506243c05e5910b548da33b62053def68270·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 161 | ··</span><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 161 | ··</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="8419850039-10">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="8419850039-10">)</span><span·class="p">,</span><span·class="w"> |
| 162 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 162 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="8419850039-11">(</span><span·class="p"·data-group-id="8419850039-12">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="8419850039-12">}</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·389,·SHA:·1f54e467a2bfca9de2b9d52326255ba2713d4e4a637ec3333e4c99d661c33e8e·...·]-11">)</span><span·class="p">,</span><span·class="w"> |
| 163 | ··</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 163 | ··</span><span·class="nf">loop</span><span·class="p"·data-group-id="8419850039-15">(</span><span·class="n">Port</span><span·class="p"·data-group-id="8419850039-15">)</span><span·class="p">.</span></code></pre><p>Now·<code·class="inline">complex1:foo/1</code>·and·<code·class="inline">complex1:bar/1</code>·can·be·implemented.·Both·send·a |
| 164 | message·to·the·<code·class="inline">complex</code>·process·and·receive·the·following·replies:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 164 | message·to·the·<code·class="inline">complex</code>·process·and·receive·the·following·replies:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="9505933832-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="9505933832-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 165 | ··</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 165 | ··</span><span·class="nf">call_port</span><span·class="p"·data-group-id="9505933832-2">(</span><span·class="p"·data-group-id="9505933832-3">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="9505933832-3">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·b272045da8de90d2974330e67e68a3d37299b913fab5c3c28d1e894788f1cb15·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 166 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="9505933832-4">(</span><span·class="n">Y</span><span·class="p"·data-group-id="9505933832-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 167 | ··</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 167 | ··</span><span·class="nf">call_port</span><span·class="p"·data-group-id="9505933832-5">(</span><span·class="p"·data-group-id="9505933832-6">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="9505933832-6">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·b272045da8de90d2974330e67e68a3d37299b913fab5c3c28d1e894788f1cb15·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 168 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="9505933832-7">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="9505933832-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ··</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 169 | ··</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9505933832-8">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9505933832-9">(</span><span·class="p"·data-group-id="9505933832-9">)</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·91,·SHA:·94d62fdb336a889978274462b1396c5fd7ebd4709762c9159926f04b5f22120f·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 170 | ··</span><span·class="k">receive</span><span·class="w"> | 170 | ··</span><span·class="k">receive</span><span·class="w"> |
| 171 | ····</span><span·class="p"·data-group-id=" | 171 | ····</span><span·class="p"·data-group-id="9505933832-10">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="9505933832-10">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ······</span><span·class="n">Result</span><span·class="w"> | 172 | ······</span><span·class="n">Result</span><span·class="w"> |
| 173 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">complex</code>·process·does·the·following:</p><ul><li>Encodes·the·message·into·a·sequence·of·bytes.</li><li>Sends·it·to·the·port.</li><li>Waits·for·a·reply.</li><li>Decodes·the·reply.</li><li>Sends·it·back·to·the·caller:</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="9 | 173 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">complex</code>·process·does·the·following:</p><ul><li>Encodes·the·message·into·a·sequence·of·bytes.</li><li>Sends·it·to·the·port.</li><li>Waits·for·a·reply.</li><li>Decodes·the·reply.</li><li>Sends·it·back·to·the·caller:</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="9080577721-1">(</span><span·class="n">Port</span><span·class="p"·data-group-id="9080577721-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ··</span><span·class="k">receive</span><span·class="w"> | 174 | ··</span><span·class="k">receive</span><span·class="w"> |
| 175 | ····</span><span·class="p"·data-group-id="9 | 175 | ····</span><span·class="p"·data-group-id="9080577721-2">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9080577721-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ······</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 176 | ······</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9080577721-3">{</span><span·class="nf">self</span><span·class="p"·data-group-id="9080577721-4">(</span><span·class="p"·data-group-id="9080577721-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9080577721-5">{</span>[·...·truncated·by·diffoscope;·len:·335,·SHA:·d029af9dac6e502b05936075bcbdb576635a612cab714b10da9f3242086ad500·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 177 | ······</span><span·class="k">receive</span><span·class="w"> | 177 | ······</span><span·class="k">receive</span><span·class="w"> |
| 178 | ········</span><span·class="p"·data-group-id="9 | 178 | ········</span><span·class="p"·data-group-id="9080577721-7">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9080577721-8">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·e5cd25b1af7c92ae2296a2f174d5a191c8a15269a9af2744abaa4126adc07d6d·...·]-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ··········</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 179 | ··········</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9080577721-9">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="9080577721-10">(</span><span·class="n">Data</span><span·class="p"·data-group-id="9080577721-10"[·...·truncated·by·diffoscope;·len:·50,·SHA:·e53cf6609a6ff9b7ce6cd25dddf2314b47572f0b6d9077b3044ca38414e10b09·...·]-9">}</span><span·class="w"> |
| 180 | ······</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 180 | ······</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 181 | ······</span><span·class="nf">loop</span><span·class="p"·data-group-id="9 | 181 | ······</span><span·class="nf">loop</span><span·class="p"·data-group-id="9080577721-11">(</span><span·class="n">Port</span><span·class="p"·data-group-id="9080577721-11">)</span><span·class="w"> |
| 182 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Assuming·that·both·the·arguments·and·the·results·from·the·C·functions·are·less | 182 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Assuming·that·both·the·arguments·and·the·results·from·the·C·functions·are·less |
| 183 | than·256,·a·simple·encoding/decoding·scheme·is·employed.·In·this·scheme,·<code·class="inline">foo</code> | 183 | than·256,·a·simple·encoding/decoding·scheme·is·employed.·In·this·scheme,·<code·class="inline">foo</code> |
| 184 | is·represented·by·byte·1,·<code·class="inline">bar</code>·is·represented·by·2,·and·the·argument/result·is | 184 | is·represented·by·byte·1,·<code·class="inline">bar</code>·is·represented·by·2,·and·the·argument/result·is |
| 185 | represented·by·a·single·byte·as·well:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">encode</span><span·class="p"·data-group-id="4 | 185 | represented·by·a·single·byte·as·well:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">encode</span><span·class="p"·data-group-id="4578306166-1">(</span><span·class="p"·data-group-id="4578306166-2">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="4578306166-2">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·290,·SHA:·b8e67fdcf7cbc981f91c81b3ce50f2a06608727446e4337b056ab5036da5b972·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 186 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="4 | 186 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="4578306166-4">(</span><span·class="p"·data-group-id="4578306166-5">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="4578306166-5">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·290,·SHA:·8fe9a549ce9f800c18fd661a1658fec3e5af3706f29a7971df24be30388924a7·...·]-6">]</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="4 | 187 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="4578306166-7">(</span><span·class="p"·data-group-id="4578306166-8">[</span><span·class="n">Int</span><span·class="p"·data-group-id="4578306166-8">]</span><span·class="p"·data-group-id="4578306166-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">.</span></code></pre><p>The·resulting·Erlang·program,·including·functionality·for·stopping·the·port·and |
| 188 | detecting·port·failures,·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 188 | detecting·port·failures,·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5966787037-1">(</span><span·class="ss">complex1</span><span·class="p"·data-group-id="5966787037-1">)</span><span·class="p">.</span><span·class="w"> |
| 189 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 189 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5966787037-2">(</span><span·class="p"·data-group-id="5966787037-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·241,·SHA:·d4afd11e7391cbac390f99c9f20c4f0e09778e8d3f870a1c3d8ab0c4c8cb476a·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 190 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 190 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5966787037-4">(</span><span·class="p"·data-group-id="5966787037-5">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·1a3f288f8c93fda81c4c848b7c6938aabbbd3227490c42aba6f4aeea7f1025ee·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 191 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 191 | </span><span·class="nf">start</span><span·class="p"·data-group-id="5966787037-6">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="5966787037-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 192 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="5966787037-7">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-8">[</span><spa[·...·truncated·by·diffoscope;·len:·119,·SHA:·1e04fc24152c9565e8cca1e988c1e3dfb8d2f67d24b3746e069e93514b0acd20·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 193 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5966787037-9">(</span><span·class="p"·data-group-id="5966787037-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> | 194 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 195 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="5966787037-10">(</span><span·class="n">X</span><span·class="p"·data-group-id="5966787037-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 196 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 196 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="5966787037-11">(</span><span·class="p"·data-group-id="5966787037-12">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="5966787037-12">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·218badde66f4dd39839ee877305bda1de01d592e21a501e49e8ef113df175cb9·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 197 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="5966787037-13">(</span><span·class="n">Y</span><span·class="p"·data-group-id="5966787037-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 198 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 198 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="5966787037-14">(</span><span·class="p"·data-group-id="5966787037-15">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="5966787037-15">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·218badde66f4dd39839ee877305bda1de01d592e21a501e49e8ef113df175cb9·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 199 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="5966787037-16">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="5966787037-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 200 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-17">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="5966787037-18">(</span><span·class="p"·data-group-id="5966787037-18">)</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·94,·SHA:·1b121c18ae551410888764d7f4af77061f1e65861989a56b22538086e6aa6123·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 201 | ····</span><span·class="k">receive</span><span·class="w"> | 201 | ····</span><span·class="k">receive</span><span·class="w"> |
| 202 | » </span><span·class="p"·data-group-id=" | 202 | » </span><span·class="p"·data-group-id="5966787037-19">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="5966787037-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 203 | » ····</span><span·class="n">Result</span><span·class="w"> | 203 | » ····</span><span·class="n">Result</span><span·class="w"> |
| 204 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 204 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 205 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5966787037-20">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="5966787037-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 206 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="5966787037-21">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="5966787037-22">(</span><span·class="p"·data-group-id="5966787037-22">)</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·a8bccb64fbccddb84d8172af3fd7fd29db02fb311433ad818ceca767b11dfa85·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 207 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 207 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="5966787037-23">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="5966787037-23">)</span><span·class="p">,</span><span·class="w"> |
| 208 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 208 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="5966787037-24">(</span><span·class="p"·data-group-id="5966787037-25">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="5966787037-25">}</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·389,·SHA:·49dba951eb81e0e37c471ff738d14492020a60f43190c8452230f5753b3b8fe6·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 209 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 209 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="5966787037-28">(</span><span·class="n">Port</span><span·class="p"·data-group-id="5966787037-28">)</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 210 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="5966787037-29">(</span><span·class="n">Port</span><span·class="p"·data-group-id="5966787037-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="k">receive</span><span·class="w"> | 211 | ····</span><span·class="k">receive</span><span·class="w"> |
| 212 | » </span><span·class="p"·data-group-id=" | 212 | » </span><span·class="p"·data-group-id="5966787037-30">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="5966787037-30">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 213 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-31">{</span><span·class="nf">self</span><span·class="p"·data-group-id="5966787037-32">(</span><span·class="p"·data-group-id="5966787037-32">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-33">{</[·...·truncated·by·diffoscope;·len:·343,·SHA:·36a169c8821b636d7d688e44d8fa8f469dbbc083d5bcd03d648b2909676f6fff·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 214 | » ····</span><span·class="k">receive</span><span·class="w"> | 214 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 215 | » » </span><span·class="p"·data-group-id=" | 215 | » » </span><span·class="p"·data-group-id="5966787037-35">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-36">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><[·...·truncated·by·diffoscope;·len:·94,·SHA:·81983558fa88f21828bb2e8e5f3136568c50617e4d9ed44f26daaa66e2dba3c1·...·]-35">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 216 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-37">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="5966787037-38">(</span><span·class="n">Data</span><span·class="p"·data-group-id="5966787037-3[·...·truncated·by·diffoscope;·len:·52,·SHA:·df77ba31715a78e420765c405d6459fb31c0adc600556ac465c2ca0554f229e2·...·]-37">}</span><span·class="w"> |
| 217 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 217 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 218 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 218 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="5966787037-39">(</span><span·class="n">Port</span><span·class="p"·data-group-id="5966787037-39">)</span><span·class="p">;</span><span·class="w"> |
| 219 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 219 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 220 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="5966787037-40">{</span><span·class="nf">self</span><span·class="p"·data-group-id="5966787037-41">(</span><span·class="p"·data-group-id="5966787037-41">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">close</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·a22bf786946efcbdde4eff2acb6c01918c6d5a9b6013bcdf436f85c1cd4e2c85·...·]-40">}</span><span·class="p">,</span><span·class="w"> |
| 221 | » ····</span><span·class="k">receive</span><span·class="w"> | 221 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 222 | » » </span><span·class="p"·data-group-id=" | 222 | » » </span><span·class="p"·data-group-id="5966787037-42">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">closed</span><span·class="p"·data-group-id="5966787037-42">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 223 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="5966787037-43">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="5966787037-43">)</span><span·class="w"> |
| 224 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 224 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 225 | » </span><span·class="p"·data-group-id=" | 225 | » </span><span·class="p"·data-group-id="5966787037-44">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="5966787037-44">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 226 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 226 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="5966787037-45">(</span><span·class="ss">port_terminated</span><span·class="p"·data-group-id="5966787037-45">)</span><span·class="w"> |
| 227 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 227 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 228 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="5966787037-46">(</span><span·class="p"·data-group-id="5966787037-47">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="5966787037-47">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·296,·SHA:·ab713918986b9a2f4a71505679dc23bab0ecd2a7541c3308ba7b2f00c655b1d7·...·]-48">]</span><span·class="p">;</span><span·class="w"> |
| 229 | </span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 229 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="5966787037-49">(</span><span·class="p"·data-group-id="5966787037-50">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="5966787037-50">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·296,·SHA:·38a98bf72bac71ce79d48abae19fb672ba240e8d3d2b9ed58d8aa2c234afcb76·...·]-51">]</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 230 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="5966787037-52">(</span><span·class="p"·data-group-id="5966787037-53">[</span><span·class="n">Int</span><span·class="p"·data-group-id="5966787037-53">]</span><span·class="p"·data-group-id="5966787037-52">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">.</span></code></pre><h2·id="c-program"·class="section-heading"> |
| 231 | ··<a·href="#c-program"·class="hover-link"> | 231 | ··<a·href="#c-program"·class="hover-link"> |
| 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 233 | ··</a> | 233 | ··</a> |
| 234 | ··<span·class="text">C·Program</span> | 234 | ··<span·class="text">C·Program</span> |
| 235 | </h2> | 235 | </h2> |
| 236 | <p>On·the·C·side,·it·is·necessary·to·write·functions·for·receiving·and·sending·data | 236 | <p>On·the·C·side,·it·is·necessary·to·write·functions·for·receiving·and·sending·data |
| 237 | with·2·byte·length·indicators·from/to·Erlang.·By·default,·the·C·program·is·to | 237 | with·2·byte·length·indicators·from/to·Erlang.·By·default,·the·C·program·is·to |
| Offset 333, 25 lines modified | Offset 333, 25 lines modified | ||
| 333 | and·terminates.</p><h2·id="running-the-example"·class="section-heading"> | 333 | and·terminates.</p><h2·id="running-the-example"·class="section-heading"> |
| 334 | ··<a·href="#running-the-example"·class="hover-link"> | 334 | ··<a·href="#running-the-example"·class="hover-link"> |
| 335 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 335 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 336 | ··</a> | 336 | ··</a> |
| 337 | ··<span·class="text">Running·the·Example</span> | 337 | ··<span·class="text">Running·the·Example</span> |
| 338 | </h2> | 338 | </h2> |
| 339 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">$·gcc·-o·extprg·complex.c·erl_comm.c·port.c</code></pre><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> | 339 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">$·gcc·-o·extprg·complex.c·erl_comm.c·port.c</code></pre><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> |
| 340 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id=" | 340 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id="9535869746-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">14.2</span><span·class="p"·data-group-id="9535869746-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="9535869746-2">[</span><span·class="ss">source<[·...·truncated·by·diffoscope;·len:·1283,·SHA:·d867c742bd702a68d66c78e56f0ce8cf402f1f9c2a3f895fce58c0dddbe4b34d·...·]-7">]</span><span·class="w"> |
| 341 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 341 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">·</span><span·class="p"·data-group-id="9535869746-8">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·1d3e55f359b3ed6be6564efe834d7670a77558ba72e40e0c306669399f68435c·...·]-8">)</span><span·class="gp·unselectable"> |
| 342 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 342 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="9535869746-10">(</span><span·class="ss">complex1</span><span·class="p"·data-group-id="9535869746-10">)</span><span·class="p">.</span><span·class="w"> |
| 343 | </span><span·class="p"·data-group-id=" | 343 | </span><span·class="p"·data-group-id="9535869746-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">complex1</span><span·class="p"·data-group-id="9535869746-11">}</span></code></pre><p><em>Step·3.</em>·Run·the·example:</p><pre><code·class="makeup·erlang"·translate="[·...·truncated·by·diffoscope;·len:·269,·SHA:·00a2aac62b018252158a16e47f781f8292f6674e5311c102658ba9815b3a6bde·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 344 | </span><span·class="o"><</span><span·class="mf">0.34</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 344 | </span><span·class="o"><</span><span·class="mf">0.34</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 345 | 3>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id="8 | 345 | 3>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id="8265371962-2">(</span><span·class="mi">3</span><span·class="p"·data-group-id="8265371962-2">)</span><span·class="p">.</span><span·class="w"> |
| 346 | </span><span·class="mi">4</span><span·class="gp·unselectable"> | 346 | </span><span·class="mi">4</span><span·class="gp·unselectable"> |
| 347 | 4>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="8 | 347 | 4>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="8265371962-3">(</span><span·class="mi">5</span><span·class="p"·data-group-id="8265371962-3">)</span><span·class="p">.</span><span·class="w"> |
| 348 | </span><span·class="mi">10</span><span·class="gp·unselectable"> | 348 | </span><span·class="mi">10</span><span·class="gp·unselectable"> |
| 349 | 5>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="8 | 349 | 5>·</span><span·class="nc">complex1</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="8265371962-4">(</span><span·class="p"·data-group-id="8265371962-4">)</span><span·class="p">.</span><span·class="w"> |
| 350 | </span><span·class="ss">stop</span></code></pre> | 350 | </span><span·class="ss">stop</span></code></pre> |
| 351 | </div> | 351 | </div> |
| 352 | <div·class="bottom-actions"·id="bottom-actions"> | 352 | <div·class="bottom-actions"·id="bottom-actions"> |
| 353 | ··<div·class="bottom-actions-item"> | 353 | ··<div·class="bottom-actions-item"> |
| 354 | ······<a·href="example.html"·class="bottom-actions-button"·rel="prev"> | 354 | ······<a·href="example.html"·class="bottom-actions-button"·rel="prev"> |
| Max diff block lines reached; 677/60703 bytes (1.12%) of diff not shown. | |||
| Offset 151, 112 lines modified | Offset 151, 112 lines modified | ||
| 151 | <p>Like·a·port·program,·the·port·communicates·with·an·Erlang·process.·All | 151 | <p>Like·a·port·program,·the·port·communicates·with·an·Erlang·process.·All |
| 152 | communication·goes·through·one·Erlang·process·that·is·the·<em>connected·process</em>·of | 152 | communication·goes·through·one·Erlang·process·that·is·the·<em>connected·process</em>·of |
| 153 | the·port·driver.·Terminating·this·process·closes·the·port·driver.</p><p>Before·the·port·is·created,·the·driver·must·be·loaded.·This·is·done·with·the | 153 | the·port·driver.·Terminating·this·process·closes·the·port·driver.</p><p>Before·the·port·is·created,·the·driver·must·be·loaded.·This·is·done·with·the |
| 154 | function·<a·href="../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html#load_driver/2"><code·class="inline">erl_ddll:load_driver/2</code></a>,·with·the·name·of·the·shared·library·as | 154 | function·<a·href="../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html#load_driver/2"><code·class="inline">erl_ddll:load_driver/2</code></a>,·with·the·name·of·the·shared·library·as |
| 155 | argument.</p><p>The·port·is·then·created·using·the·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>,·with·the | 155 | argument.</p><p>The·port·is·then·created·using·the·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>,·with·the |
| 156 | tuple·<code·class="inline">{spawn,·DriverName}</code>·as·the·first·argument.·The·string·<code·class="inline">SharedLib</code>·is·the | 156 | tuple·<code·class="inline">{spawn,·DriverName}</code>·as·the·first·argument.·The·string·<code·class="inline">SharedLib</code>·is·the |
| 157 | name·of·the·port·driver.·The·second·argument·is·a·list·of·options,·none·in·this | 157 | name·of·the·port·driver.·The·second·argument·is·a·list·of·options,·none·in·this |
| 158 | case:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 158 | case:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1740391215-1">(</span><span·class="ss">complex5</span><span·class="p"·data-group-id="1740391215-1">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 159 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1740391215-2">(</span><span·class="p"·data-group-id="1740391215-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·932051121e76448317f91cb7e98bd93bf228f5ada44ab09c7d15b2a5dcf1bf0a·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 160 | </span><span·class="nf">start</span><span·class="p"·data-group-id="1740391215-4">(</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="1740391215-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id=" | 161 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="1740391215-5">(</span><span·class="s">"."</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="1740391215-5">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 162 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 162 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 163 | ········</span><span·class="p"·data-group-id=" | 163 | ········</span><span·class="p"·data-group-id="1740391215-6">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">already_loaded</span><span·class="p"·data-group-id="1740391215-6">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 164 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 164 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="1740391215-7">(</span><span·class="p"·data-group-id="1740391215-8">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">could_not_load_driver</span><span·class="p"·data-group-id="1740391215-8">}</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·e58d56ed434b78d912c521159499b80bc732c633a5ab04586c6b585c14f280c6·...·]-7">)</span><span·class="w"> |
| 165 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 165 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 166 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="1740391215-9">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1740391215-10">[</span><sp[·...·truncated·by·diffoscope;·len:·124,·SHA:·0115b931ccbaddaccb91260f451b9ccd8793fcd148b043aba717c2184b428472·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 167 | </span><span·class="nf">init</span><span·class="p"·data-group-id="1740391215-11">(</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="1740391215-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ··</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 168 | ··</span><span·class="nf">register</span><span·class="p"·data-group-id="1740391215-12">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="1740391215-13">(</span><span·class="p"·data-group-id="1740391215-13">)</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·4f9da78a90d741dab5f342e537ddb0970d88854e4914cde5958f9b03015cd4f7·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="4871006230-14">(</span><span·class="p"·data-group-id="4871006230-15">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="4871006230-15">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4871006230-16">[</span><span·class="p"·data-group-id="4871006230-16">]</span><span·class="p"·data-group-id="4871006230-14">)</span><span·class="p">,</span><span·class="w"> | ||
| 170 | ··</span><span·class="n | 169 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="1740391215-14">(</span><span·class="p"·data-group-id="1740391215-15">{</span><span·class="nb">spawn</span><[·...·truncated·by·diffoscope;·len:·383,·SHA:·4e05e4d99c22062477fe95e8f50a1a5bba4523d35b151854b40dd4b893515e1e·...·] |
| 170 | ··</span><span·class="nf">loop</span><span·class="p"·data-group-id="1740391215-17">(</span><span·class="n">Port</span><span·class="p"·data-group-id="1740391215-17">)</span><span·class="p">.</span></code></pre><p>Now·<code·class="inline">complex5:foo/1</code>·and·<code·class="inline">complex5:bar/1</code>·can·be·implemented.·Both·send·a | ||
| 171 | message·to·the·<code·class="inline">complex</code>·process·and·receive·the·following·reply:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 171 | message·to·the·<code·class="inline">complex</code>·process·and·receive·the·following·reply:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="5321680472-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="5321680472-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 172 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="5321680472-2">(</span><span·class="p"·data-group-id="5321680472-3">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="5321680472-3">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·e210d024c3fa6e0306c2ec7b0c8af804cd3e3c14af138fe1aea1ff317caa0baa·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="5321680472-4">(</span><span·class="n">Y</span><span·class="p"·data-group-id="5321680472-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 174 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="5321680472-5">(</span><span·class="p"·data-group-id="5321680472-6">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="5321680472-6">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·e210d024c3fa6e0306c2ec7b0c8af804cd3e3c14af138fe1aea1ff317caa0baa·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="5321680472-7">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="5321680472-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="5321680472-8">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="5321680472-9">(</span><span·class="p"·data-group-id="5321680472-9">)</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·91,·SHA:·d63dec4aacc401295c6160a1d0a44230f7861e8cde013e1d2dd957fd9eabdcef·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 177 | ····</span><span·class="k">receive</span><span·class="w"> | 177 | ····</span><span·class="k">receive</span><span·class="w"> |
| 178 | ········</span><span·class="p"·data-group-id=" | 178 | ········</span><span·class="p"·data-group-id="5321680472-10">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="5321680472-10">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ············</span><span·class="n">Result</span><span·class="w"> | 179 | ············</span><span·class="n">Result</span><span·class="w"> |
| 180 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">complex</code>·process·performs·the·following:</p><ul><li>Encodes·the·message·into·a·sequence·of·bytes.</li><li>Sends·it·to·the·port.</li><li>Waits·for·a·reply.</li><li>Decodes·the·reply.</li><li>Sends·it·back·to·the·caller:</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">complex</code>·process·performs·the·following:</p><ul><li>Encodes·the·message·into·a·sequence·of·bytes.</li><li>Sends·it·to·the·port.</li><li>Waits·for·a·reply.</li><li>Decodes·the·reply.</li><li>Sends·it·back·to·the·caller:</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="6543123278-1">(</span><span·class="n">Port</span><span·class="p"·data-group-id="6543123278-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="k">receive</span><span·class="w"> | 181 | ····</span><span·class="k">receive</span><span·class="w"> |
| 182 | ········</span><span·class="p"·data-group-id=" | 182 | ········</span><span·class="p"·data-group-id="6543123278-2">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="6543123278-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ············</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 183 | ············</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6543123278-3">{</span><span·class="nf">self</span><span·class="p"·data-group-id="6543123278-4">(</span><span·class="p"·data-group-id="6543123278-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6543123278-5">{</span[·...·truncated·by·diffoscope;·len:·336,·SHA:·061b4a2a3afa48b6acf383e191ec683a674fff111f875caca6cc22132c495a79·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 184 | ············</span><span·class="k">receive</span><span·class="w"> | 184 | ············</span><span·class="k">receive</span><span·class="w"> |
| 185 | ················</span><span·class="p"·data-group-id=" | 185 | ················</span><span·class="p"·data-group-id="6543123278-7">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6543123278-8">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·0565cb38818a809ab936f3575541984fd49ea2a2e4f267cf1bcacce94abe6be7·...·]-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 186 | ····················</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 186 | ····················</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6543123278-9">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="6543123278-10">(</span><span·class="n">Data</span><span·class="p"·data-group-id="6543123278-10[·...·truncated·by·diffoscope;·len:·51,·SHA:·e2269ac0ffcc586a1787d025837df71d1f1eb3c54c18aea46ddb2186d7a8f083·...·]-9">}</span><span·class="w"> |
| 187 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 187 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 188 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 188 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="6543123278-11">(</span><span·class="n">Port</span><span·class="p"·data-group-id="6543123278-11">)</span><span·class="w"> |
| 189 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Assuming·that·both·the·arguments·and·the·results·from·the·C·functions·are·less | 189 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Assuming·that·both·the·arguments·and·the·results·from·the·C·functions·are·less |
| 190 | than·256,·a·simple·encoding/decoding·scheme·is·employed.·In·this·scheme,·<code·class="inline">foo</code> | 190 | than·256,·a·simple·encoding/decoding·scheme·is·employed.·In·this·scheme,·<code·class="inline">foo</code> |
| 191 | is·represented·by·byte·1,·<code·class="inline">bar</code>·is·represented·by·2,·and·the·argument/result·is | 191 | is·represented·by·byte·1,·<code·class="inline">bar</code>·is·represented·by·2,·and·the·argument/result·is |
| 192 | represented·by·a·single·byte·as·well:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">encode</span><span·class="p"·data-group-id="5 | 192 | represented·by·a·single·byte·as·well:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">encode</span><span·class="p"·data-group-id="5011977497-1">(</span><span·class="p"·data-group-id="5011977497-2">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="5011977497-2">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·290,·SHA:·a03171320b1465928c29b382c62fd228bc04af7705a77c228c54ec39f88ed9d6·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 193 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="5 | 193 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="5011977497-4">(</span><span·class="p"·data-group-id="5011977497-5">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="5011977497-5">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·290,·SHA:·fecd145361ae9db86e7d9777b31bc1b5e431a4ec27328545acdf6324d687af23·...·]-6">]</span><span·class="p">.</span><span·class="w"> |
| 194 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="5 | 194 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="5011977497-7">(</span><span·class="p"·data-group-id="5011977497-8">[</span><span·class="n">Int</span><span·class="p"·data-group-id="5011977497-8">]</span><span·class="p"·data-group-id="5011977497-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">.</span></code></pre><p>The·resulting·Erlang·program,·including·functions·for·stopping·the·port·and |
| 195 | detecting·port·failures,·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 195 | detecting·port·failures,·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 196 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="3 | 196 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="3100182873-1">(</span><span·class="ss">complex5</span><span·class="p"·data-group-id="3100182873-1">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3 | 197 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3100182873-2">(</span><span·class="p"·data-group-id="3100182873-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">/</span><spa[·...·truncated·by·diffoscope;·len:·239,·SHA:·82ffdde1c220a7526826a35f413021f9fd1926e7a26941b2954697ed14a57890·...·]3-2">)</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3 | 198 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3100182873-4">(</span><span·class="p"·data-group-id="3100182873-5">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·c[·...·truncated·by·diffoscope;·len:·111,·SHA:·6bc27e5d35ae3fda6686811d530b438802fe8a22cd22f702540e1bc0b00a8af2·...·]3-4">)</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="nf">start</span><span·class="p"·data-group-id="3 | 199 | </span><span·class="nf">start</span><span·class="p"·data-group-id="3100182873-6">(</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="3100182873-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 200 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="3 | 200 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="3100182873-7">(</span><span·class="s">"."</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="3100182873-7">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 201 | » </span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 201 | » </span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 202 | » </span><span·class="p"·data-group-id="3 | 202 | » </span><span·class="p"·data-group-id="3100182873-8">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">already_loaded</span><span·class="p"·data-group-id="3100182873-8">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 203 | » </span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="3 | 203 | » </span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="3100182873-9">(</span><span·class="p"·data-group-id="3100182873-10">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">could_not_load_driver</span><span·class="p"·data-group-id="3100182873-10">}</span><span[·...·truncated·by·diffoscope;·len:·35,·SHA:·0003c8b7145d48df745b21e4c393e799919e298995812fb7209f912ef30b5b1f·...·]3-9">)</span><span·class="w"> |
| 204 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 204 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="3 | 205 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="3100182873-11">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-12">[</span><sp[·...·truncated·by·diffoscope;·len:·123,·SHA:·4ba44a2afbdc6b1ae34f3317f8e03c2fd35053a57f4f1000d0366d5cd3a28a63·...·]3-11">)</span><span·class="p">.</span><span·class="w"> |
| 206 | </span><span·class="nf">init</span><span·class="p"·data-group-id="3 | 206 | </span><span·class="nf">init</span><span·class="p"·data-group-id="3100182873-13">(</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="3100182873-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="3 | 207 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="3100182873-14">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="3100182873-15">(</span><span·class="p"·data-group-id="3100182873-15">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·21,·SHA:·54561decdf9403f15e51b6f763923bda5c6a4e0d623e354795165a76e44bf3f6·...·]3-14">)</span><span·class="p">,</span><span·class="w"> |
| 208 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="3 | 208 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="3100182873-16">(</span><span·class="p"·data-group-id="3100182873-17">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SharedLib</span><span·class="p"·data-group-id="3100182873-17">}</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·179,·SHA:·df6d03d854475426559ea8a9a577cb220fb26de66b798eb0fb59b23c7a85c3e9·...·]3-16">)</span><span·class="p">,</span><span·class="w"> |
| 209 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="3 | 209 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="3100182873-19">(</span><span·class="n">Port</span><span·class="p"·data-group-id="3100182873-19">)</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="3 | 210 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="3100182873-20">(</span><span·class="p"·data-group-id="3100182873-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> | 211 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="3 | 212 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="3100182873-21">(</span><span·class="n">X</span><span·class="p"·data-group-id="3100182873-21">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="3 | 213 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="3100182873-22">(</span><span·class="p"·data-group-id="3100182873-23">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="3100182873-23">}</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·13,·SHA:·919fa295aba607e9a367d2af9d2cef09b5fb32b506c5c6c5fadb3691b9c5fa11·...·]3-22">)</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="3 | 214 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="3100182873-24">(</span><span·class="n">Y</span><span·class="p"·data-group-id="3100182873-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="3 | 215 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="3100182873-25">(</span><span·class="p"·data-group-id="3100182873-26">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="3100182873-26">}</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·13,·SHA:·919fa295aba607e9a367d2af9d2cef09b5fb32b506c5c6c5fadb3691b9c5fa11·...·]3-25">)</span><span·class="p">.</span><span·class="w"> |
| 216 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="3 | 216 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="3100182873-27">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="3100182873-27">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 217 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-28">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="3100182873-29">(</span><span·class="p"·data-group-id="3100182873-29">)</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·92,·SHA:·40790d7f60c11554afa8b8a3d8c1133dd40a1bfe944ef23ea0773bedb560c082·...·]3-28">}</span><span·class="p">,</span><span·class="w"> |
| 218 | ····</span><span·class="k">receive</span><span·class="w"> | 218 | ····</span><span·class="k">receive</span><span·class="w"> |
| 219 | » </span><span·class="p"·data-group-id="3 | 219 | » </span><span·class="p"·data-group-id="3100182873-30">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="3100182873-30">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | » ····</span><span·class="n">Result</span><span·class="w"> | 220 | » ····</span><span·class="n">Result</span><span·class="w"> |
| 221 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 221 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="3 | 222 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="3100182873-31">(</span><span·class="n">Port</span><span·class="p"·data-group-id="3100182873-31">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ····</span><span·class="k">receive</span><span·class="w"> | 223 | ····</span><span·class="k">receive</span><span·class="w"> |
| 224 | » </span><span·class="p"·data-group-id="3 | 224 | » </span><span·class="p"·data-group-id="3100182873-32">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="3100182873-32">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 225 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-33">{</span><span·class="nf">self</span><span·class="p"·data-group-id="3100182873-34">(</span><span·class="p"·data-group-id="3100182873-34">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-35">{</s[·...·truncated·by·diffoscope;·len:·341,·SHA:·6719291adbc8cd61d75cb4e56363ec56a37be1c8455049dac1f20b7113302849·...·]3-33">}</span><span·class="p">,</span><span·class="w"> |
| 226 | » ····</span><span·class="k">receive</span><span·class="w"> | 226 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 227 | » » </span><span·class="p"·data-group-id="3 | 227 | » » </span><span·class="p"·data-group-id="3100182873-37">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-38">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><s[·...·truncated·by·diffoscope;·len:·92,·SHA:·3d15f7d570bc15e90a4667baf67893cef6317305f26c7e3e157c48134a00fc7b·...·]3-37">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 228 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-39">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="3100182873-40">(</span><span·class="n">Data</span><span·class="p"·data-group-id="3100182873-40[·...·truncated·by·diffoscope;·len:·50,·SHA:·c542a82025b6e38651952441bf37b8dc0f5c85e1d35b6865137b7011d21b0111·...·]3-39">}</span><span·class="w"> |
| 229 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 229 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 230 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="3 | 230 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="3100182873-41">(</span><span·class="n">Port</span><span·class="p"·data-group-id="3100182873-41">)</span><span·class="p">;</span><span·class="w"> |
| 231 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 231 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 232 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-42">{</span><span·class="nf">self</span><span·class="p"·data-group-id="3100182873-43">(</span><span·class="p"·data-group-id="3100182873-43">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">close</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·19,·SHA:·0255183a03d2d26918b9ab53d7ba74beaea1ca5c2efd655baeb9c0877e3759e4·...·]3-42">}</span><span·class="p">,</span><span·class="w"> |
| 233 | » ····</span><span·class="k">receive</span><span·class="w"> | 233 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 234 | » » </span><span·class="p"·data-group-id="3 | 234 | » » </span><span·class="p"·data-group-id="3100182873-44">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">closed</span><span·class="p"·data-group-id="3100182873-44">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 235 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="3 | 235 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="3100182873-45">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="3100182873-45">)</span><span·class="w"> |
| 236 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 236 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 237 | » </span><span·class="p"·data-group-id="3 | 237 | » </span><span·class="p"·data-group-id="3100182873-46">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="3100182873-46">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 238 | » ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3 | 238 | » ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3100182873-47">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">·</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3100182873-48">[</spa[·...·truncated·by·diffoscope;·len:·125,·SHA:·7038697644420674b4556e00a786308f7299ea2e84e056e103f833d181eca754·...·]3-47">)</span><span·class="p">,</span><span·class="w"> |
| 239 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="3 | 239 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="3100182873-49">(</span><span·class="ss">port_terminated</span><span·class="p"·data-group-id="3100182873-49">)</span><span·class="w"> |
| 240 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 240 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="3 | 241 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="3100182873-50">(</span><span·class="p"·data-group-id="3100182873-51">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="3100182873-51">}</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·294,·SHA:·be8a0ba4a59bacab384037cd5620816f71bf3dabd577d5645b3308a4ee47cd1a·...·]3-52">]</span><span·class="p">;</span><span·class="w"> |
| 242 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="3 | 242 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="3100182873-53">(</span><span·class="p"·data-group-id="3100182873-54">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="3100182873-54">}</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·294,·SHA:·e86201da0c0164b83a93f91e4759c04072eadfbf93b53af9fd62e8733d5ed44c·...·]3-55">]</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="3 | 243 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="3100182873-56">(</span><span·class="p"·data-group-id="3100182873-57">[</span><span·class="n">Int</span><span·class="p"·data-group-id="3100182873-57">]</span><span·class="p"·data-group-id="3100182873-56">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">.</span></code></pre><h2·id="c-driver"·class="section-heading"> |
| 244 | ··<a·href="#c-driver"·class="hover-link"> | 244 | ··<a·href="#c-driver"·class="hover-link"> |
| 245 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 245 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 246 | ··</a> | 246 | ··</a> |
| 247 | ··<span·class="text">C·Driver</span> | 247 | ··<span·class="text">C·Driver</span> |
| 248 | </h2> | 248 | </h2> |
| 249 | <p>The·C·driver·is·a·module·that·is·compiled·and·linked·into·a·shared·library.·It | 249 | <p>The·C·driver·is·a·module·that·is·compiled·and·linked·into·a·shared·library.·It |
| 250 | uses·a·driver·structure·and·includes·the·header·file·<code·class="inline">erl_driver.h</code>.</p><p>The·driver·structure·is·filled·with·the·driver·name·and·function·pointers.·It·is | 250 | uses·a·driver·structure·and·includes·the·header·file·<code·class="inline">erl_driver.h</code>.</p><p>The·driver·structure·is·filled·with·the·driver·name·and·function·pointers.·It·is |
| Offset 347, 25 lines modified | Offset 347, 25 lines modified | ||
| 347 | ··<a·href="#running-the-example"·class="hover-link"> | 347 | ··<a·href="#running-the-example"·class="hover-link"> |
| 348 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 348 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 349 | ··</a> | 349 | ··</a> |
| 350 | ··<span·class="text">Running·the·Example</span> | 350 | ··<span·class="text">Running·the·Example</span> |
| 351 | </h2> | 351 | </h2> |
| 352 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">unix>·gcc·-o·example_drv.so·-fpic·-shared·complex.c·port_driver.c | 352 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">unix>·gcc·-o·example_drv.so·-fpic·-shared·complex.c·port_driver.c |
| 353 | windows>·cl·-LD·-MD·-Fe·example_drv.dll·complex.c·port_driver.c</code></pre><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="ss">erl</span><span·class="w"> | 353 | windows>·cl·-LD·-MD·-Fe·example_drv.dll·complex.c·port_driver.c</code></pre><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="ss">erl</span><span·class="w"> |
| 354 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id=" | 354 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id="7843778933-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">14.2</span><span·class="p"·data-group-id="7843778933-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="7843778933-2">[</span><span·class="ss">source<[·...·truncated·by·diffoscope;·len:·1283,·SHA:·ee924a0964c15af2d6500efe6ddf2b2e31f15a4912df2a78bc382f593b015b8f·...·]-7">]</span><span·class="w"> |
| 355 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 355 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">·</span><span·class="p"·data-group-id="7843778933-8">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·b75892a8af829228d788a34f563f95e9fabb0ef615f7e7003fd49d29cbd1a095·...·]-8">)</span><span·class="gp·unselectable"> |
| 356 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 356 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="7843778933-10">(</span><span·class="ss">complex5</span><span·class="p"·data-group-id="7843778933-10">)</span><span·class="p">.</span><span·class="w"> |
| 357 | </span><span·class="p"·data-group-id=" | 357 | </span><span·class="p"·data-group-id="7843778933-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">complex5</span><span·class="p"·data-group-id="7843778933-11">}</span></code></pre><p><em>Step·3.</em>·Run·the·example:</p><pre><code·class="makeup·erlang"·translate="[·...·truncated·by·diffoscope;·len:·272,·SHA:·805e2d25c70c3eb587585c62e923a56768d794405a9d3d8e232d1dc0c591a868·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 358 | </span><span·class="o"><</span><span·class="mf">0.34</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 358 | </span><span·class="o"><</span><span·class="mf">0.34</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| Max diff block lines reached; 2019/65850 bytes (3.07%) of diff not shown. | |||
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 164, 15 lines modified | Offset 164, 15 lines modified | ||
| 164 | ······<p·class="built-using"> | 164 | ······<p·class="built-using"> |
| 165 | ········Built·using | 165 | ········Built·using |
| 166 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 166 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 167 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 167 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 168 | ······</p> | 168 | ······</p> |
| 169 | <p>Copyright·©·1996-202 | 169 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 170 | ····</footer> | 170 | ····</footer> |
| 171 | ··</div> | 171 | ··</div> |
| 172 | </main> | 172 | </main> |
| 173 | </div> | 173 | </div> |
| 174 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 174 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 175 | ··<script> | 175 | ··<script> |
| 176 | ··let·initialized·=·false; | 176 | ··let·initialized·=·false; |
| Offset 122, 16 lines modified | Offset 122, 16 lines modified | ||
| 122 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 122 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 123 | ··</a> | 123 | ··</a> |
| 124 | ··<span·class="text">Compilation</span> | 124 | ··<span·class="text">Compilation</span> |
| 125 | </h2> | 125 | </h2> |
| 126 | <p>Erlang·programs·must·be·<em>compiled</em>·to·object·code.·The·compiler·can·generate·a | 126 | <p>Erlang·programs·must·be·<em>compiled</em>·to·object·code.·The·compiler·can·generate·a |
| 127 | new·file·that·contains·the·object·code.·The·current·abstract·machine,·which·runs | 127 | new·file·that·contains·the·object·code.·The·current·abstract·machine,·which·runs |
| 128 | the·object·code,·is·called·BEAM,·therefore·the·object·files·get·the·suffix | 128 | the·object·code,·is·called·BEAM,·therefore·the·object·files·get·the·suffix |
| 129 | <code·class="inline">.beam</code>.·The·compiler·can·also·generate·a·binary·which·can·be·loaded·directly.</p><p>The·compiler·is·located·in·the·module·<a·href="../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compile</code></a>·in·Compiler.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id=" | 129 | <code·class="inline">.beam</code>.·The·compiler·can·also·generate·a·binary·which·can·be·loaded·directly.</p><p>The·compiler·is·located·in·the·module·<a·href="../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compile</code></a>·in·Compiler.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="9451457948-1">(</span><span·class="n">Module</span><span·class="p"·data-group-id="9451457948-1">)</span><span·class="w"> |
| 130 | </span><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id=" | 130 | </span><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="9451457948-2">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Options</span><span·class="p"·data-group-id="9451457948-2">)</span></code></pre><p>The·Erlang·shell·understands·the·command·<code·class="inline">c(Module)</code>,·which·both·compiles·and |
| 131 | loads·<code·class="inline">Module</code>.</p><p>There·is·also·a·module·<code·class="inline">make</code>,·which·provides·a·set·of·functions·similar·to·the | 131 | loads·<code·class="inline">Module</code>.</p><p>There·is·also·a·module·<code·class="inline">make</code>,·which·provides·a·set·of·functions·similar·to·the |
| 132 | UNIX·type·Make·functions,·see·module·<a·href="../../lib/tools-4.1.1/doc/html/make.html"><code·class="inline">make</code></a>·in·Tools.</p><p>The·compiler·can·also·be·accessed·from·the·OS·prompt·using·the | 132 | UNIX·type·Make·functions,·see·module·<a·href="../../lib/tools-4.1.1/doc/html/make.html"><code·class="inline">make</code></a>·in·Tools.</p><p>The·compiler·can·also·be·accessed·from·the·OS·prompt·using·the |
| 133 | <a·href="../../erts-15.2.7/doc/html/erl_cmd.html">erl</a>·executable·in·ERTS.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-compile·Module1...ModuleN</span><span·class="w"> | 133 | <a·href="../../erts-15.2.7/doc/html/erl_cmd.html">erl</a>·executable·in·ERTS.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-compile·Module1...ModuleN</span><span·class="w"> |
| 134 | </span><span·class="c1">%·erl·-make</span></code></pre><p>The·<code·class="inline">erlc</code>·program·provides·way·to·compile·modules·from·the·OS | 134 | </span><span·class="c1">%·erl·-make</span></code></pre><p>The·<code·class="inline">erlc</code>·program·provides·way·to·compile·modules·from·the·OS |
| 135 | shell,·see·the·<a·href="../../erts-15.2.7/doc/html/erlc_cmd.html">erlc</a>·executable·in·ERTS.·It | 135 | shell,·see·the·<a·href="../../erts-15.2.7/doc/html/erlc_cmd.html">erlc</a>·executable·in·ERTS.·It |
| 136 | understands·a·number·of·flags·that·can·be·used·to·define·macros,·add·search | 136 | understands·a·number·of·flags·that·can·be·used·to·define·macros,·add·search |
| 137 | paths·for·include·files,·and·more.</p><pre><code·class="text">%·erlc·<flags>·File1.erl...FileN.erl</code></pre><p><a·href=""·id="loading"></a></p><h2·id="code-loading"·class="section-heading"> | 137 | paths·for·include·files,·and·more.</p><pre><code·class="text">%·erlc·<flags>·File1.erl...FileN.erl</code></pre><p><a·href=""·id="loading"></a></p><h2·id="code-loading"·class="section-heading"> |
| Offset 156, 54 lines modified | Offset 156, 54 lines modified | ||
| 156 | When·a·module·is·loaded·into·the·system·for·the·first·time,·the·code·becomes | 156 | When·a·module·is·loaded·into·the·system·for·the·first·time,·the·code·becomes |
| 157 | 'current'.·If·then·a·new·instance·of·the·module·is·loaded,·the·code·of·the | 157 | 'current'.·If·then·a·new·instance·of·the·module·is·loaded,·the·code·of·the |
| 158 | previous·instance·becomes·'old'·and·the·new·instance·becomes·'current'.</p><p>Both·old·and·current·code·is·valid,·and·can·be·evaluated·concurrently.·Fully | 158 | previous·instance·becomes·'old'·and·the·new·instance·becomes·'current'.</p><p>Both·old·and·current·code·is·valid,·and·can·be·evaluated·concurrently.·Fully |
| 159 | qualified·function·calls·always·refer·to·current·code.·Old·code·can·still·be | 159 | qualified·function·calls·always·refer·to·current·code.·Old·code·can·still·be |
| 160 | evaluated·because·of·processes·lingering·in·the·old·code.</p><p>If·a·third·instance·of·the·module·is·loaded,·the·code·server·removes·(purges) | 160 | evaluated·because·of·processes·lingering·in·the·old·code.</p><p>If·a·third·instance·of·the·module·is·loaded,·the·code·server·removes·(purges) |
| 161 | the·old·code·and·any·processes·lingering·in·it·is·terminated.·Then·the·third | 161 | the·old·code·and·any·processes·lingering·in·it·is·terminated.·Then·the·third |
| 162 | instance·becomes·'current'·and·the·previously·current·code·becomes·'old'.</p><p>To·change·from·old·code·to·current·code,·a·process·must·make·a·fully·qualified | 162 | instance·becomes·'current'·and·the·previously·current·code·becomes·'old'.</p><p>To·change·from·old·code·to·current·code,·a·process·must·make·a·fully·qualified |
| 163 | function·call.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0469835170-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="0469835170-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 164 | </ | 163 | function·call.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1435534634-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="143[·...·truncated·by·diffoscope;·len:·9,·SHA:·76aeab7427e01df912558acbd45a1460dc988766f93443664b46b1da14fdc95a·...·]">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1435534634-2">(</span><span·class="p"·data-group-id="1435534634-3">[</span><span·class="ss">loop</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="1435534634-3">]</span><span·class="p"·data-group-id="1435534634-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 165 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 165 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="1435534634-4">(</span><span·class="p"·data-group-id="1435534634-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 166 | ····</span><span·class="k">receive</span><span·class="w"> | 166 | ····</span><span·class="k">receive</span><span·class="w"> |
| 167 | ········</span><span·class="ss">code_switch</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 167 | ········</span><span·class="ss">code_switch</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ············</span><span·class="nc">m</span><span·class="p">:</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 168 | ············</span><span·class="nc">m</span><span·class="p">:</span><span·class="nf">loop</span><span·class="p"·data-group-id="1435534634-5">(</span><span·class="p"·data-group-id="1435534634-5">)</span><span·class="p">;</span><span·class="w"> |
| 169 | ········</span><span·class="n">Msg</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 169 | ········</span><span·class="n">Msg</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 170 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 171 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 171 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="1435534634-6">(</span><span·class="p"·data-group-id="1435534634-6">)</span><span·class="w"> |
| 172 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>To·make·the·process·change·code,·send·the·message·<code·class="inline">code_switch</code>·to·it.·The | 172 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>To·make·the·process·change·code,·send·the·message·<code·class="inline">code_switch</code>·to·it.·The |
| 173 | process·then·makes·a·fully·qualified·call·to·<code·class="inline">m:loop()</code>·and·changes·to·current | 173 | process·then·makes·a·fully·qualified·call·to·<code·class="inline">m:loop()</code>·and·changes·to·current |
| 174 | code.·Notice·that·<code·class="inline">m:loop/0</code>·must·be·exported.</p><p>For·code·replacement·of·funs·to·work,·use·the·syntax | 174 | code.·Notice·that·<code·class="inline">m:loop/0</code>·must·be·exported.</p><p>For·code·replacement·of·funs·to·work,·use·the·syntax |
| 175 | <code·class="inline">fun·Module:FunctionName/Arity</code>.</p><p><a·href=""·id="on_load"></a></p><h2·id="running-a-function-when-a-module-is-loaded"·class="section-heading"> | 175 | <code·class="inline">fun·Module:FunctionName/Arity</code>.</p><p><a·href=""·id="on_load"></a></p><h2·id="running-a-function-when-a-module-is-loaded"·class="section-heading"> |
| 176 | ··<a·href="#running-a-function-when-a-module-is-loaded"·class="hover-link"> | 176 | ··<a·href="#running-a-function-when-a-module-is-loaded"·class="hover-link"> |
| 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 178 | ··</a> | 178 | ··</a> |
| 179 | ··<span·class="text">Running·a·Function·When·a·Module·is·Loaded</span> | 179 | ··<span·class="text">Running·a·Function·When·a·Module·is·Loaded</span> |
| 180 | </h2> | 180 | </h2> |
| 181 | <p>The·<code·class="inline">-on_load()</code>·directive·names·a·function·that·is·to·be·run·automatically·when | 181 | <p>The·<code·class="inline">-on_load()</code>·directive·names·a·function·that·is·to·be·run·automatically·when |
| 182 | a·module·is·loaded.</p><p>Its·syntax·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id=" | 182 | a·module·is·loaded.</p><p>Its·syntax·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id="3499448342-1">(</span><span·class="n">Name</span><span·class="o">/</span><span·class="mi">0</span><span·class="p"·data-group-id="3499448342-1">)</span><span·class="p">.</span></code></pre><p>It·is·not·necessary·to·export·the·function.·It·is·called·in·a·freshly·spawned |
| 183 | process·(which·terminates·as·soon·as·the·function·returns).</p><p>The·function·must·return·<code·class="inline">ok</code>·if·the·module·is·to·become·the·new·current·code | 183 | process·(which·terminates·as·soon·as·the·function·returns).</p><p>The·function·must·return·<code·class="inline">ok</code>·if·the·module·is·to·become·the·new·current·code |
| 184 | for·the·module·and·become·callable.</p><p>Returning·any·other·value·or·generating·an·exception·causes·the·new·code·to·be | 184 | for·the·module·and·become·callable.</p><p>Returning·any·other·value·or·generating·an·exception·causes·the·new·code·to·be |
| 185 | unloaded.·If·the·return·value·is·not·an·atom,·a·warning·error·report·is·sent·to | 185 | unloaded.·If·the·return·value·is·not·an·atom,·a·warning·error·report·is·sent·to |
| 186 | the·error·logger.</p><p>If·there·already·is·current·code·for·the·module,·that·code·will·remain·current | 186 | the·error·logger.</p><p>If·there·already·is·current·code·for·the·module,·that·code·will·remain·current |
| 187 | and·can·be·called·until·the·<code·class="inline">on_load</code>·function·has·returned.·If·the·<code·class="inline">on_load</code> | 187 | and·can·be·called·until·the·<code·class="inline">on_load</code>·function·has·returned.·If·the·<code·class="inline">on_load</code> |
| 188 | function·fails,·the·current·code·(if·any)·will·remain·current.·If·there·is·no | 188 | function·fails,·the·current·code·(if·any)·will·remain·current.·If·there·is·no |
| 189 | current·code·for·a·module,·any·process·that·makes·an·external·call·to·the·module | 189 | current·code·for·a·module,·any·process·that·makes·an·external·call·to·the·module |
| 190 | before·the·<code·class="inline">on_load</code>·function·has·finished·will·be·suspended·until·the·<code·class="inline">on_load</code> | 190 | before·the·<code·class="inline">on_load</code>·function·has·finished·will·be·suspended·until·the·<code·class="inline">on_load</code> |
| 191 | function·have·finished.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·19,·if·the·<code·class="inline">on_load</code>·function·failed,·any·previously·current | 191 | function·have·finished.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·19,·if·the·<code·class="inline">on_load</code>·function·failed,·any·previously·current |
| 192 | code·would·become·old,·essentially·leaving·the·system·without·any·working·and | 192 | code·would·become·old,·essentially·leaving·the·system·without·any·working·and |
| 193 | reachable·instance·of·the·module.</p></section><p>In·embedded·mode,·first·all·modules·are·loaded.·Then·all·<code·class="inline">on_load</code>·functions·are | 193 | reachable·instance·of·the·module.</p></section><p>In·embedded·mode,·first·all·modules·are·loaded.·Then·all·<code·class="inline">on_load</code>·functions·are |
| 194 | called.·The·system·is·terminated·unless·all·of·the·<code·class="inline">on_load</code>·functions·return | 194 | called.·The·system·is·terminated·unless·all·of·the·<code·class="inline">on_load</code>·functions·return |
| 195 | <code·class="inline">ok</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 195 | <code·class="inline">ok</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="3862834546-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="3862834546-1">)</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id=" | 196 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id="3862834546-2">(</span><span·class="ss">load_my_nifs</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="3862834546-2">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="nf">load_my_nifs</span><span·class="p"·data-group-id=" | 197 | </span><span·class="nf">load_my_nifs</span><span·class="p"·data-group-id="3862834546-3">(</span><span·class="p"·data-group-id="3862834546-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 198 | ····</span><span·class="n">NifPath</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%Set·up·the·path·to·the·NIF·library.</span><span·class="w"> | 198 | ····</span><span·class="n">NifPath</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%Set·up·the·path·to·the·NIF·library.</span><span·class="w"> |
| 199 | ····</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%Initialize·the·Info·term</span><span·class="w"> | 199 | ····</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%Initialize·the·Info·term</span><span·class="w"> |
| 200 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id="3862834546-4">(</span><span·class="n">NifPath</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p"·data-group-id="3862834546-4">)</span><span·class="p">.</span></code></pre><p>If·the·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#load_nif/2"><code·class="inline">erlang:load_nif/2</code></a>·fails,·the·module·is·unloaded·and·a·warning |
| 201 | report·is·sent·to·the·error·loader.</p> | 201 | report·is·sent·to·the·error·loader.</p> |
| 202 | </div> | 202 | </div> |
| 203 | <div·class="bottom-actions"·id="bottom-actions"> | 203 | <div·class="bottom-actions"·id="bottom-actions"> |
| 204 | ··<div·class="bottom-actions-item"> | 204 | ··<div·class="bottom-actions-item"> |
| 205 | ······<a·href="distributed.html"·class="bottom-actions-button"·rel="prev"> | 205 | ······<a·href="distributed.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 247, 15 lines modified | Offset 247, 15 lines modified | ||
| 247 | ······<p·class="built-using"> | 247 | ······<p·class="built-using"> |
| 248 | ········Built·using | 248 | ········Built·using |
| 249 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 249 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 250 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 250 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 251 | ······</p> | 251 | ······</p> |
| 252 | <p>Copyright·©·1996-202 | 252 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 253 | ····</footer> | 253 | ····</footer> |
| 254 | ··</div> | 254 | ··</div> |
| 255 | </main> | 255 | </main> |
| 256 | </div> | 256 | </div> |
| 257 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 257 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 258 | ··<script> | 258 | ··<script> |
| 259 | ··let·initialized·=·false; | 259 | ··let·initialized·=·false; |
| Offset 118, 31 lines modified | Offset 118, 31 lines modified | ||
| 118 | <p>This·section·lists·a·few·constructs·to·watch·out·for.</p><h2·id="operator"·class="section-heading"> | 118 | <p>This·section·lists·a·few·constructs·to·watch·out·for.</p><h2·id="operator"·class="section-heading"> |
| 119 | ··<a·href="#operator"·class="hover-link"> | 119 | ··<a·href="#operator"·class="hover-link"> |
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Operator·<code·class="inline">++</code></span> | 122 | ··<span·class="text">Operator·<code·class="inline">++</code></span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>The·<code·class="inline">++</code>·operator·copies·its·left-hand·side·operand.·That·is·clearly | 124 | <p>The·<code·class="inline">++</code>·operator·copies·its·left-hand·side·operand.·That·is·clearly |
| 125 | seen·if·we·do·our·own·implementation·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_plus_plus</span><span·class="p"·data-group-id=" | 125 | seen·if·we·do·our·own·implementation·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_plus_plus</span><span·class="p"·data-group-id="5150990938-1">(</span><span·class="p"·data-group-id="5150990938-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="5150990938-2">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·60,·SHA:·3c5adf4ba2fc776deefef2004602f706f399379ac99bc19550656eb90b152bdd·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 126 | ····</span><span·class="p"·data-group-id=" | 126 | ····</span><span·class="p"·data-group-id="5150990938-3">[</span><span·class="n">H</span><span·class="p">|</span><span·class="nf">my_plus_plus</span><span·class="p"·data-group-id="5150990938-4">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tail</spa[·...·truncated·by·diffoscope;·len:·96,·SHA:·aac2efec03719067f465f384935023c7c4cdf98cc43a740c71e3908580660809·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 127 | </span><span·class="nf">my_plus_plus</span><span·class="p"·data-group-id=" | 127 | </span><span·class="nf">my_plus_plus</span><span·class="p"·data-group-id="5150990938-5">(</span><span·class="p"·data-group-id="5150990938-6">[</span><span·class="p"·data-group-id="5150990938-6">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tail</span><span·class="p"·data-group-id="5150990938-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 128 | ····</span><span·class="n">Tail</span><span·class="p">.</span></code></pre><p>We·must·be·careful·how·we·use·<code·class="inline">++</code>·in·a·loop.·First·is·how·not·to·use·it:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">naive_reverse</span><span·class="p"·data-group-id=" | 128 | ····</span><span·class="n">Tail</span><span·class="p">.</span></code></pre><p>We·must·be·careful·how·we·use·<code·class="inline">++</code>·in·a·loop.·First·is·how·not·to·use·it:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">naive_reverse</span><span·class="p"·data-group-id="9054019323-1">(</span><span·class="p"·data-group-id="9054019323-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="9054019323-2">]</span><span·class="p"·data-group-id="9054019323-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 129 | ····</span><span·class="nf">naive_reverse</span><span·class="p"·data-group-id=" | 129 | ····</span><span·class="nf">naive_reverse</span><span·class="p"·data-group-id="9054019323-3">(</span><span·class="n">T</span><span·class="p"·data-group-id="9054019323-3">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id="9054019323-4">[</span><span·class="n">H</span><span·c[·...·truncated·by·diffoscope;·len:·33,·SHA:·73bc280372d78ad9128272dfca953b43636cdbc699441290c250de61148185db·...·]3-4">]</span><span·class="p">;</span><span·class="w"> |
| 130 | </span><span·class="nf">naive_reverse</span><span·class="p"·data-group-id=" | 130 | </span><span·class="nf">naive_reverse</span><span·class="p"·data-group-id="9054019323-5">(</span><span·class="p"·data-group-id="9054019323-6">[</span><span·class="p"·data-group-id="9054019323-6">]</span><span·class="p"·data-group-id="9054019323-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 131 | ····</span><span·class="p"·data-group-id=" | 131 | ····</span><span·class="p"·data-group-id="9054019323-7">[</span><span·class="p"·data-group-id="9054019323-7">]</span><span·class="p">.</span></code></pre><p>As·the·<code·class="inline">++</code>·operator·copies·its·left-hand·side·operand,·the·growing |
| 132 | result·is·copied·repeatedly,·leading·to·quadratic·complexity.</p><p>On·the·other·hand,·using·<code·class="inline">++</code>·in·loop·like·this·is·perfectly·fine:</p><p><strong>OK</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id=" | 132 | result·is·copied·repeatedly,·leading·to·quadratic·complexity.</p><p>On·the·other·hand,·using·<code·class="inline">++</code>·in·loop·like·this·is·perfectly·fine:</p><p><strong>OK</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id="9797116230-1">(</span><span·class="n">List</span><span·class="p"·data-group-id="9797116230-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 133 | ····</span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id=" | 133 | ····</span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id="9797116230-2">(</span><span·class="n">List</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9797116230-3">[</span><span·class="p"·data-group-id="9797116230-3">]</span><span·class="p"·data-group-id="9797116230-2">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id=" | 134 | </span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id="9797116230-4">(</span><span·class="p"·data-group-id="9797116230-5">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="9797116230-5">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·59,·SHA:·6a3aaf33ea69961240a39d9b16a057faf6e2144dbff1354c7c52e2c9606bcd69·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 135 | ····</span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id=" | 135 | ····</span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id="9797116230-6">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9797116230-7">[</span><span·class="n">H</span><span·class="p"·data-group-id="9797116230-7">]</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·108,·SHA:·9dc77f768cb365a3cdb4aa540d4b0cb9781eb8b385edac6113a31aad6ffa898a·...·]-6">)</span><span·class="p">;</span><span·class="w"> |
| 136 | </span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id=" | 136 | </span><span·class="nf">naive_but_ok_reverse</span><span·class="p"·data-group-id="9797116230-8">(</span><span·class="p"·data-group-id="9797116230-9">[</span><span·class="p"·data-group-id="9797116230-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="9797116230-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Each·list·element·is·copied·only·once.·The·growing·result·<code·class="inline">Acc</code>·is·the·right-hand | 137 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>Each·list·element·is·copied·only·once.·The·growing·result·<code·class="inline">Acc</code>·is·the·right-hand |
| 138 | side·operand,·which·it·is·<em>not</em>·copied.</p><p>Experienced·Erlang·programmers·would·probably·write·as·follows:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id=" | 138 | side·operand,·which·it·is·<em>not</em>·copied.</p><p>Experienced·Erlang·programmers·would·probably·write·as·follows:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id="8406041963-1">(</span><span·class="p"·data-group-id="8406041963-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="8406041963-2">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·59,·SHA:·dacac5b09f8d4f719b5e4c15463edef109d7041700eee8b68bc4942115b49a87·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id="8406041963-3">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8406041963-4">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">Acc</span><span·class="p"·data-group-id="8406[·...·truncated·by·diffoscope;·len:·59,·SHA:·c861a07fbc6ec10ca55565117b7afa1166534ed1c5690e2915b3390a8318e670·...·]-3">)</span><span·class="p">;</span><span·class="w"> |
| 140 | </span><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">vanilla_reverse</span><span·class="p"·data-group-id="8406041963-5">(</span><span·class="p"·data-group-id="8406041963-6">[</span><span·class="p"·data-group-id="8406041963-6">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="8406041963-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>In·principle,·this·is·slightly·more·efficient·because·the·list·element·<code·class="inline">[H]</code> | 141 | ····</span><span·class="n">Acc</span><span·class="p">.</span></code></pre><p>In·principle,·this·is·slightly·more·efficient·because·the·list·element·<code·class="inline">[H]</code> |
| 142 | is·not·built·before·being·copied·and·discarded.·In·practice,·the·compiler | 142 | is·not·built·before·being·copied·and·discarded.·In·practice,·the·compiler |
| 143 | rewrites·<code·class="inline">[H]·++·Acc</code>·to·<code·class="inline">[H|Acc]</code>.</p><h2·id="timer-module"·class="section-heading"> | 143 | rewrites·<code·class="inline">[H]·++·Acc</code>·to·<code·class="inline">[H|Acc]</code>.</p><h2·id="timer-module"·class="section-heading"> |
| 144 | ··<a·href="#timer-module"·class="hover-link"> | 144 | ··<a·href="#timer-module"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">Timer·Module</span> | 147 | ··<span·class="text">Timer·Module</span> |
| Offset 160, 77 lines modified | Offset 160, 77 lines modified | ||
| 160 | therefore·harmless.</p><h2·id="accidental-copying-and-loss-of-sharing"·class="section-heading"> | 160 | therefore·harmless.</p><h2·id="accidental-copying-and-loss-of-sharing"·class="section-heading"> |
| 161 | ··<a·href="#accidental-copying-and-loss-of-sharing"·class="hover-link"> | 161 | ··<a·href="#accidental-copying-and-loss-of-sharing"·class="hover-link"> |
| 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 163 | ··</a> | 163 | ··</a> |
| 164 | ··<span·class="text">Accidental·Copying·and·Loss·of·Sharing</span> | 164 | ··<span·class="text">Accidental·Copying·and·Loss·of·Sharing</span> |
| 165 | </h2> | 165 | </h2> |
| 166 | <p>When·spawning·a·new·process·using·a·fun,·one·can·accidentally·copy·more·data·to | 166 | <p>When·spawning·a·new·process·using·a·fun,·one·can·accidentally·copy·more·data·to |
| 167 | the·process·than·intended.·For·example:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">accidental1</span><span·class="p"·data-group-id="1 | 167 | the·process·than·intended.·For·example:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">accidental1</span><span·class="p"·data-group-id="1755947437-1">(</span><span·class="n">State</span><span·class="p"·data-group-id="1755947437-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="1 | 168 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="1755947437-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="1755947437-3">(</span><span·class="p"·data-group-id="1755947437-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1 | 169 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1755947437-4">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1755947437-5">[</span><span·class="n">State</span><span·class="o">#</s[·...·truncated·by·diffoscope;·len:·179,·SHA:·1c9c6c8b710636aeb66b350cd49decba6faa9d2343e8c6443905d97d6f3db2e3·...·]-4">)</span><span·class="w"> |
| 170 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="1 | 170 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="1755947437-2">)</span><span·class="p">.</span></code></pre><p>The·code·in·the·fun·will·extract·one·element·from·the·record·and·print·it.·The |
| 171 | rest·of·the·<code·class="inline">state</code>·record·is·not·used.·However,·when·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/1"><code·class="inline">spawn/1</code></a> | 171 | rest·of·the·<code·class="inline">state</code>·record·is·not·used.·However,·when·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/1"><code·class="inline">spawn/1</code></a> |
| 172 | function·is·executed,·the·entire·record·is·copied·to·the·newly·created·process.</p><p>The·same·kind·of·problem·can·happen·with·a·map:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">accidental2</span><span·class="p"·data-group-id=" | 172 | function·is·executed,·the·entire·record·is·copied·to·the·newly·created·process.</p><p>The·same·kind·of·problem·can·happen·with·a·map:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">accidental2</span><span·class="p"·data-group-id="4712316493-1">(</span><span·class="n">State</span><span·class="p"·data-group-id="4712316493-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 173 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="4712316493-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="4712316493-3">(</span><span·class="p"·data-group-id="4712316493-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 174 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4712316493-4">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4712316493-5">[</span><span·class="nf">map_get</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·288,·SHA:·5b6a28f44378ff66c740e0dc2972788ae078a435e62c7fe3ddc6808235f22130·...·]-4">)</span><span·class="w"> |
| 175 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id=" | 175 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="4712316493-2">)</span><span·class="p">.</span></code></pre><p>In·the·following·example·(part·of·a·module·implementing·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a> |
| 176 | behavior)·the·created·fun·is·sent·to·another·process:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 176 | behavior)·the·created·fun·is·sent·to·another·process:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_call</span><span·class="p"·data-group-id="8012381726-1">(</span><span·class="ss">give_me_a_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·ae9f0089606f6879cc25a0d8e76415038bc3aa35d910fea3e5f646af14f501d2·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="8012381726-2">(</span><span·class="p"·data-group-id="8012381726-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="nb">size</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 178 | ····</span><span·class="p"·data-group-id=" | 178 | ····</span><span·class="p"·data-group-id="8012381726-3">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="8012381726-3">}</span><span·class="p">.</span></code></pre><p>How·bad·that·unnecessary·copy·is·depends·on·the·contents·of·the·record·or·the |
| 179 | map.</p><p>For·example,·if·the·<code·class="inline">state</code>·record·is·initialized·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init1</span><span·class="p"·data-group-id=" | 179 | map.</p><p>For·example,·if·the·<code·class="inline">state</code>·record·is·initialized·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init1</span><span·class="p"·data-group-id="6656448665-1">(</span><span·class="p"·data-group-id="6656448665-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="6656448665-2">{</span><span·class="ss">data</span><span·class="o">=</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="6656448665-3">(</span><span·class="mi">1</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·147,·SHA:·35735f8b27acf405be405ead80e9219eb5a491c18c9aecd7bba38f324cadfdaa·...·]-2">}</span><span·class="p">.</span></code></pre><p>a·list·with·10000·elements·(or·about·20000·heap·words)·will·be·copied·to·the |
| 181 | newly·created·process.</p><p>An·unnecessary·copy·of·10000·element·list·can·be·bad·enough,·but·it·can·get·even | 181 | newly·created·process.</p><p>An·unnecessary·copy·of·10000·element·list·can·be·bad·enough,·but·it·can·get·even |
| 182 | worse·if·the·<code·class="inline">state</code>·record·contains·<em>shared·subterms</em>.·Here·is·a·simple·example | 182 | worse·if·the·<code·class="inline">state</code>·record·contains·<em>shared·subterms</em>.·Here·is·a·simple·example |
| 183 | of·a·term·with·a·shared·subterm:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 183 | of·a·term·with·a·shared·subterm:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9543424418-1">{</span><span·class="n">SubTerm</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SubTerm</span><span·class="p"·data-group-id="9543424418-1">}</span></code></pre><p>When·a·term·is·copied·to·another·process,·sharing·of·subterms·will·be·lost·and |
| 184 | the·copied·term·can·be·many·times·larger·than·the·original·term.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init2</span><span·class="p"·data-group-id=" | 184 | the·copied·term·can·be·many·times·larger·than·the·original·term.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init2</span><span·class="p"·data-group-id="2632240768-1">(</span><span·class="p"·data-group-id="2632240768-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ····</span><span·class="n">SharedSubTerms</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="n">SharedSubTerms</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="2632240768-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2632240768-3">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·class="p"·data-group-id="2632240768-3">)</span><span[·...·truncated·by·diffoscope;·len:·852,·SHA:·b12dce990a5714028942d5d7048f273e61a16c0d94d6bb9b6f9acf3b06295cef·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 186 | ····</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id=" | 186 | ····</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="2632240768-7">{</span><span·class="ss">data</span><span·class="o">=</span><span·class="n">Shared</span><span·class="p"·data-group-id="2632240768-7">}</span><span·class="p">.</span></code></pre><p>In·the·process·that·calls·<code·class="inline">init2/0</code>,·the·size·of·the·<code·class="inline">data</code>·field·in·the·<code·class="inline">state</code> |
| 187 | record·will·be·32·heap·words.·When·the·record·is·copied·to·the·newly·created | 187 | record·will·be·32·heap·words.·When·the·record·is·copied·to·the·newly·created |
| 188 | process,·sharing·will·be·lost·and·the·size·of·the·copied·<code·class="inline">data</code>·field·will·be | 188 | process,·sharing·will·be·lost·and·the·size·of·the·copied·<code·class="inline">data</code>·field·will·be |
| 189 | 131070·heap·words.·More·details·about | 189 | 131070·heap·words.·More·details·about |
| 190 | <a·href="eff_guide_processes.html#loss-of-sharing">loss·off·sharing</a>·are·found·in·a·later | 190 | <a·href="eff_guide_processes.html#loss-of-sharing">loss·off·sharing</a>·are·found·in·a·later |
| 191 | section.</p><p>To·avoid·the·problem,·outside·of·the·fun·extract·only·the·fields·of·the·record | 191 | section.</p><p>To·avoid·the·problem,·outside·of·the·fun·extract·only·the·fields·of·the·record |
| 192 | that·are·actually·used:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fixed_accidental1</span><span·class="p"·data-group-id=" | 192 | that·are·actually·used:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fixed_accidental1</span><span·class="p"·data-group-id="4407080579-1">(</span><span·class="n">State</span><span·class="p"·data-group-id="4407080579-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">info</span><span·class="p">,</span><span·class="w"> | 193 | ····</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">info</span><span·class="p">,</span><span·class="w"> |
| 194 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 194 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="4407080579-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="4407080579-3">(</span><span·class="p"·data-group-id="4407080579-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 195 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4407080579-4">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4407080579-5">[</span><span·class="n">Info</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·74,·SHA:·16838f7ab4ae090d73dfb21d47120b6d8b23d809d0bbc2e126c87485e60eb7a9·...·]-4">)</span><span·class="w"> |
| 196 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id=" | 196 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="4407080579-2">)</span><span·class="p">.</span></code></pre><p>Similarly,·outside·of·the·fun·extract·only·the·map·elements·that·are·actually |
| 197 | used:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fixed_accidental2</span><span·class="p"·data-group-id="6775335327-1">(</span><span·class="n">State</span><span·class="p"·data-group-id="6775335327-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 198 | 197 | used:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fixed_accidental2</span><span·class="p"·data-group-id="6532182143-1">(</span><span·class="n">State</span><span·class="p"·data-group-id="6532182143-1">)</spa[·...·truncated·by·diffoscope;·len:·47,·SHA:·32695989a6a68a2374a6c9992743ec066ea76aec19494d0b777a3cd8f96ef1ed·...·]</span><span·class="w"> | |
| 198 | ····</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">map_get</span><span·class="p"·data-group-id="6532182143-2">(</span><span·class="ss">info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="6532182143-2">)</span><span·class="p">,</span><span·class="w"> | ||
| 199 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6 | 199 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6532182143-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="6532182143-4">(</span><span·class="p"·data-group-id="6532182143-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 200 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6 | 200 | ··················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6532182143-5">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6532182143-6">[</span><span·class="n">Info</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·73,·SHA:·1e2bbd3a2728c95b6db495b5fb3bad31bfc32c934c08be0d95799ca10d865cb6·...·]-5">)</span><span·class="w"> |
| 201 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="6 | 201 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="6532182143-3">)</span><span·class="p">.</span></code></pre><h2·id="list_to_atom-1"·class="section-heading"> |
| 202 | ··<a·href="#list_to_atom-1"·class="hover-link"> | 202 | ··<a·href="#list_to_atom-1"·class="hover-link"> |
| 203 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 203 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 204 | ··</a> | 204 | ··</a> |
| 205 | ··<span·class="text">list_to_atom/1</span> | 205 | ··<span·class="text">list_to_atom/1</span> |
| 206 | </h2> | 206 | </h2> |
| 207 | <p>Atoms·are·not·garbage-collected.·Once·an·atom·is·created,·it·is·never·removed. | 207 | <p>Atoms·are·not·garbage-collected.·Once·an·atom·is·created,·it·is·never·removed. |
| 208 | The·emulator·terminates·if·the·limit·for·the·number·of·atoms·(1,048,576·by | 208 | The·emulator·terminates·if·the·limit·for·the·number·of·atoms·(1,048,576·by |
| 209 | default)·is·reached.</p><p>Therefore,·converting·arbitrary·input·strings·to·atoms·can·be·dangerous·in·a | 209 | default)·is·reached.</p><p>Therefore,·converting·arbitrary·input·strings·to·atoms·can·be·dangerous·in·a |
| 210 | system·that·runs·continuously.·If·only·certain·well-defined·atoms·are·allowed·as | 210 | system·that·runs·continuously.·If·only·certain·well-defined·atoms·are·allowed·as |
| 211 | input,·<a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_existing_atom/1"><code·class="inline">list_to_existing_atom/1</code></a>·or | 211 | input,·<a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_existing_atom/1"><code·class="inline">list_to_existing_atom/1</code></a>·or |
| 212 | <a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_existing_atom/1"><code·class="inline">binary_to_existing_atom/1</code></a>·can·be·used | 212 | <a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_existing_atom/1"><code·class="inline">binary_to_existing_atom/1</code></a>·can·be·used |
| 213 | to·guard·against·a·denial-of-service·attack.·(All·atoms·that·are·allowed·must | 213 | to·guard·against·a·denial-of-service·attack.·(All·atoms·that·are·allowed·must |
| 214 | have·been·created·earlier,·for·example,·by·using·all·of·them·in·a·module | 214 | have·been·created·earlier,·for·example,·by·using·all·of·them·in·a·module |
| 215 | and·loading·that·module.)</p><p>Using·<a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_atom/1"><code·class="inline">list_to_atom/1</code></a>·to·construct·an·atom·that | 215 | and·loading·that·module.)</p><p>Using·<a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_atom/1"><code·class="inline">list_to_atom/1</code></a>·to·construct·an·atom·that |
| 216 | is·passed·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply/3</code></a>·is·quite·expensive.</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">apply</span><span·class="p"·data-group-id=" | 216 | is·passed·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply/3</code></a>·is·quite·expensive.</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">apply</span><span·class="p"·data-group-id="5074009201-1">(</span><span·class="nf">list_to_atom</span><span·class="p"·data-group-id="5074009201-2">(</span><span·class="s">"some_prefix"</span><span·class="o">++</span><span·class="n">Var</span><span·class="p"·data-group-id="5074009201-2">)</[·...·truncated·by·diffoscope;·len:·196,·SHA:·cf44b0535ccafb2c3f00a04655ebe1c6c1368bb8dbf9eb330effaf70985ba633·...·]-1">)</span></code></pre><h2·id="length-1"·class="section-heading"> |
| 217 | ··<a·href="#length-1"·class="hover-link"> | 217 | ··<a·href="#length-1"·class="hover-link"> |
| 218 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 218 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 219 | ··</a> | 219 | ··</a> |
| 220 | ··<span·class="text">length/1</span> | 220 | ··<span·class="text">length/1</span> |
| 221 | </h2> | 221 | </h2> |
| 222 | <p>The·time·for·calculating·the·length·of·a·list·is·proportional·to·the·length·of | 222 | <p>The·time·for·calculating·the·length·of·a·list·is·proportional·to·the·length·of |
| 223 | the·list,·as·opposed·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#tuple_size/1"><code·class="inline">tuple_size/1</code></a>, | 223 | the·list,·as·opposed·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#tuple_size/1"><code·class="inline">tuple_size/1</code></a>, |
| 224 | <a·href="../../erts-15.2.7/doc/html/erlang.html#byte_size/1"><code·class="inline">byte_size/1</code></a>,·and·<a·href="../../erts-15.2.7/doc/html/erlang.html#bit_size/1"><code·class="inline">bit_size/1</code></a>,·which·all | 224 | <a·href="../../erts-15.2.7/doc/html/erlang.html#byte_size/1"><code·class="inline">byte_size/1</code></a>,·and·<a·href="../../erts-15.2.7/doc/html/erlang.html#bit_size/1"><code·class="inline">bit_size/1</code></a>,·which·all |
| 225 | execute·in·constant·time.</p><p>Normally,·there·is·no·need·to·worry·about·the·speed·of·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length/1</code></a>, | 225 | execute·in·constant·time.</p><p>Normally,·there·is·no·need·to·worry·about·the·speed·of·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length/1</code></a>, |
| 226 | because·it·is·efficiently·implemented·in·C.·In·time-critical·code,·you·might | 226 | because·it·is·efficiently·implemented·in·C.·In·time-critical·code,·you·might |
| 227 | want·to·avoid·it·if·the·input·list·could·potentially·be·very·long.</p><p>Some·uses·of·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length/1</code></a>·can·be·replaced·by·matching.·For·example, | 227 | want·to·avoid·it·if·the·input·list·could·potentially·be·very·long.</p><p>Some·uses·of·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length/1</code></a>·can·be·replaced·by·matching.·For·example, |
| 228 | the·following·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 228 | the·following·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="6252592105-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="6252592105-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">length</span><span·class="p"·data-group-id="6252592105-2">(</span[·...·truncated·by·diffoscope;·len:·66,·SHA:·53bce16fb0f1b521046c6e32451e0c2f16d1c7bfd998d6256593add900b50838·...·]-2">)</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">3</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 229 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>can·be·rewritten·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 229 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>can·be·rewritten·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="0498551657-1">(</span><span·class="p"·data-group-id="0498551657-2">[</span><span·class="p">_</span><span·class="p">,</span><span·class="p">_</span><span·class="p">,</span><span·class="p">_</span><span·class="p">|</span><span·class="p">_</span><span·class="[·...·truncated·by·diffoscope;·len:·129,·SHA:·c4cd73d26c8db07718db1ec4cb4536fd6a9da052c0b56f0642d33b34be6f45ab·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 230 | ···</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>One·slight·difference·is·that·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length(L)</code></a>·fails·if·<code·class="inline">L</code>·is·an | 230 | ···</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>One·slight·difference·is·that·<a·href="../../erts-15.2.7/doc/html/erlang.html#length/1"><code·class="inline">length(L)</code></a>·fails·if·<code·class="inline">L</code>·is·an |
| 231 | improper·list,·while·the·pattern·in·the·second·code·fragment·accepts·an·improper | 231 | improper·list,·while·the·pattern·in·the·second·code·fragment·accepts·an·improper |
| 232 | list.</p><h2·id="setelement-3"·class="section-heading"> | 232 | list.</p><h2·id="setelement-3"·class="section-heading"> |
| 233 | ··<a·href="#setelement-3"·class="hover-link"> | 233 | ··<a·href="#setelement-3"·class="hover-link"> |
| 234 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 234 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 235 | ··</a> | 235 | ··</a> |
| 236 | ··<span·class="text">setelement/3</span> | 236 | ··<span·class="text">setelement/3</span> |
| Offset 238, 18 lines modified | Offset 238, 18 lines modified | ||
| 238 | <p><a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·copies·the·tuple·it·modifies.·Therefore, | 238 | <p><a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·copies·the·tuple·it·modifies.·Therefore, |
| 239 | updating·a·tuple·in·a·loop·using·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·creates·a·new | 239 | updating·a·tuple·in·a·loop·using·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·creates·a·new |
| 240 | copy·of·the·tuple·every·time.</p><p>There·is·one·exception·to·the·rule·that·the·tuple·is·copied.·If·the·compiler | 240 | copy·of·the·tuple·every·time.</p><p>There·is·one·exception·to·the·rule·that·the·tuple·is·copied.·If·the·compiler |
| 241 | clearly·can·see·that·destructively·updating·the·tuple·would·give·the·same·result | 241 | clearly·can·see·that·destructively·updating·the·tuple·would·give·the·same·result |
| 242 | as·if·the·tuple·was·copied,·the·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·is | 242 | as·if·the·tuple·was·copied,·the·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·is |
| 243 | replaced·with·a·special·destructive·<code·class="inline">setelement</code>·instruction.·In·the·following | 243 | replaced·with·a·special·destructive·<code·class="inline">setelement</code>·instruction.·In·the·following |
| 244 | code·sequence,·the·first·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·call·copies·the·tuple | 244 | code·sequence,·the·first·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·call·copies·the·tuple |
| 245 | and·modifies·the·ninth·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">multiple_setelement</span><span·class="p"·data-group-id=" | 245 | and·modifies·the·ninth·element:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">multiple_setelement</span><span·class="p"·data-group-id="4579723391-1">(</span><span·class="n">T0</span><span·class="p"·data-group-id="4579723391-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id="4579723391-2">(<[·...·truncated·by·diffoscope;·len:·72,·SHA:·d7de5e2a56366750ebfa18ac0ca012eb863338d422643ffdc39cd718bf9e7ab9·...·]-2">)</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span·class="mi">9</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 246 | ····</span><span·class="n">T1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id=" | 246 | ····</span><span·class="n">T1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id="4579723391-3">(</span><span·class="mi">9</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p"·data-group-id="4579723391-3">)</span><span·class="p">,</span><span·class="w"> |
| 247 | ····</span><span·class="n">T2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id=" | 247 | ····</span><span·class="n">T2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id="4579723391-4">(</span><span·class="mi">7</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foobar</span><span·class="p"·data-group-id="4579723391-4">)</span><span·class="p">,</span><span·class="w"> |
| 248 | ····</span><span·class="nf">setelement</span><span·class="p"·data-group-id=" | 248 | ····</span><span·class="nf">setelement</span><span·class="p"·data-group-id="4579723391-5">(</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">new_value</span><span·class="p"·data-group-id="4579723391-5">)</span><span·class="p">.</span></code></pre><p>The·two·following·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·calls·modify·the·tuple·in |
| 249 | place.</p><p>For·the·optimization·to·be·applied,·<em>all</em>·the·following·conditions·must·be·true:</p><ul><li>The·tuple·argument·must·be·known·to·be·a·tuple·of·a·known·size.</li><li>The·indices·must·be·integer·literals,·not·variables·or·expressions.</li><li>The·indices·must·be·given·in·descending·order.</li><li>There·must·be·no·calls·to·another·function·in·between·the·calls·to | 249 | place.</p><p>For·the·optimization·to·be·applied,·<em>all</em>·the·following·conditions·must·be·true:</p><ul><li>The·tuple·argument·must·be·known·to·be·a·tuple·of·a·known·size.</li><li>The·indices·must·be·integer·literals,·not·variables·or·expressions.</li><li>The·indices·must·be·given·in·descending·order.</li><li>There·must·be·no·calls·to·another·function·in·between·the·calls·to |
| 250 | <a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>.</li><li>The·tuple·returned·from·one·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·call·must·only·be | 250 | <a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>.</li><li>The·tuple·returned·from·one·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>·call·must·only·be |
| 251 | used·in·the·subsequent·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>.</li></ul><p>If·the·code·cannot·be·structured·as·in·the·<code·class="inline">multiple_setelement/1</code>·example,·the | 251 | used·in·the·subsequent·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#setelement/3"><code·class="inline">setelement/3</code></a>.</li></ul><p>If·the·code·cannot·be·structured·as·in·the·<code·class="inline">multiple_setelement/1</code>·example,·the |
| 252 | best·way·to·modify·multiple·elements·in·a·large·tuple·is·to·convert·the·tuple·to | 252 | best·way·to·modify·multiple·elements·in·a·large·tuple·is·to·convert·the·tuple·to |
| 253 | a·list,·modify·the·list,·and·convert·it·back·to·a·tuple.</p><h2·id="size-1"·class="section-heading"> | 253 | a·list,·modify·the·list,·and·convert·it·back·to·a·tuple.</p><h2·id="size-1"·class="section-heading"> |
| Max diff block lines reached; 749/53287 bytes (1.41%) of diff not shown. | |||
| Offset 138, 21 lines modified | Offset 138, 21 lines modified | ||
| 138 | ··<span·class="text">Creating·a·Target·System</span> | 138 | ··<span·class="text">Creating·a·Target·System</span> |
| 139 | </h2> | 139 | </h2> |
| 140 | <p>It·is·assumed·that·you·have·a·working·Erlang/OTP·system·structured·according·to | 140 | <p>It·is·assumed·that·you·have·a·working·Erlang/OTP·system·structured·according·to |
| 141 | the·OTP·design·principles.</p><p><em>Step·1.</em>·Create·a·<code·class="inline">.rel</code>·file·(see·the·<a·href="../../lib/sasl-4.2.2/doc/html/rel.html">rel(4)</a>·manual·page·in | 141 | the·OTP·design·principles.</p><p><em>Step·1.</em>·Create·a·<code·class="inline">.rel</code>·file·(see·the·<a·href="../../lib/sasl-4.2.2/doc/html/rel.html">rel(4)</a>·manual·page·in |
| 142 | SASL),·which·specifies·the·ERTS·version·and·lists·all·applications·that·are·to | 142 | SASL),·which·specifies·the·ERTS·version·and·lists·all·applications·that·are·to |
| 143 | be·included·in·the·new·basic·target·system.·An·example·is·the·following | 143 | be·included·in·the·new·basic·target·system.·An·example·is·the·following |
| 144 | <code·class="inline">mysystem.rel</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·mysystem.rel</span><span·class="w"> | 144 | <code·class="inline">mysystem.rel</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·mysystem.rel</span><span·class="w"> |
| 145 | </span><span·class="p"·data-group-id=" | 145 | </span><span·class="p"·data-group-id="5538982930-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 146 | ·</span><span·class="p"·data-group-id=" | 146 | ·</span><span·class="p"·data-group-id="5538982930-2">{</span><span·class="s">"MYSYSTEM"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"FIRST"</span><span·class="p"·data-group-id="5538982930-2">}</span><span·class="p">,</span><span·class="w"> |
| 147 | ·</span><span·class="p"·data-group-id=" | 147 | ·</span><span·class="p"·data-group-id="5538982930-3">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"5.10.4"</span><span·class="p"·data-group-id="5538982930-3">}</span><span·class="p">,</span><span·class="w"> |
| 148 | ·</span><span·class="p"·data-group-id=" | 148 | ·</span><span·class="p"·data-group-id="5538982930-4">[</span><span·class="p"·data-group-id="5538982930-5">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.16.4"</span><span·class="p"·data-group-id="5538982930-5">}</span><span·class="p">,</span><span·class="w"> |
| 149 | ··</span><span·class="p"·data-group-id=" | 149 | ··</span><span·class="p"·data-group-id="5538982930-6">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1.19.4"</span><span·class="p"·data-group-id="5538982930-6">}</span><span·class="p">,</span><span·class="w"> |
| 150 | ··</span><span·class="p"·data-group-id=" | 150 | ··</span><span·class="p"·data-group-id="5538982930-7">{</span><span·class="ss">sasl</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.3.4"</span><span·class="p"·data-group-id="5538982930-7">}</span><span·class="p">,</span><span·class="w"> |
| 151 | ··</span><span·class="p"·data-group-id=" | 151 | ··</span><span·class="p"·data-group-id="5538982930-8">{</span><span·class="ss">pea</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1.0"</span><span·class="p"·data-group-id="5538982930-8">}</span><span·class="p"·data-group-id="5538982930-4">]</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·309b6ba2f1dbc015f76d2528f4d7e4f04a7fed21a7ea5abb12e398ee836fa6b8·...·]-1">}</span><span·class="p">.</span></code></pre><p>The·listed·applications·are·not·only·original·Erlang/OTP·applications·but |
| 152 | possibly·also·new·applications·that·you·have·written·(here·exemplified·by·the | 152 | possibly·also·new·applications·that·you·have·written·(here·exemplified·by·the |
| 153 | application·Pea·(<code·class="inline">pea</code>)).</p><p><em>Step·2.</em>·Start·Erlang/OTP·from·the·directory·where·the·<code·class="inline">mysystem.rel</code>·file | 153 | application·Pea·(<code·class="inline">pea</code>)).</p><p><em>Step·2.</em>·Start·Erlang/OTP·from·the·directory·where·the·<code·class="inline">mysystem.rel</code>·file |
| 154 | resides:</p><pre><code·class="text">%·erl·-pa·/home/user/target_system/myapps/pea-1.0/ebin</code></pre><p>The·<code·class="inline">-pa</code>·argument·prepends·the·path·to·the·<code·class="inline">ebin</code>·directory·for | 154 | resides:</p><pre><code·class="text">%·erl·-pa·/home/user/target_system/myapps/pea-1.0/ebin</code></pre><p>The·<code·class="inline">-pa</code>·argument·prepends·the·path·to·the·<code·class="inline">ebin</code>·directory·for |
| 155 | the·Pea·application·to·the·code·path.</p><p><em>Step·3.</em>·Create·the·target·system:</p><pre><code·class="text">1>·target_system:create("mysystem").</code></pre><p>The·function·<code·class="inline">target_system:create/1</code>·performs·the·following:</p><ol><li><p>Reads·the·file·<code·class="inline">mysystem.rel</code>·and·creates·a·new·file·<code·class="inline">plain.rel</code>. | 155 | the·Pea·application·to·the·code·path.</p><p><em>Step·3.</em>·Create·the·target·system:</p><pre><code·class="text">1>·target_system:create("mysystem").</code></pre><p>The·function·<code·class="inline">target_system:create/1</code>·performs·the·following:</p><ol><li><p>Reads·the·file·<code·class="inline">mysystem.rel</code>·and·creates·a·new·file·<code·class="inline">plain.rel</code>. |
| 156 | The·new·file·is·identical·to·the·original,·except·that·it·only | 156 | The·new·file·is·identical·to·the·original,·except·that·it·only |
| 157 | lists·the·Kernel·and·STDLIB·applications.</p></li><li><p>From·the·files·<code·class="inline">mysystem.rel</code>·and·<code·class="inline">plain.rel</code>·creates·the·files | 157 | lists·the·Kernel·and·STDLIB·applications.</p></li><li><p>From·the·files·<code·class="inline">mysystem.rel</code>·and·<code·class="inline">plain.rel</code>·creates·the·files |
| 158 | <code·class="inline">mysystem.script</code>,·<code·class="inline">mysystem.boot</code>,·<code·class="inline">plain.script</code>,·and·<code·class="inline">plain.boot</code> | 158 | <code·class="inline">mysystem.script</code>,·<code·class="inline">mysystem.boot</code>,·<code·class="inline">plain.script</code>,·and·<code·class="inline">plain.boot</code> |
| Offset 242, 25 lines modified | Offset 242, 25 lines modified | ||
| 242 | ··<a·href="#creating-the-next-version"·class="hover-link"> | 242 | ··<a·href="#creating-the-next-version"·class="hover-link"> |
| 243 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 243 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 244 | ··</a> | 244 | ··</a> |
| 245 | ··<span·class="text">Creating·the·Next·Version</span> | 245 | ··<span·class="text">Creating·the·Next·Version</span> |
| 246 | </h2> | 246 | </h2> |
| 247 | <p>In·this·example·the·Pea·application·has·been·changed,·and·so·are·the | 247 | <p>In·this·example·the·Pea·application·has·been·changed,·and·so·are·the |
| 248 | applications·ERTS,·Kernel,·STDLIB·and·SASL.</p><p><em>Step·1.</em>·Create·the·file·<code·class="inline">.rel</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·mysystem2.rel</span><span·class="w"> | 248 | applications·ERTS,·Kernel,·STDLIB·and·SASL.</p><p><em>Step·1.</em>·Create·the·file·<code·class="inline">.rel</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·mysystem2.rel</span><span·class="w"> |
| 249 | </span><span·class="p"·data-group-id=" | 249 | </span><span·class="p"·data-group-id="4701296045-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 250 | ·</span><span·class="p"·data-group-id=" | 250 | ·</span><span·class="p"·data-group-id="4701296045-2">{</span><span·class="s">"MYSYSTEM"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SECOND"</span><span·class="p"·data-group-id="4701296045-2">}</span><span·class="p">,</span><span·class="w"> |
| 251 | ·</span><span·class="p"·data-group-id=" | 251 | ·</span><span·class="p"·data-group-id="4701296045-3">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"6.0"</span><span·class="p"·data-group-id="4701296045-3">}</span><span·class="p">,</span><span·class="w"> |
| 252 | ·</span><span·class="p"·data-group-id=" | 252 | ·</span><span·class="p"·data-group-id="4701296045-4">[</span><span·class="p"·data-group-id="4701296045-5">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"3.0"</span><span·class="p"·data-group-id="4701296045-5">}</span><span·class="p">,</span><span·class="w"> |
| 253 | ··</span><span·class="p"·data-group-id=" | 253 | ··</span><span·class="p"·data-group-id="4701296045-6">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.0"</span><span·class="p"·data-group-id="4701296045-6">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ··</span><span·class="p"·data-group-id=" | 254 | ··</span><span·class="p"·data-group-id="4701296045-7">{</span><span·class="ss">sasl</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.4"</span><span·class="p"·data-group-id="4701296045-7">}</span><span·class="p">,</span><span·class="w"> |
| 255 | ··</span><span·class="p"·data-group-id=" | 255 | ··</span><span·class="p"·data-group-id="4701296045-8">{</span><span·class="ss">pea</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.0"</span><span·class="p"·data-group-id="4701296045-8">}</span><span·class="p"·data-group-id="4701296045-4">]</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·210600fc6b55291be782fd60a7167e11a5df92f426f6864ad170911192b3c498·...·]-1">}</span><span·class="p">.</span></code></pre><p><em>Step·2.</em>·Create·the·application·upgrade·file·(see |
| 256 | <a·href="../../lib/sasl-4.2.2/doc/html/appup.html">appup</a>·in·SASL)·for·Pea,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·pea.appup</span><span·class="w"> | 256 | <a·href="../../lib/sasl-4.2.2/doc/html/appup.html">appup</a>·in·SASL)·for·Pea,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·pea.appup</span><span·class="w"> |
| 257 | </span><span·class="p"·data-group-id=" | 257 | </span><span·class="p"·data-group-id="8802538759-1">{</span><span·class="s">"2.0"</span><span·class="p">,</span><span·class="w"> |
| 258 | ·</span><span·class="p"·data-group-id="6627687411-2">[</span><span·class="p"·data-group-id="6627687411-3">{</span><span·class="s">"1.0"</span><span·class="p">,</span><span·class="p"·data-group-id="6627687411-4">[</span><span·class="p"·data-group-id="6627687411-5">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="ss">pea_lib</span><span·class="p"·data-group-id="6627687411-5">}</span><span·class="p"·data-group-id="6627687411-4">]</span><span·class="p"·data-group-id="6627687411-3">}</span><span·class="p"·data-group-id="6627687411-2">]</span><span·class="p">,</span><span·class="w"> | ||
| 259 | ·</span><span·class="p"·data-group-id=" | 258 | ·</span><span·class="p"·data-group-id="8802538759-2">[</span><span·class="p"·data-group-id="8802538759-3">{</span><span·class="s">"1.0"</span><span·class="p">,</span><span·class="p"·data-group-id="8802538759-4">[</span><span·class="p"·data-group-id="8802538759-5">{</span><span·class="[·...·truncated·by·diffoscope;·len:·329,·SHA:·ab03e90f24d44d8e57d27ef885d5ae6d80e9bcc95751cdb7e833f67daa5be27b·...·] |
| 259 | ·</span><span·class="p"·data-group-id="8802538759-6">[</span><span·class="p"·data-group-id="8802538759-7">{</span><span·class="s">"1.0"</span><span·class="p">,</span><span·class="p"·data-group-id="8802538759-8">[</span><span·class="p"·data-group-id="8802538759-9">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="ss">pea_lib</span><span·class="p"·data-group-id="8802538759-9">}</span><span·class="p"·data-group-id="8802538759-8">]</span><span·class="p"·data-group-id="8802538759-7">}</span><span·class="p"·data-group-id="8802538759-6">]</span><span·class="p"·data-group-id="8802538759-1">}</span><span·class="p">.</span></code></pre><p><em>Step·3.</em>·From·the·directory·where·the·file·<code·class="inline">mysystem2.rel</code>·resides,·start·the | ||
| 260 | Erlang/OTP·system,·giving·the·path·to·the·new·version·of·Pea:</p><pre><code·class="text">%·erl·-pa·/home/user/target_system/myapps/pea-2.0/ebin</code></pre><p><em>Step·4.</em>·Create·the·release·upgrade·file·(see·<a·href="../../lib/sasl-4.2.2/doc/html/relup.html">relup</a> | 260 | Erlang/OTP·system,·giving·the·path·to·the·new·version·of·Pea:</p><pre><code·class="text">%·erl·-pa·/home/user/target_system/myapps/pea-2.0/ebin</code></pre><p><em>Step·4.</em>·Create·the·release·upgrade·file·(see·<a·href="../../lib/sasl-4.2.2/doc/html/relup.html">relup</a> |
| 261 | in·SASL):</p><pre><code·class="text">1>·systools:make_relup("mysystem2",["mysystem"],["mysystem"], | 261 | in·SASL):</p><pre><code·class="text">1>·systools:make_relup("mysystem2",["mysystem"],["mysystem"], |
| 262 | ····[{path,["/home/user/target_system/myapps/pea-1.0/ebin", | 262 | ····[{path,["/home/user/target_system/myapps/pea-1.0/ebin", |
| 263 | ····"/my/old/erlang/lib/*/ebin"]}]).</code></pre><p>Here·<code·class="inline">"mysystem"</code>·is·the·base·release·and·<code·class="inline">"mysystem2"</code>·is·the·release·to | 263 | ····"/my/old/erlang/lib/*/ebin"]}]).</code></pre><p>Here·<code·class="inline">"mysystem"</code>·is·the·base·release·and·<code·class="inline">"mysystem2"</code>·is·the·release·to |
| 264 | upgrade·to.</p><p>The·<code·class="inline">path</code>·option·is·used·for·pointing·out·the·old·version·of·all·applications. | 264 | upgrade·to.</p><p>The·<code·class="inline">path</code>·option·is·used·for·pointing·out·the·old·version·of·all·applications. |
| 265 | (The·new·versions·are·already·in·the·code·path·-·assuming·of·course·that·the | 265 | (The·new·versions·are·already·in·the·code·path·-·assuming·of·course·that·the |
| 266 | Erlang·node·on·which·this·is·executed·is·running·the·correct·version·of | 266 | Erlang·node·on·which·this·is·executed·is·running·the·correct·version·of |
| Offset 292, 21 lines modified | Offset 292, 21 lines modified | ||
| 292 | {continue_after_restart,"FIRST",[]} | 292 | {continue_after_restart,"FIRST",[]} |
| 293 | heart:·Tue·Apr··1·12:15:10·2014:·Erlang·has·closed. | 293 | heart:·Tue·Apr··1·12:15:10·2014:·Erlang·has·closed. |
| 294 | heart:·Tue·Apr··1·12:15:11·2014:·Executed·"/usr/local/erl-target/bin/start·/usr/local/erl-target/releases/new_start_erl.data"·->·0.·Terminating. | 294 | heart:·Tue·Apr··1·12:15:11·2014:·Executed·"/usr/local/erl-target/bin/start·/usr/local/erl-target/releases/new_start_erl.data"·->·0.·Terminating. |
| 295 | [End]</code></pre><p>The·above·return·value·and·output·after·the·call·to | 295 | [End]</code></pre><p>The·above·return·value·and·output·after·the·call·to |
| 296 | <a·href="../../lib/sasl-4.2.2/doc/html/release_handler.html#install_release/1"><code·class="inline">release_handler:install_release/1</code></a>·means·that·the·<code·class="inline">release_handler</code>·has | 296 | <a·href="../../lib/sasl-4.2.2/doc/html/release_handler.html#install_release/1"><code·class="inline">release_handler:install_release/1</code></a>·means·that·the·<code·class="inline">release_handler</code>·has |
| 297 | restarted·the·node·by·using·<code·class="inline">heart</code>.·This·is·always·done·when·the·upgrade | 297 | restarted·the·node·by·using·<code·class="inline">heart</code>.·This·is·always·done·when·the·upgrade |
| 298 | involves·a·change·of·the·applications·ERTS,·Kernel,·STDLIB,·or·SASL.·For·more | 298 | involves·a·change·of·the·applications·ERTS,·Kernel,·STDLIB,·or·SASL.·For·more |
| 299 | information,·see·<a·href="upgrade.html">Upgrade·when·Erlang/OTP·has·Changed</a>.</p><p>The·node·is·accessible·through·a·new·pipe:</p><pre><code·class="text">%·/usr/local/erl-target/bin/to_erl·/tmp/erlang.pipe.2</code></pre><p>List·the·available·releases·in·the·system:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">release_handler</span><span·class="p">:</span><span·class="nf">which_releases</span><span·class="p"·data-group-id=" | 299 | information,·see·<a·href="upgrade.html">Upgrade·when·Erlang/OTP·has·Changed</a>.</p><p>The·node·is·accessible·through·a·new·pipe:</p><pre><code·class="text">%·/usr/local/erl-target/bin/to_erl·/tmp/erlang.pipe.2</code></pre><p>List·the·available·releases·in·the·system:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">release_handler</span><span·class="p">:</span><span·class="nf">which_releases</span><span·class="p"·data-group-id="2559998738-1">(</span><span·class="p"·data-group-id="2559998738-1">)</span><span·class="p">.</span><span·class="w"> |
| 300 | </span><span·class="p"·data-group-id=" | 300 | </span><span·class="p"·data-group-id="2559998738-2">[</span><span·class="p"·data-group-id="2559998738-3">{</span><span·class="s">"MYSYSTEM"</span><span·class="p">,</span><span·class="s">"SECOND"</span><span·class="p">,</span><span·class="w"> |
| 301 | ··</span><span·class="p"·data-group-id=" | 301 | ··</span><span·class="p"·data-group-id="2559998738-4">[</span><span·class="s">"kernel-3.0"</span><span·class="p">,</span><span·class="s">"stdlib-2.0"</span><span·class="p">,</span><span·class="s">"sasl-2.4"</span><span·class="p">,</span><span·class="s">"pea-2.0[·...·truncated·by·diffoscope;·len:·53,·SHA:·0fdbd3defd82b33011ee36ec28c9974f150171fc9ce44521b7328b377da84009·...·]8-4">]</span><span·class="p">,</span><span·class="w"> |
| 302 | ··</span><span·class="ss">current</span><span·class="p"·data-group-id=" | 302 | ··</span><span·class="ss">current</span><span·class="p"·data-group-id="2559998738-3">}</span><span·class="p">,</span><span·class="w"> |
| 303 | ·</span><span·class="p"·data-group-id=" | 303 | ·</span><span·class="p"·data-group-id="2559998738-5">{</span><span·class="s">"MYSYSTEM"</span><span·class="p">,</span><span·class="s">"FIRST"</span><span·class="p">,</span><span·class="w"> |
| 304 | ··</span><span·class="p"·data-group-id=" | 304 | ··</span><span·class="p"·data-group-id="2559998738-6">[</span><span·class="s">"kernel-2.16.4"</span><span·class="p">,</span><span·class="s">"stdlib-1.19.4"</span><span·class="p">,</span><span·class="s">"sasl-2.3.4"</span><span·class="p">,</span><span·class="s">"[·...·truncated·by·diffoscope;·len:·61,·SHA:·34b0709bed42f7d1dd2d489ab97698aa9f1de154320149e2041542780b3d6758·...·]8-6">]</span><span·class="p">,</span><span·class="w"> |
| 305 | ··</span><span·class="ss">permanent</span><span·class="p"·data-group-id=" | 305 | ··</span><span·class="ss">permanent</span><span·class="p"·data-group-id="2559998738-5">}</span><span·class="p"·data-group-id="2559998738-2">]</span></code></pre><p>Our·new·release,·"SECOND",·is·now·the·current·release,·but·we·can·also·see·that |
| 306 | our·"FIRST"·release·is·still·permanent.·This·means·that·if·the·node·would·be | 306 | our·"FIRST"·release·is·still·permanent.·This·means·that·if·the·node·would·be |
| 307 | restarted·now,·it·would·come·up·running·the·"FIRST"·release·again.</p><p><em>Step·3.</em>·Make·the·new·release·permanent:</p><pre><code·class="text">2>·release_handler:make_permanent("SECOND").</code></pre><p>Check·the·releases·again:</p><pre><code·class="c">3>·release_handler:which_releases(). | 307 | restarted·now,·it·would·come·up·running·the·"FIRST"·release·again.</p><p><em>Step·3.</em>·Make·the·new·release·permanent:</p><pre><code·class="text">2>·release_handler:make_permanent("SECOND").</code></pre><p>Check·the·releases·again:</p><pre><code·class="c">3>·release_handler:which_releases(). |
| 308 | [{"MYSYSTEM","SECOND", | 308 | [{"MYSYSTEM","SECOND", |
| 309 | ··["kernel-3.0","stdlib-2.0","sasl-2.4","pea-2.0"], | 309 | ··["kernel-3.0","stdlib-2.0","sasl-2.4","pea-2.0"], |
| 310 | ··permanent}, | 310 | ··permanent}, |
| 311 | ·{"MYSYSTEM","FIRST", | 311 | ·{"MYSYSTEM","FIRST", |
| 312 | ··["kernel-2.16.4","stdlib-1.19.4","sasl-2.3.4","pea-1.0"], | 312 | ··["kernel-2.16.4","stdlib-1.19.4","sasl-2.3.4","pea-1.0"], |
| Offset 315, 268 lines modified | Offset 315, 268 lines modified | ||
| 315 | ··<a·href="#listing-of-target_system-erl"·class="hover-link"> | 315 | ··<a·href="#listing-of-target_system-erl"·class="hover-link"> |
| 316 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 316 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 317 | ··</a> | 317 | ··</a> |
| 318 | ··<span·class="text">Listing·of·target_system.erl</span> | 318 | ··<span·class="text">Listing·of·target_system.erl</span> |
| 319 | </h2> | 319 | </h2> |
| 320 | <p>This·module·can·also·be·found·in·the·<code·class="inline">examples</code>·directory·of·the·SASL | 320 | <p>This·module·can·also·be·found·in·the·<code·class="inline">examples</code>·directory·of·the·SASL |
| 321 | application.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 321 | application.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 322 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 322 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9973304473-1">(</span><span·class="ss">target_system</span><span·class="p"·data-group-id="9973304473-1">)</span><span·class="p">.</span><span·class="w"> |
| 323 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 323 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9973304473-2">(</span><span·class="p"·data-group-id="9973304473-3">[</span><span·class="ss">create</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">create</span><span·class="p">/</span>[·...·truncated·by·diffoscope;·len:·247,·SHA:·f2c2fa6c72c0accfbd9a04d6954d0b1ed821edcb08319968222eb13b68a995b9·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 324 | </span><span·class="c1">%%·Note:·RelFileName·below·is·the·*stem*·without·trailing·.rel,</span><span·class="w"> | 324 | </span><span·class="c1">%%·Note:·RelFileName·below·is·the·*stem*·without·trailing·.rel,</span><span·class="w"> |
| 325 | </span><span·class="c1">%%·.script·etc.</span><span·class="w"> | 325 | </span><span·class="c1">%%·.script·etc.</span><span·class="w"> |
| 326 | </span><span·class="c1">%%</span><span·class="w"> | 326 | </span><span·class="c1">%%</span><span·class="w"> |
| 327 | </span><span·class="c1">%%·create(RelFileName)</span><span·class="w"> | 327 | </span><span·class="c1">%%·create(RelFileName)</span><span·class="w"> |
| 328 | </span><span·class="c1">%%</span><span·class="w"> | 328 | </span><span·class="c1">%%</span><span·class="w"> |
| 329 | </span><span·class="nf">create</span><span·class="p"·data-group-id=" | 329 | </span><span·class="nf">create</span><span·class="p"·data-group-id="9973304473-4">(</span><span·class="n">RelFileName</span><span·class="p"·data-group-id="9973304473-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 330 | ····</span><span·class="nf">create</span><span·class="p"·data-group-id=" | 330 | ····</span><span·class="nf">create</span><span·class="p"·data-group-id="9973304473-5">(</span><span·class="n">RelFileName</span><span·class="p">,</span><span·class="p"·data-group-id="9973304473-6">[</span><span·class="p"·data-group-id="9973304473-6">]</span><span·class="p"·data-group-id="9973304473-5">)</span><span·class="p">.</span><span·class="w"> |
| 331 | </span><span·class="nf">create</span><span·class="p"·data-group-id=" | 331 | </span><span·class="nf">create</span><span·class="p"·data-group-id="9973304473-7">(</span><span·class="n">RelFileName</span><span·class="p">,</span><span·class="n">SystoolsOpts</span><span·class="p"·data-group-id="9973304473-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 332 | ····</span><span·class="n">RelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".rel"</span><span·class="p">,</span><span·class="w"> | 332 | ····</span><span·class="n">RelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".rel"</span><span·class="p">,</span><span·class="w"> |
| 333 | ····</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">dirname</span><span·class="p"·data-group-id=" | 333 | ····</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">dirname</span><span·class="p"·data-group-id="9973304473-8">(</span><span·class="n">RelFileName</span><span·class="p"·data-group-id="9973304473-8">)</span><span·class="p">,</span><span·class="w"> |
| 334 | ····</span><span·class="n">PlainRelFileName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 334 | ····</span><span·class="n">PlainRelFileName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="9973304473-9">(</span><span·class="n">Dir</span><span·class="p">,</span><span·class="s">"plain"</span><span·class="p"·data-group-id="9973304473-9">)</span><span·class="p">,</span><span·class="w"> |
| 335 | ····</span><span·class="n">PlainRelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PlainRelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".rel"</span><span·class="p">,</span><span·class="w"> | 335 | ····</span><span·class="n">PlainRelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PlainRelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".rel"</span><span·class="p">,</span><span·class="w"> |
| 336 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id=" | 336 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="9973304473-10">(</span><span·class="s">"Reading·file:·~ts·...</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9973304473-11">[</span><span·class="n">RelFile</s[·...·truncated·by·diffoscope;·len:·99,·SHA:·1603aa146fc60e82c8d39b79d5309a5fd15c0212a1695dc3351b8e03272ed488·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 337 | ····</span><span·class="p"·data-group-id=" | 337 | ····</span><span·class="p"·data-group-id="9973304473-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9973304473-13">[</span><span·class="n">RelSpec</span><span·class="p"·data-group-id="9973304473-13">]</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·313,·SHA:·fca4b7443bf299c12b6271f34f8389296ee247fb5342932018a52e4b8f805053·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 338 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id=" | 338 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="9973304473-15">(</span><span·class="s">"Creating·file:·~ts·from·~ts·...</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 339 | ··············</span><span·class="p"·data-group-id=" | 339 | ··············</span><span·class="p"·data-group-id="9973304473-16">[</span><span·class="n">PlainRelFile</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RelFile</span><span·class="p"·data-group-id="9973304473-16">]</span><span·class="p"·data-group-id="9973304473-15">)</span><span·class="p">,</span><span·class="w"> |
| 340 | ····</span><span·class="p"·data-group-id=" | 340 | ····</span><span·class="p"·data-group-id="9973304473-17">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 341 | ·····</span><span·class="p"·data-group-id=" | 341 | ·····</span><span·class="p"·data-group-id="9973304473-18">{</span><span·class="n">RelName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RelVsn</span><span·class="p"·data-group-id="9973304473-18">}</span><span·class="p">,</span><span·class="w"> |
| 342 | ·····</span><span·class="p"·data-group-id=" | 342 | ·····</span><span·class="p"·data-group-id="9973304473-19">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErtsVsn</span><span·class="p"·data-group-id="9973304473-19">}</span><span·class="p">,</span><span·class="w"> |
| 343 | ·····</span><span·class="n">AppVsns</span><span·class="p"·data-group-id=" | 343 | ·····</span><span·class="n">AppVsns</span><span·class="p"·data-group-id="9973304473-17">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RelSpec</span><span·class="p">,</span><span·class="w"> |
| 344 | ····</span><span·class="n">PlainRelSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 344 | ····</span><span·class="n">PlainRelSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9973304473-20">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 345 | ····················</span><span·class="p"·data-group-id=" | 345 | ····················</span><span·class="p"·data-group-id="9973304473-21">{</span><span·class="n">RelName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RelVsn</span><span·class="p"·data-group-id="9973304473-21">}</span><span·class="p">,</span><span·class="w"> |
| 346 | ····················</span><span·class="p"·data-group-id=" | 346 | ····················</span><span·class="p"·data-group-id="9973304473-22">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErtsVsn</span><span·class="p"·data-group-id="9973304473-22">}</span><span·class="p">,</span><span·class="w"> |
| 347 | ····················</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id=" | 347 | ····················</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id="9973304473-23">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9973304473-24">(</span><span·class="p"·data-group-id="9973304473-25">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</s[·...·truncated·by·diffoscope;·len:·99,·SHA:·1910de68684917996a780feb4da30d6f35de6cdbb9c0d43996b569af1020a53c·...·]-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 348 | ·········································</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 348 | ·········································</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 349 | ····································</span><span·class="p"·data-group-id=" | 349 | ····································</span><span·class="p"·data-group-id="9973304473-26">(</span><span·class="p"·data-group-id="9973304473-27">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="9973304473-27">}</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·6b45613e2a845ef25c3f7dbf75f8a7fcb8ac89882039b55c1faa8a4c0eff8e60·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 350 | ·········································</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 350 | ·········································</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 351 | ····································</span><span·class="p"·data-group-id=" | 351 | ····································</span><span·class="p"·data-group-id="9973304473-28">(</span><span·class="p">_</span><span·class="p"·data-group-id="9973304473-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 352 | ·········································</span><span·class="ss">false</span><span·class="w"> | 352 | ·········································</span><span·class="ss">false</span><span·class="w"> |
| 353 | ·································</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsns</span><span·class="p"·data-group-id=" | 353 | ·································</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsns</span><span·class="p"·data-group-id="9973304473-23">)</span><span·class="w"> |
| 354 | ···················</span><span·class="p"·data-group-id=" | 354 | ···················</span><span·class="p"·data-group-id="9973304473-20">}</span><span·class="p">,</span><span·class="w"> |
| 355 | ····</span><span·class="p"·data-group-id=" | 355 | ····</span><span·class="p"·data-group-id="9973304473-29">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="9973304473-29">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·387,·SHA:·02015732f3172cbe7cee3e931328e8bdf67413ade31489c6dba461cfee756307·...·]-30">)</span><span·class="p">,</span><span·class="w"> |
| 356 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id=" | 356 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="9973304473-32">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">.</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·206,·SHA:·724201b37565c8211f03961382d9d789b677c59f2fc9037f05587cb1fcf775a8·...·]-32">)</span><span·class="p">,</span><span·class="w"> |
| 357 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 357 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9973304473-34">(</span><span·class="n">Fd</span><span·class="p"·data-group-id="9973304473-34">)</span><span·class="p">,</span><span·class="w"> |
| 358 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id=" | 358 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="9973304473-35">(</span><span·class="s">"Making·\"~ts.script\"·and·\"~ts.boot\"·files·...</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 359 | » ······</span><span·class="p"·data-group-id=" | 359 | » ······</span><span·class="p"·data-group-id="9973304473-36">[</span><span·class="n">PlainRelFileName</span><span·class="p">,</span><span·class="n">PlainRelFileName</span><span·class="p"·data-group-id="9973304473-36">]</span><span·class="p"·data-group-id="9973304473-35">)</span><span·class="p">,</span><span·class="w"> |
| 360 | ····</span><span·class="nf">make_script</span><span·class="p"·data-group-id=" | 360 | ····</span><span·class="nf">make_script</span><span·class="p"·data-group-id="9973304473-37">(</span><span·class="n">PlainRelFileName</span><span·class="p">,</span><span·class="n">SystoolsOpts</span><span·class="p"·data-group-id="9973304473-37">)</span><span·class="p">,</span><span·class="w"> |
| 361 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id=" | 361 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="9973304473-38">(</span><span·class="s">"Making·\"~ts.script\"·and·\"~ts.boot\"·files·...</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 362 | ··············</span><span·class="p"·data-group-id=" | 362 | ··············</span><span·class="p"·data-group-id="9973304473-39">[</span><span·class="n">RelFileName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RelFileName</span><span·class="p"·data-group-id="9973304473-39">]</span><span·class="p"·data-group-id="9973304473-38">)</span><span·class="p">,</span><span·class="w"> |
| 363 | ····</span><span·class="nf">make_script</span><span·class="p"·data-group-id=" | 363 | ····</span><span·class="nf">make_script</span><span·class="p"·data-group-id="9973304473-40">(</span><span·class="n">RelFileName</span><span·class="p">,</span><span·class="n">SystoolsOpts</span><span·class="p"·data-group-id="9973304473-40">)</span><span·class="p">,</span><span·class="w"> |
| 364 | ····</span><span·class="n">TarFileName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".tar.gz"</span><span·class="p">,</span><span·class="w"> | 364 | ····</span><span·class="n">TarFileName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RelFileName</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">".tar.gz"</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 142271/189402 bytes (75.12%) of diff not shown. | |||
| Offset 192, 18 lines modified | Offset 192, 18 lines modified | ||
| 192 | ··</a> | 192 | ··</a> |
| 193 | ··<span·class="text">Representation·of·Floating·Point·Numbers</span> | 193 | ··<span·class="text">Representation·of·Floating·Point·Numbers</span> |
| 194 | </h3> | 194 | </h3> |
| 195 | <p>When·working·with·floats·you·may·not·see·what·you·expect·when·printing·or·doing | 195 | <p>When·working·with·floats·you·may·not·see·what·you·expect·when·printing·or·doing |
| 196 | arithmetic·operations.·This·is·because·floats·are·represented·by·a·fixed·number | 196 | arithmetic·operations.·This·is·because·floats·are·represented·by·a·fixed·number |
| 197 | of·bits·in·a·base-2·system·while·printed·floats·are·represented·with·a·base-10 | 197 | of·bits·in·a·base-2·system·while·printed·floats·are·represented·with·a·base-10 |
| 198 | system.·Erlang·uses·64-bit·floats.·Here·are·examples·of·this·phenomenon:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="mf">0.1</span><span·class="o">+</span><span·class="mf">0.2</span><span·class="p">.</span><span·class="w"> | 198 | system.·Erlang·uses·64-bit·floats.·Here·are·examples·of·this·phenomenon:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="mf">0.1</span><span·class="o">+</span><span·class="mf">0.2</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="mf">0.30000000000000004</span></code></pre><p>The·real·numbers·<code·class="inline">0.1</code>·and·<code·class="inline">0.2</code>·cannot·be·represented·exactly·as·floats.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 199 | </span><span·class="mf">0.30000000000000004</span></code></pre><p>The·real·numbers·<code·class="inline">0.1</code>·and·<code·class="inline">0.2</code>·cannot·be·represented·exactly·as·floats.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="4243790172-1">{</span><span·class="mf">36028797018963968.0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">36028797018963968</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mf">36028797018963968.0</span><span·class="p">,</span><span·class="w"> |
| 200 | ··</span><span·class="mf">36028797018963970.0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">36028797018963970</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mf">36028797018963970.0</span><span·class="p"·data-group-id=" | 200 | ··</span><span·class="mf">36028797018963970.0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">36028797018963970</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mf">36028797018963970.0</span><span·class="p"·data-group-id="4243790172-1">}</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="p"·data-group-id=" | 201 | </span><span·class="p"·data-group-id="4243790172-2">{</span><span·class="mf">3.602879701896397e16</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p">,</span><span·class="w"> |
| 202 | ·</span><span·class="mf">3.602879701896397e16</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id=" | 202 | ·</span><span·class="mf">3.602879701896397e16</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="4243790172-2">}</span><span·class="p">.</span></code></pre><p>The·value·<code·class="inline">36028797018963968</code>·can·be·represented·exactly·as·a·float·value·but |
| 203 | Erlang's·pretty·printer·rounds·<code·class="inline">36028797018963968.0</code>·to·<code·class="inline">3.602879701896397e16</code> | 203 | Erlang's·pretty·printer·rounds·<code·class="inline">36028797018963968.0</code>·to·<code·class="inline">3.602879701896397e16</code> |
| 204 | (<code·class="inline">=36028797018963970.0</code>)·as·all·values·in·the·range | 204 | (<code·class="inline">=36028797018963970.0</code>)·as·all·values·in·the·range |
| 205 | <code·class="inline">[36028797018963966.0,·36028797018963972.0]</code>·are·represented·by | 205 | <code·class="inline">[36028797018963966.0,·36028797018963972.0]</code>·are·represented·by |
| 206 | <code·class="inline">36028797018963968.0</code>.</p><p>For·more·information·about·floats·and·issues·with·them·see:</p><ul><li><a·href="https://floating-point-gui.de/">What·Every·Programmer·Should·Know·About·Floating-Point·Arithmetic</a></li><li><a·href="https://0.30000000000000004.com/">0.30000000000000004.com/</a></li><li><a·href="https://docs.python.org/3/tutorial/floatingpoint.html">Floating·Point·Arithmetic:·Issues·and·Limitations</a></li></ul><p>If·you·need·to·work·with·exact·decimal·fractions,·for·instance·to·represent | 206 | <code·class="inline">36028797018963968.0</code>.</p><p>For·more·information·about·floats·and·issues·with·them·see:</p><ul><li><a·href="https://floating-point-gui.de/">What·Every·Programmer·Should·Know·About·Floating-Point·Arithmetic</a></li><li><a·href="https://0.30000000000000004.com/">0.30000000000000004.com/</a></li><li><a·href="https://docs.python.org/3/tutorial/floatingpoint.html">Floating·Point·Arithmetic:·Issues·and·Limitations</a></li></ul><p>If·you·need·to·work·with·exact·decimal·fractions,·for·instance·to·represent |
| 207 | money,·it·is·recommended·to·use·a·library·that·handles·that,·or·work·in | 207 | money,·it·is·recommended·to·use·a·library·that·handles·that,·or·work·in |
| 208 | cents·instead·of·dollars·or·euros·so·that·decimal·fractions·are·not·needed.</p><p>Also·note·that·Erlang's·floats·do·not·exactly·match·IEEE·754·floats, | 208 | cents·instead·of·dollars·or·euros·so·that·decimal·fractions·are·not·needed.</p><p>Also·note·that·Erlang's·floats·do·not·exactly·match·IEEE·754·floats, |
| 209 | in·that·neither·<em>Inf</em>·nor·<em>NaN</em>·are·supported·in·Erlang.·Any | 209 | in·that·neither·<em>Inf</em>·nor·<em>NaN</em>·are·supported·in·Erlang.·Any |
| Offset 237, 52 lines modified | Offset 237, 52 lines modified | ||
| 237 | by·eight·are·called·<em>binaries</em>.</p><p><em>Examples:</em></p><pre><code·class="text">1>·<<10,20>>. | 237 | by·eight·are·called·<em>binaries</em>.</p><p><em>Examples:</em></p><pre><code·class="text">1>·<<10,20>>. |
| 238 | <<10,20>> | 238 | <<10,20>> |
| 239 | 2>·<<"ABC">>. | 239 | 2>·<<"ABC">>. |
| 240 | <<"ABC">> | 240 | <<"ABC">> |
| 241 | 3>·<<1:1,0:1>>. | 241 | 3>·<<1:1,0:1>>. |
| 242 | <<2:2>></code></pre><p>The·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_bitstring/1"><code·class="inline">is_bitstring/1</code></a>·BIF·tests·whether·a | 242 | <<2:2>></code></pre><p>The·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_bitstring/1"><code·class="inline">is_bitstring/1</code></a>·BIF·tests·whether·a |
| 243 | term·is·a·bit·string,·and·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_binary/1"><code·class="inline">is_binary/1</code></a> | 243 | term·is·a·bit·string,·and·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_binary/1"><code·class="inline">is_binary/1</code></a> |
| 244 | BIF·tests·whether·a·term·is·a·binary.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">is_bitstring</span><span·class="p"·data-group-id=" | 244 | BIF·tests·whether·a·term·is·a·binary.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">is_bitstring</span><span·class="p"·data-group-id="4570703088-1">(</span><span·class="p"·data-group-id="4570703088-2"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">1</span><span·class="p"·data-group-id="4570703088-2">>></span><span·class="p"·data-group-id="457070308[·...·truncated·by·diffoscope;·len:·1,·SHA:·2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 245 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 245 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 246 | 2>·</span><span·class="nf">is_binary</span><span·class="p"·data-group-id=" | 246 | 2>·</span><span·class="nf">is_binary</span><span·class="p"·data-group-id="4570703088-3">(</span><span·class="p"·data-group-id="4570703088-4"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">1</span><span·class="p"·data-group-id="4570703088-4">>></span><span·class="p"·data-group-id="457070308[·...·truncated·by·diffoscope;·len:·1,·SHA:·2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 247 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 248 | 3>·</span><span·class="nf">is_binary</span><span·class="p"·data-group-id=" | 248 | 3>·</span><span·class="nf">is_binary</span><span·class="p"·data-group-id="4570703088-5">(</span><span·class="p"·data-group-id="4570703088-6"><<</span><span·class="mi">42</span><span·class="p"·data-group-id="4570703088-6">>></span><span·class="p"·data-group-id="4570703088-5">)</span><span·class="p">.</span><span·class="w"> |
| 249 | </span><span·class="ss">true</span><span·class="w"> | 249 | </span><span·class="ss">true</span><span·class="w"> |
| 250 | </span></code></pre><p>For·more·examples,·see·<a·href="../../doc/system/bit_syntax.html">Programming·Examples</a>.</p><h2·id="reference"·class="section-heading"> | 250 | </span></code></pre><p>For·more·examples,·see·<a·href="../../doc/system/bit_syntax.html">Programming·Examples</a>.</p><h2·id="reference"·class="section-heading"> |
| 251 | ··<a·href="#reference"·class="hover-link"> | 251 | ··<a·href="#reference"·class="hover-link"> |
| 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 253 | ··</a> | 253 | ··</a> |
| 254 | ··<span·class="text">Reference</span> | 254 | ··<span·class="text">Reference</span> |
| 255 | </h2> | 255 | </h2> |
| 256 | <p>A·term·that·is·<a·href="../../doc/system/system_limits.html#unique_references">unique</a> | 256 | <p>A·term·that·is·<a·href="../../doc/system/system_limits.html#unique_references">unique</a> |
| 257 | among·connected·nodes.·A·reference·is·created·by·calling·the | 257 | among·connected·nodes.·A·reference·is·created·by·calling·the |
| 258 | <a·href="../../erts-15.2.7/doc/html/erlang.html#make_ref/0"><code·class="inline">make_ref/0</code></a>·BIF.·The | 258 | <a·href="../../erts-15.2.7/doc/html/erlang.html#make_ref/0"><code·class="inline">make_ref/0</code></a>·BIF.·The |
| 259 | <a·href="../../erts-15.2.7/doc/html/erlang.html#is_reference/1"><code·class="inline">is_reference/1</code></a>·BIF·tests·whether·a·term | 259 | <a·href="../../erts-15.2.7/doc/html/erlang.html#is_reference/1"><code·class="inline">is_reference/1</code></a>·BIF·tests·whether·a·term |
| 260 | is·a·reference.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id=" | 260 | is·a·reference.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id="2241737346-1">(</span><span·class="p"·data-group-id="2241737346-1">)</span><span·class="p">.</span><span·class="w"> |
| 261 | </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.76482849</span><span·class="p">.</span><span·class="mf">3801088007.198204</span><span·class="o">></span><span·class="gp·unselectable"> | 261 | </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.76482849</span><span·class="p">.</span><span·class="mf">3801088007.198204</span><span·class="o">></span><span·class="gp·unselectable"> |
| 262 | 2>·</span><span·class="nf">is_reference</span><span·class="p"·data-group-id=" | 262 | 2>·</span><span·class="nf">is_reference</span><span·class="p"·data-group-id="2241737346-2">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="2241737346-2">)</span><span·class="p">.</span><span·class="w"> |
| 263 | </span><span·class="ss">true</span></code></pre><h2·id="fun"·class="section-heading"> | 263 | </span><span·class="ss">true</span></code></pre><h2·id="fun"·class="section-heading"> |
| 264 | ··<a·href="#fun"·class="hover-link"> | 264 | ··<a·href="#fun"·class="hover-link"> |
| 265 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 265 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 266 | ··</a> | 266 | ··</a> |
| 267 | ··<span·class="text">Fun</span> | 267 | ··<span·class="text">Fun</span> |
| 268 | </h2> | 268 | </h2> |
| 269 | <p>A·fun·is·a·functional·object.·Funs·make·it·possible·to·create·an·anonymous | 269 | <p>A·fun·is·a·functional·object.·Funs·make·it·possible·to·create·an·anonymous |
| 270 | function·and·pass·the·function·itself·—·not·its·name·—·as·argument·to·other | 270 | function·and·pass·the·function·itself·—·not·its·name·—·as·argument·to·other |
| 271 | functions.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Fun1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 271 | functions.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Fun1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8754656493-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="8754656493-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="o">+</span><span·class="mi">1</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 272 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">6.39074546</span><span·class="o">></span><span·class="gp·unselectable"> | 272 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">6.39074546</span><span·class="o">></span><span·class="gp·unselectable"> |
| 273 | 2>·</span><span·class="n">Fun1</span><span·class="p"·data-group-id=" | 273 | 2>·</span><span·class="n">Fun1</span><span·class="p"·data-group-id="8754656493-2">(</span><span·class="mi">2</span><span·class="p"·data-group-id="8754656493-2">)</span><span·class="p">.</span><span·class="w"> |
| 274 | </span><span·class="mi">3</span></code></pre><p>The·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_function/1"><code·class="inline">is_function/1</code></a>·and·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_function/2"><code·class="inline">is_function/2</code></a> | 274 | </span><span·class="mi">3</span></code></pre><p>The·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_function/1"><code·class="inline">is_function/1</code></a>·and·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_function/2"><code·class="inline">is_function/2</code></a> |
| 275 | BIFs·tests·whether·a·term·is·a·fun.</p><p><em>Examples</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 275 | BIFs·tests·whether·a·term·is·a·fun.</p><p><em>Examples</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0409826400-1">(</span><span·class="p"·data-group-id="0409826400-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 276 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">43.105768164</span><span·class="o">></span><span·class="gp·unselectable"> | 276 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">43.105768164</span><span·class="o">></span><span·class="gp·unselectable"> |
| 277 | 2>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id=" | 277 | 2>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id="0409826400-2">(</span><span·class="n">F</span><span·class="p"·data-group-id="0409826400-2">)</span><span·class="p">.</span><span·class="w"> |
| 278 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 278 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 279 | 3>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id=" | 279 | 3>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id="0409826400-3">(</span><span·class="n">F</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="0409826400-3">)</span><span·class="p">.</span><span·class="w"> |
| 280 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 280 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 281 | 4>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id=" | 281 | 4>·</span><span·class="nf">is_function</span><span·class="p"·data-group-id="0409826400-4">(</span><span·class="n">F</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="0409826400-4">)</span><span·class="p">.</span><span·class="w"> |
| 282 | </span><span·class="ss">false</span></code></pre><p>Read·more·about·funs·in·<a·href="expressions.html#fun-expressions">Fun·Expressions</a>.·For·more | 282 | </span><span·class="ss">false</span></code></pre><p>Read·more·about·funs·in·<a·href="expressions.html#fun-expressions">Fun·Expressions</a>.·For·more |
| 283 | examples,·see·<a·href="../../doc/system/funs.html">Programming·Examples</a>.</p><h2·id="port-identifier"·class="section-heading"> | 283 | examples,·see·<a·href="../../doc/system/funs.html">Programming·Examples</a>.</p><h2·id="port-identifier"·class="section-heading"> |
| 284 | ··<a·href="#port-identifier"·class="hover-link"> | 284 | ··<a·href="#port-identifier"·class="hover-link"> |
| 285 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 285 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 286 | ··</a> | 286 | ··</a> |
| 287 | ··<span·class="text">Port·Identifier</span> | 287 | ··<span·class="text">Port·Identifier</span> |
| 288 | </h2> | 288 | </h2> |
| Offset 300, 94 lines modified | Offset 300, 94 lines modified | ||
| 300 | for·a·new·process·after·a·while.</p><p>The·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·returns·the·Pid·of·the·calling·process.·When | 300 | for·a·new·process·after·a·while.</p><p>The·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·returns·the·Pid·of·the·calling·process.·When |
| 301 | <a·href="ref_man_processes.html#process-creation">creating·a·new·process</a>,·the·parent | 301 | <a·href="ref_man_processes.html#process-creation">creating·a·new·process</a>,·the·parent |
| 302 | process·will·be·able·to·get·the·Pid·of·the·child·process·either·via·the·return | 302 | process·will·be·able·to·get·the·Pid·of·the·child·process·either·via·the·return |
| 303 | value,·as·is·the·case·when·calling·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/3"><code·class="inline">spawn/3</code></a>·BIF,·or·via | 303 | value,·as·is·the·case·when·calling·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/3"><code·class="inline">spawn/3</code></a>·BIF,·or·via |
| 304 | a·message,·which·is·the·case·when·calling·the | 304 | a·message,·which·is·the·case·when·calling·the |
| 305 | <a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_request/5"><code·class="inline">spawn_request/5</code></a>·BIF.·A·Pid·is·typically·used·when | 305 | <a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_request/5"><code·class="inline">spawn_request/5</code></a>·BIF.·A·Pid·is·typically·used·when |
| 306 | when·sending·a·process·a·<a·href="ref_man_processes.html#signals">signal</a>.·The | 306 | when·sending·a·process·a·<a·href="ref_man_processes.html#signals">signal</a>.·The |
| 307 | <a·href="../../erts-15.2.7/doc/html/erlang.html#is_pid/1"><code·class="inline">is_pid/1</code></a>·BIF·tests·whether·a·term·is·a·Pid.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 307 | <a·href="../../erts-15.2.7/doc/html/erlang.html#is_pid/1"><code·class="inline">is_pid/1</code></a>·BIF·tests·whether·a·term·is·a·Pid.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4058453581-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="4058453581-1">)</span><span·class="p">.</span><span·class="w"> |
| 308 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 308 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4058453581-2">(</span><span·class="p"·data-group-id="4058453581-3">[</span><span·class="ss">loop</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4058453581-3">]</span><span·class="p"·data-group-id="4058453581-2">)</span><span·class="p">.</span><span·class="w"> |
| 309 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 309 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="4058453581-4">(</span><span·class="p"·data-group-id="4058453581-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 310 | ····</span><span·class="k">receive</span><span·class="w"> | 310 | ····</span><span·class="k">receive</span><span·class="w"> |
| 311 | ········</span><span·class="ss">who_are_you</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 311 | ········</span><span·class="ss">who_are_you</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 312 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 312 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4058453581-5">(</span><span·class="s">"I·am·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4058453581-6">[</span><span·class="nf">s[·...·truncated·by·diffoscope;·len:·210,·SHA:·bb9dc304d9459852a3c43cbc3bf6eb600808fa3189d69486bf08b4e53c69813a·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 313 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 313 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="4058453581-8">(</span><span·class="p"·data-group-id="4058453581-8">)</span><span·class="w"> |
| 314 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 314 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 315 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 315 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="4058453581-9">(</span><span·class="ss">m</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">loop</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4058453581-10">[</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·64,·SHA:·08e5d8af2e39ae1601977c21e5764cccd8bcd15960fc1b3bdd3e509457089eaf·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 316 | </span><span·class="o"><</span><span·class="mf">0.58</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 316 | </span><span·class="o"><</span><span·class="mf">0.58</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 317 | 2>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">who_are_you</span><span·class="p">.</span><span·class="w"> | 317 | 2>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">who_are_you</span><span·class="p">.</span><span·class="w"> |
| 318 | </span><span·class="n">I</span><span·class="w">·</span><span·class="ss">am</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.58</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> | 318 | </span><span·class="n">I</span><span·class="w">·</span><span·class="ss">am</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.58</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> |
| 319 | </span><span·class="ss">who_are_you</span></code></pre><p>Read·more·about·processes·in·<a·href="ref_man_processes.html">Processes</a>.</p><h2·id="tuple"·class="section-heading"> | 319 | </span><span·class="ss">who_are_you</span></code></pre><p>Read·more·about·processes·in·<a·href="ref_man_processes.html">Processes</a>.</p><h2·id="tuple"·class="section-heading"> |
| 320 | ··<a·href="#tuple"·class="hover-link"> | 320 | ··<a·href="#tuple"·class="hover-link"> |
| 321 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 321 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 322 | ··</a> | 322 | ··</a> |
| 323 | ··<span·class="text">Tuple</span> | 323 | ··<span·class="text">Tuple</span> |
| 324 | </h2> | 324 | </h2> |
| 325 | <p>A·tuple·is·a·compound·data·type·with·a·fixed·number·of·terms:</p><pre><code·class="text">{Term1,...,TermN}</code></pre><p>Each·term·<code·class="inline">Term</code>·in·the·tuple·is·called·an·<em>element</em>.·The·number·of·elements·is | 325 | <p>A·tuple·is·a·compound·data·type·with·a·fixed·number·of·terms:</p><pre><code·class="text">{Term1,...,TermN}</code></pre><p>Each·term·<code·class="inline">Term</code>·in·the·tuple·is·called·an·<em>element</em>.·The·number·of·elements·is |
| 326 | said·to·be·the·<em>size</em>·of·the·tuple.</p><p>There·exists·a·number·of·BIFs·to·manipulate·tuples.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 326 | said·to·be·the·<em>size</em>·of·the·tuple.</p><p>There·exists·a·number·of·BIFs·to·manipulate·tuples.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4846247700-1">{</span><span·class="ss">adam</span><span·class="p">,</span><span·class="mi">24</span><span·class="p">,</span><span·class="p"·data-group-id="4846247700-2">{</span><span·class="ss">july</span><span·class="p">,</span><span·class="mi">29</span><[·...·truncated·by·diffoscope;·len:·93,·SHA:·dacabc3612c94a7ffb1287c7b36150c8a12000aefb29510a650c23247b8654c5·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 327 | </span><span·class="p"·data-group-id=" | 327 | </span><span·class="p"·data-group-id="4846247700-3">{</span><span·class="ss">adam</span><span·class="p">,</span><span·class="mi">24</span><span·class="p">,</span><span·class="p"·data-group-id="4846247700-4">{</span><span·class="ss">july</span><span·class="p">,</span><span·class="mi">29</span><[·...·truncated·by·diffoscope;·len:·93,·SHA:·9046055a24679f65d27988c0a6d6577414086e9a38e005ac1318bef7753f8896·...·]-3">}</span><span·class="gp·unselectable"> |
| 328 | 2>·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 328 | 2>·</span><span·class="nf">element</span><span·class="p"·data-group-id="4846247700-5">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">P</span><span·class="p"·data-group-id="4846247700-5">)</span><span·class="p">.</span><span·class="w"> |
| 329 | </span><span·class="ss">adam</span><span·class="gp·unselectable"> | 329 | </span><span·class="ss">adam</span><span·class="gp·unselectable"> |
| 330 | 3>·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 330 | 3>·</span><span·class="nf">element</span><span·class="p"·data-group-id="4846247700-6">(</span><span·class="mi">3</span><span·class="p">,</span><span·class="n">P</span><span·class="p"·data-group-id="4846247700-6">)</span><span·class="p">.</span><span·class="w"> |
| 331 | </span><span·class="p"·data-group-id=" | 331 | </span><span·class="p"·data-group-id="4846247700-7">{</span><span·class="ss">july</span><span·class="p">,</span><span·class="mi">29</span><span·class="p"·data-group-id="4846247700-7">}</span><span·class="gp·unselectable"> |
| 332 | 4>·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id=" | 332 | 4>·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">setelement</span><span·class="p"·data-group-id="4846247700-8">(</span><span·class="mi">2</span><span·class="p">,</span><span·class="n">P</span><span·class="p">,</span><span·class="mi">25</span><span·class="p"·data-group-id="4846247700-8">)</span><span·class="p">.</span><span·class="w"> |
| 333 | </span><span·class="p"·data-group-id=" | 333 | </span><span·class="p"·data-group-id="4846247700-9">{</span><span·class="ss">adam</span><span·class="p">,</span><span·class="mi">25</span><span·class="p">,</span><span·class="p"·data-group-id="4846247700-10">{</span><span·class="ss">july</span><span·class="p">,</span><span·class="mi">29</span>[·...·truncated·by·diffoscope;·len:·95,·SHA:·8f9391db63ceb1528337079773802aa50e9efabb983cada6a603b2c4da462352·...·]-9">}</span><span·class="gp·unselectable"> |
| 334 | 5>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id=" | 334 | 5>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id="4846247700-11">(</span><span·class="n">P</span><span·class="p"·data-group-id="4846247700-11">)</span><span·class="p">.</span><span·class="w"> |
| 335 | </span><span·class="mi">3</span><span·class="gp·unselectable"> | 335 | </span><span·class="mi">3</span><span·class="gp·unselectable"> |
| 336 | 6>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id=" | 336 | 6>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id="4846247700-12">(</span><span·class="p"·data-group-id="4846247700-13">{</span><span·class="p"·data-group-id="4846247700-13">}</span><span·class="p"·data-group-id="4846247700-12">)</span><span·class="p">.</span><span·class="w"> |
| 337 | </span><span·class="mi">0</span><span·class="gp·unselectable"> | 337 | </span><span·class="mi">0</span><span·class="gp·unselectable"> |
| 338 | 7>·</span><span·class="nf">is_tuple</span><span·class="p"·data-group-id=" | 338 | 7>·</span><span·class="nf">is_tuple</span><span·class="p"·data-group-id="4846247700-14">(</span><span·class="p"·data-group-id="4846247700-15">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="4846247700-15">}</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·f60befafad210b4dc1b3b990080aadd577f08cfd70197dc7a541b47b242e6c5f·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 339 | </span><span·class="ss">true</span></code></pre><h2·id="map"·class="section-heading"> | 339 | </span><span·class="ss">true</span></code></pre><h2·id="map"·class="section-heading"> |
| 340 | ··<a·href="#map"·class="hover-link"> | 340 | ··<a·href="#map"·class="hover-link"> |
| 341 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 341 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 342 | ··</a> | 342 | ··</a> |
| 343 | ··<span·class="text">Map</span> | 343 | ··<span·class="text">Map</span> |
| 344 | </h2> | 344 | </h2> |
| 345 | <p>A·map·is·a·compound·data·type·with·a·variable·number·of·key-value·associations:</p><pre><code·class="text">#{Key1·=>·Value1,·...,·KeyN·=>·ValueN}</code></pre><p>Each·key-value·association·in·the·map·is·called·an·<em>association·pair</em>.·The·key | 345 | <p>A·map·is·a·compound·data·type·with·a·variable·number·of·key-value·associations:</p><pre><code·class="text">#{Key1·=>·Value1,·...,·KeyN·=>·ValueN}</code></pre><p>Each·key-value·association·in·the·map·is·called·an·<em>association·pair</em>.·The·key |
| 346 | and·value·parts·of·the·pair·are·called·<em>elements</em>.·The·number·of·association | 346 | and·value·parts·of·the·pair·are·called·<em>elements</em>.·The·number·of·association |
| 347 | pairs·is·said·to·be·the·<em>size</em>·of·the·map.</p><p>There·exists·a·number·of·BIFs·to·manipulate·maps.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">M1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 347 | pairs·is·said·to·be·the·<em>size</em>·of·the·map.</p><p>There·exists·a·number·of·BIFs·to·manipulate·maps.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">M1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0365237932-1">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">adam</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">age</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·453,·SHA:·6355cf884353377d5cf64b09840acea9bc0e0ce222311008dd6a426503959540·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 348 | </span><span·class="p"·data-group-id=" | 348 | </span><span·class="p"·data-group-id="0365237932-3">#{</span><span·class="ss">age</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">24</span><span·class="p">,</span><span·class="ss">date</span><span·class="w">·</span><span·class="p">=></span>[·...·truncated·by·diffoscope;·len:·405,·SHA:·5eebdbacf9388c7612157e1684a003f11d25b7874659f3c6fae9c519eca2d2fd·...·]-3">}</span><span·class="gp·unselectable"> |
| 349 | 2>·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 349 | 2>·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="0365237932-5">(</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M1</span><span·class="p"·data-group-id="0365237932-5">)</span><span·class="p">.</span><span·class="w"> |
| 350 | </span><span·class="ss">adam</span><span·class="gp·unselectable"> | 350 | </span><span·class="ss">adam</span><span·class="gp·unselectable"> |
| 351 | 3>·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 351 | 3>·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="0365237932-6">(</span><span·class="ss">date</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M1</span><span·class="p"·data-group-id="0365237932-6">)</span><span·class="p">.</span><span·class="w"> |
| 352 | </span><span·class="p"·data-group-id=" | 352 | </span><span·class="p"·data-group-id="0365237932-7">{</span><span·class="ss">july</span><span·class="p">,</span><span·class="mi">29</span><span·class="p"·data-group-id="0365237932-7">}</span><span·class="gp·unselectable"> |
| Max diff block lines reached; 38959/79535 bytes (48.98%) of diff not shown. | |||
| Offset 331, 15 lines modified | Offset 331, 15 lines modified | ||
| 331 | ······<p·class="built-using"> | 331 | ······<p·class="built-using"> |
| 332 | ········Built·using | 332 | ········Built·using |
| 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 335 | ······</p> | 335 | ······</p> |
| 336 | <p>Copyright·©·1996-202 | 336 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 337 | ····</footer> | 337 | ····</footer> |
| 338 | ··</div> | 338 | ··</div> |
| 339 | </main> | 339 | </main> |
| 340 | </div> | 340 | </div> |
| 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 342 | ··<script> | 342 | ··<script> |
| 343 | ··let·initialized·=·false; | 343 | ··let·initialized·=·false; |
| Offset 152, 135 lines modified | Offset 152, 135 lines modified | ||
| 152 | the·code·for·a·process·in·a·generic·part·(a·behaviour·module)·and·a·specific | 152 | the·code·for·a·process·in·a·generic·part·(a·behaviour·module)·and·a·specific |
| 153 | part·(a·<em>callback·module</em>).</p><p>The·behaviour·module·is·part·of·Erlang/OTP.·To·implement·a·process·such·as·a | 153 | part·(a·<em>callback·module</em>).</p><p>The·behaviour·module·is·part·of·Erlang/OTP.·To·implement·a·process·such·as·a |
| 154 | supervisor,·the·user·only·needs·to·implement·the·callback·module,·which·is·to | 154 | supervisor,·the·user·only·needs·to·implement·the·callback·module,·which·is·to |
| 155 | export·a·pre-defined·set·of·functions,·the·<em>callback·functions</em>.</p><p>The·following·example·illustrate·how·code·can·be·divided·into·a·generic·and·a | 155 | export·a·pre-defined·set·of·functions,·the·<em>callback·functions</em>.</p><p>The·following·example·illustrate·how·code·can·be·divided·into·a·generic·and·a |
| 156 | specific·part.·Consider·the·following·code·(written·in·plain·Erlang)·for·a | 156 | specific·part.·Consider·the·following·code·(written·in·plain·Erlang)·for·a |
| 157 | simple·server,·which·keeps·track·of·a·number·of·"channels".·Other·processes·can | 157 | simple·server,·which·keeps·track·of·a·number·of·"channels".·Other·processes·can |
| 158 | allocate·and·free·the·channels·by·calling·the·functions·<code·class="inline">alloc/0</code>·and·<code·class="inline">free/1</code>, | 158 | allocate·and·free·the·channels·by·calling·the·functions·<code·class="inline">alloc/0</code>·and·<code·class="inline">free/1</code>, |
| 159 | respectively.</p><p><a·href=""·id="ch1"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 159 | respectively.</p><p><a·href=""·id="ch1"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4636754275-1">(</span><span·class="ss">ch1</span><span·class="p"·data-group-id="4636754275-1">)</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 160 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4636754275-2">(</span><span·class="p"·data-group-id="4636754275-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4636754275-3">]</span><span·class="p"·data-group-id="4636754275-2">)</span><span·class="p">.</span><span·class="w"> |
| 161 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 161 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4636754275-4">(</span><span·class="p"·data-group-id="4636754275-5">[</span><span·class="ss">alloc</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">free</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·9917ac975c47550eae769859a64800e814d67b9c9444418e5bf9e98623ee10d0·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 162 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4636754275-6">(</span><span·class="p"·data-group-id="4636754275-7">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4636754275-7">]</span><span·class="p"·data-group-id="4636754275-6">)</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 163 | </span><span·class="nf">start</span><span·class="p"·data-group-id="4636754275-8">(</span><span·class="p"·data-group-id="4636754275-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 164 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="4636754275-9">(</span><span·class="ss">ch1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4636754275-10">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·ecb9579062f7b9aecc240a61a49de39f60db25bc778f80a36fb1ea0dccffeae0·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 165 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="4636754275-11">(</span><span·class="p"·data-group-id="4636754275-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 166 | ····</span><span·class="ss">ch1</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="ss">ch1</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4636754275-12">{</span><span·class="nf">self</span><span·class="p"·data-group-id="4636754275-13">(</span><span·class="p"·data-group-id="4636754275-13">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·ac0fea3126a6946e09f5b998afdbf359d737a17cb6e16d5732eb653b8aedb9ff·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 167 | ····</span><span·class="k">receive</span><span·class="w"> | 167 | ····</span><span·class="k">receive</span><span·class="w"> |
| 168 | ········</span><span·class="p"·data-group-id=" | 168 | ········</span><span·class="p"·data-group-id="4636754275-14">{</span><span·class="ss">ch1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Res</span><span·class="p"·data-group-id="4636754275-14">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ············</span><span·class="n">Res</span><span·class="w"> | 169 | ············</span><span·class="n">Res</span><span·class="w"> |
| 170 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 170 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="nf">free</span><span·class="p"·data-group-id=" | 171 | </span><span·class="nf">free</span><span·class="p"·data-group-id="4636754275-15">(</span><span·class="n">Ch</span><span·class="p"·data-group-id="4636754275-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="ss">ch1</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 172 | ····</span><span·class="ss">ch1</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4636754275-16">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="4636754275-16">}</span><span·class="p">,</span><span·class="w"> |
| 173 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 173 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nf">init</span><span·class="p"·data-group-id="4636754275-17">(</span><span·class="p"·data-group-id="4636754275-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 175 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 175 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="4636754275-18">(</span><span·class="ss">ch1</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="4636754275-19">(</span><span·class="p"·data-group-id="4636754275-19">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·2b77fcec907df8481b4879ff3c40f8cf81ddb63d86c1f996819248ede2930a39·...·]-18">)</span><span·class="p">,</span><span·class="w"> |
| 176 | ····</span><span·class="n">Chs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">channels</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="n">Chs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">channels</span><span·class="p"·data-group-id="4636754275-20">(</span><span·class="p"·data-group-id="4636754275-20">)</span><span·class="p">,</span><span·class="w"> |
| 177 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="4636754275-21">(</span><span·class="n">Chs</span><span·class="p"·data-group-id="4636754275-21">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="4636754275-22">(</span><span·class="n">Chs</span><span·class="p"·data-group-id="4636754275-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="k">receive</span><span·class="w"> | 179 | ····</span><span·class="k">receive</span><span·class="w"> |
| 180 | ········</span><span·class="p"·data-group-id=" | 180 | ········</span><span·class="p"·data-group-id="4636754275-23">{</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data-group-id="4636754275-23">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ············</span><span·class="p"·data-group-id=" | 181 | ············</span><span·class="p"·data-group-id="4636754275-24">{</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="4636754275-24">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·143,·SHA:·a01a16380327853781d52a316a1bba1531729d9a3db9409780f315c6ad1a6e6d·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 182 | ············</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 182 | ············</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4636754275-26">{</span><span·class="ss">ch1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="4636754275-26">}</span><span·class="p">,</span><span·class="w"> |
| 183 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 183 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="4636754275-27">(</span><span·class="n">Chs2</span><span·class="p"·data-group-id="4636754275-27">)</span><span·class="p">;</span><span·class="w"> |
| 184 | ········</span><span·class="p"·data-group-id=" | 184 | ········</span><span·class="p"·data-group-id="4636754275-28">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="4636754275-28">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ············</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 185 | ············</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="4636754275-29">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="4636754275-29">)</span><span·class="p">,</span><span·class="w"> |
| 186 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 186 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="4636754275-30">(</span><span·class="n">Chs2</span><span·class="p"·data-group-id="4636754275-30">)</span><span·class="w"> |
| 187 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·code·for·the·server·can·be·rewritten·into·a·generic·part·<code·class="inline">server.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·code·for·the·server·can·be·rewritten·into·a·generic·part·<code·class="inline">server.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8927442421-1">(</span><span·class="ss">server</span><span·class="p"·data-group-id="8927442421-1">)</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 188 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8927442421-2">(</span><span·class="p"·data-group-id="8927442421-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8927442421-3">]</span><span·class="p"·data-group-id="8927442421-2">)</span><span·class="p">.</span><span·class="w"> |
| 189 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 189 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8927442421-4">(</span><span·class="p"·data-group-id="8927442421-5">[</span><span·class="ss">call</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">cast</span><span·class="p">/</span><spa[·...·truncated·by·diffoscope;·len:·115,·SHA:·1ca62588a1b1d85f23176886df5b739bdc6aaa8fcb537cf438d1eb617658ee53·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 190 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 190 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8927442421-6">(</span><span·class="p"·data-group-id="8927442421-7">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8927442421-7">]</span><span·class="p"·data-group-id="8927442421-6">)</span><span·class="p">.</span><span·class="w"> |
| 191 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 191 | </span><span·class="nf">start</span><span·class="p"·data-group-id="8927442421-8">(</span><span·class="n">Mod</span><span·class="p"·data-group-id="8927442421-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 192 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="8927442421-9">(</span><span·class="ss">server</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8927442421-10">[</span><span·class="n">Mod</span>[·...·truncated·by·diffoscope;·len:·95,·SHA:·ce3346587e42c2f786bf04a13efe423f5a5f1d4ce3f98da014326b172bafc7bc·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="nf">call</span><span·class="p"·data-group-id=" | 193 | </span><span·class="nf">call</span><span·class="p"·data-group-id="8927442421-11">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="8927442421-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 194 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="8927442421-12">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="8927442421-13">(</span><span·class="p"·data-group-id="8927442421-13">)</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·94,·SHA:·acc675336ae617a4ad269ed992d9accff3fa6ed596716e7f9cce1db7abd2b332·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 195 | ····</span><span·class="k">receive</span><span·class="w"> | 195 | ····</span><span·class="k">receive</span><span·class="w"> |
| 196 | ········</span><span·class="p"·data-group-id=" | 196 | ········</span><span·class="p"·data-group-id="8927442421-14">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Res</span><span·class="p"·data-group-id="8927442421-14">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 197 | ············</span><span·class="n">Res</span><span·class="w"> | 197 | ············</span><span·class="n">Res</span><span·class="w"> |
| 198 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 198 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="nf">cast</span><span·class="p"·data-group-id=" | 199 | </span><span·class="nf">cast</span><span·class="p"·data-group-id="8927442421-15">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="8927442421-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 200 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="8927442421-16">{</span><span·class="ss">cast</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="8927442421-16">}</span><span·class="p">,</span><span·class="w"> |
| 201 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 201 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 202 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 202 | </span><span·class="nf">init</span><span·class="p"·data-group-id="8927442421-17">(</span><span·class="n">Mod</span><span·class="p"·data-group-id="8927442421-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 203 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 203 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="8927442421-18">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="8927442421-19">(</span><span·class="p"·data-group-id="8927442421-19">)</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·6ae14267f1ab08fce02e38551e21b49981ea073d15ac43b48e8133dc3517d1aa·...·]-18">)</span><span·class="p">,</span><span·class="w"> |
| 204 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">:</span><span·class="nf">init</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">:</span><span·class="nf">init</span><span·class="p"·data-group-id="8927442421-20">(</span><span·class="p"·data-group-id="8927442421-20">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="8927442421-21">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="8927442421-21">)</span><span·class="p">.</span><span·class="w"> |
| 206 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 206 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="8927442421-22">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="8927442421-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ····</span><span·class="k">receive</span><span·class="w"> | 207 | ····</span><span·class="k">receive</span><span·class="w"> |
| 208 | ········</span><span·class="p"·data-group-id=" | 208 | ········</span><span·class="p"·data-group-id="8927442421-23">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="8927442421-23">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ············</span><span·class="p"·data-group-id=" | 209 | ············</span><span·class="p"·data-group-id="8927442421-24">{</span><span·class="n">Res</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State2</span><span·class="p"·data-group-id="8927442421-24">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·278,·SHA:·9a7f9c95230f84f460d04069a529da9297ba67700afca71cd83f66b4249b383c·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 210 | ············</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 210 | ············</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="8927442421-26">{</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Res</span><span·class="p"·data-group-id="8927442421-26">}</span><span·class="p">,</span><span·class="w"> |
| 211 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 211 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="8927442421-27">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State2</span><span·class="p"·data-group-id="8927442421-27">)</span><span·class="p">;</span><span·class="w"> |
| 212 | ········</span><span·class="p"·data-group-id=" | 212 | ········</span><span·class="p"·data-group-id="8927442421-28">{</span><span·class="ss">cast</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="8927442421-28">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">:</span><span·class="nf">handle_cast</span><span·class="p"·data-group-id=" | 213 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">:</span><span·class="nf">handle_cast</span><span·class="p"·data-group-id="8927442421-29">(</span><span·class="n">Req</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="8927442421-29">)</span><span·class="p">,</span><span·class="w"> |
| 214 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 214 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="8927442421-30">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State2</span><span·class="p"·data-group-id="8927442421-30">)</span><span·class="w"> |
| 215 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>And·a·callback·module·<code·class="inline">ch2.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 215 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>And·a·callback·module·<code·class="inline">ch2.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9611842933-1">(</span><span·class="ss">ch2</span><span·class="p"·data-group-id="9611842933-1">)</span><span·class="p">.</span><span·class="w"> |
| 216 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 216 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9611842933-2">(</span><span·class="p"·data-group-id="9611842933-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="9611842933-3">]</span><span·class="p"·data-group-id="9611842933-2">)</span><span·class="p">.</span><span·class="w"> |
| 217 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 217 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9611842933-4">(</span><span·class="p"·data-group-id="9611842933-5">[</span><span·class="ss">alloc</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">free</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·fc08fa638d2b3b48b89a29e02df97d4980a88db29ec8421792cdde7b12134f03·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 218 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9611842933-6">(</span><span·class="p"·data-group-id="9611842933-7">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</sp[·...·truncated·by·diffoscope;·len:·254,·SHA:·575175ac731a86bfe8eaffdf17301835e33be9421b728a4199ac24f8e3cf16ec·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 219 | </span><span·class="nf">start</span><span·class="p"·data-group-id="9611842933-8">(</span><span·class="p"·data-group-id="9611842933-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 220 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9611842933-9">(</span><span·class="ss">ch2</span><span·class="p"·data-group-id="9611842933-9">)</span><span·class="p">.</span><span·class="w"> |
| 221 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 221 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="9611842933-10">(</span><span·class="p"·data-group-id="9611842933-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 222 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 222 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9611842933-11">(</span><span·class="ss">ch2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data-group-id="9611842933-11">)</span><span·class="p">.</span><span·class="w"> |
| 223 | </span><span·class="nf">free</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nf">free</span><span·class="p"·data-group-id="9611842933-12">(</span><span·class="n">Ch</span><span·class="p"·data-group-id="9611842933-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 224 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="9611842933-13">(</span><span·class="ss">ch2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9611842933-14">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><sp[·...·truncated·by·diffoscope;·len:·92,·SHA:·e7e052e7613f2bf7dfdddc29edf982c840df13ff22978311c540769220412128·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 225 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 225 | </span><span·class="nf">init</span><span·class="p"·data-group-id="9611842933-15">(</span><span·class="p"·data-group-id="9611842933-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 226 | ····</span><span·class="nf">channels</span><span·class="p"·data-group-id=" | 226 | ····</span><span·class="nf">channels</span><span·class="p"·data-group-id="9611842933-16">(</span><span·class="p"·data-group-id="9611842933-16">)</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 227 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="9611842933-17">(</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="9611842933-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ····</span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 228 | ····</span><span·class="nf">alloc</span><span·class="p"·data-group-id="9611842933-18">(</span><span·class="n">Chs</span><span·class="p"·data-group-id="9611842933-18">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·=>·{Ch,Chs2}</span><span·class="w"> |
| 229 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id=" | 229 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id="9611842933-19">(</span><span·class="p"·data-group-id="9611842933-20">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="9611842933-20">}</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·91,·SHA:·e67270ed792c4c77d62ba2fd3350168a267b7e5bf2648bf08773bfef1492a909·...·]-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 230 | ····</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="nf">free</span><span·class="p"·data-group-id="9611842933-21">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="9611842933-21">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·=>·Chs2</span></code></pre><p>Notice·the·following:</p><ul><li>The·code·in·<code·class="inline">server</code>·can·be·reused·to·build·many·different·servers.</li><li>The·server·name,·in·this·example·the·atom·<code·class="inline">ch2</code>,·is·hidden·from·the·users·of |
| 231 | the·client·functions.·This·means·that·the·name·can·be·changed·without | 231 | the·client·functions.·This·means·that·the·name·can·be·changed·without |
| 232 | affecting·them.</li><li>The·protocol·(messages·sent·to·and·received·from·the·server)·is·also·hidden. | 232 | affecting·them.</li><li>The·protocol·(messages·sent·to·and·received·from·the·server)·is·also·hidden. |
| 233 | This·is·good·programming·practice·and·allows·one·to·change·the·protocol | 233 | This·is·good·programming·practice·and·allows·one·to·change·the·protocol |
| 234 | without·changing·the·code·using·the·interface·functions.</li><li>The·functionality·of·<code·class="inline">server</code>·can·be·extended·without·having·to·change·<code·class="inline">ch2</code> | 234 | without·changing·the·code·using·the·interface·functions.</li><li>The·functionality·of·<code·class="inline">server</code>·can·be·extended·without·having·to·change·<code·class="inline">ch2</code> |
| 235 | or·any·other·callback·module.</li></ul><p>In·<code·class="inline">ch1.erl</code>·and·<code·class="inline">ch2.erl</code>·above,·the·implementation·of·<code·class="inline">channels/0</code>,·<code·class="inline">alloc/1</code>, | 235 | or·any·other·callback·module.</li></ul><p>In·<code·class="inline">ch1.erl</code>·and·<code·class="inline">ch2.erl</code>·above,·the·implementation·of·<code·class="inline">channels/0</code>,·<code·class="inline">alloc/1</code>, |
| 236 | and·<code·class="inline">free/2</code>·has·been·intentionally·left·out,·as·it·is·not·relevant·to·the | 236 | and·<code·class="inline">free/2</code>·has·been·intentionally·left·out,·as·it·is·not·relevant·to·the |
| 237 | example.·For·completeness,·one·way·to·write·these·functions·is·given·below.·This | 237 | example.·For·completeness,·one·way·to·write·these·functions·is·given·below.·This |
| 238 | is·an·example·only,·a·realistic·implementation·must·be·able·to·handle·situations | 238 | is·an·example·only,·a·realistic·implementation·must·be·able·to·handle·situations |
| 239 | like·running·out·of·channels·to·allocate,·and·so·on.</p><p><a·href=""·id="channels-implementation"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">channels</span><span·class="p"·data-group-id=" | 239 | like·running·out·of·channels·to·allocate,·and·so·on.</p><p><a·href=""·id="channels-implementation"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">channels</span><span·class="p"·data-group-id="3282664083-1">(</span><span·class="p"·data-group-id="3282664083-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 240 | ···</span><span·class="p"·data-group-id=" | 240 | ···</span><span·class="p"·data-group-id="3282664083-2">{</span><span·class="p">_</span><span·class="n">Allocated</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3282664083-3">[</span><span·class="p"·data-group-id="3282664083-3">]</span>[·...·truncated·by·diffoscope;·len:·498,·SHA:·87dd2b0dba0d4f553f2c8dae2df1c71e9622eb4a86ba4fdba976b53832521017·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 241 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="3282664083-5">(</span><span·class="p"·data-group-id="3282664083-6">{</span><span·class="n">Allocated</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3282664083-7">[</span><span·class="n">H</span><span·class="p">|</span>[·...·truncated·by·diffoscope;·len:·294,·SHA:·a26fbbc622b750b755efae519a228a19b9c83f038096d76ca9743545794b8c32·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 242 | ···</span><span·class="p"·data-group-id=" | 242 | ···</span><span·class="p"·data-group-id="3282664083-8">{</span><span·class="n">H</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3282664083-9">{</span><span·class="p"·data-group-id="3282664083-10">[</span><span·class="n">H</span><span·class="p">|</span><span·c[·...·truncated·by·diffoscope;·len:·245,·SHA:·7a0d79c4ae2dfd1a6a7d989eddaaabaee47ea136899e6b2dc59e8f711b505238·...·]-8">}</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="nf">free</span><span·class="p"·data-group-id=" | 243 | </span><span·class="nf">free</span><span·class="p"·data-group-id="3282664083-11">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3282664083-12">{</span><span·class="n">Alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Free</span><sp[·...·truncated·by·diffoscope;·len:·195,·SHA:·4f8a31f30c91c72f3ff9049d00695c66eecf3082b6dc1426275c4ea5cd2c9b12·...·]-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 244 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id=" | 244 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id="3282664083-13">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Alloc</span><span·class="p"·data-group-id="3282664083-13">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 245 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 245 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 246 | ·········</span><span·class="p"·data-group-id=" | 246 | ·········</span><span·class="p"·data-group-id="3282664083-14">{</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="3282664083-15">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Alloc</[·...·truncated·by·diffoscope;·len:·332,·SHA:·aaf2bf391f62d055ea434a2507e021819163e8983d9c260c9be00863b188ef93·...·]-14">}</span><span·class="p">;</span><span·class="w"> |
| 247 | ······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 247 | ······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 248 | ·········</span><span·class="n">Channels</span><span·class="w"> | 248 | ·········</span><span·class="n">Channels</span><span·class="w"> |
| 249 | ···</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Code·written·without·using·behaviours·can·be·more·efficient,·but·the·increased | 249 | ···</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Code·written·without·using·behaviours·can·be·more·efficient,·but·the·increased |
| 250 | efficiency·is·at·the·expense·of·generality.·The·ability·to·manage·all | 250 | efficiency·is·at·the·expense·of·generality.·The·ability·to·manage·all |
| 251 | applications·in·the·system·in·a·consistent·manner·is·important.</p><p>Using·behaviours·also·makes·it·easier·to·read·and·understand·code·written·by | 251 | applications·in·the·system·in·a·consistent·manner·is·important.</p><p>Using·behaviours·also·makes·it·easier·to·read·and·understand·code·written·by |
| 252 | other·programmers.·Improvised·programming·structures,·while·possibly·more | 252 | other·programmers.·Improvised·programming·structures,·while·possibly·more |
| 253 | efficient,·are·always·more·difficult·to·understand.</p><p>The·<code·class="inline">server</code>·module·corresponds,·greatly·simplified,·to·the·Erlang/OTP·behaviour | 253 | efficient,·are·always·more·difficult·to·understand.</p><p>The·<code·class="inline">server</code>·module·corresponds,·greatly·simplified,·to·the·Erlang/OTP·behaviour |
| 254 | <code·class="inline">gen_server</code>.</p><p>The·standard·Erlang/OTP·behaviours·are:</p><ul><li><p><a·href="gen_server_concepts.html">gen_server</a></p><p>For·implementing·the·server·of·a·client-server·relation</p></li><li><p><a·href="statem.html">gen_statem</a></p><p>For·implementing·state·machines</p></li><li><p><a·href="events.html">gen_event</a></p><p>For·implementing·event·handling·functionality</p></li><li><p><a·href="sup_princ.html">supervisor</a></p><p>For·implementing·a·supervisor·in·a·supervision·tree</p></li></ul><p>The·compiler·understands·the·module·attribute·<code·class="inline">-behaviour(Behaviour)</code>·and·issues | 254 | <code·class="inline">gen_server</code>.</p><p>The·standard·Erlang/OTP·behaviours·are:</p><ul><li><p><a·href="gen_server_concepts.html">gen_server</a></p><p>For·implementing·the·server·of·a·client-server·relation</p></li><li><p><a·href="statem.html">gen_statem</a></p><p>For·implementing·state·machines</p></li><li><p><a·href="events.html">gen_event</a></p><p>For·implementing·event·handling·functionality</p></li><li><p><a·href="sup_princ.html">supervisor</a></p><p>For·implementing·a·supervisor·in·a·supervision·tree</p></li></ul><p>The·compiler·understands·the·module·attribute·<code·class="inline">-behaviour(Behaviour)</code>·and·issues |
| 255 | warnings·about·missing·callback·functions,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 255 | warnings·about·missing·callback·functions,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1948821443-1">(</span><span·class="ss">chs3</span><span·class="p"·data-group-id="1948821443-1">)</span><span·class="p">.</span><span·class="w"> |
| 256 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 256 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="1948821443-2">(</span><span·class="ss">gen_server</span><span·class="p"·data-group-id="1948821443-2">)</span><span·class="p">.</span><span·class="w"> |
| 257 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 257 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 258 | </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 258 | </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nf">c</span><span·class="p"·data-group-id="1948821443-3">(</span><span·class="ss">chs3</span><span·class="p"·data-group-id="1948821443-3">)</span><span·class="p">.</span><span·class="w"> |
| 259 | </span><span·class="p">.</span><span·class="o">/</span><span·class="ss">chs3</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">10</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="ss">call</span><span·class="o">-</span><span·class="ss">back</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</span><span·class="w"> | 259 | </span><span·class="p">.</span><span·class="o">/</span><span·class="ss">chs3</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">10</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="ss">call</span><span·class="o">-</span><span·class="ss">back</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</span><span·class="w"> |
| Max diff block lines reached; 977/60378 bytes (1.62%) of diff not shown. | |||
| Offset 142, 25 lines modified | Offset 142, 25 lines modified | ||
| 142 | </h2> | 142 | </h2> |
| 143 | <p>A·<em>node</em>·is·an·executing·Erlang·runtime·system·that·has·been·given·a·name,·using | 143 | <p>A·<em>node</em>·is·an·executing·Erlang·runtime·system·that·has·been·given·a·name,·using |
| 144 | the·command-line·flag·<a·href="../../erts-15.2.7/doc/html/erl_cmd.html#name"><code·class="inline">-name</code></a>·(long·names)·or | 144 | the·command-line·flag·<a·href="../../erts-15.2.7/doc/html/erl_cmd.html#name"><code·class="inline">-name</code></a>·(long·names)·or |
| 145 | <a·href="../../erts-15.2.7/doc/html/erl_cmd.html#sname"><code·class="inline">-sname</code></a>·(short·names).</p><p>The·format·of·the·node·name·is·an·atom·<code·class="inline">name@host</code>.·<code·class="inline">name</code>·is·the·name·given·by | 145 | <a·href="../../erts-15.2.7/doc/html/erl_cmd.html#sname"><code·class="inline">-sname</code></a>·(short·names).</p><p>The·format·of·the·node·name·is·an·atom·<code·class="inline">name@host</code>.·<code·class="inline">name</code>·is·the·name·given·by |
| 146 | the·user.·<code·class="inline">host</code>·is·the·full·host·name·if·long·names·are·used,·or·the·first·part | 146 | the·user.·<code·class="inline">host</code>·is·the·full·host·name·if·long·names·are·used,·or·the·first·part |
| 147 | of·the·host·name·if·short·names·are·used.·Function·<a·href="../../erts-15.2.7/doc/html/erlang.html#node/0"><code·class="inline">node()</code></a> | 147 | of·the·host·name·if·short·names·are·used.·Function·<a·href="../../erts-15.2.7/doc/html/erlang.html#node/0"><code·class="inline">node()</code></a> |
| 148 | returns·the·name·of·the·node.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-name·dilbert</span><span·class="w"> | 148 | returns·the·name·of·the·node.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-name·dilbert</span><span·class="w"> |
| 149 | </span><span·class="p"·data-group-id=" | 149 | </span><span·class="p"·data-group-id="7395723409-1">(</span><span·class="ss">dilbert@uab</span><span·class="p">.</span><span·class="ss">ericsson</span><span·class="p">.</span><span·class="ss">se</span><span·class="p"·data-group-id="7395723409-1">)</span><span·class="mi">1</span><span·class="o"[·...·truncated·by·diffoscope;·len:·158,·SHA:·acd87f0e01f73307970f5af127919bbdd59ccac093f204a018d3056538d054eb·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="ss">'dilbert@uab.ericsson.se'</span><span·class="w"> | 150 | </span><span·class="ss">'dilbert@uab.ericsson.se'</span><span·class="w"> |
| 151 | </span><span·class="c1">%·erl·-sname·dilbert</span><span·class="gp·unselectable"> | 151 | </span><span·class="c1">%·erl·-sname·dilbert</span><span·class="gp·unselectable"> |
| 152 | (dilbert@uab)1>·</span><span·class="nf">node</span><span·class="p"·data-group-id=" | 152 | (dilbert@uab)1>·</span><span·class="nf">node</span><span·class="p"·data-group-id="7395723409-3">(</span><span·class="p"·data-group-id="7395723409-3">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="ss">dilbert@uab</span></code></pre><p>The·node·name·can·also·be·given·in·runtime·by·calling·<a·href="../../lib/kernel-10.2.7.1/doc/html/net_kernel.html#start/1"><code·class="inline">net_kernel:start/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl</span><span·class="gp·unselectable"> | 153 | </span><span·class="ss">dilbert@uab</span></code></pre><p>The·node·name·can·also·be·given·in·runtime·by·calling·<a·href="../../lib/kernel-10.2.7.1/doc/html/net_kernel.html#start/1"><code·class="inline">net_kernel:start/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl</span><span·class="gp·unselectable"> |
| 154 | 1>·</span><span·class="nf">node</span><span·class="p"·data-group-id=" | 154 | 1>·</span><span·class="nf">node</span><span·class="p"·data-group-id="4408728506-1">(</span><span·class="p"·data-group-id="4408728506-1">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="ss">nonode@nohost</span><span·class="gp·unselectable"> | 155 | </span><span·class="ss">nonode@nohost</span><span·class="gp·unselectable"> |
| 156 | 2>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 156 | 2>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="4408728506-2">(</span><span·class="p"·data-group-id="4408728506-3">[</span><span·class="ss">dilbert</span><span·class="p">,</span><span·class="ss">shortnames</span><span·class="p"·data-group-id="4408728506-3">]</span><span·class="p"·data-group-id="44087285[·...·truncated·by·diffoscope;·len:·2,·SHA:·aacd834b5cdc64a329e27649143406dd068306542988dfc250d6184745894849·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="4408728506-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.102</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="4408728506-4">}</span><span·class="gp·unselectable"> |
| 158 | (dilbert@uab)3>·</span><span·class="nf">node</span><span·class="p"·data-group-id=" | 158 | (dilbert@uab)3>·</span><span·class="nf">node</span><span·class="p"·data-group-id="4408728506-5">(</span><span·class="p"·data-group-id="4408728506-5">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="ss">dilbert@uab</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·node·with·a·long·node·name·cannot·communicate·with·a·node·with·a·short·node | 159 | </span><span·class="ss">dilbert@uab</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·node·with·a·long·node·name·cannot·communicate·with·a·node·with·a·short·node |
| 160 | name.</p></section><h2·id="node-connections"·class="section-heading"> | 160 | name.</p></section><h2·id="node-connections"·class="section-heading"> |
| 161 | ··<a·href="#node-connections"·class="hover-link"> | 161 | ··<a·href="#node-connections"·class="hover-link"> |
| 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 163 | ··</a> | 163 | ··</a> |
| 164 | ··<span·class="text">Node·Connections</span> | 164 | ··<span·class="text">Node·Connections</span> |
| 165 | </h2> | 165 | </h2> |
| Offset 356, 15 lines modified | Offset 356, 15 lines modified | ||
| 356 | ······<p·class="built-using"> | 356 | ······<p·class="built-using"> |
| 357 | ········Built·using | 357 | ········Built·using |
| 358 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 358 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 359 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 359 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 360 | ······</p> | 360 | ······</p> |
| 361 | <p>Copyright·©·1996-202 | 361 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 362 | ····</footer> | 362 | ····</footer> |
| 363 | ··</div> | 363 | ··</div> |
| 364 | </main> | 364 | </main> |
| 365 | </div> | 365 | </div> |
| 366 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 366 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 367 | ··<script> | 367 | ··<script> |
| 368 | ··let·initialized·=·false; | 368 | ··let·initialized·=·false; |
| Offset 150, 36 lines modified | Offset 150, 36 lines modified | ||
| 150 | (within·the·time-out·specified·by·<code·class="inline">sync_nodes_timeout</code>).</li><li><p><code·class="inline">sync_nodes_timeout·=·integer()·|·infinity</code>·-·Specifies·how·many·milliseconds | 150 | (within·the·time-out·specified·by·<code·class="inline">sync_nodes_timeout</code>).</li><li><p><code·class="inline">sync_nodes_timeout·=·integer()·|·infinity</code>·-·Specifies·how·many·milliseconds |
| 151 | to·wait·for·the·other·nodes·to·start.</p></li></ul><p>When·started,·the·node·waits·for·all·nodes·specified·by·<code·class="inline">sync_nodes_mandatory</code> | 151 | to·wait·for·the·other·nodes·to·start.</p></li></ul><p>When·started,·the·node·waits·for·all·nodes·specified·by·<code·class="inline">sync_nodes_mandatory</code> |
| 152 | and·<code·class="inline">sync_nodes_optional</code>·to·come·up.·When·all·nodes·are·up,·or·when·all | 152 | and·<code·class="inline">sync_nodes_optional</code>·to·come·up.·When·all·nodes·are·up,·or·when·all |
| 153 | mandatory·nodes·are·up·and·the·time·specified·by·<code·class="inline">sync_nodes_timeout</code>·has | 153 | mandatory·nodes·are·up·and·the·time·specified·by·<code·class="inline">sync_nodes_timeout</code>·has |
| 154 | elapsed,·all·applications·start.·If·not·all·mandatory·nodes·are·up,·the·node | 154 | elapsed,·all·applications·start.·If·not·all·mandatory·nodes·are·up,·the·node |
| 155 | terminates.</p><p><em>Example:</em></p><p>An·application·<code·class="inline">myapp</code>·is·to·run·at·the·node·<code·class="inline">cp1@cave</code>.·If·this·node·goes·down, | 155 | terminates.</p><p><em>Example:</em></p><p>An·application·<code·class="inline">myapp</code>·is·to·run·at·the·node·<code·class="inline">cp1@cave</code>.·If·this·node·goes·down, |
| 156 | <code·class="inline">myapp</code>·is·to·be·restarted·at·<code·class="inline">cp2@cave</code>·or·<code·class="inline">cp3@cave</code>.·A·system·configuration | 156 | <code·class="inline">myapp</code>·is·to·be·restarted·at·<code·class="inline">cp2@cave</code>·or·<code·class="inline">cp3@cave</code>.·A·system·configuration |
| 157 | file·<code·class="inline">cp1.config</code>·for·<code·class="inline">cp1@cave</code>·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 157 | file·<code·class="inline">cp1.config</code>·for·<code·class="inline">cp1@cave</code>·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8410893509-1">[</span><span·class="p"·data-group-id="8410893509-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 158 | ··</span><span·class="p"·data-group-id=" | 158 | ··</span><span·class="p"·data-group-id="8410893509-3">[</span><span·class="p"·data-group-id="8410893509-4">{</span><span·class="ss">distributed</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8410893509-5">[</span><span·class="p"·data-group-id="8410893509-6">[·...·truncated·by·diffoscope;·len:·712,·SHA:·54be18bb3e84540f5a68366c1e22cf5c41226a5d2d0e09d348a0c258a0db875c·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 159 | ···</span><span·class="p"·data-group-id=" | 159 | ···</span><span·class="p"·data-group-id="8410893509-9">{</span><span·class="ss">sync_nodes_mandatory</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8410893509-10">[</span><span·class="ss">cp2@cave</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·119,·SHA:·66ab3f93edaeb82b1853ee542d3fc95b832c51bf884721d5e9493acbc8488bc7·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ···</span><span·class="p"·data-group-id=" | 160 | ···</span><span·class="p"·data-group-id="8410893509-11">{</span><span·class="ss">sync_nodes_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5000</span><span·class="p"·data-group-id="8410893509-11">}</span><span·class="w"> |
| 161 | ··</span><span·class="p"·data-group-id=" | 161 | ··</span><span·class="p"·data-group-id="8410893509-3">]</span><span·class="w"> |
| 162 | ·</span><span·class="p"·data-group-id=" | 162 | ·</span><span·class="p"·data-group-id="8410893509-2">}</span><span·class="w"> |
| 163 | </span><span·class="p"·data-group-id=" | 163 | </span><span·class="p"·data-group-id="8410893509-1">]</span><span·class="p">.</span></code></pre><p>The·system·configuration·files·for·<code·class="inline">cp2@cave</code>·and·<code·class="inline">cp3@cave</code>·are·identical, |
| 164 | except·for·the·list·of·mandatory·nodes,·which·is·to·be·<code·class="inline">[cp1@cave,·cp3@cave]</code> | 164 | except·for·the·list·of·mandatory·nodes,·which·is·to·be·<code·class="inline">[cp1@cave,·cp3@cave]</code> |
| 165 | for·<code·class="inline">cp2@cave</code>·and·<code·class="inline">[cp1@cave,·cp2@cave]</code>·for·<code·class="inline">cp3@cave</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>All·involved·nodes·must·have·the·same·value·for·<code·class="inline">distributed</code>·and | 165 | for·<code·class="inline">cp2@cave</code>·and·<code·class="inline">[cp1@cave,·cp2@cave]</code>·for·<code·class="inline">cp3@cave</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>All·involved·nodes·must·have·the·same·value·for·<code·class="inline">distributed</code>·and |
| 166 | <code·class="inline">sync_nodes_timeout</code>.·Otherwise·the·system·behavior·is·undefined.</p></section><h2·id="starting-and-stopping-distributed-applications"·class="section-heading"> | 166 | <code·class="inline">sync_nodes_timeout</code>.·Otherwise·the·system·behavior·is·undefined.</p></section><h2·id="starting-and-stopping-distributed-applications"·class="section-heading"> |
| 167 | ··<a·href="#starting-and-stopping-distributed-applications"·class="hover-link"> | 167 | ··<a·href="#starting-and-stopping-distributed-applications"·class="hover-link"> |
| 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 169 | ··</a> | 169 | ··</a> |
| 170 | ··<span·class="text">Starting·and·Stopping·Distributed·Applications</span> | 170 | ··<span·class="text">Starting·and·Stopping·Distributed·Applications</span> |
| 171 | </h2> | 171 | </h2> |
| 172 | <p>When·all·involved·(mandatory)·nodes·have·been·started,·the·distributed | 172 | <p>When·all·involved·(mandatory)·nodes·have·been·started,·the·distributed |
| 173 | application·can·be·started·by·calling·<code·class="inline">application:start(Application)</code>·at·<em>all | 173 | application·can·be·started·by·calling·<code·class="inline">application:start(Application)</code>·at·<em>all |
| 174 | of·these·nodes.</em></p><p>A·boot·script·(see·<a·href="release_structure.html">Releases</a>)·can·be·used·that | 174 | of·these·nodes.</em></p><p>A·boot·script·(see·<a·href="release_structure.html">Releases</a>)·can·be·used·that |
| 175 | automatically·starts·the·application.</p><p>The·application·is·started·at·the·first·operational·node·that·is·listed·in·the | 175 | automatically·starts·the·application.</p><p>The·application·is·started·at·the·first·operational·node·that·is·listed·in·the |
| 176 | list·of·nodes·in·the·<code·class="inline">distributed</code>·configuration·parameter.·The·application·is | 176 | list·of·nodes·in·the·<code·class="inline">distributed</code>·configuration·parameter.·The·application·is |
| 177 | started·as·usual.·That·is,·an·application·master·is·created·and·calls·the | 177 | started·as·usual.·That·is,·an·application·master·is·created·and·calls·the |
| 178 | application·callback·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 178 | application·callback·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="0247727932-1">(</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StartArgs</span><span·class="p"·data-group-id="0247727932-1">)</span></code></pre><p>Example:</p><p>Continuing·the·example·from·the·previous·section,·the·three·nodes·are·started, |
| 179 | specifying·the·system·configuration·file:</p><pre><code·class="text">>·erl·-sname·cp1·-config·cp1 | 179 | specifying·the·system·configuration·file:</p><pre><code·class="text">>·erl·-sname·cp1·-config·cp1 |
| 180 | >·erl·-sname·cp2·-config·cp2 | 180 | >·erl·-sname·cp2·-config·cp2 |
| 181 | >·erl·-sname·cp3·-config·cp3</code></pre><p>When·all·nodes·are·operational,·<code·class="inline">myapp</code>·can·be·started.·This·is·achieved·by | 181 | >·erl·-sname·cp3·-config·cp3</code></pre><p>When·all·nodes·are·operational,·<code·class="inline">myapp</code>·can·be·started.·This·is·achieved·by |
| 182 | calling·<code·class="inline">application:start(myapp)</code>·at·all·three·nodes.·It·is·then·started·at | 182 | calling·<code·class="inline">application:start(myapp)</code>·at·all·three·nodes.·It·is·then·started·at |
| 183 | <code·class="inline">cp1</code>,·as·shown·in·the·following·figure:</p><p><a·href=""·id="dist1"></a></p><p><img·src="assets/dist1.gif"·alt="Application·myapp·-·Situation·1"·title="Application·myapp·-·Situation·1"/></p><p>Similarly,·the·application·must·be·stopped·by·calling | 183 | <code·class="inline">cp1</code>,·as·shown·in·the·following·figure:</p><p><a·href=""·id="dist1"></a></p><p><img·src="assets/dist1.gif"·alt="Application·myapp·-·Situation·1"·title="Application·myapp·-·Situation·1"/></p><p>Similarly,·the·application·must·be·stopped·by·calling |
| 184 | <code·class="inline">application:stop(Application)</code>·at·all·involved·nodes.</p><h2·id="failover"·class="section-heading"> | 184 | <code·class="inline">application:stop(Application)</code>·at·all·involved·nodes.</p><h2·id="failover"·class="section-heading"> |
| 185 | ··<a·href="#failover"·class="hover-link"> | 185 | ··<a·href="#failover"·class="hover-link"> |
| Offset 187, 30 lines modified | Offset 187, 30 lines modified | ||
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Failover</span> | 188 | ··<span·class="text">Failover</span> |
| 189 | </h2> | 189 | </h2> |
| 190 | <p>If·the·node·where·the·application·is·running·goes·down,·the·application·is | 190 | <p>If·the·node·where·the·application·is·running·goes·down,·the·application·is |
| 191 | restarted·(after·the·specified·time-out)·at·the·first·operational·node·that·is | 191 | restarted·(after·the·specified·time-out)·at·the·first·operational·node·that·is |
| 192 | listed·in·the·list·of·nodes·in·the·<code·class="inline">distributed</code>·configuration·parameter.·This | 192 | listed·in·the·list·of·nodes·in·the·<code·class="inline">distributed</code>·configuration·parameter.·This |
| 193 | is·called·a·<em>failover</em>.</p><p>The·application·is·started·the·normal·way·at·the·new·node,·that·is,·by·the | 193 | is·called·a·<em>failover</em>.</p><p>The·application·is·started·the·normal·way·at·the·new·node,·that·is,·by·the |
| 194 | application·master·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 194 | application·master·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7032068641-1">(</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StartArgs</span><span·class="p"·data-group-id="7032068641-1">)</span></code></pre><p>An·exception·is·if·the·application·has·the·<code·class="inline">start_phases</code>·key·defined·(see |
| 195 | <a·href="included_applications.html">Included·Applications</a>).·The·application·is·then | 195 | <a·href="included_applications.html">Included·Applications</a>).·The·application·is·then |
| 196 | instead·started·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 196 | instead·started·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5579803715-1">(</span><span·class="p"·data-group-id="5579803715-2">{</span><span·class="ss">failover</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="5579803715-2">}</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·100,·SHA:·759fe99833091fbec7ad3e75fc1ff4bb6fa980be7bf5177bc5867706ad7a7235·...·]-1">)</span></code></pre><p>Here·<code·class="inline">Node</code>·is·the·terminated·node.</p><p><em>Example:</em></p><p>If·<code·class="inline">cp1</code>·goes·down,·the·system·checks·which·one·of·the·other·nodes,·<code·class="inline">cp2</code>·or |
| 197 | <code·class="inline">cp3</code>,·has·the·least·number·of·running·applications,·but·waits·for·5·seconds·for | 197 | <code·class="inline">cp3</code>,·has·the·least·number·of·running·applications,·but·waits·for·5·seconds·for |
| 198 | <code·class="inline">cp1</code>·to·restart.·If·<code·class="inline">cp1</code>·does·not·restart·and·<code·class="inline">cp2</code>·runs·fewer·applications | 198 | <code·class="inline">cp1</code>·to·restart.·If·<code·class="inline">cp1</code>·does·not·restart·and·<code·class="inline">cp2</code>·runs·fewer·applications |
| 199 | than·<code·class="inline">cp3</code>,·<code·class="inline">myapp</code>·is·restarted·on·<code·class="inline">cp2</code>.</p><p><a·href=""·id="dist2"></a></p><p><img·src="assets/dist2.gif"·alt="Application·myapp·-·Situation·2"·title="Application·myapp·-·Situation·2"/></p><p>Suppose·now·that·<code·class="inline">cp2</code>·goes·also·down·and·does·not·restart·within·5·seconds. | 199 | than·<code·class="inline">cp3</code>,·<code·class="inline">myapp</code>·is·restarted·on·<code·class="inline">cp2</code>.</p><p><a·href=""·id="dist2"></a></p><p><img·src="assets/dist2.gif"·alt="Application·myapp·-·Situation·2"·title="Application·myapp·-·Situation·2"/></p><p>Suppose·now·that·<code·class="inline">cp2</code>·goes·also·down·and·does·not·restart·within·5·seconds. |
| 200 | <code·class="inline">myapp</code>·is·now·restarted·on·<code·class="inline">cp3</code>.</p><p><a·href=""·id="dist3"></a></p><p><img·src="assets/dist3.gif"·alt="Application·myapp·-·Situation·3"·title="Application·myapp·-·Situation·3"/></p><h2·id="takeover"·class="section-heading"> | 200 | <code·class="inline">myapp</code>·is·now·restarted·on·<code·class="inline">cp3</code>.</p><p><a·href=""·id="dist3"></a></p><p><img·src="assets/dist3.gif"·alt="Application·myapp·-·Situation·3"·title="Application·myapp·-·Situation·3"/></p><h2·id="takeover"·class="section-heading"> |
| 201 | ··<a·href="#takeover"·class="hover-link"> | 201 | ··<a·href="#takeover"·class="hover-link"> |
| 202 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 202 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 203 | ··</a> | 203 | ··</a> |
| 204 | ··<span·class="text">Takeover</span> | 204 | ··<span·class="text">Takeover</span> |
| 205 | </h2> | 205 | </h2> |
| 206 | <p>If·a·node·is·started,·which·has·higher·priority·according·to·<code·class="inline">distributed</code>·than | 206 | <p>If·a·node·is·started,·which·has·higher·priority·according·to·<code·class="inline">distributed</code>·than |
| 207 | the·node·where·a·distributed·application·is·running,·the·application·is | 207 | the·node·where·a·distributed·application·is·running,·the·application·is |
| 208 | restarted·at·the·new·node·and·stopped·at·the·old·node.·This·is·called·a | 208 | restarted·at·the·new·node·and·stopped·at·the·old·node.·This·is·called·a |
| 209 | <em>takeover</em>.</p><p>The·application·is·started·by·the·application·master·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 209 | <em>takeover</em>.</p><p>The·application·is·started·by·the·application·master·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Module</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9449457002-1">(</span><span·class="p"·data-group-id="9449457002-2">{</span><span·class="ss">takeover</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="9449457002-2">}</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·100,·SHA:·d437daf0915090e04252d1f4722f0c6112b492f69a16e3edaada528fed2bae2b·...·]-1">)</span></code></pre><p>Here·<code·class="inline">Node</code>·is·the·old·node.</p><p><em>Example:</em></p><p>If·<code·class="inline">myapp</code>·is·running·at·<code·class="inline">cp3</code>,·and·if·<code·class="inline">cp2</code>·now·restarts,·it·does·not·restart |
| 210 | <code·class="inline">myapp</code>,·as·the·order·between·the·<code·class="inline">cp2</code>·and·<code·class="inline">cp3</code>·nodes·is·undefined.</p><p><a·href=""·id="dist4"></a></p><p><img·src="assets/dist4.gif"·alt="Application·myapp·-·Situation·4"·title="Application·myapp·-·Situation·4"/></p><p>However,·if·<code·class="inline">cp1</code>·also·restarts,·the·function·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html#takeover/2"><code·class="inline">application:takeover/2</code></a>·moves | 210 | <code·class="inline">myapp</code>,·as·the·order·between·the·<code·class="inline">cp2</code>·and·<code·class="inline">cp3</code>·nodes·is·undefined.</p><p><a·href=""·id="dist4"></a></p><p><img·src="assets/dist4.gif"·alt="Application·myapp·-·Situation·4"·title="Application·myapp·-·Situation·4"/></p><p>However,·if·<code·class="inline">cp1</code>·also·restarts,·the·function·<a·href="../../lib/kernel-10.2.7.1/doc/html/application.html#takeover/2"><code·class="inline">application:takeover/2</code></a>·moves |
| 211 | <code·class="inline">myapp</code>·to·<code·class="inline">cp1</code>,·as·<code·class="inline">cp1</code>·has·a·higher·priority·than·<code·class="inline">cp3</code>·for·this | 211 | <code·class="inline">myapp</code>·to·<code·class="inline">cp1</code>,·as·<code·class="inline">cp1</code>·has·a·higher·priority·than·<code·class="inline">cp3</code>·for·this |
| 212 | application.·In·this·case,·<code·class="inline">Module:start({takeover,·cp3@cave},·StartArgs)</code>·is | 212 | application.·In·this·case,·<code·class="inline">Module:start({takeover,·cp3@cave},·StartArgs)</code>·is |
| 213 | executed·at·<code·class="inline">cp1</code>·to·start·the·application.</p><p><a·href=""·id="dist5"></a></p><p><img·src="assets/dist5.gif"·alt="Application·myapp·-·Situation·5"·title="Application·myapp·-·Situation·5"/></p> | 213 | executed·at·<code·class="inline">cp1</code>·to·start·the·application.</p><p><a·href=""·id="dist5"></a></p><p><img·src="assets/dist5.gif"·alt="Application·myapp·-·Situation·5"·title="Application·myapp·-·Situation·5"/></p> |
| 214 | </div> | 214 | </div> |
| 215 | <div·class="bottom-actions"·id="bottom-actions"> | 215 | <div·class="bottom-actions"·id="bottom-actions"> |
| Offset 257, 15 lines modified | Offset 257, 15 lines modified | ||
| 257 | ······<p·class="built-using"> | 257 | ······<p·class="built-using"> |
| 258 | ········Built·using | 258 | ········Built·using |
| 259 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 259 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 260 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 260 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 261 | ······</p> | 261 | ······</p> |
| 262 | <p>Copyright·©·1996-202 | 262 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 263 | ····</footer> | 263 | ····</footer> |
| 264 | ··</div> | 264 | ··</div> |
| 265 | </main> | 265 | </main> |
| 266 | </div> | 266 | </div> |
| 267 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 267 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 268 | ··<script> | 268 | ··<script> |
| 269 | ··let·initialized·=·false; | 269 | ··let·initialized·=·false; |
| Offset 112, 23 lines modified | Offset 112, 23 lines modified | ||
| 112 | ······</a> | 112 | ······</a> |
| 113 | ····<span>Documentation</span> | 113 | ····<span>Documentation</span> |
| 114 | ··</h1> | 114 | ··</h1> |
| 115 | <p>Documentation·in·Erlang·is·done·through·the·<code·class="inline">-moduledoc</code>·and·<code·class="inline">-doc</code> | 115 | <p>Documentation·in·Erlang·is·done·through·the·<code·class="inline">-moduledoc</code>·and·<code·class="inline">-doc</code> |
| 116 | <a·href="modules.html#module-attributes">attributes</a>.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 116 | <a·href="modules.html#module-attributes">attributes</a>.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6271954398-1">(</span><span·class="ss">arith</span><span·class="p"·data-group-id="6271954398-1">)</span><span·class="p">.</span><span·class="w"> |
| 117 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""" | 117 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""" |
| 118 | A·module·for·basic·arithmetic. | 118 | A·module·for·basic·arithmetic. |
| 119 | """</span><span·class="p">.</span><span·class="w"> | 119 | """</span><span·class="p">.</span><span·class="w"> |
| 120 | </span><span·class="w"> | 120 | </span><span·class="w"> |
| 121 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 121 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6271954398-2">(</span><span·class="p"·data-group-id="6271954398-3">[</span><span·class="ss">add</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="6271954398-3">]</span><span·class="p"·data-group-id="6271954398-2">)</span><span·class="p">.</span><span·class="w"> |
| 122 | </span><span·class="w"> | 122 | </span><span·class="w"> |
| 123 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> | 123 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> |
| 124 | </span><span·class="nf">add</span><span·class="p"·data-group-id=" | 124 | </span><span·class="nf">add</span><span·class="p"·data-group-id="6271954398-4">(</span><span·class="n">One</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Two</span><span·class="p"·data-group-id="6271954398-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">One</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Two</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">-moduledoc</code>·attribute·has·to·be·located·before·the·first·<code·class="inline">-doc</code>·attribute |
| 125 | or·function·declaration.·It·documents·the·overall·purpose·of·the·module.</p><p>The·<code·class="inline">-doc</code>·attribute·always·precedes·the·<a·href="ref_man_functions.html">function</a>·or | 125 | or·function·declaration.·It·documents·the·overall·purpose·of·the·module.</p><p>The·<code·class="inline">-doc</code>·attribute·always·precedes·the·<a·href="ref_man_functions.html">function</a>·or |
| 126 | <a·href="modules.html#module-attributes">attribute</a>·it·documents.·The | 126 | <a·href="modules.html#module-attributes">attribute</a>·it·documents.·The |
| 127 | attributes·that·can·be·documented·are | 127 | attributes·that·can·be·documented·are |
| 128 | <a·href="typespec.html#type-declarations-of-user-defined-types">user-defined·types</a> | 128 | <a·href="typespec.html#type-declarations-of-user-defined-types">user-defined·types</a> |
| 129 | (<code·class="inline">-type</code>·and·<code·class="inline">-opaque</code>)·and | 129 | (<code·class="inline">-type</code>·and·<code·class="inline">-opaque</code>)·and |
| 130 | <a·href="modules.html#behaviour-module-attribute">behaviour·module·attributes</a> | 130 | <a·href="modules.html#behaviour-module-attribute">behaviour·module·attributes</a> |
| 131 | (<code·class="inline">-callback</code>).</p><p>By·default·the·format·used·for·documentation·attributes·is | 131 | (<code·class="inline">-callback</code>).</p><p>By·default·the·format·used·for·documentation·attributes·is |
| Offset 140, 55 lines modified | Offset 140, 55 lines modified | ||
| 140 | <a·href="modules.html#documentation-attributes">Documentation·Attributes</a>.</p><p><code·class="inline">-doc</code>·attributes·have·been·available·since·Erlang/OTP·27.</p><h2·id="documentation-metadata"·class="section-heading"> | 140 | <a·href="modules.html#documentation-attributes">Documentation·Attributes</a>.</p><p><code·class="inline">-doc</code>·attributes·have·been·available·since·Erlang/OTP·27.</p><h2·id="documentation-metadata"·class="section-heading"> |
| 141 | ··<a·href="#documentation-metadata"·class="hover-link"> | 141 | ··<a·href="#documentation-metadata"·class="hover-link"> |
| 142 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 142 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 143 | ··</a> | 143 | ··</a> |
| 144 | ··<span·class="text">Documentation·metadata</span> | 144 | ··<span·class="text">Documentation·metadata</span> |
| 145 | </h2> | 145 | </h2> |
| 146 | <p>It·is·possible·to·add·metadata·to·the·documentation·entry.·You·do·this·by·adding | 146 | <p>It·is·possible·to·add·metadata·to·the·documentation·entry.·You·do·this·by·adding |
| 147 | a·<code·class="inline">-moduledoc</code>·or·<code·class="inline">-doc</code>·attribute·with·a·map·as·argument.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 147 | a·<code·class="inline">-moduledoc</code>·or·<code·class="inline">-doc</code>·attribute·with·a·map·as·argument.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1812253490-1">(</span><span·class="ss">arith</span><span·class="p"·data-group-id="1812253490-1">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""" | 148 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""" |
| 149 | A·module·for·basic·arithmetic. | 149 | A·module·for·basic·arithmetic. |
| 150 | """</span><span·class="p">.</span><span·class="w"> | 150 | """</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 151 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id="1812253490-2">#{</span><span·class="ss">since</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"1.0"</span><span·class="p"·data-group-id="1812253490-2">}</span><span·class="p">.</span><span·class="w"> |
| 152 | </span><span·class="w"> | 152 | </span><span·class="w"> |
| 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1812253490-3">(</span><span·class="p"·data-group-id="1812253490-4">[</span><span·class="ss">add</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="1812253490-4">]</span><span·class="p"·data-group-id="1812253490-3">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="w"> | 154 | </span><span·class="w"> |
| 155 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> | 155 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id=" | 156 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id="1812253490-5">(</span><span·class="p"·data-group-id="1812253490-6">#{</span><span·class="ss">since</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"1.0"</span><span·class="p"·data-group-id="181225[·...·truncated·by·diffoscope;·len:·56,·SHA:·316fe7ec69cdfd4c49aad8e7e5482d0e4016baa0739bfd2efd8e8ea36828f5bf·...·]0-5">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">add</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">add</span><span·class="p"·data-group-id="1812253490-7">(</span><span·class="n">One</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Two</span><span·class="p"·data-group-id="1812253490-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">One</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Two</span><span·class="p">.</span></code></pre><p>The·metadata·is·used·by·documentation·tools·to·provide·extra·information·to·the |
| 158 | user.·There·can·be·multiple·metadata·documentation·entries,·in·which·case·the | 158 | user.·There·can·be·multiple·metadata·documentation·entries,·in·which·case·the |
| 159 | maps·will·be·merged·with·the·latest·taking·precedence·if·there·are·duplicate | 159 | maps·will·be·merged·with·the·latest·taking·precedence·if·there·are·duplicate |
| 160 | keys.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> | 160 | keys.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">"Adds·two·numbers."</span><span·class="p">.</span><span·class="w"> |
| 161 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 161 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="p"·data-group-id="7955615603-1">#{</span><span·class="ss">since</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"1.0"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">author</span><span·class=[·...·truncated·by·diffoscope;·len:·143,·SHA:·487c69cbdd8879ec8c46207cc9a30f803f0f5976c653d045ef2b2d9b776801a5·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 162 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="p"·data-group-id="7955615603-2">#{</span><span·class="ss">since</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"2.0"</span><span·class="p"·data-group-id="7955615603-2">}</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="nf">add</span><span·class="p"·data-group-id=" | 163 | </span><span·class="nf">add</span><span·class="p"·data-group-id="7955615603-3">(</span><span·class="n">One</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Two</span><span·class="p"·data-group-id="7955615603-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">One</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Two</span><span·class="p">.</span></code></pre><p>This·will·result·in·a·metadata·entry·of·<code·class="inline">#{since·=>·"2.0",·author·=>·"Joe"}</code>.</p><p>The·keys·and·values·in·the·metadata·map·can·be·any·type,·but·it·is·recommended |
| 164 | that·only·<a·href="data_types.html#atom">atoms</a>·are·used·for·keys·and | 164 | that·only·<a·href="data_types.html#atom">atoms</a>·are·used·for·keys·and |
| 165 | <a·href="data_types.html#string">strings</a>·for·the·values.</p><h2·id="external-documentation-files"·class="section-heading"> | 165 | <a·href="data_types.html#string">strings</a>·for·the·values.</p><h2·id="external-documentation-files"·class="section-heading"> |
| 166 | ··<a·href="#external-documentation-files"·class="hover-link"> | 166 | ··<a·href="#external-documentation-files"·class="hover-link"> |
| 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 168 | ··</a> | 168 | ··</a> |
| 169 | ··<span·class="text">External·documentation·files</span> | 169 | ··<span·class="text">External·documentation·files</span> |
| 170 | </h2> | 170 | </h2> |
| 171 | <p>The·<code·class="inline">-moduledoc</code>·and·<code·class="inline">-doc</code>·can·also·be·placed·in·external·files.·To·do·so·use | 171 | <p>The·<code·class="inline">-moduledoc</code>·and·<code·class="inline">-doc</code>·can·also·be·placed·in·external·files.·To·do·so·use |
| 172 | <code·class="inline">-doc·{file,·"path/to/doc.md"}</code>·to·point·to·the·documentation.·The·path·used·is | 172 | <code·class="inline">-doc·{file,·"path/to/doc.md"}</code>·to·point·to·the·documentation.·The·path·used·is |
| 173 | relative·to·the·file·where·the·<code·class="inline">-doc</code>·attribute·is·located.·For·example:</p><pre><code·class="markdown">%%·doc/add.md | 173 | relative·to·the·file·where·the·<code·class="inline">-doc</code>·attribute·is·located.·For·example:</p><pre><code·class="markdown">%%·doc/add.md |
| 174 | Adds·two·numbers.</code></pre><p>and</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·src/arith.erl</span><span·class="w"> | 174 | Adds·two·numbers.</code></pre><p>and</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·src/arith.erl</span><span·class="w"> |
| 175 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id=" | 175 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id="3295854200-1">(</span><span·class="p"·data-group-id="3295854200-2">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"../doc/add.md"</span><span·class="p"·data-group-id="3295854200-2">}</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·6f3b6f686cb8aecc02f78de469fd982204d0563accd243bb1e59448523ac329e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="nf">add</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">add</span><span·class="p"·data-group-id="3295854200-3">(</span><span·class="n">One</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Two</span><span·class="p"·data-group-id="3295854200-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">One</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Two</span><span·class="p">.</span></code></pre><h2·id="documenting-a-module"·class="section-heading"> |
| 177 | ··<a·href="#documenting-a-module"·class="hover-link"> | 177 | ··<a·href="#documenting-a-module"·class="hover-link"> |
| 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 179 | ··</a> | 179 | ··</a> |
| 180 | ··<span·class="text">Documenting·a·module</span> | 180 | ··<span·class="text">Documenting·a·module</span> |
| 181 | </h2> | 181 | </h2> |
| 182 | <p>The·module·description·should·include·details·on·how·to·use·the·API·and·examples | 182 | <p>The·module·description·should·include·details·on·how·to·use·the·API·and·examples |
| 183 | of·the·different·functions·working·together.·Here·is·a·good·place·to·use·images | 183 | of·the·different·functions·working·together.·Here·is·a·good·place·to·use·images |
| 184 | and·other·diagrams·to·better·show·the·usage·of·the·module.·Instead·of·writing·a | 184 | and·other·diagrams·to·better·show·the·usage·of·the·module.·Instead·of·writing·a |
| 185 | long·text·in·the·<code·class="inline">moduledoc</code>·attribute,·it·could·be·better·to·break·it·out·into | 185 | long·text·in·the·<code·class="inline">moduledoc</code>·attribute,·it·could·be·better·to·break·it·out·into |
| 186 | an·external·page.</p><p>The·<code·class="inline">moduledoc</code>·attribute·should·start·with·a·short·paragraph·describing·the | 186 | an·external·page.</p><p>The·<code·class="inline">moduledoc</code>·attribute·should·start·with·a·short·paragraph·describing·the |
| 187 | module·and·then·go·into·greater·details.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 187 | module·and·then·go·into·greater·details.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9108917978-1">(</span><span·class="ss">arith</span><span·class="p"·data-group-id="9108917978-1">)</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""</span><span·class="s">" | 188 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="s">""</span><span·class="s">" |
| 189 | ···A·module·for·basic·arithmetic. | 189 | ···A·module·for·basic·arithmetic. |
| 190 | ···This·module·can·be·used·to·add·and·subtract·values.·For·example: | 190 | ···This·module·can·be·used·to·add·and·subtract·values.·For·example: |
| 191 | ···```erlang | 191 | ···```erlang |
| 192 | ···1>·arith:substract(arith:add(2,·3),·1). | 192 | ···1>·arith:substract(arith:add(2,·3),·1). |
| Offset 203, 94 lines modified | Offset 203, 94 lines modified | ||
| 203 | <p>There·are·three·reserved·metadata·keys·for·<code·class="inline">-moduledoc</code>:</p><ul><li><code·class="inline">since</code>·-·Shows·in·which·version·of·the·application·the·module·was·added. | 203 | <p>There·are·three·reserved·metadata·keys·for·<code·class="inline">-moduledoc</code>:</p><ul><li><code·class="inline">since</code>·-·Shows·in·which·version·of·the·application·the·module·was·added. |
| 204 | If·this·is·added,·all·functions,·types,·and·callbacks·within·will·also·receive | 204 | If·this·is·added,·all·functions,·types,·and·callbacks·within·will·also·receive |
| 205 | the·same·<code·class="inline">since</code>·value·unless·specified·in·the·metadata·of·the·function,·type | 205 | the·same·<code·class="inline">since</code>·value·unless·specified·in·the·metadata·of·the·function,·type |
| 206 | or·callback.</li><li><code·class="inline">deprecated</code>·-·Shows·a·text·in·the·documentation·explaining·that·it·is | 206 | or·callback.</li><li><code·class="inline">deprecated</code>·-·Shows·a·text·in·the·documentation·explaining·that·it·is |
| 207 | deprecated·and·what·to·use·instead.</li><li><code·class="inline">format</code>·-·The·format·to·use·for·all·documentation·in·this·module.·The | 207 | deprecated·and·what·to·use·instead.</li><li><code·class="inline">format</code>·-·The·format·to·use·for·all·documentation·in·this·module.·The |
| 208 | default·is·<code·class="inline">text/markdown</code>.·It·should·be·written·using·the | 208 | default·is·<code·class="inline">text/markdown</code>.·It·should·be·written·using·the |
| 209 | <a·href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">mime·type</a> | 209 | <a·href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">mime·type</a> |
| 210 | of·the·format.</li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 210 | of·the·format.</li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id="9823680769-1">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"../doc/arith.asciidoc"</span><span·class="p"·data-group-id="9823680769-1">}</span><span·class="p">.</span><span·class="w"> |
| 211 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 211 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id="9823680769-2">#{</span><span·class="ss">since</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"0.1"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">format</span><span·class=[·...·truncated·by·diffoscope;·len:·153,·SHA:·86ec071f9856b3872b9fe6bbdc205f422e2ae776de04dadc076f25c71de8e3f1·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 212 | </span><span·class="p">-</span><span·class="na">moduledoc</span><span·class="w">·</span><span·class="p"·data-group-id="9823680769-3">#{</span><span·class="ss">deprecated</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"Use·the·Erlang·arithmetic·operators·instead."</span><span·class="p"·data-group-id="9823680769-3">}</span><span·class="p">.</span></code></pre><h2·id="documenting-functions-user-defined-types-and-callbacks"·class="section-heading"> |
| 213 | ··<a·href="#documenting-functions-user-defined-types-and-callbacks"·class="hover-link"> | 213 | ··<a·href="#documenting-functions-user-defined-types-and-callbacks"·class="hover-link"> |
| 214 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 214 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 215 | ··</a> | 215 | ··</a> |
| 216 | ··<span·class="text">Documenting·functions,·user-defined·types,·and·callbacks</span> | 216 | ··<span·class="text">Documenting·functions,·user-defined·types,·and·callbacks</span> |
| 217 | </h2> | 217 | </h2> |
| 218 | <p>Functions,·types,·and·callbacks·can·be·documented·using·the·<code·class="inline">-doc</code>·attribute. | 218 | <p>Functions,·types,·and·callbacks·can·be·documented·using·the·<code·class="inline">-doc</code>·attribute. |
| 219 | Each·entry·should·start·with·a·short·paragraph·describing·the·purpose·of·entity, | 219 | Each·entry·should·start·with·a·short·paragraph·describing·the·purpose·of·entity, |
| 220 | and·then·go·into·greater·detail·in·needed.</p><p>It·is·not·recommended·to·include·images·or·diagrams·in·this·documentation·as·it | 220 | and·then·go·into·greater·detail·in·needed.</p><p>It·is·not·recommended·to·include·images·or·diagrams·in·this·documentation·as·it |
| 221 | is·used·by·IDEs·and·<a·href="../../lib/stdlib-6.2.2.1/doc/html/c.html#h/1"><code·class="inline">c:h/1</code></a>·to·show·the·documentation·to·the·user.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""" | 221 | is·used·by·IDEs·and·<a·href="../../lib/stdlib-6.2.2.1/doc/html/c.html#h/1"><code·class="inline">c:h/1</code></a>·to·show·the·documentation·to·the·user.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""" |
| 222 | A·number·that·can·be·used·by·the·arith·module. | 222 | A·number·that·can·be·used·by·the·arith·module. |
| 223 | We·use·a·special·number·here·so·that·we·know | 223 | We·use·a·special·number·here·so·that·we·know |
| 224 | that·this·number·comes·from·this·module. | 224 | that·this·number·comes·from·this·module. |
| 225 | """</span><span·class="p">.</span><span·class="w"> | 225 | """</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">number</span><span·class="p"·data-group-id="74 | 226 | </span><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">number</span><span·class="p"·data-group-id="6743782494-1">(</span><span·class="p"·data-group-id="6743782494-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="6743782494-2">{</span><span·class="ss">arith</span><sp[·...·truncated·by·diffoscope;·len:·276,·SHA:·e719a4912648e9bfae2a9ce5f2eb19075f7e6be6cbee49eaa952d5734e291e56·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="w"> | 227 | </span><span·class="w"> |
| 228 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""" | 228 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""" |
| 229 | Adds·two·numbers. | 229 | Adds·two·numbers. |
| 230 | ###·Example: | 230 | ###·Example: |
| 231 | ``` | 231 | ``` |
| 232 | 1>·arith:add(arith:number(1),·arith:number(2)).·{number,·3} | 232 | 1>·arith:add(arith:number(1),·arith:number(2)).·{number,·3} |
| 233 | ``` | 233 | ``` |
| 234 | """</span><span·class="p">.</span><span·class="w"> | 234 | """</span><span·class="p">.</span><span·class="w"> |
| 235 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">add</span><span·class="p"·data-group-id="74 | 235 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">add</span><span·class="p"·data-group-id="6743782494-4">(</span><span·class="nf">number</span><span·class="p"·data-group-id="6743782494-5">(</span><span·class="p"·data-group-id="6743782494-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">number</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·339,·SHA:·c8474b3d1463d47ab51656e9a46c1bdb16d13cde5ecfba51aca0895d76fc2ea5·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 236 | </span><span·class="nf">add</span><span·class="p"·data-group-id="74 | 236 | </span><span·class="nf">add</span><span·class="p"·data-group-id="6743782494-8">(</span><span·class="p"·data-group-id="6743782494-9">{</span><span·class="ss">number</span><span·class="p">,</span><span·class="w">·</span><span·class="n">One</span><span·class="p"·data-group-id="6743782494-9">}</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·662,·SHA:·f9b2015fe2a7bef43c58c9a449892da6bd2477caa963018b9a1be1eb1fb9dd95·...·]-11">}</span><span·class="p">.</span></code></pre><h3·id="doc-metadata"·class="section-heading"> |
| 237 | ··<a·href="#doc-metadata"·class="hover-link"> | 237 | ··<a·href="#doc-metadata"·class="hover-link"> |
| 238 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 238 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 239 | ··</a> | 239 | ··</a> |
| 240 | ··<span·class="text">Doc·metadata</span> | 240 | ··<span·class="text">Doc·metadata</span> |
| 241 | </h3> | 241 | </h3> |
| 242 | <p>There·are·four·reserved·metadata·keys·for·<code·class="inline">-doc</code>:</p><ul><li><p><code·class="inline">since·=>·unicode:chardata()</code>·-·Shows·which·version·of·the·application·the | 242 | <p>There·are·four·reserved·metadata·keys·for·<code·class="inline">-doc</code>:</p><ul><li><p><code·class="inline">since·=>·unicode:chardata()</code>·-·Shows·which·version·of·the·application·the |
| 243 | module·was·added.</p></li><li><p><code·class="inline">deprecated·=>·unicode:chardata()</code>·-·Shows·a·text·in·the·documentation | 243 | module·was·added.</p></li><li><p><code·class="inline">deprecated·=>·unicode:chardata()</code>·-·Shows·a·text·in·the·documentation |
| 244 | explaining·that·it·is·deprecated·and·what·to·use·instead.·The·compiler·will | 244 | explaining·that·it·is·deprecated·and·what·to·use·instead.·The·compiler·will |
| 245 | automatically·insert·this·key·if·there·is·a·<code·class="inline">-deprecated</code>·attribute·marking·a | 245 | automatically·insert·this·key·if·there·is·a·<code·class="inline">-deprecated</code>·attribute·marking·a |
| 246 | function·as·deprecated.</p></li><li><p><code·class="inline">equiv·=>·unicode:chardata()·|·F/A·|·F(...)</code>·-·Notes·that·this·function·is·equivalent·to | 246 | function·as·deprecated.</p></li><li><p><code·class="inline">equiv·=>·unicode:chardata()·|·F/A·|·F(...)</code>·-·Notes·that·this·function·is·equivalent·to |
| Max diff block lines reached; 38035/67054 bytes (56.72%) of diff not shown. | |||
| Offset 122, 23 lines modified | Offset 122, 23 lines modified | ||
| 122 | ··<span·class="text">Drivers·and·Concurrency</span> | 122 | ··<span·class="text">Drivers·and·Concurrency</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>The·runtime·system·always·takes·a·lock·before·running·any·code·in·a·driver.</p><p>By·default,·that·lock·is·at·the·driver·level,·that·is,·if·several·ports·have | 124 | <p>The·runtime·system·always·takes·a·lock·before·running·any·code·in·a·driver.</p><p>By·default,·that·lock·is·at·the·driver·level,·that·is,·if·several·ports·have |
| 125 | been·opened·to·the·same·driver,·only·code·for·one·port·at·the·same·time·can·be | 125 | been·opened·to·the·same·driver,·only·code·for·one·port·at·the·same·time·can·be |
| 126 | running.</p><p>A·driver·can·be·configured·to·have·one·lock·for·each·port·instead.</p><p>If·a·driver·is·used·in·a·functional·way·(that·is,·holds·no·state,·but·only·does | 126 | running.</p><p>A·driver·can·be·configured·to·have·one·lock·for·each·port·instead.</p><p>If·a·driver·is·used·in·a·functional·way·(that·is,·holds·no·state,·but·only·does |
| 127 | some·heavy·calculation·and·returns·a·result),·several·ports·with·registered | 127 | some·heavy·calculation·and·returns·a·result),·several·ports·with·registered |
| 128 | names·can·be·opened·beforehand,·and·the·port·to·be·used·can·be·chosen·based·on | 128 | names·can·be·opened·beforehand,·and·the·port·to·be·used·can·be·chosen·based·on |
| 129 | the·scheduler·ID·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7 | 129 | the·scheduler·ID·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="2749886140-1">(</span><span·class="n">PORT_NAMES</span><span·class="p"·data-group-id="2749886140-2">(</span><span·class="p"·data-group-id="2749886140-2">)</span><span·class="p">,</span><span·class="w"> |
| 130 | » </span><span·class="p"·data-group-id="7 | 130 | » </span><span·class="p"·data-group-id="2749886140-3">{</span><span·class="ss">some_driver_01</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_02</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_03</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_04</span><span·class="p">,</span><span·class="w"> |
| 131 | » ·</span><span·class="ss">some_driver_05</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_06</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_07</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_08</span><span·class="p">,</span><span·class="w"> | 131 | » ·</span><span·class="ss">some_driver_05</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_06</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_07</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_08</span><span·class="p">,</span><span·class="w"> |
| 132 | » ·</span><span·class="ss">some_driver_09</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_10</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_11</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_12</span><span·class="p">,</span><span·class="w"> | 132 | » ·</span><span·class="ss">some_driver_09</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_10</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_11</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_12</span><span·class="p">,</span><span·class="w"> |
| 133 | » ·</span><span·class="ss">some_driver_13</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_14</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_15</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_16</span><span·class="p"·data-group-id="7 | 133 | » ·</span><span·class="ss">some_driver_13</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_14</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_15</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">some_driver_16</span><span·class="p"·data-group-id="2749886140-3">}</span><span·class="p"·data-group-id="2749886140-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="nf">client_port</span><span·class="p"·data-group-id="7 | 134 | </span><span·class="nf">client_port</span><span·class="p"·data-group-id="2749886140-4">(</span><span·class="p"·data-group-id="2749886140-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 135 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id="7603362806-5">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="7603362806-6">(</span><span·class="ss">scheduler_id</span><span·class="p"·data-group-id="7603362806-6">)</span><span·class="w">·</span><span·class="ow">rem</span><span·class="w">·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id="7603362806-7">(</span><span·class="o">?</span><span·class="n">PORT_NAMES</span><span·class="p"·data-group-id="7603362806-8">(</span><span·class="p"·data-group-id="7603362806-8">)</span><span·class="p"·data-group-id="7603362806-7">)</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | ||
| 136 | 135 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id="2749886140-5">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="2749886140-6">(</span><span·class="ss">sc[·...·truncated·by·diffoscope;·len:·585,·SHA:·7a3eb26dc41d1abf62e3546fdae5c40f12ac077e546a0fdea44f7dbf7c2402e9·...·] | |
| 136 | » ····</span><span·class="o">?</span><span·class="n">PORT_NAMES</span><span·class="p"·data-group-id="2749886140-9">(</span><span·class="p"·data-group-id="2749886140-9">)</span><span·class="p"·data-group-id="2749886140-5">)</span><span·class="p">.</span></code></pre><p>As·long·as·there·are·no·more·than·16·schedulers,·there·will·never·be·any·lock | ||
| 137 | contention·on·the·port·lock·for·the·driver.</p><h2·id="avoiding-copying-binaries-when-calling-a-driver"·class="section-heading"> | 137 | contention·on·the·port·lock·for·the·driver.</p><h2·id="avoiding-copying-binaries-when-calling-a-driver"·class="section-heading"> |
| 138 | ··<a·href="#avoiding-copying-binaries-when-calling-a-driver"·class="hover-link"> | 138 | ··<a·href="#avoiding-copying-binaries-when-calling-a-driver"·class="hover-link"> |
| 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 140 | ··</a> | 140 | ··</a> |
| 141 | ··<span·class="text">Avoiding·Copying·Binaries·When·Calling·a·Driver</span> | 141 | ··<span·class="text">Avoiding·Copying·Binaries·When·Calling·a·Driver</span> |
| 142 | </h2> | 142 | </h2> |
| 143 | <p>There·are·basically·two·ways·to·avoid·copying·a·binary·that·is·sent·to·a·driver:</p><ul><li><p>If·the·<code·class="inline">Data</code>·argument·for·<a·href="../../erts-15.2.7/doc/html/erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>·is·a | 143 | <p>There·are·basically·two·ways·to·avoid·copying·a·binary·that·is·sent·to·a·driver:</p><ul><li><p>If·the·<code·class="inline">Data</code>·argument·for·<a·href="../../erts-15.2.7/doc/html/erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>·is·a |
| Offset 225, 15 lines modified | Offset 225, 15 lines modified | ||
| 225 | ······<p·class="built-using"> | 225 | ······<p·class="built-using"> |
| 226 | ········Built·using | 226 | ········Built·using |
| 227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 229 | ······</p> | 229 | ······</p> |
| 230 | <p>Copyright·©·1996-202 | 230 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 231 | ····</footer> | 231 | ····</footer> |
| 232 | ··</div> | 232 | ··</div> |
| 233 | </main> | 233 | </main> |
| 234 | </div> | 234 | </div> |
| 235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 236 | ··<script> | 236 | ··<script> |
| 237 | ··let·initialized·=·false; | 237 | ··let·initialized·=·false; |
| Offset 122, 67 lines modified | Offset 122, 67 lines modified | ||
| 122 | ··<span·class="text">Pattern·Matching</span> | 122 | ··<span·class="text">Pattern·Matching</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>Pattern·matching·in·function·head·as·well·as·in·<code·class="inline">case</code>·and·<code·class="inline">receive</code>·clauses·are | 124 | <p>Pattern·matching·in·function·head·as·well·as·in·<code·class="inline">case</code>·and·<code·class="inline">receive</code>·clauses·are |
| 125 | optimized·by·the·compiler.·With·a·few·exceptions,·there·is·nothing·to·gain·by | 125 | optimized·by·the·compiler.·With·a·few·exceptions,·there·is·nothing·to·gain·by |
| 126 | rearranging·clauses.</p><p>One·exception·is·pattern·matching·of·binaries.·The·compiler·does·not·rearrange | 126 | rearranging·clauses.</p><p>One·exception·is·pattern·matching·of·binaries.·The·compiler·does·not·rearrange |
| 127 | clauses·that·match·binaries.·Placing·the·clause·that·matches·against·the·empty | 127 | clauses·that·match·binaries.·Placing·the·clause·that·matches·against·the·empty |
| 128 | binary·<em>last</em>·is·usually·slightly·faster·than·placing·it·<em>first</em>.</p><p>The·following·is·a·rather·unnatural·example·to·show·another·exception·where | 128 | binary·<em>last</em>·is·usually·slightly·faster·than·placing·it·<em>first</em>.</p><p>The·following·is·a·rather·unnatural·example·to·show·another·exception·where |
| 129 | rearranging·clauses·is·beneficial:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 129 | rearranging·clauses·is·beneficial:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-1">(</span><span·class="ss">one</span><span·class="p"·data-group-id="3703438071-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 130 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 130 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-2">(</span><span·class="ss">two</span><span·class="p"·data-group-id="3703438071-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">2</span><span·class="p">;</span><span·class="w"> |
| 131 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 131 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-3">(</span><span·class="ss">three</span><span·class="p"·data-group-id="3703438071-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">3</span><span·class="p">;</span><span·class="w"> |
| 132 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 132 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-4">(</span><span·class="n">Int</span><span·class="p"·data-group-id="3703438071-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_integer</span><span·class="p"·data-group-id="3703438071-5">([·...·truncated·by·diffoscope;·len:·73,·SHA:·6cb5dd13782cc56a39a9247f2b71dd50bc67bb9d2aa123ceef5cfc82ee9603a5·...·]1-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">;</span><span·class="w"> |
| 133 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 133 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-6">(</span><span·class="ss">four</span><span·class="p"·data-group-id="3703438071-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">4</span><span·class="p">;</span><span·class="w"> |
| 134 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 134 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-7">(</span><span·class="ss">five</span><span·class="p"·data-group-id="3703438071-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">5</span><span·class="p">;</span><span·class="w"> |
| 135 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id=" | 135 | </span><span·class="nf">atom_map1</span><span·class="p"·data-group-id="3703438071-8">(</span><span·class="ss">six</span><span·class="p"·data-group-id="3703438071-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">6</span><span·class="p">.</span></code></pre><p>The·problem·is·the·clause·with·the·variable·<code·class="inline">Int</code>.·As·a·variable·can·match |
| 136 | anything,·including·the·atoms·<code·class="inline">four</code>,·<code·class="inline">five</code>,·and·<code·class="inline">six</code>,·which·the·following | 136 | anything,·including·the·atoms·<code·class="inline">four</code>,·<code·class="inline">five</code>,·and·<code·class="inline">six</code>,·which·the·following |
| 137 | clauses·also·match,·the·compiler·must·generate·suboptimal·code·that·executes·as | 137 | clauses·also·match,·the·compiler·must·generate·suboptimal·code·that·executes·as |
| 138 | follows:</p><ul><li>First,·the·input·value·is·compared·to·<code·class="inline">one</code>,·<code·class="inline">two</code>,·and·<code·class="inline">three</code>·(using·a | 138 | follows:</p><ul><li>First,·the·input·value·is·compared·to·<code·class="inline">one</code>,·<code·class="inline">two</code>,·and·<code·class="inline">three</code>·(using·a |
| 139 | single·instruction·that·does·a·binary·search;·thus,·quite·efficient·even·if | 139 | single·instruction·that·does·a·binary·search;·thus,·quite·efficient·even·if |
| 140 | there·are·many·values)·to·select·which·one·of·the·first·three·clauses·to | 140 | there·are·many·values)·to·select·which·one·of·the·first·three·clauses·to |
| 141 | execute·(if·any).</li><li>If·none·of·the·first·three·clauses·match,·the·fourth·clause·match·as·a | 141 | execute·(if·any).</li><li>If·none·of·the·first·three·clauses·match,·the·fourth·clause·match·as·a |
| 142 | variable·always·matches.</li><li>If·the·guard·test·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_integer/1"><code·class="inline">is_integer(Int)</code></a>·succeeds,·the·fourth | 142 | variable·always·matches.</li><li>If·the·guard·test·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_integer/1"><code·class="inline">is_integer(Int)</code></a>·succeeds,·the·fourth |
| 143 | clause·is·executed.</li><li>If·the·guard·test·fails,·the·input·value·is·compared·to·<code·class="inline">four</code>,·<code·class="inline">five</code>,·and | 143 | clause·is·executed.</li><li>If·the·guard·test·fails,·the·input·value·is·compared·to·<code·class="inline">four</code>,·<code·class="inline">five</code>,·and |
| 144 | <code·class="inline">six</code>,·and·the·appropriate·clause·is·selected.·(There·is·a·<code·class="inline">function_clause</code> | 144 | <code·class="inline">six</code>,·and·the·appropriate·clause·is·selected.·(There·is·a·<code·class="inline">function_clause</code> |
| 145 | exception·if·none·of·the·values·matched.)</li></ul><p>Rewriting·to·either:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 145 | exception·if·none·of·the·values·matched.)</li></ul><p>Rewriting·to·either:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-1">(</span><span·class="ss">one</span><span·class="p"·data-group-id="1058092006-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 146 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 146 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-2">(</span><span·class="ss">two</span><span·class="p"·data-group-id="1058092006-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">2</span><span·class="p">;</span><span·class="w"> |
| 147 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 147 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-3">(</span><span·class="ss">three</span><span·class="p"·data-group-id="1058092006-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">3</span><span·class="p">;</span><span·class="w"> |
| 148 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 148 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-4">(</span><span·class="ss">four</span><span·class="p"·data-group-id="1058092006-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">4</span><span·class="p">;</span><span·class="w"> |
| 149 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 149 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-5">(</span><span·class="ss">five</span><span·class="p"·data-group-id="1058092006-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">5</span><span·class="p">;</span><span·class="w"> |
| 150 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 150 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-6">(</span><span·class="ss">six</span><span·class="p"·data-group-id="1058092006-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">6</span><span·class="p">;</span><span·class="w"> |
| 151 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="0 | 151 | </span><span·class="nf">atom_map2</span><span·class="p"·data-group-id="1058092006-7">(</span><span·class="n">Int</span><span·class="p"·data-group-id="1058092006-7">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_integer</span><span·class="p"·data-group-id="1058092006-8">([·...·truncated·by·diffoscope;·len:·703,·SHA:·62d8926873b18344783b22f80a123f060bd8c1b164e3c0ccecd7633a3730d073·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">;</span><span·class="w"> |
| 152 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 152 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-3">(</span><span·class="ss">one</span><span·class="p"·data-group-id="6229989945-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 153 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 153 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-4">(</span><span·class="ss">two</span><span·class="p"·data-group-id="6229989945-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">2</span><span·class="p">;</span><span·class="w"> |
| 154 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 154 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-5">(</span><span·class="ss">three</span><span·class="p"·data-group-id="6229989945-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">3</span><span·class="p">;</span><span·class="w"> |
| 155 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 155 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-6">(</span><span·class="ss">four</span><span·class="p"·data-group-id="6229989945-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">4</span><span·class="p">;</span><span·class="w"> |
| 156 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 156 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-7">(</span><span·class="ss">five</span><span·class="p"·data-group-id="6229989945-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">5</span><span·class="p">;</span><span·class="w"> |
| 157 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">atom_map3</span><span·class="p"·data-group-id="6229989945-8">(</span><span·class="ss">six</span><span·class="p"·data-group-id="6229989945-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">6</span><span·class="p">.</span></code></pre><p>gives·slightl[·...·truncated·by·diffoscope;·len:·541,·SHA:·02e30d3e8732e88a7a3309e3ed82c304935ad7bdcde8dced8a04db60d353442b·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="n">Ys</span><span·class="p">;</span><span·class="w"> | 158 | ····</span><span·class="n">Ys</span><span·class="p">;</span><span·class="w"> |
| 159 | </span><span·class="nf">map_pairs1</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">map_pairs1</span><span·class="p"·data-group-id="9348563313-3">(</span><span·class="p">_</span><span·class="n">Map</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Xs</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9348563313-4">[</span><span·clas[·...·truncated·by·diffoscope;·len:·84,·SHA:·3023eeb251614ddd79284b51f97369afdf8bfee1bc4c619293c034efdaac3285·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ····</span><span·class="n">Xs</span><span·class="p">;</span><span·class="w"> | 160 | ····</span><span·class="n">Xs</span><span·class="p">;</span><span·class="w"> |
| 161 | </span><span·class="nf">map_pairs1</span><span·class="p"·data-group-id=" | 161 | </span><span·class="nf">map_pairs1</span><span·class="p"·data-group-id="9348563313-5">(</span><span·class="n">Map</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9348563313-6">[</span><span·class="n">X</span><span·class="p">|</span><span·class="n">Xs</span><span·class="p"·data-group-id="934[·...·truncated·by·diffoscope;·len:·287,·SHA:·555302dc8933bac07039cc72baf4b35f1849ffbb8ad09576556e9b4e9bb1518b·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | ····</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="p"·data-group-id="9348563313-8">[</span><span·class="n">Map</span><span·class="p"·data-group-id="9348563313-9">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="9348563313-9">)</span><span·[·...·truncated·by·diffoscope;·len:·373,·SHA:·2672ea9c3862c751e655b895c974986b8bf1f73fc94894cad5556e4650a169a2·...·]-8">]</span><span·class="p">.</span></code></pre><p>The·first·argument·is·<em>not</em>·a·problem.·It·is·variable,·but·it·is·a·variable·in |
| 163 | all·clauses.·The·problem·is·the·variable·in·the·second·argument,·<code·class="inline">Xs</code>,·in·the | 163 | all·clauses.·The·problem·is·the·variable·in·the·second·argument,·<code·class="inline">Xs</code>,·in·the |
| 164 | middle·clause.·Because·the·variable·can·match·anything,·the·compiler·is·not | 164 | middle·clause.·Because·the·variable·can·match·anything,·the·compiler·is·not |
| 165 | allowed·to·rearrange·the·clauses,·but·must·generate·code·that·matches·them·in | 165 | allowed·to·rearrange·the·clauses,·but·must·generate·code·that·matches·them·in |
| 166 | the·order·written.</p><p>If·the·function·is·rewritten·as·follows,·the·compiler·is·free·to·rearrange·the | 166 | the·order·written.</p><p>If·the·function·is·rewritten·as·follows,·the·compiler·is·free·to·rearrange·the |
| 167 | clauses:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2 | 167 | clauses:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2059195199-1">(</span><span·class="p">_</span><span·class="n">Map</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2059195199-2">[</span><span·class="p"·data-group-id="2059195199-2">]</span><span·class="p">,</span><span·c[·...·truncated·by·diffoscope;·len:·83,·SHA:·a90cb6e4852d1019ecebf59aa0b74d4f4765f1a9747dc43951b733baf5cdfd86·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ····</span><span·class="n">Ys</span><span·class="p">;</span><span·class="w"> | 168 | ····</span><span·class="n">Ys</span><span·class="p">;</span><span·class="w"> |
| 169 | </span><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2 | 169 | </span><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2059195199-3">(</span><span·class="p">_</span><span·class="n">Map</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2059195199-4">[</span><span·class="p">_</span><span·class="p">|</span><span·class="p">_</span><span·class=[·...·truncated·by·diffoscope;·len:·309,·SHA:·9645bde311be63c93c8b428ac45c5d83d90f6aeef54d46035fe73f66eddafed5·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ····</span><span·class="n">Xs</span><span·class="p">;</span><span·class="w"> | 170 | ····</span><span·class="n">Xs</span><span·class="p">;</span><span·class="w"> |
| 171 | </span><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2 | 171 | </span><span·class="nf">map_pairs2</span><span·class="p"·data-group-id="2059195199-6">(</span><span·class="n">Map</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2059195199-7">[</span><span·class="n">X</span><span·class="p">|</span><span·class="n">Xs</span><span·class="p"·data-group-id="2059[·...·truncated·by·diffoscope;·len:·286,·SHA:·0ad831038306efbfe863e872e4162d9cd617d10754d3b7e473a03b9d2494a16e·...·]-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="p"·data-group-id="2 | 172 | ····</span><span·class="p"·data-group-id="2059195199-9">[</span><span·class="n">Map</span><span·class="p"·data-group-id="2059195199-10">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="2059195199-10">)</span><span[·...·truncated·by·diffoscope;·len:·897,·SHA:·8bbfb3f35e0dfc95a01c370341e620209caac7936e935ec597e9bfc49c4fb802·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Xs0</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 173 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Xs0</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 174 | » </span><span·class="p"·data-group-id=" | 174 | » </span><span·class="p"·data-group-id="9378842851-2">[</span><span·class="n">X</span><span·class="p">|</span><span·class="n">Xs</span><span·class="p"·data-group-id="9378842851-2">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 175 | » ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Ys0</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 175 | » ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Ys0</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 176 | » » </span><span·class="p"·data-group-id=" | 176 | » » </span><span·class="p"·data-group-id="9378842851-3">[</span><span·class="n">Y</span><span·class="p">|</span><span·class="n">Ys</span><span·class="p"·data-group-id="9378842851-3">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | » » ····</span><span·class="p"·data-group-id=" | 177 | » » ····</span><span·class="p"·data-group-id="9378842851-4">[</span><span·class="n">Map</span><span·class="p"·data-group-id="9378842851-5">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="9378842851-5">)</span><span·[·...·truncated·by·diffoscope;·len:·379,·SHA:·052c5b10c93ae467e152e59cf7bdd56728f4df3adb9241a80d31ceec3444694d·...·]-4">]</span><span·class="p">;</span><span·class="w"> |
| 178 | » » </span><span·class="p"·data-group-id=" | 178 | » » </span><span·class="p"·data-group-id="9378842851-7">[</span><span·class="p"·data-group-id="9378842851-7">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | » » ····</span><span·class="n">Xs0</span><span·class="w"> | 179 | » » ····</span><span·class="n">Xs0</span><span·class="w"> |
| 180 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 180 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 181 | » </span><span·class="p"·data-group-id=" | 181 | » </span><span·class="p"·data-group-id="9378842851-8">[</span><span·class="p"·data-group-id="9378842851-8">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 182 | » ····</span><span·class="n">Ys0</span><span·class="w"> | 182 | » ····</span><span·class="n">Ys0</span><span·class="w"> |
| 183 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>This·is·slightly·faster·for·probably·the·most·common·case·that·the·input·lists | 183 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>This·is·slightly·faster·for·probably·the·most·common·case·that·the·input·lists |
| 184 | are·not·empty·or·very·short.·(Another·advantage·is·that·Dialyzer·can·deduce·a | 184 | are·not·empty·or·very·short.·(Another·advantage·is·that·Dialyzer·can·deduce·a |
| 185 | better·type·for·the·<code·class="inline">Xs</code>·variable.)</p><h2·id="function-calls"·class="section-heading"> | 185 | better·type·for·the·<code·class="inline">Xs</code>·variable.)</p><h2·id="function-calls"·class="section-heading"> |
| 186 | ··<a·href="#function-calls"·class="hover-link"> | 186 | ··<a·href="#function-calls"·class="hover-link"> |
| 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 188 | ··</a> | 188 | ··</a> |
| Offset 250, 15 lines modified | Offset 250, 15 lines modified | ||
| 250 | ······<p·class="built-using"> | 250 | ······<p·class="built-using"> |
| 251 | ········Built·using | 251 | ········Built·using |
| 252 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 252 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 253 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 253 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 254 | ······</p> | 254 | ······</p> |
| 255 | <p>Copyright·©·1996-202 | 255 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 256 | ····</footer> | 256 | ····</footer> |
| 257 | ··</div> | 257 | ··</div> |
| 258 | </main> | 258 | </main> |
| 259 | </div> | 259 | </div> |
| 260 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 260 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 261 | ··<script> | 261 | ··<script> |
| 262 | ··let·initialized·=·false; | 262 | ··let·initialized·=·false; |
| Offset 119, 45 lines modified | Offset 119, 45 lines modified | ||
| 119 | ··<a·href="#creating-an-erlang-process"·class="hover-link"> | 119 | ··<a·href="#creating-an-erlang-process"·class="hover-link"> |
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Creating·an·Erlang·Process</span> | 122 | ··<span·class="text">Creating·an·Erlang·Process</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>An·Erlang·process·is·lightweight·compared·to·threads·and·processes·in·operating | 124 | <p>An·Erlang·process·is·lightweight·compared·to·threads·and·processes·in·operating |
| 125 | systems.</p><p>A·newly·spawned·Erlang·process·uses·327·words·of·memory.·The·size·can·be·found | 125 | systems.</p><p>A·newly·spawned·Erlang·process·uses·327·words·of·memory.·The·size·can·be·found |
| 126 | as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id=" | 126 | as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="2251655572-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">14.2</span><span·class="p">.</span><span·class="mi">3</span><span·class="p"·data-group-id="2251655572-1">]</span><span·class="w">·</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·1122,·SHA:·f46457685d9471fc93422d7b8cdcbfe98496825b26f785cb1463426fa54a47bf·...·]-6">]</span><span·class="w"> |
| 127 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mf">2.3</span><span·class="w">·</span><span·class="p"·data-group-id=" | 127 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V14</span><span·class="p">.</span><span·class="mf">2.3</span><span·class="w">·</span><span·class="p"·data-group-id="2251655572-7">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·4e04ff18e85e8bdd6b07fc1a85da7b3ce2dc8ba7350748588eabb417e2932bf3·...·]-7">)</span><span·class="gp·unselectable"> |
| 128 | 1>·</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 128 | 1>·</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2251655572-9">(</span><span·class="p"·data-group-id="2251655572-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="k">receive</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="ss">infinity</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="k">end</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 129 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">43.39164016</span><span·class="o">></span><span·class="gp·unselectable"> | 129 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">43.39164016</span><span·class="o">></span><span·class="gp·unselectable"> |
| 130 | 2>·</span><span·class="p"·data-group-id=" | 130 | 2>·</span><span·class="p"·data-group-id="2251655572-10">{</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Bytes</span><span·class="p"·data-group-id="2251655572-10">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">process_info</[·...·truncated·by·diffoscope;·len:·341,·SHA:·46a4b63cfcbc9c64f7de53e294a68ef5d204f62af153a227d666257da13ae03b·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 131 | </span><span·class="p"·data-group-id=" | 131 | </span><span·class="p"·data-group-id="2251655572-13">{</span><span·class="nb">memory</span><span·class="p">,</span><span·class="mi">2616</span><span·class="p"·data-group-id="2251655572-13">}</span><span·class="gp·unselectable"> |
| 132 | 3>·</span><span·class="n">Bytes</span><span·class="w">·</span><span·class="ow">div</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id=" | 132 | 3>·</span><span·class="n">Bytes</span><span·class="w">·</span><span·class="ow">div</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="2251655572-14">(</span><span·class="ss">wordsize</span><span·class="p"·data-group-id="2251655572-14">)</span><span·class="p">.</span><span·class="w"> |
| 133 | </span><span·class="mi">327</span></code></pre><p>The·size·includes·233·words·for·the·heap·area·(which·includes·the·stack).·The | 133 | </span><span·class="mi">327</span></code></pre><p>The·size·includes·233·words·for·the·heap·area·(which·includes·the·stack).·The |
| 134 | garbage·collector·increases·the·heap·as·needed.</p><p>The·main·(outer)·loop·for·a·process·<em>must</em>·be·tail-recursive.·Otherwise,·the | 134 | garbage·collector·increases·the·heap·as·needed.</p><p>The·main·(outer)·loop·for·a·process·<em>must</em>·be·tail-recursive.·Otherwise,·the |
| 135 | stack·grows·until·the·process·terminates.</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id=" | 135 | stack·grows·until·the·process·terminates.</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="7884875023-1">(</span><span·class="p"·data-group-id="7884875023-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 136 | ··</span><span·class="k">receive</span><span·class="w"> | 136 | ··</span><span·class="k">receive</span><span·class="w"> |
| 137 | ·····</span><span·class="p"·data-group-id=" | 137 | ·····</span><span·class="p"·data-group-id="7884875023-2">{</span><span·class="ss">sys</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="7884875023-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 138 | ·········</span><span·class="nf">handle_sys_msg</span><span·class="p"·data-group-id=" | 138 | ·········</span><span·class="nf">handle_sys_msg</span><span·class="p"·data-group-id="7884875023-3">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="7884875023-3">)</span><span·class="p">,</span><span·class="w"> |
| 139 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 139 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id="7884875023-4">(</span><span·class="p"·data-group-id="7884875023-4">)</span><span·class="p">;</span><span·class="w"> |
| 140 | ·····</span><span·class="p"·data-group-id=" | 140 | ·····</span><span·class="p"·data-group-id="7884875023-5">{</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="7884875023-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ··········</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id=" | 141 | ··········</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id="7884875023-6">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="7884875023-6">)</span><span·class="p">,</span><span·class="w"> |
| 142 | ··········</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p">,</span><span·class="w"> | 142 | ··········</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p">,</span><span·class="w"> |
| 143 | ··········</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 143 | ··········</span><span·class="nf">loop</span><span·class="p"·data-group-id="7884875023-7">(</span><span·class="p"·data-group-id="7884875023-7">)</span><span·class="w"> |
| 144 | ··</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 144 | ··</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 145 | ··</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 145 | ··</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7884875023-8">(</span><span·class="s">"Message·is·processed</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7884875023-9">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·65,·SHA:·9bb2050ad6ded1dc89e076bfce7b5cbd5fb9aaaaf0c1b988ee08dc41e73dc47e·...·]-8">)</span><span·class="p">.</span></code></pre><p>The·call·to·<a·href="../../lib/stdlib-6.2.2.1/doc/html/io.html#format/2"><code·class="inline">io:format/2</code></a>·will·never·be·executed,·but·a·return·address·will |
| 146 | still·be·pushed·to·the·stack·each·time·<code·class="inline">loop/0</code>·is·called·recursively.·The | 146 | still·be·pushed·to·the·stack·each·time·<code·class="inline">loop/0</code>·is·called·recursively.·The |
| 147 | correct·tail-recursive·version·of·the·function·looks·as·follows:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id=" | 147 | correct·tail-recursive·version·of·the·function·looks·as·follows:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="3509704720-1">(</span><span·class="p"·data-group-id="3509704720-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 148 | ···</span><span·class="k">receive</span><span·class="w"> | 148 | ···</span><span·class="k">receive</span><span·class="w"> |
| 149 | ······</span><span·class="p"·data-group-id=" | 149 | ······</span><span·class="p"·data-group-id="3509704720-2">{</span><span·class="ss">sys</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="3509704720-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | ·········</span><span·class="nf">handle_sys_msg</span><span·class="p"·data-group-id=" | 150 | ·········</span><span·class="nf">handle_sys_msg</span><span·class="p"·data-group-id="3509704720-3">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="3509704720-3">)</span><span·class="p">,</span><span·class="w"> |
| 151 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 151 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id="3509704720-4">(</span><span·class="p"·data-group-id="3509704720-4">)</span><span·class="p">;</span><span·class="w"> |
| 152 | ······</span><span·class="p"·data-group-id=" | 152 | ······</span><span·class="p"·data-group-id="3509704720-5">{</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="3509704720-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ·········</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id=" | 153 | ·········</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id="3509704720-6">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="3509704720-6">)</span><span·class="p">,</span><span·class="w"> |
| 154 | ·········</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p">,</span><span·class="w"> | 154 | ·········</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p">,</span><span·class="w"> |
| 155 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 155 | ·········</span><span·class="nf">loop</span><span·class="p"·data-group-id="3509704720-7">(</span><span·class="p"·data-group-id="3509704720-7">)</span><span·class="w"> |
| 156 | ·</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="initial-heap-size"·class="section-heading"> | 156 | ·</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="initial-heap-size"·class="section-heading"> |
| 157 | ··<a·href="#initial-heap-size"·class="hover-link"> | 157 | ··<a·href="#initial-heap-size"·class="hover-link"> |
| 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 159 | ··</a> | 159 | ··</a> |
| 160 | ··<span·class="text">Initial·Heap·Size</span> | 160 | ··<span·class="text">Initial·Heap·Size</span> |
| 161 | </h3> | 161 | </h3> |
| 162 | <p>The·default·initial·heap·size·of·233·words·is·quite·conservative·to·support | 162 | <p>The·default·initial·heap·size·of·233·words·is·quite·conservative·to·support |
| Offset 189, 30 lines modified | Offset 189, 30 lines modified | ||
| 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 190 | ··</a> | 190 | ··</a> |
| 191 | ··<span·class="text">Receiving·messages</span> | 191 | ··<span·class="text">Receiving·messages</span> |
| 192 | </h2> | 192 | </h2> |
| 193 | <p>The·cost·of·receiving·messages·depends·on·how·complicated·the·<code·class="inline">receive</code> | 193 | <p>The·cost·of·receiving·messages·depends·on·how·complicated·the·<code·class="inline">receive</code> |
| 194 | expression·is.·A·simple·expression·that·matches·any·message·is·very·cheap | 194 | expression·is.·A·simple·expression·that·matches·any·message·is·very·cheap |
| 195 | because·it·retrieves·the·first·message·in·the·message·queue:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">receive</span><span·class="w"> | 195 | because·it·retrieves·the·first·message·in·the·message·queue:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">receive</span><span·class="w"> |
| 196 | ····</span><span·class="n">Message</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id=" | 196 | ····</span><span·class="n">Message</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id="7272160029-1">(</span><span·class="n">Message</span><span·class="p"·data-group-id="7272160029-1">)</span><span·class="w"> |
| 197 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>However,·this·is·not·always·convenient:·we·can·receive·a·message·that·we·do·not | 197 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>However,·this·is·not·always·convenient:·we·can·receive·a·message·that·we·do·not |
| 198 | know·how·to·handle·at·this·point,·so·it·is·common·to·only·match·the·messages·we | 198 | know·how·to·handle·at·this·point,·so·it·is·common·to·only·match·the·messages·we |
| 199 | expect:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">receive</span><span·class="w"> | 199 | expect:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">receive</span><span·class="w"> |
| 200 | ····</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="p"·data-group-id="4864545993-1">{</span><span·class="n">Tag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="4864545993-1">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·157,·SHA:·9bea35a94b8306d8dd8f3a5a62ff67ef8085fec8b59902d60e01c4c5a270fae8·...·]-2">)</span><span·class="w"> |
| 201 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>While·this·is·convenient·it·means·that·the·entire·message·queue·must·be·searched | 201 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>While·this·is·convenient·it·means·that·the·entire·message·queue·must·be·searched |
| 202 | until·it·finds·a·matching·message.·This·is·very·expensive·for·processes·with | 202 | until·it·finds·a·matching·message.·This·is·very·expensive·for·processes·with |
| 203 | long·message·queues,·so·there·is·an·optimization·for·the·common·case·of | 203 | long·message·queues,·so·there·is·an·optimization·for·the·common·case·of |
| 204 | sending·a·request·and·waiting·for·a·response·shortly·after:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MRef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">monitor</span><span·class="p"·data-group-id=" | 204 | sending·a·request·and·waiting·for·a·response·shortly·after:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MRef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">monitor</span><span·class="p"·data-group-id="7124760293-1">(</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Process</span><span·class="p"·data-group-id="7124760293-1">)</span><span·class="p">,</span><span·class="w"> |
| 205 | </span><span·class="n">Process</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 205 | </span><span·class="n">Process</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7124760293-2">{</span><span·class="nf">self</span><span·class="p"·data-group-id="7124760293-3">(</span><span·class="p"·data-group-id="7124760293-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·94,·SHA:·28ec323a3ca474e8d796c37e1f6b0dfce2d9d148dad58ccd4f77098931e0e0db·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 206 | </span><span·class="k">receive</span><span·class="w"> | 206 | </span><span·class="k">receive</span><span·class="w"> |
| 207 | ····</span><span·class="p"·data-group-id=" | 207 | ····</span><span·class="p"·data-group-id="7124760293-4">{</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p"·data-group-id="7124760293-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 208 | ········</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id=" | 208 | ········</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id="7124760293-5">(</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7124760293-6">[</span><span·class="ss">flush</span><span·class="p"·data-group-id="7124760293-6">]</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·96ae8a2acd0ad70d0bce38ec10f2a3b8be48e50963905410b88e021123b9fabc·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 209 | ········</span><span·class="nf">handle_reply</span><span·class="p"·data-group-id=" | 209 | ········</span><span·class="nf">handle_reply</span><span·class="p"·data-group-id="7124760293-7">(</span><span·class="n">Reply</span><span·class="p"·data-group-id="7124760293-7">)</span><span·class="p">;</span><span·class="w"> |
| 210 | ····</span><span·class="p"·data-group-id=" | 210 | ····</span><span·class="p"·data-group-id="7124760293-8">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·141,·SHA:·1e712909c52696013bb8a3cc7ea89e69aa363a05e95af03813e319a4e5c30baf·...·]-8">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ········</span><span·class="nf">handle_error</span><span·class="p"·data-group-id=" | 211 | ········</span><span·class="nf">handle_error</span><span·class="p"·data-group-id="7124760293-9">(</span><span·class="n">Reason</span><span·class="p"·data-group-id="7124760293-9">)</span><span·class="w"> |
| 212 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Since·the·compiler·knows·that·the·reference·created·by | 212 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Since·the·compiler·knows·that·the·reference·created·by |
| 213 | <a·href="../../erts-15.2.7/doc/html/erlang.html#monitor/2"><code·class="inline">monitor/2</code></a>·cannot·exist·before·the·call·(since·it·is·a·globally | 213 | <a·href="../../erts-15.2.7/doc/html/erlang.html#monitor/2"><code·class="inline">monitor/2</code></a>·cannot·exist·before·the·call·(since·it·is·a·globally |
| 214 | unique·identifier),·and·that·the·<code·class="inline">receive</code>·only·matches·messages·that·contain | 214 | unique·identifier),·and·that·the·<code·class="inline">receive</code>·only·matches·messages·that·contain |
| 215 | said·reference,·it·will·tell·the·emulator·to·search·only·the·messages·that | 215 | said·reference,·it·will·tell·the·emulator·to·search·only·the·messages·that |
| 216 | arrived·after·the·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#monitor/2"><code·class="inline">monitor/2</code></a>.</p><p>The·above·is·a·simple·example·where·one·is·but·guaranteed·that·the·optimization | 216 | arrived·after·the·call·to·<a·href="../../erts-15.2.7/doc/html/erlang.html#monitor/2"><code·class="inline">monitor/2</code></a>.</p><p>The·above·is·a·simple·example·where·one·is·but·guaranteed·that·the·optimization |
| 217 | will·take,·but·what·about·more·complicated·code?</p><p><a·href=""·id="recv_opt_info"></a></p><h3·id="option-recv_opt_info"·class="section-heading"> | 217 | will·take,·but·what·about·more·complicated·code?</p><p><a·href=""·id="recv_opt_info"></a></p><h3·id="option-recv_opt_info"·class="section-heading"> |
| 218 | ··<a·href="#option-recv_opt_info"·class="hover-link"> | 218 | ··<a·href="#option-recv_opt_info"·class="hover-link"> |
| Offset 228, 101 lines modified | Offset 228, 101 lines modified | ||
| 228 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">200</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">NOT</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">a</span><span·class="w">·</span><span·class="ss">suitable</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w"> | 228 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">200</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">NOT</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">a</span><span·class="w">·</span><span·class="ss">suitable</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w"> |
| 229 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">206</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">used</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">mark</span><span·class="w">·</span><span·class="ss">a</span><span·class="w">·</span><span·class="ss">message</span><span·class="w">·</span><span·class="ss">queue</span><span·class="w">·</span><span·class="ss">position</span><span·class="w"> | 229 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">206</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">used</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">mark</span><span·class="w">·</span><span·class="ss">a</span><span·class="w">·</span><span·class="ss">message</span><span·class="w">·</span><span·class="ss">queue</span><span·class="w">·</span><span·class="ss">position</span><span·class="w"> |
| 230 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">208</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">created</span><span·class="w">·</span><span·class="ss">by</span><span·class="w">·</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">206</span><span·class="w"> | 230 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">208</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">created</span><span·class="w">·</span><span·class="ss">by</span><span·class="w">·</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">206</span><span·class="w"> |
| 231 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">219</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">INFO</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">passing</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">created</span><span·class="w">·</span><span·class="ss">by</span><span·class="w">·</span><span·class="ss">make_ref</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">218</span><span·class="w"> | 231 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">219</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">INFO</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">passing</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">created</span><span·class="w">·</span><span·class="ss">by</span><span·class="w">·</span><span·class="ss">make_ref</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">218</span><span·class="w"> |
| 232 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">222</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">parameter</span><span·class="w">·</span><span·class="mi">1</span></code></pre><p>To·make·it·clearer·exactly·what·code·the·warnings·refer·to,·the·warnings·in·the | 232 | </span><span·class="ss">efficiency_guide</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">222</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="n">OPTIMIZED</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">all</span><span·class="w">·</span><span·class="ss">clauses</span><span·class="w">·</span><span·class="ss">match</span><span·class="w">·</span><span·class="ss">reference</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">parameter</span><span·class="w">·</span><span·class="mi">1</span></code></pre><p>To·make·it·clearer·exactly·what·code·the·warnings·refer·to,·the·warnings·in·the |
| 233 | following·examples·are·inserted·as·comments·after·the·clause·they·refer·to,·for | 233 | following·examples·are·inserted·as·comments·after·the·clause·they·refer·to,·for |
| 234 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·DO</span><span·class="w"> | 234 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·DO</span><span·class="w"> |
| 235 | </span><span·class="nf">simple_receive</span><span·class="p"·data-group-id=" | 235 | </span><span·class="nf">simple_receive</span><span·class="p"·data-group-id="9698265995-1">(</span><span·class="p"·data-group-id="9698265995-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 236 | </span><span·class="c1">%%·efficiency_guide.erl:194:·Warning:·INFO:·not·a·selective·receive,·this·is·always·fast</span><span·class="w"> | 236 | </span><span·class="c1">%%·efficiency_guide.erl:194:·Warning:·INFO:·not·a·selective·receive,·this·is·always·fast</span><span·class="w"> |
| 237 | </span><span·class="k">receive</span><span·class="w"> | 237 | </span><span·class="k">receive</span><span·class="w"> |
| 238 | ····</span><span·class="n">Message</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id=" | 238 | ····</span><span·class="n">Message</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_msg</span><span·class="p"·data-group-id="9698265995-2">(</span><span·class="n">Message</span><span·class="p"·data-group-id="9698265995-2">)</span><span·class="w"> |
| 239 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 239 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="c1">%%·DO·NOT,·unless·Tag·is·known·to·be·a·suitable·reference:·see</span><span·class="w"> | 240 | </span><span·class="c1">%%·DO·NOT,·unless·Tag·is·known·to·be·a·suitable·reference:·see</span><span·class="w"> |
| 241 | </span><span·class="c1">%%·cross_function_receive/0·further·down.</span><span·class="w"> | 241 | </span><span·class="c1">%%·cross_function_receive/0·further·down.</span><span·class="w"> |
| 242 | </span><span·class="nf">selective_receive</span><span·class="p"·data-group-id=" | 242 | </span><span·class="nf">selective_receive</span><span·class="p"·data-group-id="9698265995-3">(</span><span·class="n">Tag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="9698265995-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 243 | </span><span·class="c1">%%·efficiency_guide.erl:200:·Warning:·NOT·OPTIMIZED:·all·clauses·do·not·match·a·suitable·reference</span><span·class="w"> | 243 | </span><span·class="c1">%%·efficiency_guide.erl:200:·Warning:·NOT·OPTIMIZED:·all·clauses·do·not·match·a·suitable·reference</span><span·class="w"> |
| 244 | </span><span·class="k">receive</span><span·class="w"> | 244 | </span><span·class="k">receive</span><span·class="w"> |
| 245 | ····</span><span·class="p"·data-group-id=" | 245 | ····</span><span·class="p"·data-group-id="9698265995-4">{</span><span·class="n">Tag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="9698265995-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·157,·SHA:·6605c5a5e5a5e07d7804ee6a86a362a63b816a65c101b0a3b004da3a76291e7a·...·]-5">)</span><span·class="w"> |
| 246 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 246 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="c1">%%·DO</span><span·class="w"> | 247 | </span><span·class="c1">%%·DO</span><span·class="w"> |
| 248 | </span><span·class="nf">optimized_receive</span><span·class="p"·data-group-id=" | 248 | </span><span·class="nf">optimized_receive</span><span·class="p"·data-group-id="9698265995-6">(</span><span·class="n">Process</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Request</span><span·class="p"·data-group-id="9698265995-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 249 | </span><span·class="c1">%%·efficiency_guide.erl:206:·Warning:·OPTIMIZED:·reference·used·to·mark·a·message·queue·position</span><span·class="w"> | 249 | </span><span·class="c1">%%·efficiency_guide.erl:206:·Warning:·OPTIMIZED:·reference·used·to·mark·a·message·queue·position</span><span·class="w"> |
| 250 | ····</span><span·class="n">MRef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">monitor</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="n">MRef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">monitor</span><span·class="p"·data-group-id="9698265995-7">(</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Process</span><span·class="p"·data-group-id="9698265995-7">)</span><span·class="p">,</span><span·class="w"> |
| 251 | ····</span><span·class="n">Process</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 251 | ····</span><span·class="n">Process</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9698265995-8">{</span><span·class="nf">self</span><span·class="p"·data-group-id="9698265995-9">(</span><span·class="p"·data-group-id="9698265995-9">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·94,·SHA:·58f49e0c3674a1594404111036ffb52a9ea5ba735582eb6747707578bd22c889·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 252 | ····</span><span·class="c1">%%·efficiency_guide.erl:208:·Warning:·OPTIMIZED:·matches·reference·created·by·monitor/2·at·efficiency_guide.erl:206</span><span·class="w"> | 252 | ····</span><span·class="c1">%%·efficiency_guide.erl:208:·Warning:·OPTIMIZED:·matches·reference·created·by·monitor/2·at·efficiency_guide.erl:206</span><span·class="w"> |
| 253 | ····</span><span·class="k">receive</span><span·class="w"> | 253 | ····</span><span·class="k">receive</span><span·class="w"> |
| 254 | ········</span><span·class="p"·data-group-id=" | 254 | ········</span><span·class="p"·data-group-id="9698265995-10">{</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reply</span><span·class="p"·data-group-id="9698265995-10">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 255 | ········</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id=" | 255 | ········</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id="9698265995-11">(</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9698265995-12">[</span><span·class="ss">flush</span><span·class="p"·data-group-id="9698265995-12">]</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·c528a11fab6b63c00936a95e58294d114e6578f603de043dfcbaae06b9e8921d·...·]-11">)</span><span·class="p">,</span><span·class="w"> |
| 256 | ········</span><span·class="nf">handle_reply</span><span·class="p"·data-group-id=" | 256 | ········</span><span·class="nf">handle_reply</span><span·class="p"·data-group-id="9698265995-13">(</span><span·class="n">Reply</span><span·class="p"·data-group-id="9698265995-13">)</span><span·class="p">;</span><span·class="w"> |
| 257 | ····</span><span·class="p"·data-group-id=" | 257 | ····</span><span·class="p"·data-group-id="9698265995-14">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·142,·SHA:·0b58d6d0988ae6a55875e95186c488662fdcbfd3369e6aa9e8f70d3b7187a5c3·...·]-14">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 258 | ····</span><span·class="nf">handle_error</span><span·class="p"·data-group-id=" | 258 | ····</span><span·class="nf">handle_error</span><span·class="p"·data-group-id="9698265995-15">(</span><span·class="n">Reason</span><span·class="p"·data-group-id="9698265995-15">)</span><span·class="w"> |
| 259 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 259 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="c1">%%·DO</span><span·class="w"> | 260 | </span><span·class="c1">%%·DO</span><span·class="w"> |
| 261 | </span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id=" | 261 | </span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id="9698265995-16">(</span><span·class="p"·data-group-id="9698265995-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 262 | ····</span><span·class="c1">%%·efficiency_guide.erl:218:·Warning:·OPTIMIZED:·reference·used·to·mark·a·message·queue·position</span><span·class="w"> | 262 | ····</span><span·class="c1">%%·efficiency_guide.erl:218:·Warning:·OPTIMIZED:·reference·used·to·mark·a·message·queue·position</span><span·class="w"> |
| 263 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id=" | 263 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id="9698265995-17">(</span><span·class="p"·data-group-id="9698265995-17">)</span><span·class="p">,</span><span·class="w"> |
| 264 | ····</span><span·class="c1">%%·efficiency_guide.erl:219:·Warning:·INFO:·passing·reference·created·by·make_ref/0·at·efficiency_guide.erl:218</span><span·class="w"> | 264 | ····</span><span·class="c1">%%·efficiency_guide.erl:219:·Warning:·INFO:·passing·reference·created·by·make_ref/0·at·efficiency_guide.erl:218</span><span·class="w"> |
| 265 | ····</span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id=" | 265 | ····</span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id="9698265995-18">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="9698265995-18">)</span><span·class="p">.</span><span·class="w"> |
| 266 | </span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id=" | 266 | </span><span·class="nf">cross_function_receive</span><span·class="p"·data-group-id="9698265995-19">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="9698265995-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 267 | ····</span><span·class="c1">%%·efficiency_guide.erl:222:·Warning:·OPTIMIZED:·all·clauses·match·reference·in·function·parameter·1</span><span·class="w"> | 267 | ····</span><span·class="c1">%%·efficiency_guide.erl:222:·Warning:·OPTIMIZED:·all·clauses·match·reference·in·function·parameter·1</span><span·class="w"> |
| 268 | ····</span><span·class="k">receive</span><span·class="w"> | 268 | ····</span><span·class="k">receive</span><span·class="w"> |
| 269 | ········</span><span·class="p"·data-group-id=" | 269 | ········</span><span·class="p"·data-group-id="9698265995-20">{</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="9698265995-20">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·160,·SHA:·6b2c8ef60647ecc565f58751252f18c9a3154524faef89f8f93ec8c3df164d0a·...·]-21">)</span><span·class="w"> |
| 270 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><h2·id="literal-pool"·class="section-heading"> | 270 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><h2·id="literal-pool"·class="section-heading"> |
| 271 | ··<a·href="#literal-pool"·class="hover-link"> | 271 | ··<a·href="#literal-pool"·class="hover-link"> |
| 272 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 272 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 273 | ··</a> | 273 | ··</a> |
| Max diff block lines reached; 20632/67825 bytes (30.42%) of diff not shown. | |||
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 398, 15 lines modified | Offset 398, 15 lines modified | ||
| 398 | ······<p·class="built-using"> | 398 | ······<p·class="built-using"> |
| 399 | ········Built·using | 399 | ········Built·using |
| 400 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 400 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 401 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 401 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 402 | ······</p> | 402 | ······</p> |
| 403 | <p>Copyright·©·1996-202 | 403 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 404 | ····</footer> | 404 | ····</footer> |
| 405 | ··</div> | 405 | ··</div> |
| 406 | </main> | 406 | </main> |
| 407 | </div> | 407 | </div> |
| 408 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 408 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 409 | ··<script> | 409 | ··<script> |
| 410 | ··let·initialized·=·false; | 410 | ··let·initialized·=·false; |
| Offset 120, 119 lines modified | Offset 120, 119 lines modified | ||
| 120 | to·read·the·port·example·in·<a·href="c_port.html">Ports</a>·before·reading·this·section.</p><h2·id="erlang-program"·class="section-heading"> | 120 | to·read·the·port·example·in·<a·href="c_port.html">Ports</a>·before·reading·this·section.</p><h2·id="erlang-program"·class="section-heading"> |
| 121 | ··<a·href="#erlang-program"·class="hover-link"> | 121 | ··<a·href="#erlang-program"·class="hover-link"> |
| 122 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 122 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 123 | ··</a> | 123 | ··</a> |
| 124 | ··<span·class="text">Erlang·Program</span> | 124 | ··<span·class="text">Erlang·Program</span> |
| 125 | </h2> | 125 | </h2> |
| 126 | <p>The·following·example·shows·an·Erlang·program·communicating·with·a·C·program | 126 | <p>The·following·example·shows·an·Erlang·program·communicating·with·a·C·program |
| 127 | over·a·plain·port·with·home·made·encoding:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 127 | over·a·plain·port·with·home·made·encoding:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6312060429-1">(</span><span·class="ss">complex1</span><span·class="p"·data-group-id="6312060429-1">)</span><span·class="p">.</span><span·class="w"> |
| 128 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 128 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6312060429-2">(</span><span·class="p"·data-group-id="6312060429-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·241,·SHA:·d826fb82045a8ef77c561c83bb2fcf3a97e64049a6358ec7ee69351a7d2836eb·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 129 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 129 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6312060429-4">(</span><span·class="p"·data-group-id="6312060429-5">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·144f87787d546c36e58ac86783a7c8c473006759d915df781a7015cac105aeac·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 130 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 130 | </span><span·class="nf">start</span><span·class="p"·data-group-id="6312060429-6">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="6312060429-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 131 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 131 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6312060429-7">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-8">[</span><spa[·...·truncated·by·diffoscope;·len:·119,·SHA:·32481fdf30e17bef60021e08ca80bbc204320902879f37dbc0c332d61955db7d·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 132 | </span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 132 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="6312060429-9">(</span><span·class="p"·data-group-id="6312060429-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 133 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> | 133 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 134 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="6312060429-10">(</span><span·class="n">X</span><span·class="p"·data-group-id="6312060429-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 135 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 135 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="6312060429-11">(</span><span·class="p"·data-group-id="6312060429-12">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="6312060429-12">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·baf3968d42907a06b7d2eb5d333da0b33c6f267758f35875d4523ebb8e83d39e·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 136 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="6312060429-13">(</span><span·class="n">Y</span><span·class="p"·data-group-id="6312060429-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 137 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="6312060429-14">(</span><span·class="p"·data-group-id="6312060429-15">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="6312060429-15">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·baf3968d42907a06b7d2eb5d333da0b33c6f267758f35875d4523ebb8e83d39e·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 138 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="6312060429-16">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="6312060429-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-17">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="6312060429-18">(</span><span·class="p"·data-group-id="6312060429-18">)</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·94,·SHA:·89e8f2ca6c96d5d2dd16939144f89507ce49d4312c5904699e82a347b5ef13b3·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 140 | ····</span><span·class="k">receive</span><span·class="w"> | 140 | ····</span><span·class="k">receive</span><span·class="w"> |
| 141 | » </span><span·class="p"·data-group-id=" | 141 | » </span><span·class="p"·data-group-id="6312060429-19">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="6312060429-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 142 | » ····</span><span·class="n">Result</span><span·class="w"> | 142 | » ····</span><span·class="n">Result</span><span·class="w"> |
| 143 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 143 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 144 | </span><span·class="nf">init</span><span·class="p"·data-group-id="6312060429-20">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="6312060429-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 145 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 145 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="6312060429-21">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="6312060429-22">(</span><span·class="p"·data-group-id="6312060429-22">)</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·862a5fd7135a6cef2116c52b6c067cda84624abd697a77a89a355cd77aafddd9·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 146 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 146 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="6312060429-23">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="6312060429-23">)</span><span·class="p">,</span><span·class="w"> |
| 147 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 147 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="6312060429-24">(</span><span·class="p"·data-group-id="6312060429-25">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="6312060429-25">}</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·389,·SHA:·c995581e1bd1868eb95d9e7bd646ec766a3cdef502803c2ce09b60aeb8e01676·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 148 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 148 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6312060429-28">(</span><span·class="n">Port</span><span·class="p"·data-group-id="6312060429-28">)</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 149 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="6312060429-29">(</span><span·class="n">Port</span><span·class="p"·data-group-id="6312060429-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | ····</span><span·class="k">receive</span><span·class="w"> | 150 | ····</span><span·class="k">receive</span><span·class="w"> |
| 151 | » </span><span·class="p"·data-group-id=" | 151 | » </span><span·class="p"·data-group-id="6312060429-30">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="6312060429-30">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 152 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 152 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-31">{</span><span·class="nf">self</span><span·class="p"·data-group-id="6312060429-32">(</span><span·class="p"·data-group-id="6312060429-32">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-33">{</[·...·truncated·by·diffoscope;·len:·343,·SHA:·c27137536b82f98d0fdd97e6868dc531263d9045a8f32a1060ed955f2012a74f·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 153 | » ····</span><span·class="k">receive</span><span·class="w"> | 153 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 154 | » » </span><span·class="p"·data-group-id=" | 154 | » » </span><span·class="p"·data-group-id="6312060429-35">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-36">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><[·...·truncated·by·diffoscope;·len:·94,·SHA:·f78e584e315c231e3dea4ecc7299d0e886cfc47ac20eaabeff0c5d07a4a7a84a·...·]-35">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 155 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 155 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-37">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="6312060429-38">(</span><span·class="n">Data</span><span·class="p"·data-group-id="6312060429-3[·...·truncated·by·diffoscope;·len:·52,·SHA:·3af8014612320472e27de7a35a68dfe0e8704e3dbbd58874fd3480667ea069b8·...·]-37">}</span><span·class="w"> |
| 156 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 156 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 157 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 157 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6312060429-39">(</span><span·class="n">Port</span><span·class="p"·data-group-id="6312060429-39">)</span><span·class="p">;</span><span·class="w"> |
| 158 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 158 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 159 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 159 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6312060429-40">{</span><span·class="nf">self</span><span·class="p"·data-group-id="6312060429-41">(</span><span·class="p"·data-group-id="6312060429-41">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">close</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·c8f70b26dd2519bd2e7f971b803156166cabdd28963f500864cb62b2b2c31b45·...·]-40">}</span><span·class="p">,</span><span·class="w"> |
| 160 | » ····</span><span·class="k">receive</span><span·class="w"> | 160 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 161 | » » </span><span·class="p"·data-group-id=" | 161 | » » </span><span·class="p"·data-group-id="6312060429-42">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">closed</span><span·class="p"·data-group-id="6312060429-42">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 162 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="6312060429-43">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="6312060429-43">)</span><span·class="w"> |
| 163 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 163 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 164 | » </span><span·class="p"·data-group-id=" | 164 | » </span><span·class="p"·data-group-id="6312060429-44">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="6312060429-44">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 165 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 165 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="6312060429-45">(</span><span·class="ss">port_terminated</span><span·class="p"·data-group-id="6312060429-45">)</span><span·class="w"> |
| 166 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 166 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 167 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="6312060429-46">(</span><span·class="p"·data-group-id="6312060429-47">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="6312060429-47">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·296,·SHA:·3226f62e4ec32db29bed57f80c9f4e4148c795426fd00fcba09fc52a7a1cda35·...·]-48">]</span><span·class="p">;</span><span·class="w"> |
| 168 | </span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 168 | </span><span·class="nf">encode</span><span·class="p"·data-group-id="6312060429-49">(</span><span·class="p"·data-group-id="6312060429-50">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="6312060429-50">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·296,·SHA:·6ba94cd5121dcb00f8ddc6d136990f4906041817ce7e6273a6d166fcffbb6a8b·...·]-51">]</span><span·class="p">.</span><span·class="w"> |
| 169 | </span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 169 | </span><span·class="nf">decode</span><span·class="p"·data-group-id="6312060429-52">(</span><span·class="p"·data-group-id="6312060429-53">[</span><span·class="n">Int</span><span·class="p"·data-group-id="6312060429-53">]</span><span·class="p"·data-group-id="6312060429-52">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Int</span><span·class="p">.</span></code></pre><p>There·are·two·differences·when·using·Erl_Interface·on·the·C·side·compared·to·the |
| 170 | example·in·<a·href="c_port.html">Ports</a>,·using·only·the·plain·port:</p><ul><li>As·Erl_Interface·operates·on·the·Erlang·external·term·format,·the·port·must·be | 170 | example·in·<a·href="c_port.html">Ports</a>,·using·only·the·plain·port:</p><ul><li>As·Erl_Interface·operates·on·the·Erlang·external·term·format,·the·port·must·be |
| 171 | set·to·use·binaries.</li><li>Instead·of·inventing·an·encoding/decoding·scheme,·the | 171 | set·to·use·binaries.</li><li>Instead·of·inventing·an·encoding/decoding·scheme,·the |
| 172 | <a·href="../../erts-15.2.7/doc/html/erlang.html#term_to_binary/1"><code·class="inline">term_to_binary/1</code></a>·and | 172 | <a·href="../../erts-15.2.7/doc/html/erlang.html#term_to_binary/1"><code·class="inline">term_to_binary/1</code></a>·and |
| 173 | <a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>·BIFs·are·to·be·used.</li></ul><p>That·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 173 | <a·href="../../erts-15.2.7/doc/html/erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>·BIFs·are·to·be·used.</li></ul><p>That·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">open_port</span><span·class="p"·data-group-id="4400364982-1">(</span><span·class="p"·data-group-id="4400364982-2">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="4400364982-2">}</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·2065,·SHA:·64c916783eb4d94bb60f8601b62966cc18ff91700fcc0f50a7c83dc2c391fc82·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 174 | </span><span·class="k">receive</span><span·class="w"> | 174 | </span><span·class="k">receive</span><span·class="w"> |
| 175 | ··</span><span·class="p"·data-group-id=" | 175 | ··</span><span·class="p"·data-group-id="7500786347-5">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7500786347-6">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·f2a3cecc5d268f7e61f1af12df6197fae8f0fdc00f1b0799fbf045eeb46376ae·...·]-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7500786347-7">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">decode</span><span·class="p"·data-group-id="7500786347-8">(</span><span·class="n">Data</span><span·class="p"·data-group-id="7500786347-8">[·...·truncated·by·diffoscope;·len:·49,·SHA:·97291524ac491e5222cef6d4e066cf9f8381f3d4ebf6bed4eeaa67379e0d39cb·...·]-7">}</span><span·class="w"> |
| 177 | </span><span·class="k">end</span></code></pre><p>is·replaced·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 177 | </span><span·class="k">end</span></code></pre><p>is·replaced·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7329352009-1">{</span><span·class="nf">self</span><span·class="p"·data-group-id="7329352009-2">(</span><span·class="p"·data-group-id="7329352009-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7329352009-3">{</span[·...·truncated·by·diffoscope;·len:·344,·SHA:·982950909e56a5ea3a31aade0742528a1a49f4f6218a25160b9cc94b7960c78e·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 178 | </span><span·class="k">receive</span><span·class="w"> | 178 | </span><span·class="k">receive</span><span·class="w"> |
| 179 | ··</span><span·class="p"·data-group-id=" | 179 | ··</span><span·class="p"·data-group-id="7329352009-5">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7329352009-6">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·f23731b4c0ea3920c91b0457a116714867c70abccdddfb11be2a39ff79f1814f·...·]-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7329352009-7">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="7329352009-8">(</span><span·class="n">Data</span><span·class="p"·data-group-id="732935[·...·truncated·by·diffoscope;·len:·57,·SHA:·1f6203096c297cb4aad8a75f8e1d2f7d49df664d6986f4be902236c327c21e8c·...·]-7">}</span><span·class="w"> |
| 181 | </span><span·class="k">end</span></code></pre><p>The·resulting·Erlang·program·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 181 | </span><span·class="k">end</span></code></pre><p>The·resulting·Erlang·program·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7260661662-1">(</span><span·class="ss">complex2</span><span·class="p"·data-group-id="7260661662-1">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 182 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7260661662-2">(</span><span·class="p"·data-group-id="7260661662-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·241,·SHA:·dc128c2543ebea25b87629b7ee8820137bbbffab045396d8260905b4c46f31a3·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 183 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 183 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7260661662-4">(</span><span·class="p"·data-group-id="7260661662-5">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·efdada46e7dbb80c633d57edb87daf368ba8291513024f1b750f643fea5d0828·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 184 | </span><span·class="nf">start</span><span·class="p"·data-group-id="7260661662-6">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="7260661662-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="7260661662-7">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-8">[</span><spa[·...·truncated·by·diffoscope;·len:·119,·SHA:·7c0fb59157860cf29c6ae7aeb6d7cd0230c289a78cb3e9f96d4aba9ef3c838a5·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 186 | </span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 186 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="7260661662-9">(</span><span·class="p"·data-group-id="7260661662-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 187 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> | 187 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 188 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="7260661662-10">(</span><span·class="n">X</span><span·class="p"·data-group-id="7260661662-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 189 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 189 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="7260661662-11">(</span><span·class="p"·data-group-id="7260661662-12">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="7260661662-12">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·765896226ff0d8ed6f0d5ac522eff7e1c4df7b675d93438b01a4ae8e837b855f·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 190 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 190 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="7260661662-13">(</span><span·class="n">Y</span><span·class="p"·data-group-id="7260661662-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 191 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="nf">call_port</span><span·class="p"·data-group-id="7260661662-14">(</span><span·class="p"·data-group-id="7260661662-15">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="7260661662-15">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·765896226ff0d8ed6f0d5ac522eff7e1c4df7b675d93438b01a4ae8e837b855f·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id=" | 192 | </span><span·class="nf">call_port</span><span·class="p"·data-group-id="7260661662-16">(</span><span·class="n">Msg</span><span·class="p"·data-group-id="7260661662-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="ss">complex</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-17">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="7260661662-18">(</span><span·class="p"·data-group-id="7260661662-18">)</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·94,·SHA:·2b291723e9f2ac7709c7fd521931c9b610bc13b8118b36bcebf606f2751f1f71·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 194 | ····</span><span·class="k">receive</span><span·class="w"> | 194 | ····</span><span·class="k">receive</span><span·class="w"> |
| 195 | » </span><span·class="p"·data-group-id=" | 195 | » </span><span·class="p"·data-group-id="7260661662-19">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="7260661662-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 196 | » ····</span><span·class="n">Result</span><span·class="w"> | 196 | » ····</span><span·class="n">Result</span><span·class="w"> |
| 197 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 197 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 198 | </span><span·class="nf">init</span><span·class="p"·data-group-id="7260661662-20">(</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="7260661662-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="7260661662-21">(</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="7260661662-22">(</span><span·class="p"·data-group-id="7260661662-22">)</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·d9af98966ad212fedddde2335a54cdbf7646694cf7952e648bcbd42b5025482c·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="7260661662-23">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="7260661662-23">)</span><span·class="p">,</span><span·class="w"> |
| 201 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="7260661662-24">(</span><span·class="p"·data-group-id="7260661662-25">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExtPrg</span><span·class="p"·data-group-id="7260661662-25">}</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·467,·SHA:·5a26ae5dc8751e90d5899be92eac106fe8bb5d84a48ae8a7cc502c2278ee7944·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="7260661662-28">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7260661662-28">)</span><span·class="p">.</span><span·class="w"> |
| 203 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="7260661662-29">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7260661662-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="k">receive</span><span·class="w"> | 204 | ····</span><span·class="k">receive</span><span·class="w"> |
| 205 | » </span><span·class="p"·data-group-id=" | 205 | » </span><span·class="p"·data-group-id="7260661662-30">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Caller</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="7260661662-30">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 206 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-31">{</span><span·class="nf">self</span><span·class="p"·data-group-id="7260661662-32">(</span><span·class="p"·data-group-id="7260661662-32">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-33">{</[·...·truncated·by·diffoscope;·len:·351,·SHA:·ca64c779bed4e2a888c21de75b27136dd0d732b32dda89e4f0fb7658e1f6f2ca·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 207 | » ····</span><span·class="k">receive</span><span·class="w"> | 207 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 208 | » » </span><span·class="p"·data-group-id=" | 208 | » » </span><span·class="p"·data-group-id="7260661662-35">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-36">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><[·...·truncated·by·diffoscope;·len:·94,·SHA:·548da5f67100d910e4e82973687e49a4627720de36a4a2035e51cfcc7b695e9f·...·]-35">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 209 | » » ····</span><span·class="n">Caller</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-37">{</span><span·class="ss">complex</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="7260661662-38">(</span><span·class="n">Data</span><span·class="p"·data-group-id="7260[·...·truncated·by·diffoscope;·len:·60,·SHA:·86e69f3a39f9cee5d98ea1d617b08b1c89a5bd89f9b6bc5e19661775e86e4db1·...·]-37">}</span><span·class="w"> |
| 210 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 210 | » ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 211 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 211 | » ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="7260661662-39">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7260661662-39">)</span><span·class="p">;</span><span·class="w"> |
| 212 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 212 | » </span><span·class="ss">stop</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 213 | » ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7260661662-40">{</span><span·class="nf">self</span><span·class="p"·data-group-id="7260661662-41">(</span><span·class="p"·data-group-id="7260661662-41">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">close</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·d99edb674d784aec6f55fdb06f8a79d70112f064fa3a6a291fb85f69174688bd·...·]-40">}</span><span·class="p">,</span><span·class="w"> |
| 214 | » ····</span><span·class="k">receive</span><span·class="w"> | 214 | » ····</span><span·class="k">receive</span><span·class="w"> |
| 215 | » » </span><span·class="p"·data-group-id=" | 215 | » » </span><span·class="p"·data-group-id="7260661662-42">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">closed</span><span·class="p"·data-group-id="7260661662-42">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 216 | » » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="7260661662-43">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="7260661662-43">)</span><span·class="w"> |
| 217 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 217 | » ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 218 | » </span><span·class="p"·data-group-id=" | 218 | » </span><span·class="p"·data-group-id="7260661662-44">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="7260661662-44">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 219 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 219 | » ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="7260661662-45">(</span><span·class="ss">port_terminated</span><span·class="p"·data-group-id="7260661662-45">)</span><span·class="w"> |
| 220 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Notice·that·calling·<code·class="inline">complex2:foo/1</code>·and·<code·class="inline">complex2:bar/1</code>·results·in·the·tuple | 220 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Notice·that·calling·<code·class="inline">complex2:foo/1</code>·and·<code·class="inline">complex2:bar/1</code>·results·in·the·tuple |
| 221 | <code·class="inline">{foo,X}</code>·or·<code·class="inline">{bar,Y}</code>·being·sent·to·the·<code·class="inline">complex</code>·process,·which·codes·them·as | 221 | <code·class="inline">{foo,X}</code>·or·<code·class="inline">{bar,Y}</code>·being·sent·to·the·<code·class="inline">complex</code>·process,·which·codes·them·as |
| 222 | binaries·and·sends·them·to·the·port.·This·means·that·the·C·program·must·be·able | 222 | binaries·and·sends·them·to·the·port.·This·means·that·the·C·program·must·be·able |
| 223 | to·handle·these·two·tuples.</p><h2·id="c-program"·class="section-heading"> | 223 | to·handle·these·two·tuples.</p><h2·id="c-program"·class="section-heading"> |
| 224 | ··<a·href="#c-program"·class="hover-link"> | 224 | ··<a·href="#c-program"·class="hover-link"> |
| 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 226 | ··</a> | 226 | ··</a> |
| Offset 362, 27 lines modified | Offset 362, 27 lines modified | ||
| 362 | ····-L/usr/local/otp/lib/erl_interface-3.9.2/lib·\ | 362 | ····-L/usr/local/otp/lib/erl_interface-3.9.2/lib·\ |
| 363 | ····complex.c·erl_comm.c·ei.c·-lei·-lpthread</code></pre><p>In·Erlang/OTP·R5B·and·later·versions·of·OTP,·the·<code·class="inline">include</code>·and·<code·class="inline">lib</code>·directories | 363 | ····complex.c·erl_comm.c·ei.c·-lei·-lpthread</code></pre><p>In·Erlang/OTP·R5B·and·later·versions·of·OTP,·the·<code·class="inline">include</code>·and·<code·class="inline">lib</code>·directories |
| 364 | are·situated·under·<code·class="inline">$OTPROOT/lib/erl_interface-VSN</code>,·where·<code·class="inline">$OTPROOT</code>·is·the | 364 | are·situated·under·<code·class="inline">$OTPROOT/lib/erl_interface-VSN</code>,·where·<code·class="inline">$OTPROOT</code>·is·the |
| 365 | root·directory·of·the·OTP·installation·(<code·class="inline">/usr/local/otp</code>·in·the·recent·example) | 365 | root·directory·of·the·OTP·installation·(<code·class="inline">/usr/local/otp</code>·in·the·recent·example) |
| 366 | and·<code·class="inline">VSN</code>·is·the·version·of·the·Erl_interface·application·(3.2.1·in·the·recent | 366 | and·<code·class="inline">VSN</code>·is·the·version·of·the·Erl_interface·application·(3.2.1·in·the·recent |
| 367 | example).</p><p>In·R4B·and·earlier·versions·of·OTP,·<code·class="inline">include</code>·and·<code·class="inline">lib</code>·are·situated·under | 367 | example).</p><p>In·R4B·and·earlier·versions·of·OTP,·<code·class="inline">include</code>·and·<code·class="inline">lib</code>·are·situated·under |
| 368 | <code·class="inline">$OTPROOT/usr</code>.</p><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> | 368 | <code·class="inline">$OTPROOT/usr</code>.</p><p><em>Step·2.</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> |
| Max diff block lines reached; 6844/73373 bytes (9.33%) of diff not shown. | |||
| Offset 143, 39 lines modified | Offset 143, 39 lines modified | ||
| 143 | reports·and·other·error·and·information·reports·are·by·default·logged·through | 143 | reports·and·other·error·and·information·reports·are·by·default·logged·through |
| 144 | the·log·handler·which·is·set·up·when·the·Kernel·application·is·started.</p><p>Prior·to·Erlang/OTP·21.0,·supervisor,·crash,·and·progress·reports·were·only | 144 | the·log·handler·which·is·set·up·when·the·Kernel·application·is·started.</p><p>Prior·to·Erlang/OTP·21.0,·supervisor,·crash,·and·progress·reports·were·only |
| 145 | logged·when·the·SASL·application·was·running.·This·behaviour·can,·for·backwards | 145 | logged·when·the·SASL·application·was·running.·This·behaviour·can,·for·backwards |
| 146 | compatibility,·be·enabled·by·setting·the·Kernel·configuration·parameter | 146 | compatibility,·be·enabled·by·setting·the·Kernel·configuration·parameter |
| 147 | <a·href="../../lib/kernel-10.2.7.1/doc/html/kernel_app.html#logger_sasl_compatible"><code·class="inline">logger_sasl_compatible</code></a>·to | 147 | <a·href="../../lib/kernel-10.2.7.1/doc/html/kernel_app.html#logger_sasl_compatible"><code·class="inline">logger_sasl_compatible</code></a>·to |
| 148 | <code·class="inline">true</code>.·For·more·information,·see | 148 | <code·class="inline">true</code>.·For·more·information,·see |
| 149 | <a·href="../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·Error·Logging</a>·in·the·SASL·User's·Guide.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-kernel·logger_level·info</span><span·class="w"> | 149 | <a·href="../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·Error·Logging</a>·in·the·SASL·User's·Guide.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-kernel·logger_level·info</span><span·class="w"> |
| 150 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">21</span><span·class="w">·</span><span·class="p"·data-group-id=" | 150 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">21</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">10.0</span><span·class="p"·data-group-id="7068513963-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-2">[</span><span·class="ss">source<[·...·truncated·by·diffoscope;·len:·1313,·SHA:·18baabf5b1c6d454f20c3b2436f790bbb0802e5b8b85c3158fc2b78ab6bb9e8e·...·]-7">]</span><span·class="w"> |
| 151 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.916404</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 151 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.916404</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 152 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">kernel</span><span·class="w"> | 152 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">kernel</span><span·class="w"> |
| 153 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> | 153 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> |
| 154 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.922908</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 154 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.922908</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 155 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stdlib</span><span·class="w"> | 155 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stdlib</span><span·class="w"> |
| 156 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> | 156 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> |
| 157 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.925755</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 157 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.925755</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 158 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-8">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="ss">kernel_safe_sup</span><span·class="p"·data-group-id="7068513963-8">}</span><span·class="w"> |
| 159 | ····</span><span·class="nc">started</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 159 | ····</span><span·class="nc">started</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-9">[</span><span·class="p"·data-group-id="7068513963-10">{</span><span·class="ss">pid</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.74</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·ca6948bc52662fa385d8a374b50ae30e45574fc18e8952fbbcc1e5dc36aec306·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ··············</span><span·class="p"·data-group-id=" | 160 | ··············</span><span·class="p"·data-group-id="7068513963-11">{</span><span·class="ss">id</span><span·class="p">,</span><span·class="ss">disk_log_sup</span><span·class="p"·data-group-id="7068513963-11">}</span><span·class="p">,</span><span·class="w"> |
| 161 | ··············</span><span·class="p"·data-group-id=" | 161 | ··············</span><span·class="p"·data-group-id="7068513963-12">{</span><span·class="ss">mfargs</span><span·class="p">,</span><span·class="p"·data-group-id="7068513963-13">{</span><span·class="ss">disk_log_sup</span><span·class="p">,</span><span·class="ss">start_link</span><span·class="p">,</span><span·c[·...·truncated·by·diffoscope;·len:·196,·SHA:·833c42f6504d664dbe7a7e04eedea201727d165fff4383cf124f267ecf0bba91·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 162 | ··············</span><span·class="p"·data-group-id=" | 162 | ··············</span><span·class="p"·data-group-id="7068513963-15">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="ss">permanent</span><span·class="p"·data-group-id="7068513963-15">}</span><span·class="p">,</span><span·class="w"> |
| 163 | ··············</span><span·class="p"·data-group-id=" | 163 | ··············</span><span·class="p"·data-group-id="7068513963-16">{</span><span·class="ss">shutdown</span><span·class="p">,</span><span·class="mi">1000</span><span·class="p"·data-group-id="7068513963-16">}</span><span·class="p">,</span><span·class="w"> |
| 164 | ··············</span><span·class="p"·data-group-id=" | 164 | ··············</span><span·class="p"·data-group-id="7068513963-17">{</span><span·class="ss">child_type</span><span·class="p">,</span><span·class="ss">supervisor</span><span·class="p"·data-group-id="7068513963-17">}</span><span·class="p"·data-group-id="7068513963-9">]</span><span·class="w"> |
| 165 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.926056</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 165 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">8</span><span·class="o">-</span><span·class="n">Jun</span><span·class="o">-</span><span·class="mi">2018</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">54</span><span·class="p">:</span><span·class="mf">19.926056</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 166 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-18">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="ss">kernel_safe_sup</span><span·class="p"·data-group-id="7068513963-18">}</span><span·class="w"> |
| 167 | ····</span><span·class="nc">started</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="nc">started</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7068513963-19">[</span><span·class="p"·data-group-id="7068513963-20">{</span><span·class="ss">pid</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.75</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·9565eeffd5ad27af987f8862d76e8514c8e7b7935374d3f3ccc34dd86bb1facc·...·]-20">}</span><span·class="p">,</span><span·class="w"> |
| 168 | ··············</span><span·class="p"·data-group-id=" | 168 | ··············</span><span·class="p"·data-group-id="7068513963-21">{</span><span·class="ss">id</span><span·class="p">,</span><span·class="ss">disk_log_server</span><span·class="p"·data-group-id="7068513963-21">}</span><span·class="p">,</span><span·class="w"> |
| 169 | ··············</span><span·class="p"·data-group-id=" | 169 | ··············</span><span·class="p"·data-group-id="7068513963-22">{</span><span·class="ss">mfargs</span><span·class="p">,</span><span·class="p"·data-group-id="7068513963-23">{</span><span·class="ss">disk_log_server</span><span·class="p">,</span><span·class="ss">start_link</span><span·class="p">,</span><spa[·...·truncated·by·diffoscope;·len:·199,·SHA:·a3b294d9597207fde0866b8f29016976b02117e86dfc093ab8dd382fd8e053cf·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 170 | ··············</span><span·class="p"·data-group-id=" | 170 | ··············</span><span·class="p"·data-group-id="7068513963-25">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="ss">permanent</span><span·class="p"·data-group-id="7068513963-25">}</span><span·class="p">,</span><span·class="w"> |
| 171 | ··············</span><span·class="p"·data-group-id=" | 171 | ··············</span><span·class="p"·data-group-id="7068513963-26">{</span><span·class="ss">shutdown</span><span·class="p">,</span><span·class="mi">2000</span><span·class="p"·data-group-id="7068513963-26">}</span><span·class="p">,</span><span·class="w"> |
| 172 | ··············</span><span·class="p"·data-group-id=" | 172 | ··············</span><span·class="p"·data-group-id="7068513963-27">{</span><span·class="ss">child_type</span><span·class="p">,</span><span·class="ss">worker</span><span·class="p"·data-group-id="7068513963-27">}</span><span·class="p"·data-group-id="7068513963-19">]</span><span·class="w"> |
| 173 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id=" | 173 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id="7068513963-28">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="7068513963-28">)</span><span·class="w"> |
| 174 | </span><span·class="mi">1</span><span·class="o">></span></code></pre> | 174 | </span><span·class="mi">1</span><span·class="o">></span></code></pre> |
| 175 | </div> | 175 | </div> |
| 176 | <div·class="bottom-actions"·id="bottom-actions"> | 176 | <div·class="bottom-actions"·id="bottom-actions"> |
| 177 | ··<div·class="bottom-actions-item"> | 177 | ··<div·class="bottom-actions-item"> |
| 178 | ······<a·href="system_principles.html"·class="bottom-actions-button"·rel="prev"> | 178 | ······<a·href="system_principles.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 219, 15 lines modified | Offset 219, 15 lines modified | ||
| 219 | ······<p·class="built-using"> | 219 | ······<p·class="built-using"> |
| 220 | ········Built·using | 220 | ········Built·using |
| 221 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 221 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 222 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 222 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 223 | ······</p> | 223 | ······</p> |
| 224 | <p>Copyright·©·1996-202 | 224 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 225 | ····</footer> | 225 | ····</footer> |
| 226 | ··</div> | 226 | ··</div> |
| 227 | </main> | 227 | </main> |
| 228 | </div> | 228 | </div> |
| 229 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 229 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 230 | ··<script> | 230 | ··<script> |
| 231 | ··let·initialized·=·false; | 231 | ··let·initialized·=·false; |
| Offset 151, 22 lines modified | Offset 151, 22 lines modified | ||
| 151 | classes,·with·different·origins.·The·<a·href="expressions.html#try">try</a>·expression·can | 151 | classes,·with·different·origins.·The·<a·href="expressions.html#try">try</a>·expression·can |
| 152 | distinguish·between·the·different·classes,·whereas·the | 152 | distinguish·between·the·different·classes,·whereas·the |
| 153 | <a·href="expressions.html#catch-and-throw">catch</a>·expression·cannot.·<code·class="inline">try</code>·and·<code·class="inline">catch</code>·are·described | 153 | <a·href="expressions.html#catch-and-throw">catch</a>·expression·cannot.·<code·class="inline">try</code>·and·<code·class="inline">catch</code>·are·described |
| 154 | in·<a·href="expressions.html">Expressions</a>.</p><table><thead><tr><th·style="text-align:·left;"><em>Class</em></th><th·style="text-align:·left;"><em>Origin</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">error</code></td><td·style="text-align:·left;">Run-time·error,·for·example,·<code·class="inline">1+a</code>,·or·the·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#error/1"><code·class="inline">error/1</code></a></td></tr><tr><td·style="text-align:·left;"><code·class="inline">exit</code></td><td·style="text-align:·left;">The·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a></td></tr><tr><td·style="text-align:·left;"><code·class="inline">throw</code></td><td·style="text-align:·left;">The·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#throw/1"><code·class="inline">throw/1</code></a></td></tr></tbody></table><p><em>Table:·Exception·Classes.</em></p><p>All·of·the·above·exceptions·can·also·be·generated·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#raise/3"><code·class="inline">erlang:raise/3</code></a>.</p><p>An·exception·consists·of·its·class,·an·exit·reason·(see | 154 | in·<a·href="expressions.html">Expressions</a>.</p><table><thead><tr><th·style="text-align:·left;"><em>Class</em></th><th·style="text-align:·left;"><em>Origin</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">error</code></td><td·style="text-align:·left;">Run-time·error,·for·example,·<code·class="inline">1+a</code>,·or·the·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#error/1"><code·class="inline">error/1</code></a></td></tr><tr><td·style="text-align:·left;"><code·class="inline">exit</code></td><td·style="text-align:·left;">The·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a></td></tr><tr><td·style="text-align:·left;"><code·class="inline">throw</code></td><td·style="text-align:·left;">The·process·called·<a·href="../../erts-15.2.7/doc/html/erlang.html#throw/1"><code·class="inline">throw/1</code></a></td></tr></tbody></table><p><em>Table:·Exception·Classes.</em></p><p>All·of·the·above·exceptions·can·also·be·generated·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#raise/3"><code·class="inline">erlang:raise/3</code></a>.</p><p>An·exception·consists·of·its·class,·an·exit·reason·(see |
| 155 | <a·href="errors.html#exit_reasons">Exit·Reason</a>),·and·a·stack·trace·(which·aids·in·finding | 155 | <a·href="errors.html#exit_reasons">Exit·Reason</a>),·and·a·stack·trace·(which·aids·in·finding |
| 156 | the·code·location·of·the·exception).</p><p>The·stack·trace·can·be·bound·to·a·variable·from·within·a·<code·class="inline">try</code>·expression·for | 156 | the·code·location·of·the·exception).</p><p>The·stack·trace·can·be·bound·to·a·variable·from·within·a·<code·class="inline">try</code>·expression·for |
| 157 | any·exception·class,·or·as·part·of·the·exit·reason·when·a·run-time·error·is | 157 | any·exception·class,·or·as·part·of·the·exit·reason·when·a·run-time·error·is |
| 158 | caught·by·a·<code·class="inline">catch</code>.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id=" | 158 | caught·by·a·<code·class="inline">catch</code>.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="1059207718-1">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="p"·data-group-id="1059207718-2">{</span><span·class="ss">test</span><span·class="p">,</span><span·class="n">Stacktrace</span><span·class="p"·data-group-id="105[·...·truncated·by·diffoscope;·len:·452,·SHA:·75c0c0da294f41830e8ce8d2e5ce94778a7c967b30ccf1e0b93d6802be7556cd·...·]8-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Stacktrace</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="p"·data-group-id=" | 159 | </span><span·class="p"·data-group-id="1059207718-5">[</span><span·class="p"·data-group-id="1059207718-6">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">apply_fun</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·124,·SHA:·9ad6459c89a065784c93460720469faeaa1438805f28bc5c4eaf76816c7f00b7·...·]8-6">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ·</span><span·class="p"·data-group-id=" | 160 | ·</span><span·class="p"·data-group-id="1059207718-8">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">do_apply</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="p"·data-group-id="1059207718-9">[</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·73,·SHA:·c3b6e9bc87f416634beaad78b308a1bcf0cb9bf1a93a1d140d707b2c95002a8c·...·]8-8">}</span><span·class="p">,</span><span·class="w"> |
| 161 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 161 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="1059207718-5">]</span><span·class="gp·unselectable"> |
| 162 | >·</span><span·class="k">try</span><span·class="w">·</span><span·class="nf">throw</span><span·class="p"·data-group-id=" | 162 | >·</span><span·class="k">try</span><span·class="w">·</span><span·class="nf">throw</span><span·class="p"·data-group-id="1059207718-10">(</span><span·class="ss">test</span><span·class="p"·data-group-id="1059207718-10">)</span><span·class="w">·</span><span·class="k">catch</span><span·class="w">·</span><span·class="n">Class</span><span·class="p">:</span><span·class="n">Reason</span><span·class="p">:</span><span·class="n">Stacktrace</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Stacktrace</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="p"·data-group-id=" | 163 | </span><span·class="p"·data-group-id="1059207718-11">[</span><span·class="p"·data-group-id="1059207718-12">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">apply_fun</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·128,·SHA:·0f679619949d10a1b0ab781061247f615f6420e28592afc94c6551d9341b63af·...·]8-12">}</span><span·class="p">,</span><span·class="w"> |
| 164 | ·</span><span·class="p"·data-group-id=" | 164 | ·</span><span·class="p"·data-group-id="1059207718-14">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">do_apply</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="p"·data-group-id="1059207718-15">[</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·76,·SHA:·0d91cf6cd745496f554a74d5ec2f169c7f96046621a7eee7f95f65d7e7b8af83·...·]8-14">}</span><span·class="p">,</span><span·class="w"> |
| 165 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 165 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="1059207718-11">]</span></code></pre><p><a·href=""·id="stacktrace"></a></p><h3·id="the-call-stack-back-trace-stacktrace"·class="section-heading"> |
| 166 | ··<a·href="#the-call-stack-back-trace-stacktrace"·class="hover-link"> | 166 | ··<a·href="#the-call-stack-back-trace-stacktrace"·class="hover-link"> |
| 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 168 | ··</a> | 168 | ··</a> |
| 169 | ··<span·class="text">The·call-stack·back·trace·(stacktrace)</span> | 169 | ··<span·class="text">The·call-stack·back·trace·(stacktrace)</span> |
| 170 | </h3> | 170 | </h3> |
| 171 | <p>The·stack·back-trace·(<a·href="../../erts-15.2.7/doc/html/erlang.html#t:stacktrace/0"><em>stacktrace</em></a>)·is·a·list·that | 171 | <p>The·stack·back-trace·(<a·href="../../erts-15.2.7/doc/html/erlang.html#t:stacktrace/0"><em>stacktrace</em></a>)·is·a·list·that |
| 172 | contains·<code·class="inline">{Module,·Function,·Arity,·ExtraInfo}</code>·and/or·<code·class="inline">{Fun,·Arity,·ExtraInfo}</code> | 172 | contains·<code·class="inline">{Module,·Function,·Arity,·ExtraInfo}</code>·and/or·<code·class="inline">{Fun,·Arity,·ExtraInfo}</code> |
| Offset 283, 15 lines modified | Offset 283, 15 lines modified | ||
| 283 | ······<p·class="built-using"> | 283 | ······<p·class="built-using"> |
| 284 | ········Built·using | 284 | ········Built·using |
| 285 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 285 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 286 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 286 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 287 | ······</p> | 287 | ······</p> |
| 288 | <p>Copyright·©·1996-202 | 288 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 289 | ····</footer> | 289 | ····</footer> |
| 290 | ··</div> | 290 | ··</div> |
| 291 | </main> | 291 | </main> |
| 292 | </div> | 292 | </div> |
| 293 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 293 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 294 | ··<script> | 294 | ··<script> |
| 295 | ··let·initialized·=·false; | 295 | ··let·initialized·=·false; |
| Offset 135, 43 lines modified | Offset 135, 43 lines modified | ||
| 135 | event·handler.</p><h2·id="example"·class="section-heading"> | 135 | event·handler.</p><h2·id="example"·class="section-heading"> |
| 136 | ··<a·href="#example"·class="hover-link"> | 136 | ··<a·href="#example"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Example</span> | 139 | ··<span·class="text">Example</span> |
| 140 | </h2> | 140 | </h2> |
| 141 | <p>The·callback·module·for·the·event·handler·writing·error·messages·to·the·terminal | 141 | <p>The·callback·module·for·the·event·handler·writing·error·messages·to·the·terminal |
| 142 | can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 142 | can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4346963002-1">(</span><span·class="ss">terminal_logger</span><span·class="p"·data-group-id="4346963002-1">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 143 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="4346963002-2">(</span><span·class="ss">gen_event</span><span·class="p"·data-group-id="4346963002-2">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="w"> | 144 | </span><span·class="w"> |
| 145 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 145 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4346963002-3">(</span><span·class="p"·data-group-id="4346963002-4">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_event</span><span·class="p">/</s[·...·truncated·by·diffoscope;·len:·252,·SHA:·a9fbab639e1e804ca3df20c16c53d1fdcbc6b5731fefcaae45617b70521e91ca·...·]2-3">)</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 146 | </span><span·class="nf">init</span><span·class="p"·data-group-id="4346963002-5">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="4346963002-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 147 | ····</span><span·class="p"·data-group-id=" | 147 | ····</span><span·class="p"·data-group-id="4346963002-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4346963002-7">[</span><span·class="p"·data-group-id="4346963002-7">]</span><span·class="p"·data-group-id="4346963002-6">}</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 148 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="4346963002-8">(</span><span·class="n">ErrorMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="4346963002-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 149 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4346963002-9">(</span><span·class="s">"***Error***·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4346963002-10">[</span><span·clas[·...·truncated·by·diffoscope;·len:·115,·SHA:·5d8d5186952c7db8cf0a62206bec1498e6bd8184e9b98f5581799b9315469aa0·...·]2-9">)</span><span·class="p">,</span><span·class="w"> |
| 150 | ····</span><span·class="p"·data-group-id=" | 150 | ····</span><span·class="p"·data-group-id="4346963002-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="4346963002-11">}</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id=" | 151 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="4346963002-12">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">State</span><span·class="p"·data-group-id="4346963002-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 152 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>The·callback·module·for·the·event·handler·writing·error·messages·to·a·file·can | 152 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>The·callback·module·for·the·event·handler·writing·error·messages·to·a·file·can |
| 153 | look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 153 | look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5873000629-1">(</span><span·class="ss">file_logger</span><span·class="p"·data-group-id="5873000629-1">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 154 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5873000629-2">(</span><span·class="ss">gen_event</span><span·class="p"·data-group-id="5873000629-2">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="w"> | 155 | </span><span·class="w"> |
| 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 156 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5873000629-3">(</span><span·class="p"·data-group-id="5873000629-4">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_event</span><span·class="p">/</s[·...·truncated·by·diffoscope;·len:·253,·SHA:·b2e3d8313497d83f4741ad4710c968c4031daa79f06038b74269653c336518f6·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5873000629-5">(</span><span·class="n">File</span><span·class="p"·data-group-id="5873000629-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="p"·data-group-id="5873000629-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-6">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·267,·SHA:·d4ae595d3c53783bad5ca37e9e24eedecd632c8320fe434506baece10daa7f60·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ····</span><span·class="p"·data-group-id=" | 159 | ····</span><span·class="p"·data-group-id="5873000629-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-8">}</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 160 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5873000629-9">(</span><span·class="n">ErrorMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 161 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="5873000629-10">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"***Error***·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·190,·SHA:·a00d479f0ab0eb1f815e2eac39ff58c1c893a84877428f4afa38a6614fa56801·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 162 | ····</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="p"·data-group-id="5873000629-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-12">}</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id=" | 163 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="5873000629-13">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 164 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="5873000629-14">(</span><span·class="n">Fd</span><span·class="p"·data-group-id="5873000629-14">)</span><span·class="p">.</span></code></pre><p>The·code·is·explained·in·the·next·sections.</p><p><a·href=""·id="mgr"></a></p><h2·id="starting-an-event-manager"·class="section-heading"> |
| 165 | ··<a·href="#starting-an-event-manager"·class="hover-link"> | 165 | ··<a·href="#starting-an-event-manager"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Starting·an·Event·Manager</span> | 168 | ··<span·class="text">Starting·an·Event·Manager</span> |
| 169 | </h2> | 169 | </h2> |
| 170 | <p>To·start·an·event·manager·for·handling·errors,·as·described·in·the·previous | 170 | <p>To·start·an·event·manager·for·handling·errors,·as·described·in·the·previous |
| 171 | example,·call·the·following·function:</p><pre><code·class="text">gen_event:start_link({local,·error_man})</code></pre><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#start_link/1"><code·class="inline">gen_event:start_link/1</code></a>·spawns·and·links·to·a·new·event·manager·process.</p><p>The·argument,·<code·class="inline">{local,·error_man}</code>,·specifies·the·name·under·which·the | 171 | example,·call·the·following·function:</p><pre><code·class="text">gen_event:start_link({local,·error_man})</code></pre><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#start_link/1"><code·class="inline">gen_event:start_link/1</code></a>·spawns·and·links·to·a·new·event·manager·process.</p><p>The·argument,·<code·class="inline">{local,·error_man}</code>,·specifies·the·name·under·which·the |
| Offset 184, 57 lines modified | Offset 184, 57 lines modified | ||
| 184 | manager·that·is·not·part·of·a·supervision·tree.</p><h2·id="adding-an-event-handler"·class="section-heading"> | 184 | manager·that·is·not·part·of·a·supervision·tree.</p><h2·id="adding-an-event-handler"·class="section-heading"> |
| 185 | ··<a·href="#adding-an-event-handler"·class="hover-link"> | 185 | ··<a·href="#adding-an-event-handler"·class="hover-link"> |
| 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Adding·an·Event·Handler</span> | 188 | ··<span·class="text">Adding·an·Event·Handler</span> |
| 189 | </h2> | 189 | </h2> |
| 190 | <p>The·following·example·shows·how·to·start·an·event·manager·and·add·an·event | 190 | <p>The·following·example·shows·how·to·start·an·event·manager·and·add·an·event |
| 191 | handler·to·it·by·using·the·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 191 | handler·to·it·by·using·the·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="8614464134-1">(</span><span·class="p"·data-group-id="8614464134-2">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">error_man</span><span·class="p"·data-group-id="8614464134-2">}</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·db2eb495ea88ff7c2d6780467a6743f3a3ef5bf418b6b2ecffa43b12a3ebf130·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="p"·data-group-id=" | 192 | </span><span·class="p"·data-group-id="8614464134-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="8614464134-3">}</span><span·class="gp·unselectable"> |
| 193 | 2>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id=" | 193 | 2>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="8614464134-4">(</span><span·class="ss">error_man</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminal_logger</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8614464134-5">[</span><span·class="[·...·truncated·by·diffoscope;·len:·81,·SHA:·55367096e0f1f22cb8bf5e932249e6a9f4dbeaa6c66e63ac76f772fc2f24d3e7·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 194 | </span><span·class="ss">ok</span></code></pre><p>This·function·sends·a·message·to·the·event·manager·registered·as·<code·class="inline">error_man</code>, | 194 | </span><span·class="ss">ok</span></code></pre><p>This·function·sends·a·message·to·the·event·manager·registered·as·<code·class="inline">error_man</code>, |
| 195 | telling·it·to·add·the·event·handler·<code·class="inline">terminal_logger</code>.·The·event·manager·calls | 195 | telling·it·to·add·the·event·handler·<code·class="inline">terminal_logger</code>.·The·event·manager·calls |
| 196 | the·callback·function·<code·class="inline">terminal_logger:init([])</code>,·where·the·argument·<code·class="inline">[]</code>·is·the | 196 | the·callback·function·<code·class="inline">terminal_logger:init([])</code>,·where·the·argument·<code·class="inline">[]</code>·is·the |
| 197 | third·argument·to·<code·class="inline">add_handler</code>.·<code·class="inline">init/1</code>·is·expected·to·return·<code·class="inline">{ok,·State}</code>, | 197 | third·argument·to·<code·class="inline">add_handler</code>.·<code·class="inline">init/1</code>·is·expected·to·return·<code·class="inline">{ok,·State}</code>, |
| 198 | where·<code·class="inline">State</code>·is·the·internal·state·of·the·event·handler.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="9169427236-1">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="9169427236-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 199 | 198 | where·<code·class="inline">State</code>·is·the·internal·state·of·the·event·handler.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="9625656809-1">(</span><span·class="p">_</span><span·class="n">[·...·truncated·by·diffoscope;·len:·132,·SHA:·22f4bc71fb56368d329e08444dfb343789def890029bd057c495761e83d6ff71·...·] | |
| 199 | ····</span><span·class="p"·data-group-id="9625656809-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9625656809-3">[</span><span·class="p"·data-group-id="9625656809-3">]</span><span·class="p"·data-group-id="9625656809-2">}</span><span·class="p">.</span></code></pre><p>Here,·<code·class="inline">init/1</code>·does·not·need·any·input·data·and·ignores·its·argument.·For | ||
| 200 | <code·class="inline">terminal_logger</code>,·the·internal·state·is·not·used.·For·<code·class="inline">file_logger</code>,·the | 200 | <code·class="inline">terminal_logger</code>,·the·internal·state·is·not·used.·For·<code·class="inline">file_logger</code>,·the |
| 201 | internal·state·is·used·to·save·the·open·file·descriptor.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="6 | 201 | internal·state·is·used·to·save·the·open·file·descriptor.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="6908757568-1">(</span><span·class="n">File</span><span·class="p"·data-group-id="6908757568-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ····</span><span·class="p"·data-group-id="6 | 202 | ····</span><span·class="p"·data-group-id="6908757568-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="6908757568-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·265,·SHA:·af730afc649a3e9cf64308cbf1f6a67b2703304b01d558acff992dcab34c240f·...·]8-3">)</span><span·class="p">,</span><span·class="w"> |
| 203 | ····</span><span·class="p"·data-group-id="6 | 203 | ····</span><span·class="p"·data-group-id="6908757568-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="6908757568-4">}</span><span·class="p">.</span></code></pre><h2·id="notifying-about-events"·class="section-heading"> |
| 204 | ··<a·href="#notifying-about-events"·class="hover-link"> | 204 | ··<a·href="#notifying-about-events"·class="hover-link"> |
| 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 206 | ··</a> | 206 | ··</a> |
| 207 | ··<span·class="text">Notifying·about·Events</span> | 207 | ··<span·class="text">Notifying·about·Events</span> |
| 208 | </h2> | 208 | </h2> |
| 209 | <pre><code·class="text">3>·gen_event:notify(error_man,·no_reply). | 209 | <pre><code·class="text">3>·gen_event:notify(error_man,·no_reply). |
| 210 | ***Error***·no_reply | 210 | ***Error***·no_reply |
| 211 | ok</code></pre><p><code·class="inline">error_man</code>·is·the·name·of·the·event·manager·and·<code·class="inline">no_reply</code>·is·the·event.</p><p>The·event·is·made·into·a·message·and·sent·to·the·event·manager.·When·the·event | 211 | ok</code></pre><p><code·class="inline">error_man</code>·is·the·name·of·the·event·manager·and·<code·class="inline">no_reply</code>·is·the·event.</p><p>The·event·is·made·into·a·message·and·sent·to·the·event·manager.·When·the·event |
| 212 | is·received,·the·event·manager·calls·<code·class="inline">handle_event(Event,·State)</code>·for·each | 212 | is·received,·the·event·manager·calls·<code·class="inline">handle_event(Event,·State)</code>·for·each |
| 213 | installed·event·handler,·in·the·same·order·as·they·were·added.·The·function·is | 213 | installed·event·handler,·in·the·same·order·as·they·were·added.·The·function·is |
| 214 | expected·to·return·a·tuple·<code·class="inline">{ok,State1}</code>,·where·<code·class="inline">State1</code>·is·a·new·value·for·the | 214 | expected·to·return·a·tuple·<code·class="inline">{ok,State1}</code>,·where·<code·class="inline">State1</code>·is·a·new·value·for·the |
| 215 | state·of·the·event·handler.</p><p>In·<code·class="inline">terminal_logger</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_event</span><span·class="p"·data-group-id="4201737085-1">(</span><span·class="n">ErrorMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="4201737085-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 216 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4201737085-2">(</span><span·class="s">"***Error***·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4201737085-3">[</span><span·class="n">ErrorMsg</span><span·class="p"·data-group-id="4201737085-3">]</span><span·class="p"·data-group-id="4201737085-2">)</span><span·class="p">,</span><span·class="w"> | ||
| 217 | ····</ | 215 | state·of·the·event·handler.</p><p>In·<code·class="inline">terminal_logger</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_event</span><span·class="p"·data-group-id="7714839036-1">(</span><span·class="n">ErrorMsg</span><sp[·...·truncated·by·diffoscope;·len:·114,·SHA:·2b4049be64e2439f9d271236a1a61325c3be82d4689b452dd7144cad75ffdfd4·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7714839036-2">(</span><span·class="s">"***Error***·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7714839036-3">[</span><span·class="n">ErrorMsg</span><span·class="p"·data-group-id="7714839036-3">]</span><span·class="p"·data-group-id="7714839036-2">)</span><span·class="p">,</span><span·class="w"> | ||
| 217 | ····</span><span·class="p"·data-group-id="7714839036-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="7714839036-4">}</span><span·class="p">.</span></code></pre><p>In·<code·class="inline">file_logger</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_event</span><span·class="p"·data-group-id="5620977368-1">(</span><span·class="n">ErrorMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5620977368-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 218 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 218 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="5620977368-2">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"***Error***·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·187,·SHA:·8022a678e09c1b6e4213fceff2f5b0486b05486296c303104c483615d95d51aa·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 219 | ····</span><span·class="p"·data-group-id=" | 219 | ····</span><span·class="p"·data-group-id="5620977368-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5620977368-4">}</span><span·class="p">.</span></code></pre><h2·id="deleting-an-event-handler"·class="section-heading"> |
| 220 | ··<a·href="#deleting-an-event-handler"·class="hover-link"> | 220 | ··<a·href="#deleting-an-event-handler"·class="hover-link"> |
| 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 222 | ··</a> | 222 | ··</a> |
| 223 | ··<span·class="text">Deleting·an·Event·Handler</span> | 223 | ··<span·class="text">Deleting·an·Event·Handler</span> |
| 224 | </h2> | 224 | </h2> |
| 225 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">delete_handler</span><span·class="p"·data-group-id=" | 225 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">delete_handler</span><span·class="p"·data-group-id="0717484938-1">(</span><span·class="ss">error_man</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminal_logger</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0717484938-2">[</span><span·class="[·...·truncated·by·diffoscope;·len:·81,·SHA:·6d8125ba9721d613d4313108ede3b62d4a389d67a94d4d3e66a667b4bbde43e7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="ss">ok</span></code></pre><p>This·function·sends·a·message·to·the·event·manager·registered·as·<code·class="inline">error_man</code>, | 226 | </span><span·class="ss">ok</span></code></pre><p>This·function·sends·a·message·to·the·event·manager·registered·as·<code·class="inline">error_man</code>, |
| 227 | telling·it·to·delete·the·event·handler·<code·class="inline">terminal_logger</code>.·The·event·manager | 227 | telling·it·to·delete·the·event·handler·<code·class="inline">terminal_logger</code>.·The·event·manager |
| 228 | calls·the·callback·function·<code·class="inline">terminal_logger:terminate([],·State)</code>,·where·the | 228 | calls·the·callback·function·<code·class="inline">terminal_logger:terminate([],·State)</code>,·where·the |
| 229 | argument·<code·class="inline">[]</code>·is·the·third·argument·to·<code·class="inline">delete_handler</code>.·<code·class="inline">terminate/2</code>·is·to·be | 229 | argument·<code·class="inline">[]</code>·is·the·third·argument·to·<code·class="inline">delete_handler</code>.·<code·class="inline">terminate/2</code>·is·to·be |
| 230 | the·opposite·of·<code·class="inline">init/1</code>·and·do·any·necessary·cleaning·up.·Its·return·value·is | 230 | the·opposite·of·<code·class="inline">init/1</code>·and·do·any·necessary·cleaning·up.·Its·return·value·is |
| 231 | ignored.</p><p>For·<code·class="inline">terminal_logger</code>,·no·cleaning·up·is·necessary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">terminate</span><span·class="p"·data-group-id="0265804365-1">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">State</span><span·class="p"·data-group-id="0265804365-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 232 | 231 | ignored.</p><p>For·<code·class="inline">terminal_logger</code>,·no·cleaning·up·is·necessary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">terminate</span><span·class="p"·data-group-id="1792002669-1">(</span><span·class="p">_</span><s[·...·truncated·by·diffoscope;·len:·166,·SHA:·3745db0934afa2669c1013028f59b1a8e3195be446a8c0636a029857f54bad70·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | |
| 232 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>For·<code·class="inline">file_logger</code>,·the·file·descriptor·opened·in·<code·class="inline">init</code>·must·be·closed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">terminate</span><span·class="p"·data-group-id="2712597201-1">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="2712597201-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 233 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="7 | 233 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="2712597201-2">(</span><span·class="n">Fd</span><span·class="p"·data-group-id="2712597201-2">)</span><span·class="p">.</span></code></pre><h2·id="stopping"·class="section-heading"> |
| 234 | ··<a·href="#stopping"·class="hover-link"> | 234 | ··<a·href="#stopping"·class="hover-link"> |
| 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 236 | ··</a> | 236 | ··</a> |
| 237 | ··<span·class="text">Stopping</span> | 237 | ··<span·class="text">Stopping</span> |
| 238 | </h2> | 238 | </h2> |
| 239 | <p>When·an·event·manager·is·stopped,·it·gives·each·of·the·installed·event·handlers | 239 | <p>When·an·event·manager·is·stopped,·it·gives·each·of·the·installed·event·handlers |
| 240 | the·chance·to·clean·up·by·calling·<code·class="inline">terminate/2</code>,·the·same·way·as·when·deleting·a | 240 | the·chance·to·clean·up·by·calling·<code·class="inline">terminate/2</code>,·the·same·way·as·when·deleting·a |
| Offset 249, 33 lines modified | Offset 249, 33 lines modified | ||
| 249 | this·is·done·is·defined·by·a·<a·href="sup_princ.html#shutdown">shutdown·strategy</a>·set·in | 249 | this·is·done·is·defined·by·a·<a·href="sup_princ.html#shutdown">shutdown·strategy</a>·set·in |
| 250 | the·supervisor.</p><h3·id="standalone-event-managers"·class="section-heading"> | 250 | the·supervisor.</p><h3·id="standalone-event-managers"·class="section-heading"> |
| 251 | ··<a·href="#standalone-event-managers"·class="hover-link"> | 251 | ··<a·href="#standalone-event-managers"·class="hover-link"> |
| 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 253 | ··</a> | 253 | ··</a> |
| 254 | ··<span·class="text">Standalone·Event·Managers</span> | 254 | ··<span·class="text">Standalone·Event·Managers</span> |
| 255 | </h3> | 255 | </h3> |
| 256 | <p>An·event·manager·can·also·be·stopped·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 256 | <p>An·event·manager·can·also·be·stopped·by·calling:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="5552817912-1">(</span><span·class="ss">error_man</span><span·class="p"·data-group-id="5552817912-1">)</span><span·class="p">.</span><span·class="w"> |
| 257 | </span><span·class="ss">ok</span></code></pre><h2·id="handling-other-messages"·class="section-heading"> | 257 | </span><span·class="ss">ok</span></code></pre><h2·id="handling-other-messages"·class="section-heading"> |
| 258 | ··<a·href="#handling-other-messages"·class="hover-link"> | 258 | ··<a·href="#handling-other-messages"·class="hover-link"> |
| 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 260 | ··</a> | 260 | ··</a> |
| 261 | ··<span·class="text">Handling·Other·Messages</span> | 261 | ··<span·class="text">Handling·Other·Messages</span> |
| 262 | </h2> | 262 | </h2> |
| 263 | <p>If·the·<code·class="inline">gen_event</code>·process·is·to·be·able·to·receive·other·messages | 263 | <p>If·the·<code·class="inline">gen_event</code>·process·is·to·be·able·to·receive·other·messages |
| 264 | than·events,·the·callback·function·<code·class="inline">handle_info(Info,·State)</code>·must·be | 264 | than·events,·the·callback·function·<code·class="inline">handle_info(Info,·State)</code>·must·be |
| 265 | implemented·to·handle·them.·Examples·of·other·messages·are·exit | 265 | implemented·to·handle·them.·Examples·of·other·messages·are·exit |
| 266 | messages·if·the·event·manager·is·linked·to·other·processes·than·the | 266 | messages·if·the·event·manager·is·linked·to·other·processes·than·the |
| 267 | supervisor·(for·example·via·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#add_sup_handler/3"><code·class="inline">gen_event:add_sup_handler/3</code></a>)·and·is | 267 | supervisor·(for·example·via·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#add_sup_handler/3"><code·class="inline">gen_event:add_sup_handler/3</code></a>)·and·is |
| 268 | trapping·exit·signals.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_info</span><span·class="p"·data-group-id=" | 268 | trapping·exit·signals.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_info</span><span·class="p"·data-group-id="1529674648-1">(</span><span·class="p"·data-group-id="1529674648-2">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reaso[·...·truncated·by·diffoscope;·len:·178,·SHA:·3f5449db337b0ed0c242de96dbf795dcb42281eb0d69d6e31ff66e66d9a1387d·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 269 | ····</span><span·class="c1">%%·Code·to·handle·exits·here.</span><span·class="w"> | 269 | ····</span><span·class="c1">%%·Code·to·handle·exits·here.</span><span·class="w"> |
| Max diff block lines reached; 3206/42343 bytes (7.57%) of diff not shown. | |||
| Offset 131, 15 lines modified | Offset 131, 15 lines modified | ||
| 131 | int·bar(int·y)·{ | 131 | int·bar(int·y)·{ |
| 132 | ··return·y*2; | 132 | ··return·y*2; |
| 133 | }</code></pre><p>The·functions·are·deliberately·kept·as·simple·as·possible,·for·readability | 133 | }</code></pre><p>The·functions·are·deliberately·kept·as·simple·as·possible,·for·readability |
| 134 | reasons.</p><p>From·an·Erlang·perspective,·it·is·preferable·to·be·able·to·call·<code·class="inline">foo</code>·and·<code·class="inline">bar</code> | 134 | reasons.</p><p>From·an·Erlang·perspective,·it·is·preferable·to·be·able·to·call·<code·class="inline">foo</code>·and·<code·class="inline">bar</code> |
| 135 | without·having·to·bother·about·that·they·are·C·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·Erlang·code</span><span·class="w"> | 135 | without·having·to·bother·about·that·they·are·C·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·Erlang·code</span><span·class="w"> |
| 136 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 136 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 137 | </span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">complex</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 137 | </span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">complex</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id="6839796407-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="6839796407-1">)</span><span·class="p">,</span><span·class="w"> |
| 138 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Here,·the·communication·with·C·is·hidden·in·the·implementation·of·<code·class="inline">complex.erl</code>. | 138 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Here,·the·communication·with·C·is·hidden·in·the·implementation·of·<code·class="inline">complex.erl</code>. |
| 139 | In·the·following·sections,·it·is·shown·how·this·module·can·be·implemented·using | 139 | In·the·following·sections,·it·is·shown·how·this·module·can·be·implemented·using |
| 140 | the·different·interoperability·mechanisms.</p> | 140 | the·different·interoperability·mechanisms.</p> |
| 141 | </div> | 141 | </div> |
| 142 | <div·class="bottom-actions"·id="bottom-actions"> | 142 | <div·class="bottom-actions"·id="bottom-actions"> |
| 143 | ··<div·class="bottom-actions-item"> | 143 | ··<div·class="bottom-actions-item"> |
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 235, 15 lines modified | Offset 235, 15 lines modified | ||
| 235 | ······<p·class="built-using"> | 235 | ······<p·class="built-using"> |
| 236 | ········Built·using | 236 | ········Built·using |
| 237 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 237 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 238 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 238 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 239 | ······</p> | 239 | ······</p> |
| 240 | <p>Copyright·©·1996-202 | 240 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 241 | ····</footer> | 241 | ····</footer> |
| 242 | ··</div> | 242 | ··</div> |
| 243 | </main> | 243 | </main> |
| 244 | </div> | 244 | </div> |
| 245 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 245 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 246 | ··<script> | 246 | ··<script> |
| 247 | ··let·initialized·=·false; | 247 | ··let·initialized·=·false; |
| Offset 157, 63 lines modified | Offset 157, 63 lines modified | ||
| 157 | ··<a·href="#example"·class="hover-link"> | 157 | ··<a·href="#example"·class="hover-link"> |
| 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 159 | ··</a> | 159 | ··</a> |
| 160 | ··<span·class="text">Example</span> | 160 | ··<span·class="text">Example</span> |
| 161 | </h2> | 161 | </h2> |
| 162 | <p>An·example·of·a·simple·server·written·in·plain·Erlang·is·provided·in | 162 | <p>An·example·of·a·simple·server·written·in·plain·Erlang·is·provided·in |
| 163 | <a·href="design_principles.html#ch1">Overview</a>.·The·server·can·be·reimplemented·using | 163 | <a·href="design_principles.html#ch1">Overview</a>.·The·server·can·be·reimplemented·using |
| 164 | <code·class="inline">gen_server</code>,·resulting·in·this·callback·module:</p><p><a·href=""·id="ex"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 164 | <code·class="inline">gen_server</code>,·resulting·in·this·callback·module:</p><p><a·href=""·id="ex"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="3572456310-1">(</span><span·class="ss">ch3</span><span·class="p"·data-group-id="3572456310-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 165 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="3572456310-2">(</span><span·class="ss">gen_server</span><span·class="p"·data-group-id="3572456310-2">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="w"> | 166 | </span><span·class="w"> |
| 167 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 167 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3572456310-3">(</span><span·class="p"·data-group-id="3572456310-4">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="3572456310-4">]</span><span·class="p"·data-group-id="3572456310-3">)</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 168 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3572456310-5">(</span><span·class="p"·data-group-id="3572456310-6">[</span><span·class="ss">alloc</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">free</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·cdafd4186a9a7e48faf884eab7a0a1329b71bc4a9a7e50fa53d83d8e2eedb712·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 169 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 169 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3572456310-7">(</span><span·class="p"·data-group-id="3572456310-8">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</sp[·...·truncated·by·diffoscope;·len:·254,·SHA:·111449c61bfb27cdc8b86f10aa0f2e7e7f9c64fd784f38ce8839fad55f406304·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 170 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="3572456310-9">(</span><span·class="p"·data-group-id="3572456310-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 171 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 171 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="3572456310-10">(</span><span·class="p"·data-group-id="3572456310-11">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p"·data-group-id="3572456310-11">}</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·407,·SHA:·69adafadc385e01fcd352cbad6f95ce33f08c16cda9f7e1e5d6ebcf50a5285fa·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 172 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 172 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="3572456310-14">(</span><span·class="p"·data-group-id="3572456310-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 173 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="3572456310-15">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data-group-id="3572456310-15">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="nf">free</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nf">free</span><span·class="p"·data-group-id="3572456310-16">(</span><span·class="n">Ch</span><span·class="p"·data-group-id="3572456310-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 175 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id=" | 175 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="3572456310-17">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3572456310-18">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><sp[·...·truncated·by·diffoscope;·len:·92,·SHA:·e0fd3ac4490fae8e4bce1b5520a95217dd4f2442fb3388ad5b87d9740b0800b7·...·]-17">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">init</span><span·class="p"·data-group-id="3572456310-19">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="3572456310-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="p"·data-group-id="3572456310-20">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">channels</span><span·class="p"·data-group-id="3572456310-21">(</span><span·class="p"·data-group-id="3572456310-21">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·c1bcfaec07c42a22e0eecc54f89106f58890537a748298c8ccc6ff583393f981·...·]-20">}</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="3572456310-22">(</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·e0450fb8d2a6bdd6c00998365ea562d44427ec87367ac5e50491363377439ee9·...·]-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="p"·data-group-id=" | 179 | ····</span><span·class="p"·data-group-id="3572456310-23">{</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="3572456310-23">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·143,·SHA:·b54bbe0ddbf26bc254a0afef75b20f9a6290b3dd43af2c3d7b35c52434552f51·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="3572456310-25">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="3572456310-25">}</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id=" | 181 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id="3572456310-26">(</span><span·class="p"·data-group-id="3572456310-27">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="3572456310-27">}</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·91,·SHA:·7f22e11961f306ef3ab6bd660ec6f1f7a92060c6f76a2708638250551f7f4fba·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 182 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 182 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="3572456310-28">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="3572456310-28">)</span><span·class="p">,</span><span·class="w"> |
| 183 | ····</span><span·class="p"·data-group-id=" | 183 | ····</span><span·class="p"·data-group-id="3572456310-29">{</span><span·class="ss">noreply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="3572456310-29">}</span><span·class="p">.</span></code></pre><p>The·code·is·explained·in·the·next·sections.</p><h2·id="starting-a-gen_server"·class="section-heading"> |
| 184 | ··<a·href="#starting-a-gen_server"·class="hover-link"> | 184 | ··<a·href="#starting-a-gen_server"·class="hover-link"> |
| 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 186 | ··</a> | 186 | ··</a> |
| 187 | ··<span·class="text">Starting·a·Gen_Server</span> | 187 | ··<span·class="text">Starting·a·Gen_Server</span> |
| 188 | </h2> | 188 | </h2> |
| 189 | <p>In·the·example·in·the·previous·section,·<code·class="inline">gen_server</code>·is·started·by·calling | 189 | <p>In·the·example·in·the·previous·section,·<code·class="inline">gen_server</code>·is·started·by·calling |
| 190 | <code·class="inline">ch3:start_link()</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start_link</span><span·class="p"·data-group-id="9 | 190 | <code·class="inline">ch3:start_link()</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start_link</span><span·class="p"·data-group-id="9966196369-1">(</span><span·class="p"·data-group-id="9966196369-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 191 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="9 | 191 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="9966196369-2">(</span><span·class="p"·data-group-id="9966196369-3">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p"·data-group-id="9966196369-3">}</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·681,·SHA:·617918ee98b74b639540a0a0f0ff07ece5e8ce99300b4ea88f7f05a7d976a74a·...·]-6">}</span></code></pre><p><code·class="inline">start_link/0</code>·calls·function·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/4</code></a>.··This·function |
| 192 | spawns·and·links·to·a·new·process,·a·<code·class="inline">gen_server</code>.</p><ul><li><p>The·first·argument,·<code·class="inline">{local,·ch3}</code>,·specifies·the·name. | 192 | spawns·and·links·to·a·new·process,·a·<code·class="inline">gen_server</code>.</p><ul><li><p>The·first·argument,·<code·class="inline">{local,·ch3}</code>,·specifies·the·name. |
| 193 | The·gen_server·is·then·locally·registered·as·<code·class="inline">ch3</code>.</p><p>If·the·name·is·omitted,·the·<code·class="inline">gen_server</code>·is·not·registered.·Instead·its·pid | 193 | The·gen_server·is·then·locally·registered·as·<code·class="inline">ch3</code>.</p><p>If·the·name·is·omitted,·the·<code·class="inline">gen_server</code>·is·not·registered.·Instead·its·pid |
| 194 | must·be·used.·The·name·can·also·be·given·as·<code·class="inline">{global,·Name}</code>,·in·which·case | 194 | must·be·used.·The·name·can·also·be·given·as·<code·class="inline">{global,·Name}</code>,·in·which·case |
| 195 | the·<code·class="inline">gen_server</code>·is·registered·using·<a·href="../../lib/kernel-10.2.7.1/doc/html/global.html#register_name/2"><code·class="inline">global:register_name/2</code></a>.</p></li><li><p>The·second·argument,·<code·class="inline">ch3</code>,·is·the·name·of·the·callback·module,·which·is | 195 | the·<code·class="inline">gen_server</code>·is·registered·using·<a·href="../../lib/kernel-10.2.7.1/doc/html/global.html#register_name/2"><code·class="inline">global:register_name/2</code></a>.</p></li><li><p>The·second·argument,·<code·class="inline">ch3</code>,·is·the·name·of·the·callback·module,·which·is |
| 196 | the·module·where·the·callback·functions·are·located.</p><p>The·interface·functions·(<code·class="inline">start_link/0</code>,·<code·class="inline">alloc/0</code>,·and·<code·class="inline">free/1</code>)·are·located | 196 | the·module·where·the·callback·functions·are·located.</p><p>The·interface·functions·(<code·class="inline">start_link/0</code>,·<code·class="inline">alloc/0</code>,·and·<code·class="inline">free/1</code>)·are·located |
| 197 | in·the·same·module·as·the·callback·functions·(<code·class="inline">init/1</code>,·<code·class="inline">handle_call/3</code>,·and | 197 | in·the·same·module·as·the·callback·functions·(<code·class="inline">init/1</code>,·<code·class="inline">handle_call/3</code>,·and |
| 198 | <code·class="inline">handle_cast/2</code>).·It·is·usually·good·programming·practice·to·have·the·code | 198 | <code·class="inline">handle_cast/2</code>).·It·is·usually·good·programming·practice·to·have·the·code |
| 199 | corresponding·to·one·process·contained·in·a·single·module.</p></li><li><p>The·third·argument,·<code·class="inline">[]</code>,·is·a·term·that·is·passed·as·is·to·the·callback | 199 | corresponding·to·one·process·contained·in·a·single·module.</p></li><li><p>The·third·argument,·<code·class="inline">[]</code>,·is·a·term·that·is·passed·as·is·to·the·callback |
| 200 | function·<code·class="inline">init</code>.·Here,·<code·class="inline">init</code>·does·not·need·any·indata·and·ignores·the | 200 | function·<code·class="inline">init</code>.·Here,·<code·class="inline">init</code>·does·not·need·any·indata·and·ignores·the |
| 201 | argument.</p></li><li><p>The·fourth·argument,·<code·class="inline">[]</code>,·is·a·list·of·options.·See·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a> | 201 | argument.</p></li><li><p>The·fourth·argument,·<code·class="inline">[]</code>,·is·a·list·of·options.·See·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a> |
| 202 | for·the·available·options.</p></li></ul><p>If·name·registration·succeeds,·the·new·<code·class="inline">gen_server</code>·process·calls·the·callback | 202 | for·the·available·options.</p></li></ul><p>If·name·registration·succeeds,·the·new·<code·class="inline">gen_server</code>·process·calls·the·callback |
| 203 | function·<code·class="inline">ch3:init([])</code>.·<code·class="inline">init</code>·is·expected·to·return·<code·class="inline">{ok,·State}</code>,·where | 203 | function·<code·class="inline">ch3:init([])</code>.·<code·class="inline">init</code>·is·expected·to·return·<code·class="inline">{ok,·State}</code>,·where |
| 204 | <code·class="inline">State</code>·is·the·internal·state·of·the·<code·class="inline">gen_server</code>.·In·this·case,·the·state·is | 204 | <code·class="inline">State</code>·is·the·internal·state·of·the·<code·class="inline">gen_server</code>.·In·this·case,·the·state·is |
| 205 | the·available·channels.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id=" | 205 | the·available·channels.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="1818974702-1">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="1818974702-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ····</span><span·class="p"·data-group-id=" | 206 | ····</span><span·class="p"·data-group-id="1818974702-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">channels</span><span·class="p"·data-group-id="1818974702-3">(</span><span·class="p"·data-group-id="1818974702-3">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·136ae070911da6a4bfca55802fe3096469638b25409f7abf29f0593d827cb92f·...·]-2">}</span><span·class="p">.</span></code></pre><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/4</code></a>·is·synchronous.·It·does·not·return·until·the |
| 207 | <code·class="inline">gen_server</code>·has·been·initialized·and·is·ready·to·receive·requests.</p><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/4</code></a>·must·be·used·if·the·<code·class="inline">gen_server</code>·is·part·of | 207 | <code·class="inline">gen_server</code>·has·been·initialized·and·is·ready·to·receive·requests.</p><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/4</code></a>·must·be·used·if·the·<code·class="inline">gen_server</code>·is·part·of |
| 208 | a·supervision·tree,·meaning·that·it·was·started·by·a·supervisor.·There | 208 | a·supervision·tree,·meaning·that·it·was·started·by·a·supervisor.·There |
| 209 | is·another·function,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start/4"><code·class="inline">gen_server:start/4</code></a>,·to·start·a·standalone | 209 | is·another·function,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start/4"><code·class="inline">gen_server:start/4</code></a>,·to·start·a·standalone |
| 210 | <code·class="inline">gen_server</code>·that·is·not·part·of·a·supervision·tree.</p><h2·id="synchronous-requests-call"·class="section-heading"> | 210 | <code·class="inline">gen_server</code>·that·is·not·part·of·a·supervision·tree.</p><h2·id="synchronous-requests-call"·class="section-heading"> |
| 211 | ··<a·href="#synchronous-requests-call"·class="hover-link"> | 211 | ··<a·href="#synchronous-requests-call"·class="hover-link"> |
| 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 213 | ··</a> | 213 | ··</a> |
| Offset 221, 32 lines modified | Offset 221, 32 lines modified | ||
| 221 | </h2> | 221 | </h2> |
| 222 | <p>The·synchronous·request·<code·class="inline">alloc()</code>·is·implemented·using·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#call/2"><code·class="inline">gen_server:call/2</code></a>:</p><pre><code·class="text">alloc()·-> | 222 | <p>The·synchronous·request·<code·class="inline">alloc()</code>·is·implemented·using·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#call/2"><code·class="inline">gen_server:call/2</code></a>:</p><pre><code·class="text">alloc()·-> |
| 223 | ····gen_server:call(ch3,·alloc).</code></pre><p><code·class="inline">ch3</code>·is·the·name·of·the·<code·class="inline">gen_server</code>·and·must·agree·with·the·name | 223 | ····gen_server:call(ch3,·alloc).</code></pre><p><code·class="inline">ch3</code>·is·the·name·of·the·<code·class="inline">gen_server</code>·and·must·agree·with·the·name |
| 224 | used·to·start·it.·<code·class="inline">alloc</code>·is·the·actual·request.</p><p>The·request·is·made·into·a·message·and·sent·to·the·<code·class="inline">gen_server</code>. | 224 | used·to·start·it.·<code·class="inline">alloc</code>·is·the·actual·request.</p><p>The·request·is·made·into·a·message·and·sent·to·the·<code·class="inline">gen_server</code>. |
| 225 | When·the·request·is·received,·the·<code·class="inline">gen_server</code>·calls | 225 | When·the·request·is·received,·the·<code·class="inline">gen_server</code>·calls |
| 226 | <code·class="inline">handle_call(Request,·From,·State)</code>,·which·is·expected·to·return | 226 | <code·class="inline">handle_call(Request,·From,·State)</code>,·which·is·expected·to·return |
| 227 | a·tuple·<code·class="inline">{reply,Reply,State1}</code>.·<code·class="inline">Reply</code>·is·the·reply·that·is·to·be·sent·back | 227 | a·tuple·<code·class="inline">{reply,Reply,State1}</code>.·<code·class="inline">Reply</code>·is·the·reply·that·is·to·be·sent·back |
| 228 | to·the·client,·and·<code·class="inline">State1</code>·is·a·new·value·for·the·state·of·the·<code·class="inline">gen_server</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 228 | to·the·client,·and·<code·class="inline">State1</code>·is·a·new·value·for·the·state·of·the·<code·class="inline">gen_server</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_call</span><span·class="p"·data-group-id="7747744154-1">(</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="7[·...·truncated·by·diffoscope;·len:·9,·SHA:·fd7e812ef244d0c4652f44ef80c1e5457c50fd1c7244112582785607aa493a2b·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 229 | ····</span><span·class="p"·data-group-id=" | 229 | ····</span><span·class="p"·data-group-id="7747744154-2">{</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="7747744154-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·140,·SHA:·0dccc6c323998028fd8260c40d02fb8b814dfed6a9e106acb59521566d136e71·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ····</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="p"·data-group-id="7747744154-4">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="7747744154-4">}</span><span·class="p">.</span></code></pre><p>In·this·case,·the·reply·is·the·allocated·channel·<code·class="inline">Ch</code>·and·the·new·state·is·the |
| 231 | set·of·remaining·available·channels·<code·class="inline">Chs2</code>.</p><p>Thus,·the·call·<code·class="inline">ch3:alloc()</code>·returns·the·allocated·channel·<code·class="inline">Ch</code>·and·the | 231 | set·of·remaining·available·channels·<code·class="inline">Chs2</code>.</p><p>Thus,·the·call·<code·class="inline">ch3:alloc()</code>·returns·the·allocated·channel·<code·class="inline">Ch</code>·and·the |
| 232 | <code·class="inline">gen_server</code>·then·waits·for·new·requests,·now·with·an·updated·list·of | 232 | <code·class="inline">gen_server</code>·then·waits·for·new·requests,·now·with·an·updated·list·of |
| 233 | available·channels.</p><h2·id="asynchronous-requests-cast"·class="section-heading"> | 233 | available·channels.</p><h2·id="asynchronous-requests-cast"·class="section-heading"> |
| 234 | ··<a·href="#asynchronous-requests-cast"·class="hover-link"> | 234 | ··<a·href="#asynchronous-requests-cast"·class="hover-link"> |
| 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 236 | ··</a> | 236 | ··</a> |
| 237 | ··<span·class="text">Asynchronous·Requests·-·Cast</span> | 237 | ··<span·class="text">Asynchronous·Requests·-·Cast</span> |
| 238 | </h2> | 238 | </h2> |
| 239 | <p>The·asynchronous·request·<code·class="inline">free(Ch)</code>·is·implemented·using·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#cast/2"><code·class="inline">gen_server:cast/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">free</span><span·class="p"·data-group-id=" | 239 | <p>The·asynchronous·request·<code·class="inline">free(Ch)</code>·is·implemented·using·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#cast/2"><code·class="inline">gen_server:cast/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">free</span><span·class="p"·data-group-id="0068008929-1">(</span><span·class="n">Ch</span><span·class="p"·data-group-id="0068008929-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 240 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id=" | 240 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="0068008929-2">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0068008929-3">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span[·...·truncated·by·diffoscope;·len:·89,·SHA:·bb60298d4ed9cc434104c8c35c0fd38ac92b6827a56742330e69961215cc2581·...·]-2">)</span><span·class="p">.</span></code></pre><p><code·class="inline">ch3</code>·is·the·name·of·the·<code·class="inline">gen_server</code>.·<code·class="inline">{free,·Ch}</code>·is·the·actual·request.</p><p>The·request·is·made·into·a·message·and·sent·to·the·<code·class="inline">gen_server</code>. |
| 241 | <code·class="inline">cast</code>,·and·thus·<code·class="inline">free</code>,·then·returns·<code·class="inline">ok</code>.</p><p>When·the·request·is·received,·the·<code·class="inline">gen_server</code>·calls | 241 | <code·class="inline">cast</code>,·and·thus·<code·class="inline">free</code>,·then·returns·<code·class="inline">ok</code>.</p><p>When·the·request·is·received,·the·<code·class="inline">gen_server</code>·calls |
| 242 | <code·class="inline">handle_cast(Request,·State)</code>,·which·is·expected·to·return·a·tuple | 242 | <code·class="inline">handle_cast(Request,·State)</code>,·which·is·expected·to·return·a·tuple |
| 243 | <code·class="inline">{noreply,State1}</code>.·<code·class="inline">State1</code>·is·a·new·value·for·the·state·of·the·<code·class="inline">gen_server</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_cast</span><span·class="p"·data-group-id=" | 243 | <code·class="inline">{noreply,State1}</code>.·<code·class="inline">State1</code>·is·a·new·value·for·the·state·of·the·<code·class="inline">gen_server</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_cast</span><span·class="p"·data-group-id="0318948766-1">(</span><span·class="p"·data-group-id="0318948766-2">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="0318948766-2">}</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·87,·SHA:·9d9e535e01acd266f20d2a245d0b6c6790c39c2ba2d4e61c08c9b0c753a56936·...·]6-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 244 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 244 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="0318948766-3">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="0318948766-3">)</span><span·class="p">,</span><span·class="w"> |
| 245 | ····</span><span·class="p"·data-group-id=" | 245 | ····</span><span·class="p"·data-group-id="0318948766-4">{</span><span·class="ss">noreply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="0318948766-4">}</span><span·class="p">.</span></code></pre><p>In·this·case,·the·new·state·is·the·updated·list·of·available·channels·<code·class="inline">Chs2</code>. |
| 246 | The·<code·class="inline">gen_server</code>·is·now·ready·for·new·requests.</p><h2·id="stopping"·class="section-heading"> | 246 | The·<code·class="inline">gen_server</code>·is·now·ready·for·new·requests.</p><h2·id="stopping"·class="section-heading"> |
| 247 | ··<a·href="#stopping"·class="hover-link"> | 247 | ··<a·href="#stopping"·class="hover-link"> |
| 248 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 248 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 249 | ··</a> | 249 | ··</a> |
| 250 | ··<span·class="text">Stopping</span> | 250 | ··<span·class="text">Stopping</span> |
| 251 | </h2> | 251 | </h2> |
| 252 | <h3·id="in-a-supervision-tree"·class="section-heading"> | 252 | <h3·id="in-a-supervision-tree"·class="section-heading"> |
| Offset 257, 69 lines modified | Offset 257, 69 lines modified | ||
| 257 | </h3> | 257 | </h3> |
| 258 | <p>If·the·<code·class="inline">gen_server</code>·is·part·of·a·supervision·tree,·no·stop·function·is·needed. | 258 | <p>If·the·<code·class="inline">gen_server</code>·is·part·of·a·supervision·tree,·no·stop·function·is·needed. |
| 259 | The·<code·class="inline">gen_server</code>·is·automatically·terminated·by·its·supervisor.··Exactly·how | 259 | The·<code·class="inline">gen_server</code>·is·automatically·terminated·by·its·supervisor.··Exactly·how |
| 260 | this·is·done·is·defined·by·a·<a·href="sup_princ.html#shutdown">shutdown·strategy</a> | 260 | this·is·done·is·defined·by·a·<a·href="sup_princ.html#shutdown">shutdown·strategy</a> |
| 261 | set·in·the·supervisor.</p><p>If·it·is·necessary·to·clean·up·before·termination,·the·shutdown·strategy | 261 | set·in·the·supervisor.</p><p>If·it·is·necessary·to·clean·up·before·termination,·the·shutdown·strategy |
| 262 | must·be·a·time-out·value·and·the·<code·class="inline">gen_server</code>·must·be·set·to·trap·exit·signals | 262 | must·be·a·time-out·value·and·the·<code·class="inline">gen_server</code>·must·be·set·to·trap·exit·signals |
| 263 | in·function·<code·class="inline">init</code>.·When·ordered·to·shutdown,·the·<code·class="inline">gen_server</code>·then·calls | 263 | in·function·<code·class="inline">init</code>.·When·ordered·to·shutdown,·the·<code·class="inline">gen_server</code>·then·calls |
| 264 | the·callback·function·<code·class="inline">terminate(shutdown,·State)</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id=" | 264 | the·callback·function·<code·class="inline">terminate(shutdown,·State)</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="5649997648-1">(</span><span·class="n">Args</span><span·class="p"·data-group-id="5649997648-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 265 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> | 265 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> |
| 266 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 266 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="5649997648-2">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="5649997648-2">)</span><span·class="p">,</span><span·class="w"> |
| 267 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> | 267 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> |
| 268 | ····</span><span·class="p"·data-group-id=" | 268 | ····</span><span·class="p"·data-group-id="5649997648-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="5649997648-3">}</span><span·class="p">.</span><span·class="w"> |
| 269 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 269 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 270 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id=" | 270 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="5649997648-4">(</span><span·class="ss">shutdown</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="5649997648-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 271 | ····</span><span·class="c1">%%·Code·for·cleaning·up·here</span><span·class="w"> | 271 | ····</span><span·class="c1">%%·Code·for·cleaning·up·here</span><span·class="w"> |
| 272 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 272 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 273 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><h3·id="standalone-gen_servers"·class="section-heading"> | 273 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><h3·id="standalone-gen_servers"·class="section-heading"> |
| 274 | ··<a·href="#standalone-gen_servers"·class="hover-link"> | 274 | ··<a·href="#standalone-gen_servers"·class="hover-link"> |
| 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 276 | ··</a> | 276 | ··</a> |
| 277 | ··<span·class="text">Standalone·Gen_Servers</span> | 277 | ··<span·class="text">Standalone·Gen_Servers</span> |
| 278 | </h3> | 278 | </h3> |
| 279 | <p>If·the·<code·class="inline">gen_server</code>·is·not·part·of·a·supervision·tree,·a·stop·function | 279 | <p>If·the·<code·class="inline">gen_server</code>·is·not·part·of·a·supervision·tree,·a·stop·function |
| 280 | can·be·useful,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 280 | can·be·useful,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 281 | </span><span·class="nf">export</span><span·class="p"·data-group-id="3 | 281 | </span><span·class="nf">export</span><span·class="p"·data-group-id="3431916667-1">(</span><span·class="p"·data-group-id="3431916667-2">[</span><span·class="ss">stop</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="3431916667-2">]</span><span·class="p"·data-group-id="3431916667-1">)</span><span·class="p">.</span><span·class="w"> |
| 282 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 282 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 283 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="3 | 283 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="3431916667-3">(</span><span·class="p"·data-group-id="3431916667-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 9081/50074 bytes (18.14%) of diff not shown. | |||
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 161, 75 lines modified | Offset 161, 75 lines modified | ||
| 161 | belonging·to·the·primary·application.</p><h2·id="specifying-included-applications"·class="section-heading"> | 161 | belonging·to·the·primary·application.</p><h2·id="specifying-included-applications"·class="section-heading"> |
| 162 | ··<a·href="#specifying-included-applications"·class="hover-link"> | 162 | ··<a·href="#specifying-included-applications"·class="hover-link"> |
| 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 164 | ··</a> | 164 | ··</a> |
| 165 | ··<span·class="text">Specifying·Included·Applications</span> | 165 | ··<span·class="text">Specifying·Included·Applications</span> |
| 166 | </h2> | 166 | </h2> |
| 167 | <p>Which·applications·to·include·is·defined·by·the·<code·class="inline">included_applications</code>·key·in | 167 | <p>Which·applications·to·include·is·defined·by·the·<code·class="inline">included_applications</code>·key·in |
| 168 | the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 168 | the·<code·class="inline">.app</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7484766382-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">prim_app</span><span·class="p">,</span><span·class="w"> |
| 169 | ·</span><span·class="p"·data-group-id=" | 169 | ·</span><span·class="p"·data-group-id="7484766382-2">[</span><span·class="p"·data-group-id="7484766382-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Tree·application"</span><span·class="p"·data-group-id="7484766382-3">}</span><span·class="p">,</span><span·class="w"> |
| 170 | ··</span><span·class="p"·data-group-id=" | 170 | ··</span><span·class="p"·data-group-id="7484766382-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="7484766382-4">}</span><span·class="p">,</span><span·class="w"> |
| 171 | ··</span><span·class="p"·data-group-id=" | 171 | ··</span><span·class="p"·data-group-id="7484766382-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-6">[</span><span·class="ss">prim_app_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pr[·...·truncated·by·diffoscope;·len:·198,·SHA:·8a72194c4370abc1df300ca5f76ddef892cb874713c1480a62e0946fe6b7aa1f·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 172 | ··</span><span·class="p"·data-group-id=" | 172 | ··</span><span·class="p"·data-group-id="7484766382-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-8">[</span><span·class="ss">prim_app_server</span><span·class="p"·data-group-id="7484766382-8">]</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·20cddca6a79ef35db5f1f62b3f4554b328649d1b6edcc765668fcde31f0eaab4·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 173 | ··</span><span·class="p"·data-group-id=" | 173 | ··</span><span·class="p"·data-group-id="7484766382-9">{</span><span·class="ss">included_applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-10">[</span><span·class="ss">incl_app</span><span·class="p"·data-group-id="7484766382-10">]</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·236720897f768542af9323c9002afc669c92a966da722b4b12bbd2a8b569afa0·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 174 | ··</span><span·class="p"·data-group-id=" | 174 | ··</span><span·class="p"·data-group-id="7484766382-11">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-12">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·184,·SHA:·177ac67ec1ded7deac15744d87eb2152fc25d60db774a14fc1daf2bb11265aae·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 175 | ··</span><span·class="p"·data-group-id="8002791589-13">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8002791589-14">{</span><span·class="ss">prim_app_cb</span><span·class="p">,</span><span·class="p"·data-group-id="8002791589-15">[</span><span·class="p"·data-group-id="8002791589-15">]</span><span·class="p"·data-group-id="8002791589-14">}</span><span·class="p"·data-group-id="8002791589-13">}</span><span·class="p">,</span><span·class="w"> | ||
| 176 | ··</span><span·class="p"·data-group-id="8002791589-16">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8002791589-17">[</span><span·class="p"·data-group-id="8002791589-18">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/usr/local/log"</span><span·class="p"·data-group-id="8002791589-18">}</span><span·class="p"·data-group-id="8002791589-17">]</span><span·class="p"·data-group-id="8002791589-16">}</span><span·class="w"> | ||
| 177 | ·</span><span·class="p"·data-group-id=" | 175 | ··</span><span·class="p"·data-group-id="7484766382-13">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-14">{</span><span·class="ss">prim_app_cb</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·248,·SHA:·60547ad8e4730173035f083d069b1ccbfae9796a6d06cea1dded96c7a0e633aa·...·]"> |
| 176 | ··</span><span·class="p"·data-group-id="7484766382-16">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7484766382-17">[</span><span·class="p"·data-group-id="7484766382-18">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/usr/local/log"</span><span·class="p"·data-group-id="7484766382-18">}</span><span·class="p"·data-group-id="7484766382-17">]</span><span·class="p"·data-group-id="7484766382-16">}</span><span·class="w"> | ||
| 177 | ·</span><span·class="p"·data-group-id="7484766382-2">]</span><span·class="p"·data-group-id="7484766382-1">}</span><span·class="p">.</span></code></pre><h2·id="synchronizing-processes-during-startup"·class="section-heading"> | ||
| 178 | ··<a·href="#synchronizing-processes-during-startup"·class="hover-link"> | 178 | ··<a·href="#synchronizing-processes-during-startup"·class="hover-link"> |
| 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 180 | ··</a> | 180 | ··</a> |
| 181 | ··<span·class="text">Synchronizing·Processes·during·Startup</span> | 181 | ··<span·class="text">Synchronizing·Processes·during·Startup</span> |
| 182 | </h2> | 182 | </h2> |
| 183 | <p>The·supervisor·tree·of·an·included·application·is·started·as·part·of·the | 183 | <p>The·supervisor·tree·of·an·included·application·is·started·as·part·of·the |
| 184 | supervisor·tree·of·the·including·application.·If·there·is·a·need·for | 184 | supervisor·tree·of·the·including·application.·If·there·is·a·need·for |
| 185 | synchronization·between·processes·in·the·including·and·included·applications, | 185 | synchronization·between·processes·in·the·including·and·included·applications, |
| 186 | this·can·be·achieved·by·using·<em>start·phases</em>.</p><p>Start·phases·are·defined·by·the·<code·class="inline">start_phases</code>·key·in·the·<code·class="inline">.app</code>·file·as·a·list | 186 | this·can·be·achieved·by·using·<em>start·phases</em>.</p><p>Start·phases·are·defined·by·the·<code·class="inline">start_phases</code>·key·in·the·<code·class="inline">.app</code>·file·as·a·list |
| 187 | of·tuples·<code·class="inline">{Phase,PhaseArgs}</code>,·where·<code·class="inline">Phase</code>·is·an·atom·and·<code·class="inline">PhaseArgs</code>·is·a | 187 | of·tuples·<code·class="inline">{Phase,PhaseArgs}</code>,·where·<code·class="inline">Phase</code>·is·an·atom·and·<code·class="inline">PhaseArgs</code>·is·a |
| 188 | term.</p><p>The·value·of·the·<code·class="inline">mod</code>·key·of·the·including·application·must·be·set·to | 188 | term.</p><p>The·value·of·the·<code·class="inline">mod</code>·key·of·the·including·application·must·be·set·to |
| 189 | <code·class="inline">{application_starter,[Module,StartArgs]}</code>,·where·<code·class="inline">Module</code>·as·usual·is·the | 189 | <code·class="inline">{application_starter,[Module,StartArgs]}</code>,·where·<code·class="inline">Module</code>·as·usual·is·the |
| 190 | application·callback·module.·<code·class="inline">StartArgs</code>·is·a·term·provided·as·argument·to·the | 190 | application·callback·module.·<code·class="inline">StartArgs</code>·is·a·term·provided·as·argument·to·the |
| 191 | callback·function·<code·class="inline">Module:start/2</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 191 | callback·function·<code·class="inline">Module:start/2</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9209328521-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">prim_app</span><span·class="p">,</span><span·class="w"> |
| 192 | ·</span><span·class="p"·data-group-id=" | 192 | ·</span><span·class="p"·data-group-id="9209328521-2">[</span><span·class="p"·data-group-id="9209328521-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Tree·application"</span><span·class="p"·data-group-id="9209328521-3">}</span><span·class="p">,</span><span·class="w"> |
| 193 | ··</span><span·class="p"·data-group-id=" | 193 | ··</span><span·class="p"·data-group-id="9209328521-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="9209328521-4">}</span><span·class="p">,</span><span·class="w"> |
| 194 | ··</span><span·class="p"·data-group-id=" | 194 | ··</span><span·class="p"·data-group-id="9209328521-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-6">[</span><span·class="ss">prim_app_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pr[·...·truncated·by·diffoscope;·len:·198,·SHA:·4895c1fb16283370fcf6a9ec1fdafbe73f3a889ca279300021576b6cb665cbdb·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 195 | ··</span><span·class="p"·data-group-id=" | 195 | ··</span><span·class="p"·data-group-id="9209328521-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-8">[</span><span·class="ss">prim_app_server</span><span·class="p"·data-group-id="9209328521-8">]</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·72a56340d15296d76731b6ee2c13f7681c39fe4ccb81db01ca9ce9087923fc18·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 196 | ··</span><span·class="p"·data-group-id=" | 196 | ··</span><span·class="p"·data-group-id="9209328521-9">{</span><span·class="ss">included_applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-10">[</span><span·class="ss">incl_app</span><span·class="p"·data-group-id="9209328521-10">]</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·51bca7a90a2e571431ef38828dce9e7dd81282af7d1b27e0077dee69e7bfa5f0·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 197 | ··</span><span·class="p"·data-group-id=" | 197 | ··</span><span·class="p"·data-group-id="9209328521-11">{</span><span·class="ss">start_phases</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-12">[</span><span·class="p"·data-group-id="9209328521-13">{</span><span·class="ss">init</span><span·class="[·...·truncated·by·diffoscope;·len:·582,·SHA:·b29193648f9359b2b3198c49791363f397043555e2fbaf37e9a2a1c6e5bfcbe1·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 198 | ··</span><span·class="p"·data-group-id=" | 198 | ··</span><span·class="p"·data-group-id="9209328521-17">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-18">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·184,·SHA:·ee77ed68f4fe8628028890e1eeb6cac01580389baada69067aa7bfff90aaa540·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 199 | ··</span><span·class="p"·data-group-id=" | 199 | ··</span><span·class="p"·data-group-id="9209328521-19">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-20">{</span><span·class="ss">application_starter</span><span·class="p">,</span><span·class="p"·data-group-id="920932[·...·truncated·by·diffoscope;·len:·333,·SHA:·eb72b34c0c99165113bd7bc3a42dd80849682cfd98987e8df9d395b002e2e71c·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 200 | ··</span><span·class="p"·data-group-id=" | 200 | ··</span><span·class="p"·data-group-id="9209328521-23">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-24">[</span><span·class="p"·data-group-id="9209328521-25">{</span><span·class="ss">file</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·224,·SHA:·5d421050fa7869523b5996b08b90c8e2f018875aa474cc5c81f8f5785940be06·...·]-23">}</span><span·class="w"> |
| 201 | ·</span><span·class="p"·data-group-id=" | 201 | ·</span><span·class="p"·data-group-id="9209328521-2">]</span><span·class="p"·data-group-id="9209328521-1">}</span><span·class="p">.</span><span·class="w"> |
| 202 | </span><span·class="p"·data-group-id=" | 202 | </span><span·class="p"·data-group-id="9209328521-26">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">incl_app</span><span·class="p">,</span><span·class="w"> |
| 203 | ·</span><span·class="p"·data-group-id=" | 203 | ·</span><span·class="p"·data-group-id="9209328521-27">[</span><span·class="p"·data-group-id="9209328521-28">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Included·application"</span><span·class="p"·data-group-id="9209328521-28">}</span><span·class="p">,</span><span·class="w"> |
| 204 | ··</span><span·class="p"·data-group-id=" | 204 | ··</span><span·class="p"·data-group-id="9209328521-29">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="9209328521-29">}</span><span·class="p">,</span><span·class="w"> |
| 205 | ··</span><span·class="p"·data-group-id=" | 205 | ··</span><span·class="p"·data-group-id="9209328521-30">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-31">[</span><span·class="ss">incl_app_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·201,·SHA:·b91c303f7ba568d9e237de95b349d7a6c4d59c93f0fd87252766b97dcc1bde29·...·]-30">}</span><span·class="p">,</span><span·class="w"> |
| 206 | ··</span><span·class="p"·data-group-id=" | 206 | ··</span><span·class="p"·data-group-id="9209328521-32">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-33">[</span><span·class="p"·data-group-id="9209328521-33">]</span><span·class="p"·data-group-id="9209328521-32">}</span><span·class="p">,</span><span·class="w"> |
| 207 | ··</span><span·class="p"·data-group-id=" | 207 | ··</span><span·class="p"·data-group-id="9209328521-34">{</span><span·class="ss">start_phases</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-35">[</span><span·class="p"·data-group-id="9209328521-36">{</span><span·class="ss">go</span><span·class="p"[·...·truncated·by·diffoscope;·len:·266,·SHA:·0d38b669b7024924d37e8e7b3e48ca18e37503d664b6de854bc0ef38b7a64da9·...·]-34">}</span><span·class="p">,</span><span·class="w"> |
| 208 | ··</span><span·class="p"·data-group-id=" | 208 | ··</span><span·class="p"·data-group-id="9209328521-38">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-39">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·184,·SHA:·17488b1f857d46ad991ad6a2921bd40a9ca01f9179bbc08db6d8395d51dac933·...·]-38">}</span><span·class="p">,</span><span·class="w"> |
| 209 | ··</span><span·class="p"·data-group-id=" | 209 | ··</span><span·class="p"·data-group-id="9209328521-40">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9209328521-41">{</span><span·class="ss">incl_app_cb</span><span·class="p">,</span><span·class="p"·data-group-id="9209328521-42"[·...·truncated·by·diffoscope;·len:·158,·SHA:·9c551107742a4d0e18afed779659414ec4b50b6084a9190f449d155f7ed1227c·...·]-40">}</span><span·class="w"> |
| 210 | ·</span><span·class="p"·data-group-id=" | 210 | ·</span><span·class="p"·data-group-id="9209328521-27">]</span><span·class="p"·data-group-id="9209328521-26">}</span><span·class="p">.</span></code></pre><p>When·starting·a·primary·application·with·included·applications,·the·primary |
| 211 | application·is·started·the·normal·way,·that·is:</p><ul><li>The·application·controller·creates·an·application·master·for·the·application</li><li>The·application·master·calls·<code·class="inline">Module:start(normal,·StartArgs)</code>·to·start·the | 211 | application·is·started·the·normal·way,·that·is:</p><ul><li>The·application·controller·creates·an·application·master·for·the·application</li><li>The·application·master·calls·<code·class="inline">Module:start(normal,·StartArgs)</code>·to·start·the |
| 212 | top·supervisor.</li></ul><p>Then,·for·the·primary·application·and·each·included·application·in·top-down, | 212 | top·supervisor.</li></ul><p>Then,·for·the·primary·application·and·each·included·application·in·top-down, |
| 213 | left-to-right·order,·the·application·master·calls | 213 | left-to-right·order,·the·application·master·calls |
| 214 | <code·class="inline">Module:start_phase(Phase,·Type,·PhaseArgs)</code>·for·each·phase·defined·for·the | 214 | <code·class="inline">Module:start_phase(Phase,·Type,·PhaseArgs)</code>·for·each·phase·defined·for·the |
| 215 | primary·application,·in·that·order.·If·a·phase·is·not·defined·for·an·included | 215 | primary·application,·in·that·order.·If·a·phase·is·not·defined·for·an·included |
| 216 | application,·the·function·is·not·called·for·this·phase·and·application.</p><p>The·following·requirements·apply·to·the·<code·class="inline">.app</code>·file·for·an·included·application:</p><ul><li>The·<code·class="inline">{mod,·{Module,StartArgs}}</code>·option·must·be·included.·This·option·is·used | 216 | application,·the·function·is·not·called·for·this·phase·and·application.</p><p>The·following·requirements·apply·to·the·<code·class="inline">.app</code>·file·for·an·included·application:</p><ul><li>The·<code·class="inline">{mod,·{Module,StartArgs}}</code>·option·must·be·included.·This·option·is·used |
| 217 | to·find·the·callback·module·<code·class="inline">Module</code>·of·the·application.·<code·class="inline">StartArgs</code>·is | 217 | to·find·the·callback·module·<code·class="inline">Module</code>·of·the·application.·<code·class="inline">StartArgs</code>·is |
| 218 | ignored,·as·<code·class="inline">Module:start/2</code>·is·called·only·for·the·primary·application.</li><li>If·the·included·application·itself·contains·included·applications,·instead·the | 218 | ignored,·as·<code·class="inline">Module:start/2</code>·is·called·only·for·the·primary·application.</li><li>If·the·included·application·itself·contains·included·applications,·instead·the |
| 219 | <code·class="inline">{mod,·{application_starter,·[Module,StartArgs]}}</code>·option·must·be·included.</li><li>The·<code·class="inline">{start_phases,·[{Phase,PhaseArgs}]}</code>·option·must·be·included,·and·the·set | 219 | <code·class="inline">{mod,·{application_starter,·[Module,StartArgs]}}</code>·option·must·be·included.</li><li>The·<code·class="inline">{start_phases,·[{Phase,PhaseArgs}]}</code>·option·must·be·included,·and·the·set |
| 220 | of·specified·phases·must·be·a·subset·of·the·set·of·phases·specified·for·the | 220 | of·specified·phases·must·be·a·subset·of·the·set·of·phases·specified·for·the |
| 221 | primary·application.</li></ul><p>When·starting·<code·class="inline">prim_app</code>·as·defined·above,·the·application·controller·calls·the | 221 | primary·application.</li></ul><p>When·starting·<code·class="inline">prim_app</code>·as·defined·above,·the·application·controller·calls·the |
| 222 | following·callback·functions·before·<code·class="inline">application:start(prim_app)</code>·returns·a | 222 | following·callback·functions·before·<code·class="inline">application:start(prim_app)</code>·returns·a |
| 223 | value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5 | 223 | value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5536682550-1">(</span><span·class="ss">prim_app</span><span·class="p"·data-group-id="5536682550-1">)</span><span·class="w"> |
| 224 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5 | 224 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5536682550-2">(</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5536682550-3">[</span><span·class="p"·data-group-id="5536682550-3">]</span><span·class="p"·data-group-id="5536682550-2">)</span><span·class="w"> |
| 225 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5 | 225 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5536682550-4">(</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5536682550-5">[</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·66,·SHA:·f15b7e4ad713fd702d9446281bb11bf3dcd91d888d93deaed75eb0e1b8e62b61·...·]-4">)</span><span·class="w"> |
| 226 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5 | 226 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">prim_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5536682550-6">(</span><span·class="ss">go</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5536682550-7">[</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·64,·SHA:·ccc2aa40b23f0c3605b028648d386028b43551b83ddf70acdb4cf43a09d2d2d4·...·]-6">)</span><span·class="w"> |
| 227 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">incl_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5 | 227 | ·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">incl_app_cb</span><span·class="p">:</span><span·class="nf">start_phase</span><span·class="p"·data-group-id="5536682550-8">(</span><span·class="ss">go</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5536682550-9">[</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·64,·SHA:·a5f4420ce6cdede02a925c9d172575edab507713ab029f95c2dd2dcf30ce2a56·...·]-8">)</span><span·class="w"> |
| 228 | </span><span·class="ss">ok</span></code></pre> | 228 | </span><span·class="ss">ok</span></code></pre> |
| 229 | </div> | 229 | </div> |
| 230 | <div·class="bottom-actions"·id="bottom-actions"> | 230 | <div·class="bottom-actions"·id="bottom-actions"> |
| 231 | ··<div·class="bottom-actions-item"> | 231 | ··<div·class="bottom-actions-item"> |
| 232 | ······<a·href="applications.html"·class="bottom-actions-button"·rel="prev"> | 232 | ······<a·href="applications.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | ······<p·class="built-using"> | 273 | ······<p·class="built-using"> |
| 274 | ········Built·using | 274 | ········Built·using |
| 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 277 | ······</p> | 277 | ······</p> |
| 278 | <p>Copyright·©·1996-202 | 278 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 279 | ····</footer> | 279 | ····</footer> |
| 280 | ··</div> | 280 | ··</div> |
| 281 | </main> | 281 | </main> |
| 282 | </div> | 282 | </div> |
| 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 284 | ··<script> | 284 | ··<script> |
| 285 | ··let·initialized·=·false; | 285 | ··let·initialized·=·false; |
| Offset 484, 15 lines modified | Offset 484, 15 lines modified | ||
| 484 | ······<p·class="built-using"> | 484 | ······<p·class="built-using"> |
| 485 | ········Built·using | 485 | ········Built·using |
| 486 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 486 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 487 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 487 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 488 | ······</p> | 488 | ······</p> |
| 489 | <p>Copyright·©·1996-202 | 489 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 490 | ····</footer> | 490 | ····</footer> |
| 491 | ··</div> | 491 | ··</div> |
| 492 | </main> | 492 | </main> |
| 493 | </div> | 493 | </div> |
| 494 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 494 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 495 | ··<script> | 495 | ··<script> |
| 496 | ··let·initialized·=·false; | 496 | ··let·initialized·=·false; |
| Offset 295, 15 lines modified | Offset 295, 15 lines modified | ||
| 295 | </span><span·class="gp·unselectable">$·</span><span·class="">cd·erts/emulator | 295 | </span><span·class="gp·unselectable">$·</span><span·class="">cd·erts/emulator |
| 296 | </span><span·class="gp·unselectable">$·</span><span·class="">make·debug | 296 | </span><span·class="gp·unselectable">$·</span><span·class="">make·debug |
| 297 | </span><span·class="gp·unselectable">$·</span><span·class="">cd·../etc | 297 | </span><span·class="gp·unselectable">$·</span><span·class="">cd·../etc |
| 298 | </span><span·class="gp·unselectable">$·</span><span·class="">make·debug | 298 | </span><span·class="gp·unselectable">$·</span><span·class="">make·debug |
| 299 | </span></code></pre><p>and·sometimes</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP | 299 | </span></code></pre><p>and·sometimes</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP |
| 300 | </span><span·class="gp·unselectable">$·</span><span·class="">make·local_setup | 300 | </span><span·class="gp·unselectable">$·</span><span·class="">make·local_setup |
| 301 | </span></code></pre><p>So·now·when·you·run·<code·class="inline">$ERL_TOP/erl.exe</code>,·you·should·have·a·debug·compiled | 301 | </span></code></pre><p>So·now·when·you·run·<code·class="inline">$ERL_TOP/erl.exe</code>,·you·should·have·a·debug·compiled |
| 302 | emulator,·which·you·will·see·if·you·do·a:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id=" | 302 | emulator,·which·you·will·see·if·you·do·a:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="0361062240-1">(</span><span·class="ss">system_version</span><span·class="p"·data-group-id="0361062240-1">)</span><span·class="p">.</span></code></pre><p>in·the·erlang·shell.·If·the·returned·string·contains·<code·class="inline">[debug]</code>,·you |
| 303 | got·a·debug·compiled·emulator.</p><p>To·hack·the·erlang·libraries,·you·simply·do·a·<code·class="inline">make·opt</code>·in·the | 303 | got·a·debug·compiled·emulator.</p><p>To·hack·the·erlang·libraries,·you·simply·do·a·<code·class="inline">make·opt</code>·in·the |
| 304 | specific·"applications"·directory,·like:</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib | 304 | specific·"applications"·directory,·like:</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib |
| 305 | </span><span·class="gp·unselectable">$·</span><span·class="">make·opt | 305 | </span><span·class="gp·unselectable">$·</span><span·class="">make·opt |
| 306 | </span></code></pre><p>or·even·in·the·source·directory...</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib/src | 306 | </span></code></pre><p>or·even·in·the·source·directory...</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib/src |
| 307 | </span><span·class="gp·unselectable">$·</span><span·class="">make·opt | 307 | </span><span·class="gp·unselectable">$·</span><span·class="">make·opt |
| 308 | </span></code></pre><p>Note·that·you're·expected·to·have·a·fresh·Erlang·in·your·path·when | 308 | </span></code></pre><p>Note·that·you're·expected·to·have·a·fresh·Erlang·in·your·path·when |
| 309 | doing·this,·preferably·the·plain·27·you·have·built·in·the·previous | 309 | doing·this,·preferably·the·plain·27·you·have·built·in·the·previous |
| Offset 318, 19 lines modified | Offset 318, 19 lines modified | ||
| 318 | </span><span·class="">:$ERL_TOP/erts/etc/win32/wsl_tools:$ERL_TOP/bootstrap/bin:$PATH | 318 | </span><span·class="">:$ERL_TOP/erts/etc/win32/wsl_tools:$ERL_TOP/bootstrap/bin:$PATH |
| 319 | </span></code></pre><p>That·should·make·it·possible·to·rebuild·any·library·without·hassle...</p><p>If·you·want·to·copy·a·library·(an·application)·newly·built,·to·a | 319 | </span></code></pre><p>That·should·make·it·possible·to·rebuild·any·library·without·hassle...</p><p>If·you·want·to·copy·a·library·(an·application)·newly·built,·to·a |
| 320 | release·area,·you·do·like·with·the·emulator:</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib | 320 | release·area,·you·do·like·with·the·emulator:</p><pre><code·class="makeup·shell"·translate="no"><span·class="gp·unselectable">$·</span><span·class="">cd·$ERL_TOP/lib/stdlib |
| 321 | </span><span·class="gp·unselectable">$·</span><span·class="">make·TESTROOT=/tmp/erlang_release·release | 321 | </span><span·class="gp·unselectable">$·</span><span·class="">make·TESTROOT=/tmp/erlang_release·release |
| 322 | </span></code></pre><p>Remember·that:</p><ul><li><p>··Windows·specific·C-code·goes·in·the·<code·class="inline">$ERL_TOP/erts/emulator/sys/win32</code>, | 322 | </span></code></pre><p>Remember·that:</p><ul><li><p>··Windows·specific·C-code·goes·in·the·<code·class="inline">$ERL_TOP/erts/emulator/sys/win32</code>, |
| 323 | <code·class="inline">$ERL_TOP/erts/emulator/drivers/win32</code>·or·<code·class="inline">$ERL_TOP/erts/etc/win32</code>.</p></li><li><p>··Windows·specific·erlang·code·should·be·used·conditionally·and·the | 323 | <code·class="inline">$ERL_TOP/erts/emulator/drivers/win32</code>·or·<code·class="inline">$ERL_TOP/erts/etc/win32</code>.</p></li><li><p>··Windows·specific·erlang·code·should·be·used·conditionally·and·the |
| 324 | host·OS·tested·in·<em>runtime</em>,·the·exactly·same·beam·files·should·be | 324 | host·OS·tested·in·<em>runtime</em>,·the·exactly·same·beam·files·should·be |
| 325 | distributed·for·every·platform!·So·write·code·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">type</span><span·class="p"·data-group-id=" | 325 | distributed·for·every·platform!·So·write·code·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">type</span><span·class="p"·data-group-id="1840008976-1">(</span><span·class="p"·data-group-id="1840008976-1">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 326 | ····</span><span·class="p"·data-group-id=" | 326 | ····</span><span·class="p"·data-group-id="1840008976-2">{</span><span·class="ss">win32</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="1840008976-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 327 | ········</span><span·class="nf">do_windows_specific</span><span·class="p"·data-group-id=" | 327 | ········</span><span·class="nf">do_windows_specific</span><span·class="p"·data-group-id="1840008976-3">(</span><span·class="p"·data-group-id="1840008976-3">)</span><span·class="p">;</span><span·class="w"> |
| 328 | ····</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 328 | ····</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 329 | ········</span><span·class="nf">do_fallback_or_exit</span><span·class="p"·data-group-id=" | 329 | ········</span><span·class="nf">do_fallback_or_exit</span><span·class="p"·data-group-id="1840008976-4">(</span><span·class="p"·data-group-id="1840008976-4">)</span><span·class="w"> |
| 330 | </span><span·class="k">end</span><span·class="p">,</span></code></pre></li></ul><p>That's·basically·all·you·need·to·get·going.</p><h2·id="frequently-asked-questions"·class="section-heading"> | 330 | </span><span·class="k">end</span><span·class="p">,</span></code></pre></li></ul><p>That's·basically·all·you·need·to·get·going.</p><h2·id="frequently-asked-questions"·class="section-heading"> |
| 331 | ··<a·href="#frequently-asked-questions"·class="hover-link"> | 331 | ··<a·href="#frequently-asked-questions"·class="hover-link"> |
| 332 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 332 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 333 | ··</a> | 333 | ··</a> |
| 334 | ··<span·class="text">Frequently·Asked·Questions</span> | 334 | ··<span·class="text">Frequently·Asked·Questions</span> |
| 335 | </h2> | 335 | </h2> |
| 336 | <ul><li><p>··Q:·So,·now·I·can·build·Erlang·using·GCC·on·Windows?</p><p>A:·No,·unfortunately·not.·You'll·need·Microsoft's·Visual·C++ | 336 | <ul><li><p>··Q:·So,·now·I·can·build·Erlang·using·GCC·on·Windows?</p><p>A:·No,·unfortunately·not.·You'll·need·Microsoft's·Visual·C++ |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 658, 15 lines modified | Offset 658, 15 lines modified | ||
| 658 | ······<p·class="built-using"> | 658 | ······<p·class="built-using"> |
| 659 | ········Built·using | 659 | ········Built·using |
| 660 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 660 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 661 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 661 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 662 | ······</p> | 662 | ······</p> |
| 663 | <p>Copyright·©·1996-202 | 663 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 664 | ····</footer> | 664 | ····</footer> |
| 665 | ··</div> | 665 | ··</div> |
| 666 | </main> | 666 | </main> |
| 667 | </div> | 667 | </div> |
| 668 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 668 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 669 | ··<script> | 669 | ··<script> |
| 670 | ··let·initialized·=·false; | 670 | ··let·initialized·=·false; |
| Offset 171, 15 lines modified | Offset 171, 15 lines modified | ||
| 171 | ······<p·class="built-using"> | 171 | ······<p·class="built-using"> |
| 172 | ········Built·using | 172 | ········Built·using |
| 173 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 173 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 174 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 174 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 175 | ······</p> | 175 | ······</p> |
| 176 | <p>Copyright·©·1996-202 | 176 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 177 | ····</footer> | 177 | ····</footer> |
| 178 | ··</div> | 178 | ··</div> |
| 179 | </main> | 179 | </main> |
| 180 | </div> | 180 | </div> |
| 181 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 181 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 182 | ··<script> | 182 | ··<script> |
| 183 | ··let·initialized·=·false; | 183 | ··let·initialized·=·false; |
| Offset 117, 33 lines modified | Offset 117, 33 lines modified | ||
| 117 | <h2·id="simple-examples"·class="section-heading"> | 117 | <h2·id="simple-examples"·class="section-heading"> |
| 118 | ··<a·href="#simple-examples"·class="hover-link"> | 118 | ··<a·href="#simple-examples"·class="hover-link"> |
| 119 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 119 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 120 | ··</a> | 120 | ··</a> |
| 121 | ··<span·class="text">Simple·Examples</span> | 121 | ··<span·class="text">Simple·Examples</span> |
| 122 | </h2> | 122 | </h2> |
| 123 | <p>This·section·starts·with·a·simple·example,·showing·a·generator·and·a·filter:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id=" | 123 | <p>This·section·starts·with·a·simple·example,·showing·a·generator·and·a·filter:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="3960189614-1">[</span><span·class="n">X</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="396018[·...·truncated·by·diffoscope;·len:·649,·SHA:·cbe6471cea4ba1dde4ec73e1eb425dba0bf8dbb4b19023ed90f820cff684a2e6·...·]4-1">]</span><span·class="p">.</span><span·class="w"> |
| 124 | </span><span·class="p"·data-group-id=" | 124 | </span><span·class="p"·data-group-id="3960189614-3">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">6</span><span·class="[·...·truncated·by·diffoscope;·len:·27,·SHA:·b99367b0c13e5de3fbf7822417cb84ea4759a536ed221c96b698cf8fff31a0d4·...·]4-3">]</span></code></pre><p>This·is·read·as·follows:·The·list·of·X·such·that·X·is·taken·from·the·list |
| 125 | <code·class="inline">[1,2,a,...]</code>·and·X·is·greater·than·3.</p><p>The·notation·<code·class="inline">X·<-·[1,2,a,...]</code>·is·a·generator·and·the·expression·<code·class="inline">X·>·3</code>·is·a | 125 | <code·class="inline">[1,2,a,...]</code>·and·X·is·greater·than·3.</p><p>The·notation·<code·class="inline">X·<-·[1,2,a,...]</code>·is·a·generator·and·the·expression·<code·class="inline">X·>·3</code>·is·a |
| 126 | filter.</p><p>An·additional·filter,·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_integer/1"><code·class="inline">is_integer(X)</code></a>,·can·be·added·to | 126 | filter.</p><p>An·additional·filter,·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_integer/1"><code·class="inline">is_integer(X)</code></a>,·can·be·added·to |
| 127 | restrict·the·result·to·integers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id=" | 127 | restrict·the·result·to·integers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="9678047074-1">[</span><span·class="n">X</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="967804[·...·truncated·by·diffoscope;·len:·862,·SHA:·04a02faf5ceae8dea1fffbcbf5610e31f7c750dbf3248132416b715987573b24·...·]-1">]</span><span·class="p">.</span><span·class="w"> |
| 128 | </span><span·class="p"·data-group-id=" | 128 | </span><span·class="p"·data-group-id="9678047074-4">[</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="9678047074-4">]</span></code></pre><p>Generators·can·be·combined.·For·example,·the·Cartesian·product·of·two·lists·can |
| 129 | be·written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="1 | 129 | be·written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="1831042468-1">[</span><span·class="p"·data-group-id="1831042468-2">{</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="1831042468-2">}</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·738,·SHA:·e186bcb449a66d925fbe4f76621439d678b9618bb34d4f5c191751bc98e4bbde·...·]-1">]</span><span·class="p">.</span><span·class="w"> |
| 130 | </span><span·class="p"·data-group-id="1 | 130 | </span><span·class="p"·data-group-id="1831042468-5">[</span><span·class="p"·data-group-id="1831042468-6">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="1831042468-6">}</span><span·class="p">,</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·1010,·SHA:·32768c2435bcdb65e00b6bca1eb0e34014494cd261ecf2291a8eb4829c53a749·...·]-5">]</span></code></pre><h2·id="quick-sort"·class="section-heading"> |
| 131 | ··<a·href="#quick-sort"·class="hover-link"> | 131 | ··<a·href="#quick-sort"·class="hover-link"> |
| 132 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 132 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 133 | ··</a> | 133 | ··</a> |
| 134 | ··<span·class="text">Quick·Sort</span> | 134 | ··<span·class="text">Quick·Sort</span> |
| 135 | </h2> | 135 | </h2> |
| 136 | <p>The·well-known·quick·sort·routine·can·be·written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sort</span><span·class="p"·data-group-id=" | 136 | <p>The·well-known·quick·sort·routine·can·be·written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sort</span><span·class="p"·data-group-id="3410305179-1">(</span><span·class="p"·data-group-id="3410305179-2">[</span><span·class="p"·data-group-id="3410305179-2">]</span><span·class="p"·data-group-id="3410305179-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·95,·SHA:·05c88ac76a2dbaea887ef1a36a00d147f5687beeff25ae22d0240f12d64c1c34·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 137 | </span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 137 | </span><span·class="nf">sort</span><span·class="p"·data-group-id="3410305179-4">(</span><span·class="p"·data-group-id="3410305179-5">[</span><span·class="p">_</span><span·class="p"·data-group-id="3410305179-5">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·cl[·...·truncated·by·diffoscope;·len:·33,·SHA:·c0c3b47435cc1722597a93b7c37a752c5848785632201c71997b5d5a8fc1202c·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">L</span><span·class="p">;</span><span·class="w"> |
| 138 | </span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 138 | </span><span·class="nf">sort</span><span·class="p"·data-group-id="3410305179-6">(</span><span·class="p"·data-group-id="3410305179-7">[</span><span·class="n">Pivot</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="3410305179-7">]</span><span·class="p"·data-group-id="3410305179-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="nf">sort</span><span·class="p"·data-group-id="3410305179-8">(</span><span·class="p"·data-group-id="3410305179-9">[</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·333,·SHA:·b09876ba270fd47a41d5c94ef0734b78d835f66bafd8c3a27eb888ca3ccd6f9c·...·]-8">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w"> |
| 140 | ····</span><span·class="p"·data-group-id=" | 140 | ····</span><span·class="p"·data-group-id="3410305179-10">[</span><span·class="n">Pivot</span><span·class="p"·data-group-id="3410305179-10">]</span><span·class="w">·</span><span·class="o">++</span><span·class="w"> |
| 141 | ····</span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="nf">sort</span><span·class="p"·data-group-id="3410305179-11">(</span><span·class="p"·data-group-id="3410305179-12">[</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·337,·SHA:·de014716f05ca0ee08f569ef872a8b85ddcffd24d7718bff448c0b239b41eaf9·...·]-11">)</span><span·class="p">.</span></code></pre><p>The·expression·<code·class="inline">[X·||·X·<-·T,·X·<·Pivot]</code>·is·the·list·of·all·elements·in·<code·class="inline">T</code> |
| 142 | that·are·less·than·<code·class="inline">Pivot</code>.</p><p><code·class="inline">[X·||·X·<-·T,·X·>=·Pivot]</code>·is·the·list·of·all·elements·in·<code·class="inline">T</code>·that·are·greater | 142 | that·are·less·than·<code·class="inline">Pivot</code>.</p><p><code·class="inline">[X·||·X·<-·T,·X·>=·Pivot]</code>·is·the·list·of·all·elements·in·<code·class="inline">T</code>·that·are·greater |
| 143 | than·or·equal·to·<code·class="inline">Pivot</code>.</p><p>With·the·algorithm·above,·a·list·is·sorted·as·follows:</p><ul><li>A·list·with·zero·or·one·element·is·trivially·sorted.</li><li>For·lists·with·more·than·one·element:<ol><li>The·first·element·in·the·list·is·isolated·as·the·pivot·element.</li><li>The·remaining·list·is·partitioned·into·two·sublists,·such·that:</li></ol><ul><li>The·first·sublist·contains·all·elements·that·are·smaller·than·the·pivot | 143 | than·or·equal·to·<code·class="inline">Pivot</code>.</p><p>With·the·algorithm·above,·a·list·is·sorted·as·follows:</p><ul><li>A·list·with·zero·or·one·element·is·trivially·sorted.</li><li>For·lists·with·more·than·one·element:<ol><li>The·first·element·in·the·list·is·isolated·as·the·pivot·element.</li><li>The·remaining·list·is·partitioned·into·two·sublists,·such·that:</li></ol><ul><li>The·first·sublist·contains·all·elements·that·are·smaller·than·the·pivot |
| 144 | element.</li><li>The·second·sublist·contains·all·elements·that·are·greater·than·or·equal·to | 144 | element.</li><li>The·second·sublist·contains·all·elements·that·are·greater·than·or·equal·to |
| 145 | the·pivot·element.</li></ul><ol><li>The·sublists·are·recursively·sorted·by·the·same·algorithm·and·the·results | 145 | the·pivot·element.</li></ul><ol><li>The·sublists·are·recursively·sorted·by·the·same·algorithm·and·the·results |
| 146 | are·combined,·resulting·in·a·list·consisting·of:</li></ol><ul><li>All·elements·from·the·first·sublist,·that·is·all·elements·smaller·than·the | 146 | are·combined,·resulting·in·a·list·consisting·of:</li></ol><ul><li>All·elements·from·the·first·sublist,·that·is·all·elements·smaller·than·the |
| 147 | pivot·element,·in·sorted·order.</li><li>The·pivot·element.</li><li>All·elements·from·the·second·sublist,·that·is·all·elements·greater·than·or | 147 | pivot·element,·in·sorted·order.</li><li>The·pivot·element.</li><li>All·elements·from·the·second·sublist,·that·is·all·elements·greater·than·or |
| 148 | equal·to·the·pivot·element,·in·sorted·order.</li></ul></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>While·the·sorting·algorithm·as·shown·above·serves·as·a·nice·example·to | 148 | equal·to·the·pivot·element,·in·sorted·order.</li></ul></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>While·the·sorting·algorithm·as·shown·above·serves·as·a·nice·example·to |
| Offset 151, 93 lines modified | Offset 151, 93 lines modified | ||
| 151 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html"><code·class="inline">lists</code></a>·module·contains·sorting·functions·that·are·implemented·in·a·more | 151 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html"><code·class="inline">lists</code></a>·module·contains·sorting·functions·that·are·implemented·in·a·more |
| 152 | efficient·way.</p></section><h2·id="permutations"·class="section-heading"> | 152 | efficient·way.</p></section><h2·id="permutations"·class="section-heading"> |
| 153 | ··<a·href="#permutations"·class="hover-link"> | 153 | ··<a·href="#permutations"·class="hover-link"> |
| 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 155 | ··</a> | 155 | ··</a> |
| 156 | ··<span·class="text">Permutations</span> | 156 | ··<span·class="text">Permutations</span> |
| 157 | </h2> | 157 | </h2> |
| 158 | <p>The·following·example·generates·all·permutations·of·the·elements·in·a·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">perms</span><span·class="p"·data-group-id="7183643205-1">(</span><span·class="p"·data-group-id="7183643205-2">[</span><span·class="p"·data-group-id="7183643205-2">]</span><span·class="p"·data-group-id="7183643205-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="7183643205-3">[</span><span·class="p"·data-group-id="7183643205-4">[</span><span·class="p"·data-group-id="7183643205-4">]</span><span·class="p"·data-group-id="7183643205-3">]</span><span·class="p">;</span><span·class="w"> | ||
| 159 | < | 158 | <p>The·following·example·generates·all·permutations·of·the·elements·in·a·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">perms</span><span·class="p"·data-group-id="5068639991-1">(</span><span·class="p"·data-group-id="5068639991-2">[·...·truncated·by·diffoscope;·len:·442,·SHA:·733917acbaff64182339b0c5a75b77d144f01d9af52f4f9df820625b14300faf·...·] |
| 159 | </span><span·class="nf">perms</span><span·class="p"·data-group-id="5068639991-5">(</span><span·class="n">L</span><span·class="p"·data-group-id="5068639991-5">)</span><span·class="w">··</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="5068639991-6">[</span><span·class="p"·data-group-id="5068639991-7">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="5068639991-7">]</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">H</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="n">L</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">perms</span><span·class="p"·data-group-id="5068639991-8">(</span><span·class="n">L</span><span·class="o">--</span><span·class="p"·data-group-id="5068639991-9">[</span><span·class="n">H</span><span·class="p"·data-group-id="5068639991-9">]</span><span·class="p"·data-group-id="5068639991-8">)</span><span·class="p"·data-group-id="5068639991-6">]</span><span·class="p">.</span></code></pre><p>This·takes·<code·class="inline">H</code>·from·<code·class="inline">L</code>·in·all·possible·ways.·The·result·is·the·set·of·all·lists | ||
| 160 | <code·class="inline">[H|T]</code>,·where·<code·class="inline">T</code>·is·the·set·of·all·possible·permutations·of·<code·class="inline">L</code>,·with·<code·class="inline">H</code> | 160 | <code·class="inline">[H|T]</code>,·where·<code·class="inline">T</code>·is·the·set·of·all·possible·permutations·of·<code·class="inline">L</code>,·with·<code·class="inline">H</code> |
| 161 | removed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">perms</span><span·class="p"·data-group-id=" | 161 | removed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">perms</span><span·class="p"·data-group-id="0115037691-1">(</span><span·class="p"·data-group-id="0115037691-2">[</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">u</span><span·class="p">,</span><span·class="ss">g</span><span·class="p"·data-group-id="0115037691-2">]</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·e4a6cea45d3a84e4eea62de258ce200d42be1e1dff0a1c8a2a8a7b371a3019f6·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p"·data-group-id=" | 162 | </span><span·class="p"·data-group-id="0115037691-3">[</span><span·class="p"·data-group-id="0115037691-4">[</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">u</span><span·class="p">,</span><span·class="ss">g</span><span·class="p"·data-group-id="0115037691-4">]</span><span[·...·truncated·by·diffoscope;·len:·1301,·SHA:·057c46d0848d566bd4d1f4f5c0f1c9254c5f53ad04ebe1c524a074046e0329e4·...·]-3">]</span></code></pre><h2·id="pythagorean-triplets"·class="section-heading"> |
| 163 | ··<a·href="#pythagorean-triplets"·class="hover-link"> | 163 | ··<a·href="#pythagorean-triplets"·class="hover-link"> |
| 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 165 | ··</a> | 165 | ··</a> |
| 166 | ··<span·class="text">Pythagorean·Triplets</span> | 166 | ··<span·class="text">Pythagorean·Triplets</span> |
| 167 | </h2> | 167 | </h2> |
| 168 | <p>Pythagorean·triplets·are·sets·of·integers·<code·class="inline">{A,B,C}</code>·such·that | 168 | <p>Pythagorean·triplets·are·sets·of·integers·<code·class="inline">{A,B,C}</code>·such·that |
| 169 | <code·class="inline">A**2·+·B**2·=·C**2</code>.</p><p>The·function·<code·class="inline">pyth(N)</code>·generates·a·list·of·all·integers·<code·class="inline">{A,B,C}</code>·such·that | 169 | <code·class="inline">A**2·+·B**2·=·C**2</code>.</p><p>The·function·<code·class="inline">pyth(N)</code>·generates·a·list·of·all·integers·<code·class="inline">{A,B,C}</code>·such·that |
| 170 | <code·class="inline">A**2·+·B**2·=·C**2</code>·and·where·the·sum·of·the·sides·is·equal·to,·or·less·than, | 170 | <code·class="inline">A**2·+·B**2·=·C**2</code>·and·where·the·sum·of·the·sides·is·equal·to,·or·less·than, |
| 171 | <code·class="inline">N</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pyth</span><span·class="p"·data-group-id=" | 171 | <code·class="inline">N</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pyth</span><span·class="p"·data-group-id="3345536041-1">(</span><span·class="n">N</span><span·class="p"·data-group-id="3345536041-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="p"·data-group-id=" | 172 | ····</span><span·class="p"·data-group-id="3345536041-2">[</span><span·class="w">·</span><span·class="p"·data-group-id="3345536041-3">{</span><span·class="n">A</span><span·class="p">,</span><span·class="n">B</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="334553[·...·truncated·by·diffoscope;·len:·2,·SHA:·39fa9ec190eee7b6f4dff1100d6343e10918d044c75eac8f9e9a2596173f80c9·...·]41-3">}</span><span·class="w">·</span><span·class="p">||</span><span·class="w"> |
| 173 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 173 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="3345536041-4">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="3345536041-4">)</span><span·class="p">,</span><span·class="w"> |
| 174 | ········</span><span·class="n">B</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 174 | ········</span><span·class="n">B</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="3345536041-5">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="3345536041-5">)</span><span·class="p">,</span><span·class="w"> |
| 175 | ········</span><span·class="n">C</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 175 | ········</span><span·class="n">C</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="3345536041-6">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="3345536041-6">)</span><span·class="p">,</span><span·class="w"> |
| 176 | ········</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">+</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w"> | 176 | ········</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">+</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w"> |
| 177 | ········</span><span·class="n">A</span><span·class="o">*</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">*</span><span·class="n">B</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">C</span><span·class="o">*</span><span·class="n">C</span><span·class="w"> | 177 | ········</span><span·class="n">A</span><span·class="o">*</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">*</span><span·class="n">B</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">C</span><span·class="o">*</span><span·class="n">C</span><span·class="w"> |
| 178 | ····</span><span·class="p"·data-group-id=" | 178 | ····</span><span·class="p"·data-group-id="3345536041-2">]</span><span·class="p">.</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">pyth</span><span·class="p"·data-group-id="9801716148-1">(</span><span·class="mi">3</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·886675102d91dcb3a9c67af216c64f218900e42c3f46dc27ca39dd41031efc31·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p"·data-group-id=" | 179 | </span><span·class="p"·data-group-id="9801716148-2">[</span><span·class="p"·data-group-id="9801716148-2">]</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 180 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id=" | 180 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id="9801716148-3">(</span><span·class="mi">11</span><span·class="p"·data-group-id="9801716148-3">)</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="p"·data-group-id=" | 181 | </span><span·class="p"·data-group-id="9801716148-4">[</span><span·class="p"·data-group-id="9801716148-4">]</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 182 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id=" | 182 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id="9801716148-5">(</span><span·class="mi">12</span><span·class="p"·data-group-id="9801716148-5">)</span><span·class="p">.</span><span·class="w"> |
| 183 | </span><span·class="p"·data-group-id=" | 183 | </span><span·class="p"·data-group-id="9801716148-6">[</span><span·class="p"·data-group-id="9801716148-7">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="9801716148-7">}</span><span[·...·truncated·by·diffoscope;·len:·289,·SHA:·82098592e19828ab22dd8754200863fc4e6ac9f6d3a7e424794e0fb920ed1bb2·...·]-6">]</span><span·class="gp·unselectable"> |
| 184 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id=" | 184 | >·</span><span·class="nf">pyth</span><span·class="p"·data-group-id="9801716148-9">(</span><span·class="mi">50</span><span·class="p"·data-group-id="9801716148-9">)</span><span·class="p">.</span><span·class="w"> |
| 185 | </span><span·class="p"·data-group-id=" | 185 | </span><span·class="p"·data-group-id="9801716148-10">[</span><span·class="p"·data-group-id="9801716148-11">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="9801716148-11">}</span><span·class="p">,</span><span·class="w"> |
| 186 | ·</span><span·class="p"·data-group-id=" | 186 | ·</span><span·class="p"·data-group-id="9801716148-12">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="9801716148-12">}</span><span·class="p">,</span><span·class="w"> |
| 187 | ·</span><span·class="p"·data-group-id=" | 187 | ·</span><span·class="p"·data-group-id="9801716148-13">{</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">13</span><span·class="p"·data-group-id="9801716148-13">}</span><span·class="p">,</span><span·class="w"> |
| 188 | ·</span><span·class="p"·data-group-id=" | 188 | ·</span><span·class="p"·data-group-id="9801716148-14">{</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">10</span><span·class="p"·data-group-id="9801716148-14">}</span><span·class="p">,</span><span·class="w"> |
| 189 | ·</span><span·class="p"·data-group-id=" | 189 | ·</span><span·class="p"·data-group-id="9801716148-15">{</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">10</span><span·class="p"·data-group-id="9801716148-15">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ·</span><span·class="p"·data-group-id=" | 190 | ·</span><span·class="p"·data-group-id="9801716148-16">{</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">17</span><span·class="p"·data-group-id="9801716148-16">}</span><span·class="p">,</span><span·class="w"> |
| 191 | ·</span><span·class="p"·data-group-id=" | 191 | ·</span><span·class="p"·data-group-id="9801716148-17">{</span><span·class="mi">9</span><span·class="p">,</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">15</span><span·class="p"·data-group-id="9801716148-17">}</span><span·class="p">,</span><span·class="w"> |
| 192 | ·</span><span·class="p"·data-group-id=" | 192 | ·</span><span·class="p"·data-group-id="9801716148-18">{</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">13</span><span·class="p"·data-group-id="9801716148-18">}</span><span·class="p">,</span><span·class="w"> |
| 193 | ·</span><span·class="p"·data-group-id=" | 193 | ·</span><span·class="p"·data-group-id="9801716148-19">{</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="mi">15</span><span·class="p"·data-group-id="9801716148-19">}</span><span·class="p">,</span><span·class="w"> |
| 194 | ·</span><span·class="p"·data-group-id=" | 194 | ·</span><span·class="p"·data-group-id="9801716148-20">{</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">20</span><span·class="p"·data-group-id="9801716148-20">}</span><span·class="p">,</span><span·class="w"> |
| 195 | ·</span><span·class="p"·data-group-id=" | 195 | ·</span><span·class="p"·data-group-id="9801716148-21">{</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">17</span><span·class="p"·data-group-id="9801716148-21">}</span><span·class="p">,</span><span·class="w"> |
| 196 | ·</span><span·class="p"·data-group-id=" | 196 | ·</span><span·class="p"·data-group-id="9801716148-22">{</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">12</span><span·class="p">,</span><span·class="mi">20</span><span·class="p"·data-group-id="9801716148-22">}</span><span·class="p"·data-group-id="9801716148-10">]</span[·...·truncated·by·diffoscope;·len:·282,·SHA:·773bd957b5d6b73b712e20d9059cd76b099b45db16b5bb2617fd52f1266467af·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 197 | ···</span><span·class="p"·data-group-id="2 | 197 | ···</span><span·class="p"·data-group-id="2448988906-2">[</span><span·class="p"·data-group-id="2448988906-3">{</span><span·class="n">A</span><span·class="p">,</span><span·class="n">B</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="2448988906-3">}</span><span·class="w">·</span><span·class="p">||</span><span·class="w"> |
| 198 | ·······</span><span·class="n">A</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2 | 198 | ·······</span><span·class="n">A</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2448988906-4">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">2</span><span·class="p"·data-group-id="2448988906-4">)</span><span·class="p">,</span><span·class="w"> |
| 199 | ·······</span><span·class="n">B</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2 | 199 | ·······</span><span·class="n">B</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2448988906-5">(</span><span·class="n">A</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">1</span><span·class="p"·data-group-id="2448988906-5">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ·······</span><span·class="n">C</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2 | 200 | ·······</span><span·class="n">C</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2448988906-6">(</span><span·class="n">B</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="2448988906-6">)</span><span·class="p">,</span><span·class="w"> |
| 201 | ·······</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">+</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w"> | 201 | ·······</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">+</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w"> |
| 202 | ·······</span><span·class="n">A</span><span·class="o">*</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">*</span><span·class="n">B</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">C</span><span·class="o">*</span><span·class="n">C</span><span·class="w">·</span><span·class="p"·data-group-id="2 | 202 | ·······</span><span·class="n">A</span><span·class="o">*</span><span·class="n">A</span><span·class="o">+</span><span·class="n">B</span><span·class="o">*</span><span·class="n">B</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">C</span><span·class="o">*</span><span·class="n">C</span><span·class="w">·</span><span·class="p"·data-group-id="2448988906-2">]</span><span·class="p">.</span></code></pre><h2·id="simplifications-with-list-comprehensions"·class="section-heading"> |
| 203 | ··<a·href="#simplifications-with-list-comprehensions"·class="hover-link"> | 203 | ··<a·href="#simplifications-with-list-comprehensions"·class="hover-link"> |
| 204 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 204 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 205 | ··</a> | 205 | ··</a> |
| 206 | ··<span·class="text">Simplifications·With·List·Comprehensions</span> | 206 | ··<span·class="text">Simplifications·With·List·Comprehensions</span> |
| 207 | </h2> | 207 | </h2> |
| 208 | <p>As·an·example,·list·comprehensions·can·be·used·to·simplify·some·of·the·functions | 208 | <p>As·an·example,·list·comprehensions·can·be·used·to·simplify·some·of·the·functions |
| 209 | in·<code·class="inline">lists.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id=" | 209 | in·<code·class="inline">lists.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id="4004229978-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="4004229978-1">)</span><span·class="w">···</span><span·class="p">-></span><span·class="w">··</span><span·class="p"·data-group-id="4004229978-2">[</span><span·class="n">X</span><[·...·truncated·by·diffoscope;·len:·411,·SHA:·5aefc02a387db1acfc06a1c9eba2a0ce291c7386cdac0fe395beb5e1d69ea2b2·...·]-2">]</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">map</span><span·class="p"·data-group-id=" | 210 | </span><span·class="nf">map</span><span·class="p"·data-group-id="4004229978-3">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="4004229978-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·440,·SHA:·7a43f29272c4580f8016cb927f257d87be8944aa20e4f594386d40fd949a741b·...·]-4">]</span><span·class="p">.</span><span·class="w"> |
| 211 | </span><span·class="nf">filter</span><span·class="p"·data-group-id=" | 211 | </span><span·class="nf">filter</span><span·class="p"·data-group-id="4004229978-6">(</span><span·class="n">Pred</span><span·class="p">,</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="4004229978-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·514,·SHA:·a3daf25a73cedffddce09a08797a1fe3d0913219fc53f5db231ecfca2fe81563·...·]-7">]</span><span·class="p">.</span></code></pre><h2·id="variable-bindings-in-list-comprehensions"·class="section-heading"> |
| 212 | ··<a·href="#variable-bindings-in-list-comprehensions"·class="hover-link"> | 212 | ··<a·href="#variable-bindings-in-list-comprehensions"·class="hover-link"> |
| 213 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 213 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 214 | ··</a> | 214 | ··</a> |
| 215 | ··<span·class="text">Variable·Bindings·in·List·Comprehensions</span> | 215 | ··<span·class="text">Variable·Bindings·in·List·Comprehensions</span> |
| 216 | </h2> | 216 | </h2> |
| 217 | <p>The·scope·rules·for·variables·that·occur·in·list·comprehensions·are·as·follows:</p><ul><li>All·variables·that·occur·in·a·generator·pattern·are·assumed·to·be·"fresh" | 217 | <p>The·scope·rules·for·variables·that·occur·in·list·comprehensions·are·as·follows:</p><ul><li>All·variables·that·occur·in·a·generator·pattern·are·assumed·to·be·"fresh" |
| 218 | variables.</li><li>Any·variables·that·are·defined·before·the·list·comprehension,·and·that·are | 218 | variables.</li><li>Any·variables·that·are·defined·before·the·list·comprehension,·and·that·are |
| 219 | used·in·filters,·have·the·values·they·had·before·the·list·comprehension.</li><li>Variables·cannot·be·exported·from·a·list·comprehension.</li></ul><p>As·an·example·of·these·rules,·suppose·you·want·to·write·the·function·<code·class="inline">select</code>, | 219 | used·in·filters,·have·the·values·they·had·before·the·list·comprehension.</li><li>Variables·cannot·be·exported·from·a·list·comprehension.</li></ul><p>As·an·example·of·these·rules,·suppose·you·want·to·write·the·function·<code·class="inline">select</code>, |
| 220 | which·selects·certain·elements·from·a·list·of·tuples.·Suppose·you·write | 220 | which·selects·certain·elements·from·a·list·of·tuples.·Suppose·you·write |
| 221 | <code·class="inline">select(X,·L)·->·[Y·||·{X,·Y}·<-·L].</code>·with·the·intention·of·extracting·all | 221 | <code·class="inline">select(X,·L)·->·[Y·||·{X,·Y}·<-·L].</code>·with·the·intention·of·extracting·all |
| 222 | tuples·from·<code·class="inline">L</code>,·where·the·first·item·is·<code·class="inline">X</code>.</p><p>Compiling·this·gives·the·following·diagnostic:</p><pre><code·class="text">./FileName.erl:Line:·Warning:·variable·'X'·shadowed·in·generate</code></pre><p>This·diagnostic·warns·that·the·variable·<code·class="inline">X</code>·in·the·pattern·is·not·the·same·as | 222 | tuples·from·<code·class="inline">L</code>,·where·the·first·item·is·<code·class="inline">X</code>.</p><p>Compiling·this·gives·the·following·diagnostic:</p><pre><code·class="text">./FileName.erl:Line:·Warning:·variable·'X'·shadowed·in·generate</code></pre><p>This·diagnostic·warns·that·the·variable·<code·class="inline">X</code>·in·the·pattern·is·not·the·same·as |
| 223 | the·variable·<code·class="inline">X</code>·that·occurs·in·the·function·head.</p><p>Evaluating·<code·class="inline">select</code>·gives·the·following·result:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 223 | the·variable·<code·class="inline">X</code>·that·occurs·in·the·function·head.</p><p>Evaluating·<code·class="inline">select</code>·gives·the·following·result:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">select</span><span·class="p"·data-group-id="4911192964-1">(</span><span·class="ss">b</span><span·class="p">,</span><span·class="p"·data-group-id="4911192964-2">[</span><span·class="p"·data-group-id="4911192964-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">1</span><span[·...·truncated·by·diffoscope;·len:·754,·SHA:·c17adf9d256e7114ea1ac50c1ba7a6fe7b06bbdd2b39bbf09e127ec8ec261a3e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 224 | </span><span·class="p"·data-group-id=" | 224 | </span><span·class="p"·data-group-id="4911192964-7">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="4911192964-7">]</span></code></pre><p>This·is·not·the·wanted·result.·To·achieve·the·desired·effect,·<code·class="inline">select</code>·must·be |
| 225 | written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">select</span><span·class="p"·data-group-id=" | 225 | written·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">select</span><span·class="p"·data-group-id="5379995844-1">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="5379995844-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">··</span><span·cl[·...·truncated·by·diffoscope;·len:·656,·SHA:·59f78c2f046fe26e057b860ca3a73b55b340619e424f09f497bcbb9810185168·...·]-2">]</span><span·class="p">.</span></code></pre><p>The·generator·now·contains·unbound·variables·and·the·test·has·been·moved·into |
| 226 | the·filter.</p><p>This·now·works·as·expected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">select</span><span·class="p"·data-group-id="7445304247-1">(</span><span·class="ss">b</span><span·class="p">,</span><span·class="p"·data-group-id="7445304247-2">[</span><span·class="p"·data-group-id="7445304247-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7445304247-3">}</span><span·class="p">,</span><span·class="p"·data-group-id="7445304247-4">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7445304247-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="7445304247-5">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="7445304247-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="7445304247-6">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="7445304247-6">}</span><span·class="p"·data-group-id="7445304247-2">]</span><span·class="p"·data-group-id="7445304247-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 227 | </span><span·class="p"·data-group-id="7445304247-7">[</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="7445304247-7">]</span></code></pre><p>Also·note·that·a·variable·in·a·generator·pattern·will·shadow·a·variable·with·the | ||
| 228 | same·name·bound·in·a·previous·generator·pattern.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="3299483343-1">[</span><span·class="p"·data-group-id="3299483343-2">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">Y</span><span·class="p"·data-group-id="3299483343-2">}</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="3299483343-3">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="3299483343-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="o">=</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="3299483343-4">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3299483343-4">]</span><span·class="p"·data-group-id="3299483343-1">]</span><span·class="p">.</span><span·class="w"> | ||
| 229 | 226 | the·filter.</p><p>This·now·works·as·expected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">select</span><span·class="p"·data-group-id="9802556151-1">(</span><span·class="ss">b</span><span·cla[·...·truncated·by·diffoscope;·len:·1006,·SHA:·154ed95e06d8084f1bb10454bfc6bd535372fffde0d1f2ba160fcec320a495a7·...·] | |
| 227 | </span><span·class="p"·data-group-id="9802556151-7">[</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="9802556151-7">]</span></code></pre><p>Also·note·that·a·variable·in·a·generator·pattern·will·shadow·a·variable·with·the | ||
| 228 | same·name·bound·in·a·previous·generator·pattern.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="0593710389-1">[</span><span·class="p"·data-group-id="0593710389-2">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">Y</span><span·class="p"·data-group-id="0593710389-2">}</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="0593710389-3">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="0593710389-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="o">=</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="0593710389-4">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0593710389-4">]</span><span·class="p"·data-group-id="0593710389-1">]</span><span·class="p">.</span><span·class="w"> | ||
| 229 | </span><span·class="p"·data-group-id="0593710389-5">[</span><span·class="p"·data-group-id="0593710389-6">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="0593710389-6">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-7">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="0593710389-7">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-8">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0593710389-8">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-9">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="0593710389-9">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-10">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="0593710389-10">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-11">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0593710389-11">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-12">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="0593710389-12">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-13">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="0593710389-13">}</span><span·class="p">,</span><span·class="p"·data-group-id="0593710389-14">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0593710389-14">}</span><span·class="p"·data-group-id="0593710389-5">]</span></code></pre><p>A·consequence·of·the·rules·for·importing·variables·into·a·list·comprehensions·is | ||
| 230 | that·certain·pattern·matching·operations·must·be·moved·into·the·filters·and | 230 | that·certain·pattern·matching·operations·must·be·moved·into·the·filters·and |
| 231 | cannot·be·written·directly·in·the·generators.</p><p>To·illustrate·this,·do·<em>not</em>·write·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id=" | 231 | cannot·be·written·directly·in·the·generators.</p><p>To·illustrate·this,·do·<em>not</em>·write·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="6152841203-1">(</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="6152841203-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 232 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 233 | ····</span><span·class="p"·data-group-id=" | 233 | ····</span><span·class="p"·data-group-id="6152841203-2">[</span><span·class="w">·</span><span·class="n">Expression</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">PatternInvolving</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·[·...·truncated·by·diffoscope;·len:·248,·SHA:·f217a84e10c8fa1b507279afc31fbd113a26100075810d85a4fcf8fac8e023cc·...·]-2">]</span><span·class="w"> |
| 234 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Instead,·write·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id=" | 234 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Instead,·write·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="7477776149-1">(</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7477776149-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 235 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 235 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 236 | ····</span><span·class="p"·data-group-id=" | 236 | ····</span><span·class="p"·data-group-id="7477776149-2">[</span><span·class="w">·</span><span·class="n">Expression</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">PatternInvolving</span><span·class="w">·</span><span·class="n">Y1</span><span·class="w">[·...·truncated·by·diffoscope;·len:·419,·SHA:·f41db456c0bd22c804c237a3df6dd1d506152f16b1fe6140501f6aeb94d89af6·...·]-2">]</span><span·class="w"> |
| 237 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> | 237 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> |
| 238 | </div> | 238 | </div> |
| Max diff block lines reached; 807/79434 bytes (1.02%) of diff not shown. | |||
| Offset 120, 105 lines modified | Offset 120, 105 lines modified | ||
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Creating·a·List</span> | 122 | ··<span·class="text">Creating·a·List</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>Lists·can·only·be·built·starting·from·the·end·and·attaching·list·elements·at·the | 124 | <p>Lists·can·only·be·built·starting·from·the·end·and·attaching·list·elements·at·the |
| 125 | beginning.·If·you·use·the·<code·class="inline">++</code>·operator·as·follows,·a·new·list·is·created·that | 125 | beginning.·If·you·use·the·<code·class="inline">++</code>·operator·as·follows,·a·new·list·is·created·that |
| 126 | is·a·copy·of·the·elements·in·<code·class="inline">List1</code>,·followed·by·<code·class="inline">List2</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">List1</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">List2</span></code></pre><p>Looking·at·how·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#append/2"><code·class="inline">lists:append/2</code></a>·or·<code·class="inline">++</code>·would·be·implemented·in·plain·Erlang, | 126 | is·a·copy·of·the·elements·in·<code·class="inline">List1</code>,·followed·by·<code·class="inline">List2</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">List1</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">List2</span></code></pre><p>Looking·at·how·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#append/2"><code·class="inline">lists:append/2</code></a>·or·<code·class="inline">++</code>·would·be·implemented·in·plain·Erlang, |
| 127 | clearly·the·first·list·is·copied:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id=" | 127 | clearly·the·first·list·is·copied:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id="2371340667-1">(</span><span·class="p"·data-group-id="2371340667-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="2371340667-2">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·60,·SHA:·a832e68a20886a877a61e310d43bd6fd78e709139f829b157851c9ab2f4cc335·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 128 | ····</span><span·class="p"·data-group-id=" | 128 | ····</span><span·class="p"·data-group-id="2371340667-3">[</span><span·class="n">H</span><span·class="p">|</span><span·class="nf">append</span><span·class="p"·data-group-id="2371340667-4">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tail</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·096f6e19cb89766289b3282d1aa2fd855c9fea3dfbc61231b8dc02cdc35fba91·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 129 | </span><span·class="nf">append</span><span·class="p"·data-group-id=" | 129 | </span><span·class="nf">append</span><span·class="p"·data-group-id="2371340667-5">(</span><span·class="p"·data-group-id="2371340667-6">[</span><span·class="p"·data-group-id="2371340667-6">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tail</span><span·class="p"·data-group-id="2371340667-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 130 | ····</span><span·class="n">Tail</span><span·class="p">.</span></code></pre><p>When·recursing·and·building·a·list,·it·is·important·to·ensure·that·you·attach | 130 | ····</span><span·class="n">Tail</span><span·class="p">.</span></code></pre><p>When·recursing·and·building·a·list,·it·is·important·to·ensure·that·you·attach |
| 131 | the·new·elements·to·the·beginning·of·the·list.·In·this·way,·you·will·build·<em>one</em> | 131 | the·new·elements·to·the·beginning·of·the·list.·In·this·way,·you·will·build·<em>one</em> |
| 132 | list,·not·hundreds·or·thousands·of·copies·of·the·growing·result·list.</p><p>Let·us·first·see·how·it·is·not·to·be·done:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2 | 132 | list,·not·hundreds·or·thousands·of·copies·of·the·growing·result·list.</p><p>Let·us·first·see·how·it·is·not·to·be·done:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2307301335-1">(</span><span·class="n">N</span><span·class="p"·data-group-id="2307301335-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 133 | ····</span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2 | 133 | ····</span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2307301335-2">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·130,·SHA:·1205a860b1ca56385fd18cb0f79850e5b0605f3850857fef3915b7f3146d6b81·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2 | 134 | </span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2307301335-4">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Current</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Next</span><span·cla[·...·truncated·by·diffoscope;·len:·107,·SHA:·7b22c262ab05272c4dce43deb5075d51f528e44e641b4cabf317e8635319e15a·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 135 | ····</span><span·class="n">Fibs</span><span·class="p">;</span><span·class="w"> | 135 | ····</span><span·class="n">Fibs</span><span·class="p">;</span><span·class="w"> |
| 136 | </span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2 | 136 | </span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2307301335-5">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Current</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Next</span><span·class="p">,</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·58,·SHA:·25f404b17ca2e8d84c722476f077a87f816066f73c144a479c94043903e37d79·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2 | 137 | ····</span><span·class="nf">bad_fib</span><span·class="p"·data-group-id="2307301335-6">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Next</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·463,·SHA:·fab7d6913e20357596aa26b6b8dfa5b408be3ab760e52791b9936f4bb91770d2·...·]-6">)</span><span·class="p">.</span></code></pre><p>Here·more·than·one·list·is·built.·In·each·iteration·step·a·new·list·is·created |
| 138 | that·is·one·element·longer·than·the·new·previous·list.</p><p>To·avoid·copying·the·result·in·each·iteration,·build·the·list·in·reverse·order | 138 | that·is·one·element·longer·than·the·new·previous·list.</p><p>To·avoid·copying·the·result·in·each·iteration,·build·the·list·in·reverse·order |
| 139 | and·reverse·the·list·when·you·are·done:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id=" | 139 | and·reverse·the·list·when·you·are·done:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id="4659207162-1">(</span><span·class="n">N</span><span·class="p"·data-group-id="4659207162-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 140 | ····</span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id=" | 140 | ····</span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id="4659207162-2">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·131,·SHA:·6a584e4cfa184486eacf7cc1526f96c57a8438493b8e1d01c25775b75e487fee·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 141 | </span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id=" | 141 | </span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id="4659207162-4">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Current</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Next</span><span·cl[·...·truncated·by·diffoscope;·len:·108,·SHA:·050cb4ffccc985cd0bbc7f987af12303f7f6b3a74a4fe1c14f50c51d414fa006·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 142 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id=" | 142 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="4659207162-5">(</span><span·class="n">Fibs</span><span·class="p"·data-group-id="4659207162-5">)</span><span·class="p">;</span><span·class="w"> |
| 143 | </span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id=" | 143 | </span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id="4659207162-6">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Current</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Next</span><span·class="p">,</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·59,·SHA:·8bfc885666790288b572be76603d35acf9ed64e423d0a6dfe5c674d24ab519ae·...·]-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 144 | ····</span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id=" | 144 | ····</span><span·class="nf">tail_recursive_fib</span><span·class="p"·data-group-id="4659207162-7">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Next</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·415,·SHA:·c36f2333304eeb47e4a3205c9c54da685e3fc1487743e1d7c482510c21799a3e·...·]-7">)</span><span·class="p">.</span></code></pre><h2·id="list-comprehensions"·class="section-heading"> |
| 145 | ··<a·href="#list-comprehensions"·class="hover-link"> | 145 | ··<a·href="#list-comprehensions"·class="hover-link"> |
| 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 147 | ··</a> | 147 | ··</a> |
| 148 | ··<span·class="text">List·Comprehensions</span> | 148 | ··<span·class="text">List·Comprehensions</span> |
| 149 | </h2> | 149 | </h2> |
| 150 | <p>A·list·comprehension:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 150 | <p>A·list·comprehension:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2222249869-1">[</span><span·class="n">Expr</span><span·class="p"·data-group-id="2222249869-2">(</span><span·class="n">E</span><span·class="p"·data-group-id="2222249869-2">)</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·675,·SHA:·96ab3df5f09213780191a661f194b2a342c5c30372ed09303a19fda65db2e01e·...·]8-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 151 | ····</span><span·class="p"·data-group-id="2626378228-3">[</span><span·class="n">Expr</span><span·class="p"·data-group-id="2626378228-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="2626378228-4">)</span><span·class="p">|</span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="2626378228-5">(</span><span·class="n">Tail</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Expr</span><span·class="p"·data-group-id="2626378228-5">)</span><span·class="p"·data-group-id="2626378228-3">]</span><span·class="p">;</span><span·class="w"> | ||
| 152 | </span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="2626378228-6">(</span><span·class="p"·data-group-id="2626378228-7">[</span><span·class="p"·data-group-id="2626378228-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Expr</span><span·class="p"·data-group-id="2626378228-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2626378228-8">[</span><span·class="p"·data-group-id="2626378228-8">]</span><span·class="p">.</span></code></pre><p>If·the·result·of·the·list·comprehension·will·<em>obviously</em>·not·be·used,·a·list | ||
| 153 | 151 | ····</span><span·class="p"·data-group-id="5260484558-3">[</span><span·class="n">Expr</span><span·class="p"·data-group-id="5260484558-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="5260484558-4">)</span><span·class="p">|</span><span·class[·...·truncated·by·diffoscope;·len:·305,·SHA:·96b8caa7c39086d7a38b9956aa3d5f1091963e43292732efc4780f66ca556fd8·...·]</span><span·class="w"> | |
| 152 | </span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="5260484558-6">(</span><span·class="p"·data-group-id="5260484558-7">[</span><span·class="p"·data-group-id="5260484558-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Expr</span><span·class="p"·data-group-id="5260484558-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="5260484558-8">[</span><span·class="p"·data-group-id="5260484558-8">]</span><span·class="p">.</span></code></pre><p>If·the·result·of·the·list·comprehension·will·<em>obviously</em>·not·be·used,·a·list | ||
| 153 | will·not·be·constructed.·For·example,·in·this·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6190822691-1">[</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">put_chars</span><span·class="p"·data-group-id="6190822691-2">(</span><span·class="n">E</span><span·class="p"·data-group-id="6190822691-2">)</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="n">E</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="n">List</span><span·class="p"·data-group-id="6190822691-1">]</span><span·class="p">,</span><span·class="w"> | ||
| 154 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>or·in·this·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Var</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 154 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>or·in·this·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Var</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 155 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 155 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 156 | ········</span><span·class="p"·data-group-id=" | 156 | ········</span><span·class="p"·data-group-id="4149733211-1">[</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">put_chars</span><span·class="p"·data-group-id="4149733211-2">(</span><span·class="n">E</span><span·class="p"·data-group-id="4149733211-2">)</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·220,·SHA:·1698a4760cad8e785d530180d259bf46ba2a17e9bd6bbaf7e4e40321350e2fa1·...·]-1">]</span><span·class="p">;</span><span·class="w"> |
| 157 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 157 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | </span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 158 | </span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 159 | </span><span·class="nf">some_function</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">some_function</span><span·class="p"·data-group-id="4149733211-3">(</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="4149733211-3">)</span><span·class="p">,</span></code></pre><p>the·value·is·not·assigned·to·a·variable,·not·passed·to·another·function,·and·not |
| 160 | returned.·This·means·that·there·is·no·need·to·construct·a·list·and·the·compiler | 160 | returned.·This·means·that·there·is·no·need·to·construct·a·list·and·the·compiler |
| 161 | will·simplify·the·code·for·the·list·comprehension·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">'lc^0'</span><span·class="p"·data-group-id=" | 161 | will·simplify·the·code·for·the·list·comprehension·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="7310942975-1">(</span><span·class="p"·data-group-id="7310942975-2">[</span><span·class="n">E</span><span·class="p">|</span><span·class="n">Tail</span><span·class="p"·data-group-id="7310942975-2">]</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·63,·SHA:·923889ef44fcad8fe364d34458ad88a87e7756be3782b486744c81438c269582·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | ····</span><span·class="n">Expr</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="n">Expr</span><span·class="p"·data-group-id="7310942975-3">(</span><span·class="n">E</span><span·class="p"·data-group-id="7310942975-3">)</span><span·class="p">,</span><span·class="w"> |
| 163 | ····</span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id=" | 163 | ····</span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="7310942975-4">(</span><span·class="n">Tail</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Expr</span><span·class="p"·data-group-id="7310942975-4">)</span><span·class="p">;</span><span·class="w"> |
| 164 | </span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id=" | 164 | </span><span·class="nf">'lc^0'</span><span·class="p"·data-group-id="7310942975-5">(</span><span·class="p"·data-group-id="7310942975-6">[</span><span·class="p"·data-group-id="7310942975-6">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Expr</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·194,·SHA:·906200a1ee5e4020b8c40ff02de5c42288ba047fbeaeafdcde22318b9d4cce76·...·]-7">]</span><span·class="p">.</span></code></pre><p>The·compiler·also·understands·that·assigning·to·<code·class="inline">_</code>·means·that·the·value·will |
| 165 | not·be·used.·Therefore,·the·code·in·the·following·example·will·also·be·optimized:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 165 | not·be·used.·Therefore,·the·code·in·the·following·example·will·also·be·optimized:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3799399594-1">[</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">put_chars</span><span·class="p"·data-group-id="3799399594-2">(</span><span·class="n">E</span><span·class="p"·data-group-id="3799399594-2">)</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·220,·SHA:·4c7a336023a985ea5b9773d51362f127d0ae5f472badeed14c1b10de484e5465·...·]-1">]</span><span·class="p">,</span><span·class="w"> |
| 166 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><h2·id="deep-and-flat-lists"·class="section-heading"> | 166 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><h2·id="deep-and-flat-lists"·class="section-heading"> |
| 167 | ··<a·href="#deep-and-flat-lists"·class="hover-link"> | 167 | ··<a·href="#deep-and-flat-lists"·class="hover-link"> |
| 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 169 | ··</a> | 169 | ··</a> |
| 170 | ··<span·class="text">Deep·and·Flat·Lists</span> | 170 | ··<span·class="text">Deep·and·Flat·Lists</span> |
| 171 | </h2> | 171 | </h2> |
| 172 | <p><a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#flatten/1"><code·class="inline">lists:flatten/1</code></a>·builds·an·entirely·new·list.·It·is·therefore·expensive,·and | 172 | <p><a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#flatten/1"><code·class="inline">lists:flatten/1</code></a>·builds·an·entirely·new·list.·It·is·therefore·expensive,·and |
| 173 | even·<em>more</em>·expensive·than·the·<code·class="inline">++</code>·operator·(which·copies·its·left·argument, | 173 | even·<em>more</em>·expensive·than·the·<code·class="inline">++</code>·operator·(which·copies·its·left·argument, |
| 174 | but·not·its·right·argument).</p><p>In·the·following·situations·it·is·unnecessary·to·call·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#flatten/1"><code·class="inline">lists:flatten/1</code></a>:</p><ul><li>When·sending·data·to·a·port.·Ports·understand·deep·lists·so·there·is·no·reason | 174 | but·not·its·right·argument).</p><p>In·the·following·situations·it·is·unnecessary·to·call·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#flatten/1"><code·class="inline">lists:flatten/1</code></a>:</p><ul><li>When·sending·data·to·a·port.·Ports·understand·deep·lists·so·there·is·no·reason |
| 175 | to·flatten·the·list·before·sending·it·to·the·port.</li><li>When·calling·BIFs·that·accept·deep·lists,·such·as | 175 | to·flatten·the·list·before·sending·it·to·the·port.</li><li>When·calling·BIFs·that·accept·deep·lists,·such·as |
| 176 | <a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_binary/1"><code·class="inline">list_to_binary/1</code></a>·or | 176 | <a·href="../../erts-15.2.7/doc/html/erlang.html#list_to_binary/1"><code·class="inline">list_to_binary/1</code></a>·or |
| 177 | <a·href="../../erts-15.2.7/doc/html/erlang.html#iolist_to_binary/1"><code·class="inline">iolist_to_binary/1</code></a>.</li><li>When·you·know·that·your·list·is·only·one·level·deep.·Use·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#append/1"><code·class="inline">lists:append/1</code></a> | 177 | <a·href="../../erts-15.2.7/doc/html/erlang.html#iolist_to_binary/1"><code·class="inline">iolist_to_binary/1</code></a>.</li><li>When·you·know·that·your·list·is·only·one·level·deep.·Use·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html#append/1"><code·class="inline">lists:append/1</code></a> |
| 178 | instead.</li></ul><p><em>Examples:</em></p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">port_command</span><span·class="p"·data-group-id="7678912098-1">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DeepList</span><span·class="p"·data-group-id="7678912098-1">)</span></code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">port_command</span><span·class="p"·data-group-id="7963407686-1">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="7963407686-2">(</span><span·class="n">DeepList</span><span·class="p"·data-group-id="7963407686-2">)</span><span·class="p"·data-group-id="7963407686-1">)</span></code></pre><p>A·common·way·to·send·a·zero-terminated·string·to·a·port·is·the·following:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TerminatedStr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">String</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id="9425098370-1">[</span><span·class="mi">0</span><span·class="p"·data-group-id="9425098370-1">]</span><span·class="p">,</span><span·class="w"> | ||
| 179 | </span><span·class="nf">port_command</span><span·class="p"·data-group-id="9425098370-2">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TerminatedStr</span><span·class="p"·data-group-id="9425098370-2">)</span></code></pre><p>Instead:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TerminatedStr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8642253738-1">[</span><span·class="n">String</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="8642253738-1">]</span><span·class="p">,</span><span·class="w"> | ||
| 180 | </span><span·class="nf">port_command</span><span·class="p"·data-group-id="8642253738-2">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TerminatedStr</span><span·class="p"·data-group-id="8642253738-2">)</span></code></pre><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="3777435769-1">(</span><span·class="p"·data-group-id="3777435769-2">[</span><span·class="p"·data-group-id="3777435769-3">[</span><span·class="mi">1</span><span·class="p"·data-group-id="3777435769-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3777435769-4">[</span><span·class="mi">2</span><span·class="p"·data-group-id="3777435769-4">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3777435769-5">[</span><span·class="mi">3</span><span·class="p"·data-group-id="3777435769-5">]</span><span·class="p"·data-group-id="3777435769-2">]</span><span·class="p"·data-group-id="3777435769-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 181 | 178 | instead.</li></ul><p><em>Examples:</em></p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">port_command</span><span·class="p"·data-group-id="0939876331-1">(</span><span·class="n">Port</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·1167,·SHA:·b08f1702ee74eb0c6460e9f2eb9327d118ffd6ed627d96f3eec0450bdf99b999·...·]</span><span·class="w"> | |
| 179 | </span><span·class="nf">port_command</span><span·class="p"·data-group-id="1708472460-2">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TerminatedStr</span><span·class="p"·data-group-id="1708472460-2">)</span></code></pre><p>Instead:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TerminatedStr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3244505211-1">[</span><span·class="n">String</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="3244505211-1">]</span><span·class="p">,</span><span·class="w"> | ||
| 180 | </span><span·class="nf">port_command</span><span·class="p"·data-group-id="3244505211-2">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TerminatedStr</span><span·class="p"·data-group-id="3244505211-2">)</span></code></pre><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="7532195598-1">(</span><span·class="p"·data-group-id="7532195598-2">[</span><span·class="p"·data-group-id="7532195598-3">[</span><span·class="mi">1</span><span·class="p"·data-group-id="7532195598-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7532195598-4">[</span><span·class="mi">2</span><span·class="p"·data-group-id="7532195598-4">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7532195598-5">[</span><span·class="mi">3</span><span·class="p"·data-group-id="7532195598-5">]</span><span·class="p"·data-group-id="7532195598-2">]</span><span·class="p"·data-group-id="7532195598-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 181 | </span><span·class="p"·data-group-id="7532195598-6">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="7532195598-6">]</span></code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="3598871086-1">(</span><span·class="p"·data-group-id="3598871086-2">[</span><span·class="p"·data-group-id="3598871086-3">[</span><span·class="mi">1</span><span·class="p"·data-group-id="3598871086-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3598871086-4">[</span><span·class="mi">2</span><span·class="p"·data-group-id="3598871086-4">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3598871086-5">[</span><span·class="mi">3</span><span·class="p"·data-group-id="3598871086-5">]</span><span·class="p"·data-group-id="3598871086-2">]</span><span·class="p"·data-group-id="3598871086-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 182 | </span><span·class="p"·data-group-id=" | 182 | </span><span·class="p"·data-group-id="3598871086-6">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="3598871086-6">]</span></code></pre><h2·id="recursive-list-functions"·class="section-heading"> |
| 183 | ··<a·href="#recursive-list-functions"·class="hover-link"> | 183 | ··<a·href="#recursive-list-functions"·class="hover-link"> |
| 184 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 184 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 185 | ··</a> | 185 | ··</a> |
| 186 | ··<span·class="text">Recursive·List·Functions</span> | 186 | ··<span·class="text">Recursive·List·Functions</span> |
| 187 | </h2> | 187 | </h2> |
| 188 | <p>There·are·two·basic·ways·to·write·a·function·that·traverses·a·list·and | 188 | <p>There·are·two·basic·ways·to·write·a·function·that·traverses·a·list·and |
| 189 | produces·a·new·list.</p><p>The·first·way·is·writing·a·<em>body-recursive</em>·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Add·42·to·each·integer·in·the·list.</span><span·class="w"> | 189 | produces·a·new·list.</p><p>The·first·way·is·writing·a·<em>body-recursive</em>·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Add·42·to·each·integer·in·the·list.</span><span·class="w"> |
| 190 | </span><span·class="nf">add_42_body</span><span·class="p"·data-group-id=" | 190 | </span><span·class="nf">add_42_body</span><span·class="p"·data-group-id="5669756549-1">(</span><span·class="p"·data-group-id="5669756549-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="5669756549-2">]</span><span·class="p"·data-group-id="5669756549-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 191 | ····</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="p"·data-group-id="5669756549-3">[</span><span·class="n">H</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">add_42_body</span><span[·...·truncated·by·diffoscope;·len:·166,·SHA:·e4c8a447f367fac06b28dbb180bddd9e8fff8b2ba673a49f0edba45ef68410dd·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 192 | </span><span·class="nf">add_42_body</span><span·class="p"·data-group-id=" | 192 | </span><span·class="nf">add_42_body</span><span·class="p"·data-group-id="5669756549-5">(</span><span·class="p"·data-group-id="5669756549-6">[</span><span·class="p"·data-group-id="5669756549-6">]</span><span·class="p"·data-group-id="5669756549-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="p"·data-group-id="5669756549-7">[</span><span·class="p"·data-group-id="5669756549-7">]</span><span·class="p">.</span></code></pre><p>The·second·way·is·writing·a·<em>tail-recursive</em>·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Add·42·to·each·integer·in·the·list.</span><span·class="w"> |
| 194 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id=" | 194 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id="7863054128-1">(</span><span·class="n">List</span><span·class="p"·data-group-id="7863054128-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ····</span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id=" | 195 | ····</span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id="7863054128-2">(</span><span·class="n">List</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7863054128-3">[</span><span·class="p"·data-group-id="7863054128-3">]</span><span·class="p"·data-group-id="7863054128-2">)</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id=" | 196 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id="7863054128-4">(</span><span·class="p"·data-group-id="7863054128-5">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="7863054128-5">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·59,·SHA:·c31b7b56e1802c97dccda9e5b166aa92737f6d6d7cda02a5044ca18d20f57fff·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 197 | ····</span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id=" | 197 | ····</span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id="7863054128-6">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7863054128-7">[</span><span·class="n">H</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·205,·SHA:·e84946ea8d9cbe8dd8b4ac56a4baa521c5fdeea1018d2d68275e67dc6bc73469·...·]-6">)</span><span·class="p">;</span><span·class="w"> |
| 198 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id=" | 198 | </span><span·class="nf">add_42_tail</span><span·class="p"·data-group-id="7863054128-8">(</span><span·class="p"·data-group-id="7863054128-9">[</span><span·class="p"·data-group-id="7863054128-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="7863054128-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="7863054128-10">(</span><span·class="n">Acc</span><span·class="p"·data-group-id="7863054128-10">)</span><span·class="p">.</span></code></pre><p>In·early·version·of·Erlang·the·tail-recursive·function·would·typically |
| 200 | be·more·efficient.·In·modern·versions·of·Erlang,·there·is·usually·not | 200 | be·more·efficient.·In·modern·versions·of·Erlang,·there·is·usually·not |
| 201 | much·difference·in·performance·between·a·body-recursive·list·function·and | 201 | much·difference·in·performance·between·a·body-recursive·list·function·and |
| 202 | tail-recursive·function·that·reverses·the·list·at·the·end.·Therefore, | 202 | tail-recursive·function·that·reverses·the·list·at·the·end.·Therefore, |
| 203 | concentrate·on·writing·beautiful·code·and·forget·about·the·performance | 203 | concentrate·on·writing·beautiful·code·and·forget·about·the·performance |
| 204 | of·your·list·functions.·In·the·time-critical·parts·of·your·code, | 204 | of·your·list·functions.·In·the·time-critical·parts·of·your·code, |
| 205 | <em>measure</em>·before·rewriting·your·code.</p><p>For·a·thorough·discussion·about·tail·and·body·recursion,·see | 205 | <em>measure</em>·before·rewriting·your·code.</p><p>For·a·thorough·discussion·about·tail·and·body·recursion,·see |
| 206 | <a·href="http://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html">Erlang's·Tail·Recursion·is·Not·a·Silver·Bullet</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·section·is·about·list·functions·that·<em>construct</em>·lists.·A·tail-recursive | 206 | <a·href="http://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html">Erlang's·Tail·Recursion·is·Not·a·Silver·Bullet</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·section·is·about·list·functions·that·<em>construct</em>·lists.·A·tail-recursive |
| 207 | function·that·does·not·construct·a·list·runs·in·constant·space,·while·the | 207 | function·that·does·not·construct·a·list·runs·in·constant·space,·while·the |
| 208 | corresponding·body-recursive·function·uses·stack·space·proportional·to·the | 208 | corresponding·body-recursive·function·uses·stack·space·proportional·to·the |
| 209 | length·of·the·list.</p></section><p>For·example,·a·function·that·sums·a·list·of·integers,·is·<em>not</em>·to·be·written·as | 209 | length·of·the·list.</p></section><p>For·example,·a·function·that·sums·a·list·of·integers,·is·<em>not</em>·to·be·written·as |
| 210 | follows:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">recursive_sum</span><span·class="p"·data-group-id="1622387867-1">(</span><span·class="p"·data-group-id="1622387867-2">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="1622387867-2">]</span><span·class="p"·data-group-id="1622387867-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">H</span><span·class="o">+</span><span·class="nf">recursive_sum</span><span·class="p"·data-group-id="1622387867-3">(</span><span·class="n">T</span><span·class="p"·data-group-id="1622387867-3">)</span><span·class="p">;</span><span·class="w"> | ||
| 211 | </ | 210 | follows:</p><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">recursive_sum</span><span·class="p"·data-group-id="2511153246-1">(</span><span·class="p"·data-group-id="2511153246-2">[</span><span·class="n">H</span[·...·truncated·by·diffoscope;·len:·463,·SHA:·3b3952f9a37d2bbbb69fca954dae9800892bf433df4e7dade4e56aab5f060ce0·...·]</span><span·class="w"> |
| 211 | </span><span·class="nf">recursive_sum</span><span·class="p"·data-group-id="2511153246-4">(</span><span·class="p"·data-group-id="2511153246-5">[</span><span·class="p"·data-group-id="2511153246-5">]</span><span·class="p"·data-group-id="2511153246-4">)</span><span·class="w">····</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span></code></pre><p>Instead:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sum</span><span·class="p"·data-group-id="3756833446-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="3756833446-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">sum</span><span·class="p"·data-group-id="3756833446-2">(</span><span·class="n">L</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="3756833446-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 212 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="37 | 212 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="3756833446-3">(</span><span·class="p"·data-group-id="3756833446-4">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="3756833446-4">]</span><span·class="p">,</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·459,·SHA:·f30b76430b42180de4f06e0eac1587b316539d2ff594c0f228c8758d2ff59d3c·...·]6-5">)</span><span·class="p">;</span><span·class="w"> |
| 213 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="37 | 213 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="3756833446-6">(</span><span·class="p"·data-group-id="3756833446-7">[</span><span·class="p"·data-group-id="3756833446-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sum</span><span·class="p"·data-group-id="3756833446-6">)</span><span·class="w">····</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Sum</span><span·class="p">.</span></code></pre> |
| 214 | </div> | 214 | </div> |
| 215 | <div·class="bottom-actions"·id="bottom-actions"> | 215 | <div·class="bottom-actions"·id="bottom-actions"> |
| 216 | ··<div·class="bottom-actions-item"> | 216 | ··<div·class="bottom-actions-item"> |
| 217 | ······<a·href="maps.html"·class="bottom-actions-button"·rel="prev"> | 217 | ······<a·href="maps.html"·class="bottom-actions-button"·rel="prev"> |
| 218 | ········<span·class="subheader"> | 218 | ········<span·class="subheader"> |
| Offset 261, 15 lines modified | Offset 261, 15 lines modified | ||
| 261 | ······<p·class="built-using"> | 261 | ······<p·class="built-using"> |
| 262 | ········Built·using | 262 | ········Built·using |
| 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 265 | ······</p> | 265 | ······</p> |
| 266 | <p>Copyright·©·1996-202 | 266 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 267 | ····</footer> | 267 | ····</footer> |
| 268 | ··</div> | 268 | ··</div> |
| 269 | </main> | 269 | </main> |
| 270 | </div> | 270 | </div> |
| 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 272 | ··<script> | 272 | ··<script> |
| 273 | ··let·initialized·=·false; | 273 | ··let·initialized·=·false; |
| Max diff block lines reached; -1/57436 bytes (-0.00%) of diff not shown. | |||
| Offset 117, 56 lines modified | Offset 117, 56 lines modified | ||
| 117 | <h2·id="file-inclusion"·class="section-heading"> | 117 | <h2·id="file-inclusion"·class="section-heading"> |
| 118 | ··<a·href="#file-inclusion"·class="hover-link"> | 118 | ··<a·href="#file-inclusion"·class="hover-link"> |
| 119 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 119 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 120 | ··</a> | 120 | ··</a> |
| 121 | ··<span·class="text">File·Inclusion</span> | 121 | ··<span·class="text">File·Inclusion</span> |
| 122 | </h2> | 122 | </h2> |
| 123 | <p>A·file·can·be·included·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="7 | 123 | <p>A·file·can·be·included·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="7045669037-1">(</span><span·class="n">File</span><span·class="p"·data-group-id="7045669037-1">)</span><span·class="p">.</span><span·class="w"> |
| 124 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7 | 124 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7045669037-2">(</span><span·class="n">File</span><span·class="p"·data-group-id="7045669037-2">)</span><span·class="p">.</span></code></pre><p><code·class="inline">File</code>,·a·string,·is·to·point·out·a·file.·The·contents·of·this·file·are·included |
| 125 | as·is,·at·the·position·of·the·directive.</p><p>Include·files·are·typically·used·for·record·and·macro·definitions·that·are | 125 | as·is,·at·the·position·of·the·directive.</p><p>Include·files·are·typically·used·for·record·and·macro·definitions·that·are |
| 126 | shared·by·several·modules.·It·is·recommended·to·use·the·file·name·extension | 126 | shared·by·several·modules.·It·is·recommended·to·use·the·file·name·extension |
| 127 | <code·class="inline">.hrl</code>·for·include·files.</p><p><code·class="inline">File</code>·can·start·with·a·path·component·<code·class="inline">$VAR</code>,·for·some·string·<code·class="inline">VAR</code>.·If·that·is | 127 | <code·class="inline">.hrl</code>·for·include·files.</p><p><code·class="inline">File</code>·can·start·with·a·path·component·<code·class="inline">$VAR</code>,·for·some·string·<code·class="inline">VAR</code>.·If·that·is |
| 128 | the·case,·the·value·of·the·environment·variable·<code·class="inline">VAR</code>·as·returned·by | 128 | the·case,·the·value·of·the·environment·variable·<code·class="inline">VAR</code>·as·returned·by |
| 129 | <code·class="inline">os:getenv(VAR)</code>·is·substituted·for·<code·class="inline">$VAR</code>.·If·<code·class="inline">os:getenv(VAR)</code>·returns·<code·class="inline">false</code>, | 129 | <code·class="inline">os:getenv(VAR)</code>·is·substituted·for·<code·class="inline">$VAR</code>.·If·<code·class="inline">os:getenv(VAR)</code>·returns·<code·class="inline">false</code>, |
| 130 | <code·class="inline">$VAR</code>·is·left·as·is.</p><p>If·the·filename·<code·class="inline">File</code>·is·absolute·(possibly·after·variable·substitution),·the | 130 | <code·class="inline">$VAR</code>·is·left·as·is.</p><p>If·the·filename·<code·class="inline">File</code>·is·absolute·(possibly·after·variable·substitution),·the |
| 131 | include·file·with·that·name·is·included.·Otherwise,·the·specified·file·is | 131 | include·file·with·that·name·is·included.·Otherwise,·the·specified·file·is |
| 132 | searched·for·in·the·following·directories,·and·in·this·order:</p><ol><li>The·current·working·directory</li><li>The·directory·where·the·module·is·being·compiled</li><li>The·directories·given·by·the·<code·class="inline">include</code>·option</li></ol><p>For·details,·see·<a·href="../../erts-15.2.7/doc/html/erlc_cmd.html">erlc</a>·in·ERTS·and | 132 | searched·for·in·the·following·directories,·and·in·this·order:</p><ol><li>The·current·working·directory</li><li>The·directory·where·the·module·is·being·compiled</li><li>The·directories·given·by·the·<code·class="inline">include</code>·option</li></ol><p>For·details,·see·<a·href="../../erts-15.2.7/doc/html/erlc_cmd.html">erlc</a>·in·ERTS·and |
| 133 | <a·href="../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compile</code></a>·in·Compiler.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 133 | <a·href="../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compile</code></a>·in·Compiler.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2509605370-1">(</span><span·class="s">"my_records.hrl"</span><span·class="p"·data-group-id="2509605370-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 134 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2509605370-2">(</span><span·class="s">"incdir/my_records.hrl"</span><span·class="p"·data-group-id="2509605370-2">)</span><span·class="p">.</span><span·class="w"> |
| 135 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 135 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2509605370-3">(</span><span·class="s">"/home/user/proj/my_records.hrl"</span><span·class="p"·data-group-id="2509605370-3">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 136 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2509605370-4">(</span><span·class="s">"$PROJ_ROOT/my_records.hrl"</span><span·class="p"·data-group-id="2509605370-4">)</span><span·class="p">.</span></code></pre><p><code·class="inline">include_lib</code>·is·similar·to·<code·class="inline">include</code>,·but·is·not·to·point·out·an·absolute·file. |
| 137 | Instead,·the·first·path·component·(possibly·after·variable·substitution)·is | 137 | Instead,·the·first·path·component·(possibly·after·variable·substitution)·is |
| 138 | assumed·to·be·the·name·of·an·application.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 138 | assumed·to·be·the·name·of·an·application.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="2896868437-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="2896868437-1">)</span><span·class="p">.</span></code></pre><p>The·code·server·uses·<code·class="inline">code:lib_dir(kernel)</code>·to·find·the·directory·of·the·current |
| 139 | (latest)·version·of·Kernel,·and·then·the·subdirectory·<code·class="inline">include</code>·is·searched·for | 139 | (latest)·version·of·Kernel,·and·then·the·subdirectory·<code·class="inline">include</code>·is·searched·for |
| 140 | the·file·<code·class="inline">file.hrl</code>.</p><h2·id="defining-and-using-macros"·class="section-heading"> | 140 | the·file·<code·class="inline">file.hrl</code>.</p><h2·id="defining-and-using-macros"·class="section-heading"> |
| 141 | ··<a·href="#defining-and-using-macros"·class="hover-link"> | 141 | ··<a·href="#defining-and-using-macros"·class="hover-link"> |
| 142 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 142 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 143 | ··</a> | 143 | ··</a> |
| 144 | ··<span·class="text">Defining·and·Using·Macros</span> | 144 | ··<span·class="text">Defining·and·Using·Macros</span> |
| 145 | </h2> | 145 | </h2> |
| 146 | <p>A·macro·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="3985173835-1">(</span><span·class="n">Const</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Replacement</span><span·class="p"·data-group-id="3985173835-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 147 | < | 146 | <p>A·macro·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="6687002582-1">(</span><span·class="n">Const</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·138,·SHA:·48e8f249eab2c6f086ac06f25116785440b8a92dd95a8d6c52f5dec156bf7e74·...·] |
| 147 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="6687002582-2">(</span><span·class="n">Func</span><span·class="p"·data-group-id="6687002582-3">(</span><span·class="n">Var1</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="n">VarN</span><span·class="p"·data-group-id="6687002582-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Replacement</span><span·class="p"·data-group-id="6687002582-2">)</span><span·class="p">.</span></code></pre><p>A·macro·definition·can·be·placed·anywhere·among·the·attributes·and·function | ||
| 148 | declarations·of·a·module,·but·the·definition·must·come·before·any·usage·of·the | 148 | declarations·of·a·module,·but·the·definition·must·come·before·any·usage·of·the |
| 149 | macro.</p><p>If·a·macro·is·used·in·several·modules,·it·is·recommended·that·the·macro | 149 | macro.</p><p>If·a·macro·is·used·in·several·modules,·it·is·recommended·that·the·macro |
| 150 | definition·is·placed·in·an·include·file.</p><p>A·macro·is·used·as·follows:</p><pre><code·class="text">?Const | 150 | definition·is·placed·in·an·include·file.</p><p>A·macro·is·used·as·follows:</p><pre><code·class="text">?Const |
| 151 | ?Func(Arg1,...,ArgN)</code></pre><p>Macros·are·expanded·during·compilation.·A·simple·macro·<code·class="inline">?Const</code>·is·replaced·with | 151 | ?Func(Arg1,...,ArgN)</code></pre><p>Macros·are·expanded·during·compilation.·A·simple·macro·<code·class="inline">?Const</code>·is·replaced·with |
| 152 | <code·class="inline">Replacement</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 152 | <code·class="inline">Replacement</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="9716780760-1">(</span><span·class="n">TIMEOUT</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p"·data-group-id="9716780760-1">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 153 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="nf">call</span><span·class="p"·data-group-id=" | 154 | </span><span·class="nf">call</span><span·class="p"·data-group-id="9716780760-2">(</span><span·class="n">Request</span><span·class="p"·data-group-id="9716780760-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 155 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 155 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9716780760-3">(</span><span·class="ss">refserver</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Request</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">TIMEOUT</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·296,·SHA:·4f9aa6d4b51275bfbbfa14959b8d2b9014db403d63a5c60ac6556a687fb81e78·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 156 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 156 | ····</span><span·class="nc">server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="1007975885-2">(</span><span·class="ss">refserver</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Request</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p"·data-group-id="1007975885-2">)</span><span·class="p">.</span></code></pre><p>A·macro·<code·class="inline">?Func(Arg1,...,ArgN)</code>·is·replaced·with·<code·class="inline">Replacement</code>,·where·all |
| 157 | occurrences·of·a·variable·<code·class="inline">Var</code>·from·the·macro·definition·are·replaced·with·the | 157 | occurrences·of·a·variable·<code·class="inline">Var</code>·from·the·macro·definition·are·replaced·with·the |
| 158 | corresponding·argument·<code·class="inline">Arg</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 158 | corresponding·argument·<code·class="inline">Arg</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8330735866-1">(</span><span·class="n">MACRO1</span><span·class="p"·data-group-id="8330735866-2">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="8330735866-2">)</span><sp[·...·truncated·by·diffoscope;·len:·433,·SHA:·b612858f563cc081ab447f945cd6c6ff32bf98463c05c12033915e5b0ca073fe·...·]6-1">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 159 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 160 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="8330735866-4">(</span><span·class="n">X</span><span·class="p"·data-group-id="8330735866-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ····</span><span·class="o">?</span><span·class="n">MACRO1</span><span·class="p"·data-group-id=" | 161 | ····</span><span·class="o">?</span><span·class="n">MACRO1</span><span·class="p"·data-group-id="8330735866-5">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p"·data-group-id="8330735866-5">)</span><span·class="p">,</span><span·class="w"> |
| 162 | ····</span><span·class="o">?</span><span·class="n">MACRO1</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="o">?</span><span·class="n">MACRO1</span><span·class="p"·data-group-id="8330735866-6">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">123</span><span·class="p"·data-group-id="8330735866-6">)</span></code></pre><p>This·is·expanded·to:</p><pre><code·class="makeup·erlang"·translate[·...·truncated·by·diffoscope;·len:·151,·SHA:·fd0939c3ec29fbe1c493e393941e0365d41c630232f3587884c959c466bfa3e8·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 163 | ····</span><span·class="p"·data-group-id=" | 163 | ····</span><span·class="p"·data-group-id="6371279508-2">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="6371279508-2">}</span><span·class="p">,</span><span·class="w"> |
| 164 | ····</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="p"·data-group-id="6371279508-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="n">X</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="mi">123</span><span·class="p"·data-group-id="6371279508-3">}</span><span·class="p">.</span></code></pre><p>It·is·good·programming·practice,·but·not·mandatory,·to·ensure·that·a·macro |
| 165 | definition·is·a·valid·Erlang·syntactic·form.</p><p>To·view·the·result·of·macro·expansion,·a·module·can·be·compiled·with·the·<code·class="inline">'P'</code> | 165 | definition·is·a·valid·Erlang·syntactic·form.</p><p>To·view·the·result·of·macro·expansion,·a·module·can·be·compiled·with·the·<code·class="inline">'P'</code> |
| 166 | option.·<code·class="inline">compile:file(File,·['P'])</code>.·This·produces·a·listing·of·the·parsed·code | 166 | option.·<code·class="inline">compile:file(File,·['P'])</code>.·This·produces·a·listing·of·the·parsed·code |
| 167 | after·preprocessing·and·parse·transforms,·in·the·file·<code·class="inline">File.P</code>.</p><h2·id="predefined-macros"·class="section-heading"> | 167 | after·preprocessing·and·parse·transforms,·in·the·file·<code·class="inline">File.P</code>.</p><h2·id="predefined-macros"·class="section-heading"> |
| 168 | ··<a·href="#predefined-macros"·class="hover-link"> | 168 | ··<a·href="#predefined-macros"·class="hover-link"> |
| 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 170 | ··</a> | 170 | ··</a> |
| 171 | ··<span·class="text">Predefined·Macros</span> | 171 | ··<span·class="text">Predefined·Macros</span> |
| Offset 185, 29 lines modified | Offset 185, 29 lines modified | ||
| 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 186 | ··</a> | 186 | ··</a> |
| 187 | ··<span·class="text">Macros·Overloading</span> | 187 | ··<span·class="text">Macros·Overloading</span> |
| 188 | </h2> | 188 | </h2> |
| 189 | <p>It·is·possible·to·overload·macros,·except·for·predefined·macros.·An·overloaded | 189 | <p>It·is·possible·to·overload·macros,·except·for·predefined·macros.·An·overloaded |
| 190 | macro·has·more·than·one·definition,·each·with·a·different·number·of·arguments.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Support·for·overloading·of·macros·was·added·in·Erlang·5.7.5/OTP·R13B04.</p></section><p>A·macro·<code·class="inline">?Func(Arg1,...,ArgN)</code>·with·a·(possibly·empty)·list·of·arguments·results | 190 | macro·has·more·than·one·definition,·each·with·a·different·number·of·arguments.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Support·for·overloading·of·macros·was·added·in·Erlang·5.7.5/OTP·R13B04.</p></section><p>A·macro·<code·class="inline">?Func(Arg1,...,ArgN)</code>·with·a·(possibly·empty)·list·of·arguments·results |
| 191 | in·an·error·message·if·there·is·at·least·one·definition·of·<code·class="inline">Func</code>·with | 191 | in·an·error·message·if·there·is·at·least·one·definition·of·<code·class="inline">Func</code>·with |
| 192 | arguments,·but·none·with·N·arguments.</p><p>Assuming·these·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 192 | arguments,·but·none·with·N·arguments.</p><p>Assuming·these·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5033371095-1">(</span><span·class="n">F0</span><span·class="p"·data-group-id="5033371095-2">(</span><span·class="p"·data-group-id="5033371095-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·af1c8b530ada8eb7d4448176e3f0e4b461f3b2a343908c7c4b482ad8f201f284·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 193 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5033371095-3">(</span><span·class="n">F1</span><span·class="p"·data-group-id="5033371095-4">(</span><span·class="n">A</span><span·class="p"·data-group-id="5033371095-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·c6efaa976f334826bc17e4a692944e2634aa85457ae4cc79929d0027ed160402·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 194 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 194 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5033371095-5">(</span><span·class="n">C</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">m</span><span·class="p">:</span><span·class="ss">f</span><span·class="p"·data-group-id="5033371095-5">)</span><span·class="p">.</span></code></pr[·...·truncated·by·diffoscope;·len:·204,·SHA:·7b80204a26630dc8f74cfe8f478f7d486707b5cafdabb8086e384218170ec3a4·...·]2-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ····</span><span·class="o">?</span><span·class="n">F0</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·No,·an·empty·list·of·arguments·expected.</span><span·class="w"> | 195 | ····</span><span·class="o">?</span><span·class="n">F0</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·No,·an·empty·list·of·arguments·expected.</span><span·class="w"> |
| 196 | </span><span·class="nf">f1</span><span·class="p"·data-group-id=" | 196 | </span><span·class="nf">f1</span><span·class="p"·data-group-id="4376047152-2">(</span><span·class="n">A</span><span·class="p"·data-group-id="4376047152-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 197 | ····</span><span·class="o">?</span><span·class="n">F1</span><span·class="p"·data-group-id=" | 197 | ····</span><span·class="o">?</span><span·class="n">F1</span><span·class="p"·data-group-id="4376047152-3">(</span><span·class="n">A</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·class="p"·data-group-id="4376047152-3">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·No,·exactly·one·argument·expected.</span></code></pre><p>On·the·other·hand,</p><pre><code·class="text">f()·-> |
| 198 | ····?C().</code></pre><p>is·expanded·to</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id=" | 198 | ····?C().</code></pre><p>is·expanded·to</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="0828998461-1">(</span><span·class="p"·data-group-id="0828998461-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="nc">m</span><span·class="p">:</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nc">m</span><span·class="p">:</span><span·class="nf">f</span><span·class="p"·data-group-id="0828998461-2">(</span><span·class="p"·data-group-id="0828998461-2">)</span><span·class="p">.</span></code></pre><h2·id="removing-a-macro-definition"·class="section-heading"> |
| 200 | ··<a·href="#removing-a-macro-definition"·class="hover-link"> | 200 | ··<a·href="#removing-a-macro-definition"·class="hover-link"> |
| 201 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 201 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 202 | ··</a> | 202 | ··</a> |
| 203 | ··<span·class="text">Removing·a·macro·definition</span> | 203 | ··<span·class="text">Removing·a·macro·definition</span> |
| 204 | </h2> | 204 | </h2> |
| 205 | <p>A·definition·of·macro·can·be·removed·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">undef</span><span·class="p"·data-group-id=" | 205 | <p>A·definition·of·macro·can·be·removed·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">undef</span><span·class="p"·data-group-id="2422033016-1">(</span><span·class="n">Macro</span><span·class="p"·data-group-id="2422033016-1">)</span><span·class="p">.</span></code></pre><h2·id="conditional-compilation"·class="section-heading"> |
| 206 | ··<a·href="#conditional-compilation"·class="hover-link"> | 206 | ··<a·href="#conditional-compilation"·class="hover-link"> |
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Conditional·Compilation</span> | 209 | ··<span·class="text">Conditional·Compilation</span> |
| 210 | </h2> | 210 | </h2> |
| 211 | <p>The·following·macro·directives·support·conditional·compilation:</p><ul><li><p><strong><code·class="inline">-ifdef(Macro).</code></strong>·-·Evaluate·the·following·lines·only·if·<code·class="inline">Macro</code>·is | 211 | <p>The·following·macro·directives·support·conditional·compilation:</p><ul><li><p><strong><code·class="inline">-ifdef(Macro).</code></strong>·-·Evaluate·the·following·lines·only·if·<code·class="inline">Macro</code>·is |
| 212 | defined.</p></li><li><p><strong><code·class="inline">-ifndef(Macro).</code></strong>·-·Evaluate·the·following·lines·only·if·<code·class="inline">Macro</code>·is·not | 212 | defined.</p></li><li><p><strong><code·class="inline">-ifndef(Macro).</code></strong>·-·Evaluate·the·following·lines·only·if·<code·class="inline">Macro</code>·is·not |
| Offset 219, 43 lines modified | Offset 219, 43 lines modified | ||
| 219 | true,·and·the·<code·class="inline">Condition</code>·evaluates·to·true,·the·lines·following·the·<code·class="inline">elif</code> | 219 | true,·and·the·<code·class="inline">Condition</code>·evaluates·to·true,·the·lines·following·the·<code·class="inline">elif</code> |
| 220 | are·evaluated·instead.</p></li><li><p><strong><code·class="inline">-endif.</code></strong>·-·Specifies·the·end·of·a·series·of·control·flow·directives.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Macro·directives·cannot·be·used·inside·functions.</p></section><p>Syntactically,·the·<code·class="inline">Condition</code>·in·<code·class="inline">if</code>·and·<code·class="inline">elif</code>·must·be·a | 220 | are·evaluated·instead.</p></li><li><p><strong><code·class="inline">-endif.</code></strong>·-·Specifies·the·end·of·a·series·of·control·flow·directives.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Macro·directives·cannot·be·used·inside·functions.</p></section><p>Syntactically,·the·<code·class="inline">Condition</code>·in·<code·class="inline">if</code>·and·<code·class="inline">elif</code>·must·be·a |
| 221 | <a·href="expressions.html#guard-expressions">guard·expression</a>.·Other·constructs·(such·as | 221 | <a·href="expressions.html#guard-expressions">guard·expression</a>.·Other·constructs·(such·as |
| 222 | a·<code·class="inline">case</code>·expression)·result·in·a·compilation·error.</p><p>As·opposed·to·the·standard·guard·expressions,·an·expression·in·an·<code·class="inline">if</code>·and | 222 | a·<code·class="inline">case</code>·expression)·result·in·a·compilation·error.</p><p>As·opposed·to·the·standard·guard·expressions,·an·expression·in·an·<code·class="inline">if</code>·and |
| 223 | <code·class="inline">elif</code>·also·supports·calling·the·psuedo-function·<code·class="inline">defined(Name)</code>,·which·tests | 223 | <code·class="inline">elif</code>·also·supports·calling·the·psuedo-function·<code·class="inline">defined(Name)</code>,·which·tests |
| 224 | whether·the·<code·class="inline">Name</code>·argument·is·the·name·of·a·previously·defined·macro. | 224 | whether·the·<code·class="inline">Name</code>·argument·is·the·name·of·a·previously·defined·macro. |
| 225 | <code·class="inline">defined(Name)</code>·evaluates·to·<code·class="inline">true</code>·if·the·macro·is·defined·and·<code·class="inline">false</code> | 225 | <code·class="inline">defined(Name)</code>·evaluates·to·<code·class="inline">true</code>·if·the·macro·is·defined·and·<code·class="inline">false</code> |
| 226 | otherwise.·An·attempt·to·call·other·functions·results·in·a·compilation·error.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 226 | otherwise.·An·attempt·to·call·other·functions·results·in·a·compilation·error.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8369709088-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="8369709088-1">)</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 227 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="w"> | 228 | </span><span·class="w"> |
| 229 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id=" | 229 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="8369709088-2">(</span><span·class="ss">debug</span><span·class="p"·data-group-id="8369709088-2">)</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 230 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8369709088-3">(</span><span·class="n">LOG</span><span·class="p"·data-group-id="8369709088-4">(</span><span·class="n">X</span><span·class="p"·data-group-id="8369709088-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">io</span><spa[·...·truncated·by·diffoscope;·len:·740,·SHA:·d88b3823eeafb955cb1bf62946ca492c6bad71222af69297b45916d0d3d3b4e5·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 231 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 232 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 232 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8369709088-7">(</span><span·class="n">LOG</span><span·class="p"·data-group-id="8369709088-8">(</span><span·class="n">X</span><span·class="p"·data-group-id="8369709088-8">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·42972f4dcf52cfcd0166144a9e747556d02ae0b7a80c0d778164f7c3d9e11546·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 233 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 234 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>When·trace·output·is·desired,·<code·class="inline">debug</code>·is·to·be·defined·when·the·module·<code·class="inline">m</code>·is | 234 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>When·trace·output·is·desired,·<code·class="inline">debug</code>·is·to·be·defined·when·the·module·<code·class="inline">m</code>·is |
| 235 | compiled:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erlc·-Ddebug·m.erl</span><span·class="w"> | 235 | compiled:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erlc·-Ddebug·m.erl</span><span·class="w"> |
| 236 | </span><span·class="ow">or</span><span·class="w"> | 236 | </span><span·class="ow">or</span><span·class="w"> |
| 237 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 237 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nf">c</span><span·class="p"·data-group-id="9685285049-1">(</span><span·class="ss">m</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9685285049-2">{</span><span·class="ss">d</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">debug</span><span·[·...·truncated·by·diffoscope;·len:·88,·SHA:·71a3cf647a63fcf9a33cf3dca030fdf703dba137923e4389cbe6e01196ea7c9c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id="8949141298-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">m</span><span·class="p"·data-group-id="8949141298-3">}</span></code></pre><p><code·class="inline">?LOG(Arg)</code>·is·then·expanded·to·a·call·to·<a·href="../../lib/stdlib-6.2.2.1/doc/html/io.html#format/2"><code·class="inline">io:format/2</code></a>·and·provide·the·user | ||
| 239 | 238 | </span><span·class="p"·data-group-id="9685285049-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">m</span><span·class="p"·data-group-id="9685285049-3">}</span></code></pre><p><code·class="inline">?LOG(Arg)</code>·is·then·expand[·...·truncated·by·diffoscope;·len:·141,·SHA:·5cca8b7a9fe8d800c1e8aa411bc0710a1ffef7a82ba79bbab60d6e79d1e7730e·...·] | |
| 239 | with·some·simple·trace·output.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7158554062-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="7158554062-1">)</span><span·class="w"> | ||
| 240 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 240 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="p">-</span><span·class="na">if</span><span·class="p"·data-group-id="58 | 241 | </span><span·class="p">-</span><span·class="na">if</span><span·class="p"·data-group-id="7158554062-2">(</span><span·class="o">?</span><span·class="n">OTP_RELEASE</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">25</span><span·class="p"·data-group-id="7158554062-2">)</span><span·class="p">.</span><span·class="w"> |
| 242 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·25·or·higher</span><span·class="w"> | 242 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·25·or·higher</span><span·class="w"> |
| 243 | </span><span·class="p">-</span><span·class="na">elif</span><span·class="p"·data-group-id="58 | 243 | </span><span·class="p">-</span><span·class="na">elif</span><span·class="p"·data-group-id="7158554062-3">(</span><span·class="o">?</span><span·class="n">OTP_RELEASE</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">26</span><span·class="p"·data-group-id="7158554062-3">)</span><span·class="p">.</span><span·class="w"> |
| 244 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·26·or·higher</span><span·class="w"> | 244 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·26·or·higher</span><span·class="w"> |
| 245 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 245 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 246 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·24·or·lower.</span><span·class="w"> | 246 | </span><span·class="c1">%%·Code·that·will·work·in·OTP·24·or·lower.</span><span·class="w"> |
| 247 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 247 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>This·code·uses·the·<code·class="inline">OTP_RELEASE</code>·macro·to·conditionally·select·code·depending·on | 248 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>This·code·uses·the·<code·class="inline">OTP_RELEASE</code>·macro·to·conditionally·select·code·depending·on |
| 249 | release.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 249 | release.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9466996428-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="9466996428-1">)</span><span·class="w"> |
| 250 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 250 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="p">-</span><span·class="na">if</span><span·class="p"·data-group-id=" | 251 | </span><span·class="p">-</span><span·class="na">if</span><span·class="p"·data-group-id="9466996428-2">(</span><span·class="o">?</span><span·class="n">OTP_RELEASE</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="ow">andalso</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·211,·SHA:·737b6a13462dd23088170cccfc2b33e948dd529dc2bbb28adf55ebf5e3d77bf5·...·]8-2">)</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="c1">%%·Debugging·code·that·requires·OTP·26·or·later.</span><span·class="w"> | 252 | </span><span·class="c1">%%·Debugging·code·that·requires·OTP·26·or·later.</span><span·class="w"> |
| 253 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 253 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| Max diff block lines reached; 18903/60410 bytes (31.29%) of diff not shown. | |||
| Offset 148, 16 lines modified | Offset 148, 16 lines modified | ||
| 148 | single·function·that·constructs·the·map·using·the·map·syntax·and·always·use | 148 | single·function·that·constructs·the·map·using·the·map·syntax·and·always·use |
| 149 | it.</p></li><li><p>Always·update·the·map·using·the·<code·class="inline">:=</code>·operator·(that·is,·requiring·that·an | 149 | it.</p></li><li><p>Always·update·the·map·using·the·<code·class="inline">:=</code>·operator·(that·is,·requiring·that·an |
| 150 | element·with·that·key·already·exists).·The·<code·class="inline">:=</code>·operator·is·slightly·more | 150 | element·with·that·key·already·exists).·The·<code·class="inline">:=</code>·operator·is·slightly·more |
| 151 | efficient,·and·it·helps·catching·mispellings·of·keys.</p></li><li><p>Whenever·possible,·match·multiple·map·elements·at·once.</p></li><li><p>Whenever·possible,·update·multiple·map·elements·at·once.</p></li><li><p>Avoid·default·values·and·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·function.·If·there·are·default | 151 | efficient,·and·it·helps·catching·mispellings·of·keys.</p></li><li><p>Whenever·possible,·match·multiple·map·elements·at·once.</p></li><li><p>Whenever·possible,·update·multiple·map·elements·at·once.</p></li><li><p>Avoid·default·values·and·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·function.·If·there·are·default |
| 152 | values,·sharing·of·keys·between·different·instances·of·the·map·will·be·less | 152 | values,·sharing·of·keys·between·different·instances·of·the·map·will·be·less |
| 153 | effective,·and·it·is·not·possible·to·match·multiple·elements·having·default | 153 | effective,·and·it·is·not·possible·to·match·multiple·elements·having·default |
| 154 | values·in·one·go.</p></li><li><p>To·avoid·having·to·deal·with·a·map·that·may·lack·some·keys,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#merge/2"><code·class="inline">maps:merge/2</code></a>·can | 154 | values·in·one·go.</p></li><li><p>To·avoid·having·to·deal·with·a·map·that·may·lack·some·keys,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#merge/2"><code·class="inline">maps:merge/2</code></a>·can |
| 155 | efficiently·add·multiple·default·values.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">DefaultMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 155 | efficiently·add·multiple·default·values.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">DefaultMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0022290304-1">#{</span><span·class="ss">shoe_size</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">42</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">editor</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·126,·SHA:·394ceb64f36f31cb1fd10351e4a005f3333f01f4113d2f2ee0b4471a2d84e210·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 156 | </span><span·class="n">MapWithDefaultsApplied</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">merge</span><span·class="p"·data-group-id=" | 156 | </span><span·class="n">MapWithDefaultsApplied</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">merge</span><span·class="p"·data-group-id="0022290304-2">(</span><span·class="n">DefaultMap</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OtherMap</span><span·class="p"·data-group-id="0022290304-2">)</span></code></pre></li></ul><h2·id="using-maps-as-dictionaries"·class="section-heading"> |
| 157 | ··<a·href="#using-maps-as-dictionaries"·class="hover-link"> | 157 | ··<a·href="#using-maps-as-dictionaries"·class="hover-link"> |
| 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 159 | ··</a> | 159 | ··</a> |
| 160 | ··<span·class="text">Using·Maps·as·Dictionaries</span> | 160 | ··<span·class="text">Using·Maps·as·Dictionaries</span> |
| 161 | </h2> | 161 | </h2> |
| 162 | <p>Using·a·map·as·a·dictionary·implies·the·following·usage·pattern:</p><ul><li>Keys·are·usually·variables·not·known·at·compile-time.</li><li>There·can·be·any·number·of·elements·in·the·map.</li><li>Usually,·no·more·than·one·element·is·looked·up·or·updated·at·once.</li></ul><p>Given·that·usage·pattern,·the·difference·in·performance·between·using·the·map | 162 | <p>Using·a·map·as·a·dictionary·implies·the·following·usage·pattern:</p><ul><li>Keys·are·usually·variables·not·known·at·compile-time.</li><li>There·can·be·any·number·of·elements·in·the·map.</li><li>Usually,·no·more·than·one·element·is·looked·up·or·updated·at·once.</li></ul><p>Given·that·usage·pattern,·the·difference·in·performance·between·using·the·map |
| 163 | syntax·and·the·maps·module·is·usually·small.·Therefore,·which·one·to·use·is | 163 | syntax·and·the·maps·module·is·usually·small.·Therefore,·which·one·to·use·is |
| Offset 167, 18 lines modified | Offset 167, 18 lines modified | ||
| 167 | choice.</li></ul><h2·id="using-maps-as-sets"·class="section-heading"> | 167 | choice.</li></ul><h2·id="using-maps-as-sets"·class="section-heading"> |
| 168 | ··<a·href="#using-maps-as-sets"·class="hover-link"> | 168 | ··<a·href="#using-maps-as-sets"·class="hover-link"> |
| 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 170 | ··</a> | 170 | ··</a> |
| 171 | ··<span·class="text">Using·Maps·as·Sets</span> | 171 | ··<span·class="text">Using·Maps·as·Sets</span> |
| 172 | </h2> | 172 | </h2> |
| 173 | <p>Starting·in·OTP·24,·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>·module·has·an·option·to·represent·sets·as·maps. | 173 | <p>Starting·in·OTP·24,·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>·module·has·an·option·to·represent·sets·as·maps. |
| 174 | Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 174 | Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="1306554869-1">(</span><span·class="p"·data-group-id="1306554869-2">[</span><span·class="p"·data-group-id="1306554869-3">{</span><span·class="ss">version</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="1306554869-3">}</[·...·truncated·by·diffoscope;·len:·99,·SHA:·1d83f39052c51477c7f6f1a813edc90d26cf8e11b66ad50111772097f7da1cdf·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="p"·data-group-id=" | 175 | </span><span·class="p"·data-group-id="1306554869-4">#{</span><span·class="p"·data-group-id="1306554869-4">}</span><span·class="gp·unselectable"> |
| 176 | 2>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="6764193314-5">(</span><span·class="p"·data-group-id="6764193314-6">[</span><span·class="ss">x</span><span·class="p">,</span><span·class="ss">y</span><span·class="p">,</span><span·class="ss">z</span><span·class="p"·data-group-id="6764193314-6">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6764193314-7">[</span><span·class="p"·data-group-id="6764193314-8">{</span><span·class="ss">version</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6764193314-8">}</span><span·class="p"·data-group-id="6764193314-7">]</span><span·class="p"·data-group-id="6764193314-5">)</span><span·class="p">.</span><span·class="w"> | ||
| 177 | </span><span·class= | 176 | 2>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="1306554869-5">(</span><span·class="p"·data-group-id="1306554869-6">[</span><span·class="ss">x</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·557,·SHA:·21fc9adcf4e5988499f9ab9c6ac66f8fb430bb4d50e1ab26fd7c34c2be25f75c·...·] |
| 177 | </span><span·class="p"·data-group-id="1306554869-9">#{</span><span·class="ss">x</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="1306554869-10">[</span><span·class="p"·data-group-id="1306554869-10">]</span><span·class="p">,</span><span·class="ss">y</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="1306554869-11">[</span><span·class="p"·data-group-id="1306554869-11">]</span><span·class="p">,</span><span·class="ss">z</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="1306554869-12">[</span><span·class="p"·data-group-id="1306554869-12">]</span><span·class="p"·data-group-id="1306554869-9">}</span></code></pre><p><code·class="inline">sets</code>·backed·by·maps·is·generally·the·most·efficient·set·representation,·with·a | ||
| 178 | few·possible·exceptions:</p><ul><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/ordsets.html#intersection/2"><code·class="inline">ordsets:intersection/2</code></a>·can·be·more·efficient·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#intersection/2"><code·class="inline">sets:intersection/2</code></a>.·If | 178 | few·possible·exceptions:</p><ul><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/ordsets.html#intersection/2"><code·class="inline">ordsets:intersection/2</code></a>·can·be·more·efficient·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#intersection/2"><code·class="inline">sets:intersection/2</code></a>.·If |
| 179 | the·intersection·operation·is·frequently·used·and·operations·that·operate·on·a | 179 | the·intersection·operation·is·frequently·used·and·operations·that·operate·on·a |
| 180 | single·element·in·a·set·(such·as·<code·class="inline">is_element/2</code>)·are·avoided,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ordsets.html"><code·class="inline">ordsets</code></a>·can | 180 | single·element·in·a·set·(such·as·<code·class="inline">is_element/2</code>)·are·avoided,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ordsets.html"><code·class="inline">ordsets</code></a>·can |
| 181 | be·a·better·choice·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>.</li><li>If·the·intersection·operation·is·frequently·used·and·operations·that·operate | 181 | be·a·better·choice·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>.</li><li>If·the·intersection·operation·is·frequently·used·and·operations·that·operate |
| 182 | on·a·single·element·in·a·set·(such·as·<code·class="inline">is_element/2</code>)·must·also·be·efficient, | 182 | on·a·single·element·in·a·set·(such·as·<code·class="inline">is_element/2</code>)·must·also·be·efficient, |
| 183 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/gb_sets.html"><code·class="inline">gb_sets</code></a>·can·potentially·be·a·better·choice·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>.</li><li>If·the·elements·of·the·set·are·integers·in·a·fairly·compact·range,·the·set·can | 183 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/gb_sets.html"><code·class="inline">gb_sets</code></a>·can·potentially·be·a·better·choice·than·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html"><code·class="inline">sets</code></a>.</li><li>If·the·elements·of·the·set·are·integers·in·a·fairly·compact·range,·the·set·can |
| 184 | be·represented·as·an·integer·where·each·bit·represents·an·element·in·the·set. | 184 | be·represented·as·an·integer·where·each·bit·represents·an·element·in·the·set. |
| Offset 203, 18 lines modified | Offset 203, 18 lines modified | ||
| 203 | for·the·runtime·system).</p></li><li><p><strong>N</strong>·-·The·number·of·elements·in·the·map.</p></li><li><p><strong>Keys</strong>·-·A·tuple·with·keys·of·the·map:·<code·class="inline">{Key1,...,KeyN}</code>.·The·keys·are | 203 | for·the·runtime·system).</p></li><li><p><strong>N</strong>·-·The·number·of·elements·in·the·map.</p></li><li><p><strong>Keys</strong>·-·A·tuple·with·keys·of·the·map:·<code·class="inline">{Key1,...,KeyN}</code>.·The·keys·are |
| 204 | sorted.</p></li><li><p><strong>Value1</strong>·-·The·value·corresponding·to·the·first·key·in·the·key·tuple.</p></li><li><p><strong>ValueN</strong>·-·The·value·corresponding·to·the·last·key·in·the·key·tuple.</p></li></ul><p>As·an·example,·let·us·look·at·how·the·map·<code·class="inline">#{a·=>·foo,·z·=>·bar}</code>·is | 204 | sorted.</p></li><li><p><strong>Value1</strong>·-·The·value·corresponding·to·the·first·key·in·the·key·tuple.</p></li><li><p><strong>ValueN</strong>·-·The·value·corresponding·to·the·last·key·in·the·key·tuple.</p></li></ul><p>As·an·example,·let·us·look·at·how·the·map·<code·class="inline">#{a·=>·foo,·z·=>·bar}</code>·is |
| 205 | represented:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·left;">4</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>2</em></td><td·style="text-align:·center;"><code·class="inline">{a,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·left;"><code·class="inline">bar</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·z·=>·bar}</em></p><p>Let·us·update·the·map:·<code·class="inline">M#{q·=>·baz}</code>.·The·map·now·looks·like·this:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·center;">4</th><th·style="text-align:·center;">5</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>3</em></td><td·style="text-align:·center;"><code·class="inline">{a,q,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·center;"><code·class="inline">baz</code></td><td·style="text-align:·center;"><code·class="inline">bar</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·q·=>·baz,·z·=>·bar}</em></p><p>Finally,·change·the·value·of·one·element:·<code·class="inline">M#{z·:=·bird}</code>.·The·map·now·looks | 205 | represented:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·left;">4</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>2</em></td><td·style="text-align:·center;"><code·class="inline">{a,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·left;"><code·class="inline">bar</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·z·=>·bar}</em></p><p>Let·us·update·the·map:·<code·class="inline">M#{q·=>·baz}</code>.·The·map·now·looks·like·this:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·center;">4</th><th·style="text-align:·center;">5</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>3</em></td><td·style="text-align:·center;"><code·class="inline">{a,q,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·center;"><code·class="inline">baz</code></td><td·style="text-align:·center;"><code·class="inline">bar</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·q·=>·baz,·z·=>·bar}</em></p><p>Finally,·change·the·value·of·one·element:·<code·class="inline">M#{z·:=·bird}</code>.·The·map·now·looks |
| 206 | like·this:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·center;">4</th><th·style="text-align:·center;">5</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>3</em></td><td·style="text-align:·center;"><code·class="inline">{a,q,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·center;"><code·class="inline">baz</code></td><td·style="text-align:·center;"><code·class="inline">bird</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·q·=>·baz,·z·=>·bird}</em></p><p>When·the·value·for·an·existing·key·is·updated,·the·key·tuple·is·not·updated, | 206 | like·this:</p><table><thead><tr><th·style="text-align:·center;">0</th><th·style="text-align:·left;">1</th><th·style="text-align:·center;">2</th><th·style="text-align:·center;">3</th><th·style="text-align:·center;">4</th><th·style="text-align:·center;">5</th></tr></thead><tbody><tr><td·style="text-align:·center;"><strong>FLATMAP</strong></td><td·style="text-align:·left;"><em>3</em></td><td·style="text-align:·center;"><code·class="inline">{a,q,z}</code></td><td·style="text-align:·center;"><code·class="inline">foo</code></td><td·style="text-align:·center;"><code·class="inline">baz</code></td><td·style="text-align:·center;"><code·class="inline">bird</code></td></tr></tbody></table><p><em>Table:·#{a·=>·foo,·q·=>·baz,·z·=>·bird}</em></p><p>When·the·value·for·an·existing·key·is·updated,·the·key·tuple·is·not·updated, |
| 207 | allowing·the·key·tuple·to·be·shared·with·other·instances·of·the·map·that·have | 207 | allowing·the·key·tuple·to·be·shared·with·other·instances·of·the·map·that·have |
| 208 | the·same·keys.·In·fact,·the·key·tuple·can·be·shared·between·all·maps·with·the | 208 | the·same·keys.·In·fact,·the·key·tuple·can·be·shared·between·all·maps·with·the |
| 209 | same·keys·with·some·care.·To·arrange·that,·define·a·function·that·returns·a·map. | 209 | same·keys·with·some·care.·To·arrange·that,·define·a·function·that·returns·a·map. |
| 210 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">new</span><span·class="p"·data-group-id=" | 210 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">new</span><span·class="p"·data-group-id="5175048121-1">(</span><span·class="p"·data-group-id="5175048121-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="p"·data-group-id=" | 211 | ····</span><span·class="p"·data-group-id="5175048121-2">#{</span><span·class="ss">a</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·300,·SHA:·134f127e9334e1e9ee2f2aebf5833324a19541c0f2b37a8f410b1a2f2f9427a7·...·]-2">}</span><span·class="p">.</span></code></pre><p>Defined·like·this,·the·key·tuple·<code·class="inline">{a,b,c}</code>·will·be·a·global·literal.·To·ensure |
| 212 | that·the·key·tuple·is·shared·when·creating·an·instance·of·the·map,·always·call | 212 | that·the·key·tuple·is·shared·when·creating·an·instance·of·the·map,·always·call |
| 213 | <code·class="inline">new()</code>·and·modify·the·returned·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id="89 | 213 | <code·class="inline">new()</code>·and·modify·the·returned·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id="9890047872-1">(</span><span·class="n">SOME_MODULE</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="9890047872-2">(</span><span·class="p"·data-group-id="9890047872-2">)</span><span·class="p"·data-group-id="9890047872-1[·...·truncated·by·diffoscope;·len:·229,·SHA:·b722ae462dcc6bd62e7d411262789dfe62b0d9e5022540345899636ca912146c·...·]-3">}</span><span·class="p">.</span></code></pre><p>Using·the·map·syntax·with·small·maps·is·particularly·efficient.·As·long·as·the |
| 214 | keys·are·known·at·compile-time,·the·map·is·updated·in·one·go,·making·the·time·to | 214 | keys·are·known·at·compile-time,·the·map·is·updated·in·one·go,·making·the·time·to |
| 215 | update·a·map·essentially·constant·regardless·of·the·number·of·keys·updated.·The | 215 | update·a·map·essentially·constant·regardless·of·the·number·of·keys·updated.·The |
| 216 | same·goes·for·matching.·(When·the·keys·are·variables,·one·or·more·of·the·keys | 216 | same·goes·for·matching.·(When·the·keys·are·variables,·one·or·more·of·the·keys |
| 217 | could·be·identical,·so·the·operations·need·to·be·performed·sequentially·from | 217 | could·be·identical,·so·the·operations·need·to·be·performed·sequentially·from |
| 218 | left·to·right.)</p><p>The·memory·size·for·a·small·map·is·the·size·of·all·keys·and·values·plus·5·words. | 218 | left·to·right.)</p><p>The·memory·size·for·a·small·map·is·the·size·of·all·keys·and·values·plus·5·words. |
| 219 | See·<a·href="memory.html">Memory</a>·for·more·information·about·memory·sizes.</p><h3·id="how-large-maps-are-implemented"·class="section-heading"> | 219 | See·<a·href="memory.html">Memory</a>·for·more·information·about·memory·sizes.</p><h3·id="how-large-maps-are-implemented"·class="section-heading"> |
| 220 | ··<a·href="#how-large-maps-are-implemented"·class="hover-link"> | 220 | ··<a·href="#how-large-maps-are-implemented"·class="hover-link"> |
| Offset 241, 21 lines modified | Offset 241, 21 lines modified | ||
| 241 | ··<a·href="#using-the-map-syntax"·class="hover-link"> | 241 | ··<a·href="#using-the-map-syntax"·class="hover-link"> |
| 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 243 | ··</a> | 243 | ··</a> |
| 244 | ··<span·class="text">Using·the·Map·Syntax</span> | 244 | ··<span·class="text">Using·the·Map·Syntax</span> |
| 245 | </h2> | 245 | </h2> |
| 246 | <p>Using·the·map·syntax·is·usually·slightly·more·efficient·than·using·the | 246 | <p>Using·the·map·syntax·is·usually·slightly·more·efficient·than·using·the |
| 247 | corresponding·function·in·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html"><code·class="inline">maps</code></a>·module.</p><p>The·gain·in·efficiency·for·the·map·syntax·is·more·noticeable·for·the·following | 247 | corresponding·function·in·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html"><code·class="inline">maps</code></a>·module.</p><p>The·gain·in·efficiency·for·the·map·syntax·is·more·noticeable·for·the·following |
| 248 | operations·that·can·only·be·achieved·using·the·map·syntax:</p><ul><li>Matching·multiple·literal·keys</li><li>Updating·multiple·literal·keys</li><li>Adding·multiple·literal·keys·to·a·map</li></ul><p>For·example:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id=" | 248 | operations·that·can·only·be·achieved·using·the·map·syntax:</p><ul><li>Matching·multiple·literal·keys</li><li>Updating·multiple·literal·keys</li><li>Adding·multiple·literal·keys·to·a·map</li></ul><p>For·example:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id="3466255968-1">#{</span><span·class="ss">x</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">y</span><span·class="w">·</span><span·class="p[·...·truncated·by·diffoscope;·len:·820,·SHA:·c67dc10928fd46cf5804a1278a549459b6e3c16312282a9bacedac711d777646·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 249 | </span><span·class="n">Map3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 249 | </span><span·class="n">Map3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id="2463184389-2">(</span><span·class="ss">y</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Map2</span><span·class="p"·data-group-id="2463184389-2">)</span><span·class="p">,</span><span·class="w"> |
| 250 | </span><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 250 | </span><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id="2463184389-3">(</span><span·class="ss">z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Map3</span><span·class="p"·data-group-id="2463184389-3">)</span></code></pre><p>If·the·map·is·a·small·map,·the·first·example·runs·roughly·three·times·as·fast.</p><p>Note·that·for·variable·keys,·the·elements·are·updated·sequentially·from·left·to |
| 251 | right.·For·example,·given·the·following·update·with·variable·keys:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id=" | 251 | right.·For·example,·given·the·following·update·with·variable·keys:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id="4136373664-1">#{</span><span·class="n">Key1</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key2</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·276,·SHA:·4d1ae6e9f3af80d686ef9479e0dc7048db7525ea58c5c0f5bc6ceeaa44e80f30·...·]-1">}</span></code></pre><p>the·compiler·rewrites·it·like·this·to·ensure·that·the·updates·are·applied·from |
| 252 | left·to·right:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id="4 | 252 | left·to·right:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Map2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map1</span><span·class="p"·data-group-id="8492690216-1">#{</span><span·class="n">Key1</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="8492690216-1">}</span><span·class="p">,</span><span·class="w"> |
| 253 | </span><span·class="n">Map3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map2</span><span·class="p"·data-group-id="4 | 253 | </span><span·class="n">Map3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map2</span><span·class="p"·data-group-id="8492690216-2">#{</span><span·class="n">Key2</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="8492690216-2">}</span><span·class="p">,</span><span·class="w"> |
| 254 | </span><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map3</span><span·class="p"·data-group-id="4 | 254 | </span><span·class="n">Map</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Map3</span><span·class="p"·data-group-id="8492690216-3">#{</span><span·class="n">Key3</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Z</span><span·class="p"·data-group-id="8492690216-3">}</span></code></pre><p>If·a·key·is·known·to·exist·in·a·map,·using·the·<code·class="inline">:=</code>·operator·is·slightly·more |
| 255 | efficient·than·using·the·<code·class="inline">=></code>·operator·for·a·small·map.</p><h2·id="using-the-functions-in-the-maps-module"·class="section-heading"> | 255 | efficient·than·using·the·<code·class="inline">=></code>·operator·for·a·small·map.</p><h2·id="using-the-functions-in-the-maps-module"·class="section-heading"> |
| 256 | ··<a·href="#using-the-functions-in-the-maps-module"·class="hover-link"> | 256 | ··<a·href="#using-the-functions-in-the-maps-module"·class="hover-link"> |
| 257 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 257 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 258 | ··</a> | 258 | ··</a> |
| 259 | ··<span·class="text">Using·the·Functions·in·the·maps·Module</span> | 259 | ··<span·class="text">Using·the·Functions·in·the·maps·Module</span> |
| 260 | </h2> | 260 | </h2> |
| 261 | <p>Here·follows·some·notes·about·most·of·the·functions·in·the·<code·class="inline">maps</code>·module.·For | 261 | <p>Here·follows·some·notes·about·most·of·the·functions·in·the·<code·class="inline">maps</code>·module.·For |
| Offset 306, 23 lines modified | Offset 306, 23 lines modified | ||
| 306 | ··<a·href="#maps-get-3"·class="hover-link"> | 306 | ··<a·href="#maps-get-3"·class="hover-link"> |
| 307 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 307 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 308 | ··</a> | 308 | ··</a> |
| 309 | ··<span·class="text">maps:get/3</span> | 309 | ··<span·class="text">maps:get/3</span> |
| 310 | </h3> | 310 | </h3> |
| 311 | <p>As·an·optimization,·the·compiler·will·rewrite·a·call·to·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·to·Erlang | 311 | <p>As·an·optimization,·the·compiler·will·rewrite·a·call·to·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·to·Erlang |
| 312 | code·similar·to·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Map</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 312 | code·similar·to·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Map</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 313 | ·············</span><span·class="p"·data-group-id="49 | 313 | ·············</span><span·class="p"·data-group-id="0459188561-1">#{</span><span·class="n">Key</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Value</span><span·class="p"·data-group-id="0459188561-1">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Value</span><span·class="p">;</span><span·class="w"> |
| 314 | ·············</span><span·class="p"·data-group-id="49 | 314 | ·············</span><span·class="p"·data-group-id="0459188561-2">#{</span><span·class="p"·data-group-id="0459188561-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Default</span><span·class="w"> |
| 315 | ·········</span><span·class="k">end</span></code></pre><p>This·is·reasonably·efficient,·but·if·a·small·map·is·used·as·an·alternative·to | 315 | ·········</span><span·class="k">end</span></code></pre><p>This·is·reasonably·efficient,·but·if·a·small·map·is·used·as·an·alternative·to |
| 316 | using·a·record·it·is·often·better·not·to·rely·on·default·values·as·it·prevents | 316 | using·a·record·it·is·often·better·not·to·rely·on·default·values·as·it·prevents |
| 317 | sharing·of·keys,·which·may·in·the·end·use·more·memory·than·what·you·save·from | 317 | sharing·of·keys,·which·may·in·the·end·use·more·memory·than·what·you·save·from |
| 318 | not·storing·default·values·in·the·map.</p><p>If·default·values·are·nevertheless·required,·instead·of·calling·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a> | 318 | not·storing·default·values·in·the·map.</p><p>If·default·values·are·nevertheless·required,·instead·of·calling·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a> |
| 319 | multiple·times,·consider·putting·the·default·values·in·a·map·and·merging·that | 319 | multiple·times,·consider·putting·the·default·values·in·a·map·and·merging·that |
| 320 | map·with·the·other·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">DefaultMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 320 | map·with·the·other·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">DefaultMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8369457674-1">#{</span><span·class="n">Key1</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Value2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key2</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·419,·SHA:·eca5ffd9557302fe1135f26f977c7d5a929690dad61789d8390d14cd0f501bc8·...·]4-1">}</span><span·class="p">,</span><span·class="w"> |
| 321 | </span><span·class="n">MapWithDefaultsApplied</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">merge</span><span·class="p"·data-group-id=" | 321 | </span><span·class="n">MapWithDefaultsApplied</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">merge</span><span·class="p"·data-group-id="8369457674-2">(</span><span·class="n">DefaultMap</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OtherMap</span><span·class="p"·data-group-id="8369457674-2">)</span></code></pre><p>This·helps·share·keys·between·the·default·map·and·the·one·you·applied·defaults |
| 322 | to,·as·long·as·the·default·map·contains·<em>all</em>·the·keys·that·will·ever·be·used | 322 | to,·as·long·as·the·default·map·contains·<em>all</em>·the·keys·that·will·ever·be·used |
| 323 | and·not·just·the·ones·with·default·values.·Whether·this·is·faster·than·calling | 323 | and·not·just·the·ones·with·default·values.·Whether·this·is·faster·than·calling |
| 324 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·multiple·times·depends·on·the·size·of·the·map·and·the·number·of | 324 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·multiple·times·depends·on·the·size·of·the·map·and·the·number·of |
| 325 | default·values.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·OTP·26.0·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·was·implemented·by·calling·the·function·instead | 325 | default·values.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·OTP·26.0·<a·href="../../lib/stdlib-6.2.2.1/doc/html/maps.html#get/3"><code·class="inline">maps:get/3</code></a>·was·implemented·by·calling·the·function·instead |
| 326 | of·rewriting·it·as·an·Erlang·expression.·It·is·now·slightly·faster·but·can·no | 326 | of·rewriting·it·as·an·Erlang·expression.·It·is·now·slightly·faster·but·can·no |
| 327 | longer·be·traced.</p></section><h3·id="maps-intersect-2-maps-intersect_with-3"·class="section-heading"> | 327 | longer·be·traced.</p></section><h3·id="maps-intersect-2-maps-intersect_with-3"·class="section-heading"> |
| 328 | ··<a·href="#maps-intersect-2-maps-intersect_with-3"·class="hover-link"> | 328 | ··<a·href="#maps-intersect-2-maps-intersect_with-3"·class="hover-link"> |
| Offset 519, 15 lines modified | Offset 519, 15 lines modified | ||
| 519 | ······<p·class="built-using"> | 519 | ······<p·class="built-using"> |
| 520 | ········Built·using | 520 | ········Built·using |
| 521 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 521 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 522 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 522 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 523 | ······</p> | 523 | ······</p> |
| 524 | <p>Copyright·©·1996-202 | 524 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 525 | ····</footer> | 525 | ····</footer> |
| 526 | ··</div> | 526 | ··</div> |
| 527 | </main> | 527 | </main> |
| 528 | </div> | 528 | </div> |
| 529 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 529 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 530 | ··<script> | 530 | ··<script> |
| 531 | ··let·initialized·=·false; | 531 | ··let·initialized·=·false; |
| Offset 218, 15 lines modified | Offset 218, 15 lines modified | ||
| 218 | ······<p·class="built-using"> | 218 | ······<p·class="built-using"> |
| 219 | ········Built·using | 219 | ········Built·using |
| 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 222 | ······</p> | 222 | ······</p> |
| 223 | <p>Copyright·©·1996-202 | 223 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 224 | ····</footer> | 224 | ····</footer> |
| 225 | ··</div> | 225 | ··</div> |
| 226 | </main> | 226 | </main> |
| 227 | </div> | 227 | </div> |
| 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 229 | ··<script> | 229 | ··<script> |
| 230 | ··let·initialized·=·false; | 230 | ··let·initialized·=·false; |
| Offset 237, 15 lines modified | Offset 237, 15 lines modified | ||
| 237 | ······<p·class="built-using"> | 237 | ······<p·class="built-using"> |
| 238 | ········Built·using | 238 | ········Built·using |
| 239 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 239 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 240 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 240 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 241 | ······</p> | 241 | ······</p> |
| 242 | <p>Copyright·©·1996-202 | 242 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 243 | ····</footer> | 243 | ····</footer> |
| 244 | ··</div> | 244 | ··</div> |
| 245 | </main> | 245 | </main> |
| 246 | </div> | 246 | </div> |
| 247 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 247 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 248 | ··<script> | 248 | ··<script> |
| 249 | ··let·initialized·=·false; | 249 | ··let·initialized·=·false; |
| Offset 118, 20 lines modified | Offset 118, 20 lines modified | ||
| 118 | <h2·id="module-syntax"·class="section-heading"> | 118 | <h2·id="module-syntax"·class="section-heading"> |
| 119 | ··<a·href="#module-syntax"·class="hover-link"> | 119 | ··<a·href="#module-syntax"·class="hover-link"> |
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Module·Syntax</span> | 122 | ··<span·class="text">Module·Syntax</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>Erlang·code·is·divided·into·<em>modules</em>.·A·module·consists·of·a·sequence·of | 124 | <p>Erlang·code·is·divided·into·<em>modules</em>.·A·module·consists·of·a·sequence·of |
| 125 | attributes·and·function·declarations,·each·terminated·by·a·period·(<code·class="inline">.</code>).</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 125 | attributes·and·function·declarations,·each·terminated·by·a·period·(<code·class="inline">.</code>).</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8654445691-1">(</span><span·class="ss">m</span><span·class="p"·data-group-id="8654445691-1">)</span><span·class="p">.</span><span·class="w">··········</span><span·class="c1">%·module·attribute</span><span·class="w"> |
| 126 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 126 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8654445691-2">(</span><span·class="p"·data-group-id="8654445691-3">[</span><span·class="ss">fact</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8654445691-3">]</span><span·class="p"·data-group-id="8654445691-2">)</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%·module·attribute</span><span·class="w"> |
| 127 | </span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 127 | </span><span·class="nf">fact</span><span·class="p"·data-group-id="8654445691-4">(</span><span·class="n">N</span><span·class="p"·data-group-id="8654445691-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">N</span><span·class="o">></span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w">··</span><span·class="c1">%·beginning·of·function·declaration</span><span·class="w"> |
| 128 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 128 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="8654445691-5">(</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">1</span><span·class="p"·data-group-id="8654445691-5">)</span><span·class="p">;</span><span·class="w">···</span><span·class="c1">%··|</span><span·class="w"> |
| 129 | </span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 129 | </span><span·class="nf">fact</span><span·class="p"·data-group-id="8654445691-6">(</span><span·class="mi">0</span><span·class="p"·data-group-id="8654445691-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">···········</span><span·class="c1">%··|</span><span·class="w"> |
| 130 | ····</span><span·class="mi">1</span><span·class="p">.</span><span·class="w">···············</span><span·class="c1">%·end·of·function·declaration</span></code></pre><p>For·a·description·of·function·declarations,·see | 130 | ····</span><span·class="mi">1</span><span·class="p">.</span><span·class="w">···············</span><span·class="c1">%·end·of·function·declaration</span></code></pre><p>For·a·description·of·function·declarations,·see |
| 131 | <a·href="ref_man_functions.html">Function·Declaration·Syntax</a>.</p><h2·id="module-attributes"·class="section-heading"> | 131 | <a·href="ref_man_functions.html">Function·Declaration·Syntax</a>.</p><h2·id="module-attributes"·class="section-heading"> |
| 132 | ··<a·href="#module-attributes"·class="hover-link"> | 132 | ··<a·href="#module-attributes"·class="hover-link"> |
| 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 134 | ··</a> | 134 | ··</a> |
| 135 | ··<span·class="text">Module·Attributes</span> | 135 | ··<span·class="text">Module·Attributes</span> |
| 136 | </h2> | 136 | </h2> |
| Offset 176, 71 lines modified | Offset 176, 71 lines modified | ||
| 176 | meaning.</p></section></li></ul><h3·id="behaviour-module-attribute"·class="section-heading"> | 176 | meaning.</p></section></li></ul><h3·id="behaviour-module-attribute"·class="section-heading"> |
| 177 | ··<a·href="#behaviour-module-attribute"·class="hover-link"> | 177 | ··<a·href="#behaviour-module-attribute"·class="hover-link"> |
| 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 179 | ··</a> | 179 | ··</a> |
| 180 | ··<span·class="text">Behaviour·Module·Attribute</span> | 180 | ··<span·class="text">Behaviour·Module·Attribute</span> |
| 181 | </h3> | 181 | </h3> |
| 182 | <p>It·is·possible·to·specify·that·the·module·is·the·callback·module·for·a | 182 | <p>It·is·possible·to·specify·that·the·module·is·the·callback·module·for·a |
| 183 | <em>behaviour</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 183 | <em>behaviour</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="8631742797-1">(</span><span·class="n">Behaviour</span><span·class="p"·data-group-id="8631742797-1">)</span><span·class="p">.</span></code></pre><p>The·atom·<code·class="inline">Behaviour</code>·gives·the·name·of·the·behaviour,·which·can·be·a |
| 184 | user-defined·behaviour·or·one·of·the·following·OTP·standard·behaviours:</p><ul><li><code·class="inline">gen_server</code></li><li><code·class="inline">gen_statem</code></li><li><code·class="inline">gen_event</code></li><li><code·class="inline">supervisor</code></li></ul><p>The·spelling·<code·class="inline">behavior</code>·is·also·accepted.</p><p>The·callback·functions·of·the·module·can·be·specified·either·directly·by·the | 184 | user-defined·behaviour·or·one·of·the·following·OTP·standard·behaviours:</p><ul><li><code·class="inline">gen_server</code></li><li><code·class="inline">gen_statem</code></li><li><code·class="inline">gen_event</code></li><li><code·class="inline">supervisor</code></li></ul><p>The·spelling·<code·class="inline">behavior</code>·is·also·accepted.</p><p>The·callback·functions·of·the·module·can·be·specified·either·directly·by·the |
| 185 | exported·function·<code·class="inline">behaviour_info/1</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">behaviour_info</span><span·class="p"·data-group-id=" | 185 | exported·function·<code·class="inline">behaviour_info/1</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">behaviour_info</span><span·class="p"·data-group-id="3751167172-1">(</span><span·class="ss">callbacks</span><span·class="p"·data-group-id="3751167172-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Callbacks</span><span·class="p">.</span></code></pre><p>[·...·truncated·by·diffoscope;·len:·368,·SHA:·4d3cde2ca7883672ee9a852f860cdac7c17b61201d40d475385a67dd0cbbe729·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Result</span><span·class="p">.</span></code></pre><p>Here,·<code·class="inline">Arguments</code>·is·a·list·of·zero·or·more·arguments.·The·<code·class="inline">-callback</code>·attribute |
| 186 | is·to·be·preferred·since·the·extra·type·information·can·be·used·by·tools·to | 186 | is·to·be·preferred·since·the·extra·type·information·can·be·used·by·tools·to |
| 187 | produce·documentation·or·find·discrepancies.</p><p>Read·more·about·behaviours·and·callback·modules·in | 187 | produce·documentation·or·find·discrepancies.</p><p>Read·more·about·behaviours·and·callback·modules·in |
| 188 | <a·href="../../doc/system/spec_proc.html#behaviours">OTP·Design·Principles</a>.</p><h3·id="record-definitions"·class="section-heading"> | 188 | <a·href="../../doc/system/spec_proc.html#behaviours">OTP·Design·Principles</a>.</p><h3·id="record-definitions"·class="section-heading"> |
| 189 | ··<a·href="#record-definitions"·class="hover-link"> | 189 | ··<a·href="#record-definitions"·class="hover-link"> |
| 190 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 190 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 191 | ··</a> | 191 | ··</a> |
| 192 | ··<span·class="text">Record·Definitions</span> | 192 | ··<span·class="text">Record·Definitions</span> |
| 193 | </h3> | 193 | </h3> |
| 194 | <p>The·same·syntax·as·for·module·attributes·is·used·for·record·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 194 | <p>The·same·syntax·as·for·module·attributes·is·used·for·record·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="3778416480-1">(</span><span·class="n">Record</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fields</span><span·class="p"·data-group-id="3778416480-1">)</span><span·class="p">.</span></code></pre><p>Record·definitions·are·allowed·anywhere·in·a·module,·also·among·the·function |
| 195 | declarations.·Read·more·in·<a·href="ref_man_records.html">Records</a>.</p><h3·id="preprocessor"·class="section-heading"> | 195 | declarations.·Read·more·in·<a·href="ref_man_records.html">Records</a>.</p><h3·id="preprocessor"·class="section-heading"> |
| 196 | ··<a·href="#preprocessor"·class="hover-link"> | 196 | ··<a·href="#preprocessor"·class="hover-link"> |
| 197 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 197 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 198 | ··</a> | 198 | ··</a> |
| 199 | ··<span·class="text">Preprocessor</span> | 199 | ··<span·class="text">Preprocessor</span> |
| 200 | </h3> | 200 | </h3> |
| 201 | <p>The·same·syntax·as·for·module·attributes·is·used·by·the·preprocessor,·which | 201 | <p>The·same·syntax·as·for·module·attributes·is·used·by·the·preprocessor,·which |
| 202 | supports·file·inclusion,·macros,·and·conditional·compilation:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 202 | supports·file·inclusion,·macros,·and·conditional·compilation:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="8342347722-1">(</span><span·class="s">"SomeFile.hrl"</span><span·class="p"·data-group-id="8342347722-1">)</span><span·class="p">.</span><span·class="w"> |
| 203 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 203 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8342347722-2">(</span><span·class="n">Macro</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Replacement</span><span·class="p"·data-group-id="8342347722-2">)</span><span·class="p">.</span></code></pre><p>Read·more·in·<a·href="macros.html">Preprocessor</a>.</p><h3·id="setting-file-and-line"·class="section-heading"> |
| 204 | ··<a·href="#setting-file-and-line"·class="hover-link"> | 204 | ··<a·href="#setting-file-and-line"·class="hover-link"> |
| 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 206 | ··</a> | 206 | ··</a> |
| 207 | ··<span·class="text">Setting·File·and·Line</span> | 207 | ··<span·class="text">Setting·File·and·Line</span> |
| 208 | </h3> | 208 | </h3> |
| 209 | <p>The·same·syntax·as·for·module·attributes·is·used·for·changing·the·pre-defined | 209 | <p>The·same·syntax·as·for·module·attributes·is·used·for·changing·the·pre-defined |
| 210 | macros·<code·class="inline">?FILE</code>·and·<code·class="inline">?LINE</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">file</span><span·class="p"·data-group-id=" | 210 | macros·<code·class="inline">?FILE</code>·and·<code·class="inline">?LINE</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">file</span><span·class="p"·data-group-id="6594539483-1">(</span><span·class="n">File</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Line</span><span·class="p"·data-group-id="6594539483-1">)</span><span·class="p">.</span></code></pre><p>This·attribute·is·used·by·tools,·such·as·Yecc,·to·inform·the·compiler·that·the |
| 211 | source·program·is·generated·by·another·tool.·It·also·indicates·the | 211 | source·program·is·generated·by·another·tool.·It·also·indicates·the |
| 212 | correspondence·of·source·files·to·lines·of·the·original·user-written·file,·from | 212 | correspondence·of·source·files·to·lines·of·the·original·user-written·file,·from |
| 213 | which·the·source·program·is·produced.</p><h3·id="types-and-function-specifications"·class="section-heading"> | 213 | which·the·source·program·is·produced.</p><h3·id="types-and-function-specifications"·class="section-heading"> |
| 214 | ··<a·href="#types-and-function-specifications"·class="hover-link"> | 214 | ··<a·href="#types-and-function-specifications"·class="hover-link"> |
| 215 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 215 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 216 | ··</a> | 216 | ··</a> |
| 217 | ··<span·class="text">Types·and·function·specifications</span> | 217 | ··<span·class="text">Types·and·function·specifications</span> |
| 218 | </h3> | 218 | </h3> |
| 219 | <p>A·similar·syntax·as·for·module·attributes·is·used·for·specifying·types·and | 219 | <p>A·similar·syntax·as·for·module·attributes·is·used·for·specifying·types·and |
| 220 | function·specifications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">my_type</span><span·class="p"·data-group-id="8199115561-1">(</span><span·class="p"·data-group-id="8199115561-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="8199115561-2">(</span><span·class="p"·data-group-id="8199115561-2">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="8199115561-3">(</span><span·class="p"·data-group-id="8199115561-3">)</span><span·class="p">.</span><span·class="w"> | ||
| 221 | 220 | function·specifications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">my_type</span><span·class="p"·data-group-id="9510443388-1">(</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·512,·SHA:·6c8d263a0e93155f09d5ef275b5c8470a6c7eb82a691e917a30a0860731c65d3·...·] | |
| 221 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">my_function</span><span·class="p"·data-group-id="9510443388-4">(</span><span·class="nf">integer</span><span·class="p"·data-group-id="9510443388-5">(</span><span·class="p"·data-group-id="9510443388-5">)</span><span·class="p"·data-group-id="9510443388-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9510443388-6">(</span><span·class="p"·data-group-id="9510443388-6">)</span><span·class="p">.</span></code></pre><p>Read·more·in·<a·href="typespec.html">Types·and·Function·specifications</a>.</p><p>The·description·is·based·on | ||
| 222 | <a·href="http://www.erlang.org/eeps/eep-0008.html">EEP8·-·Types·and·function·specifications</a>, | 222 | <a·href="http://www.erlang.org/eeps/eep-0008.html">EEP8·-·Types·and·function·specifications</a>, |
| 223 | which·is·not·to·be·further·updated.</p><h3·id="documentation-attributes"·class="section-heading"> | 223 | which·is·not·to·be·further·updated.</p><h3·id="documentation-attributes"·class="section-heading"> |
| 224 | ··<a·href="#documentation-attributes"·class="hover-link"> | 224 | ··<a·href="#documentation-attributes"·class="hover-link"> |
| 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 226 | ··</a> | 226 | ··</a> |
| 227 | ··<span·class="text">Documentation·attributes</span> | 227 | ··<span·class="text">Documentation·attributes</span> |
| 228 | </h3> | 228 | </h3> |
| 229 | <p>The·module·attribute·<code·class="inline">-doc(Documentation)</code>·is·used·to·provide·user·documentation | 229 | <p>The·module·attribute·<code·class="inline">-doc(Documentation)</code>·is·used·to·provide·user·documentation |
| 230 | for·a·function/type/callback:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id=" | 230 | for·a·function/type/callback:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id="7845765747-1">(</span><span·class="s">"Example·documentation"</span><span·class="p"·data-group-id="7845765747-1">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="nf">example</span><span·class="p"·data-group-id=" | 231 | </span><span·class="nf">example</span><span·class="p"·data-group-id="7845765747-2">(</span><span·class="p"·data-group-id="7845765747-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>The·attribute·should·be·placed·just·before·the·entity·it·documents.The |
| 232 | parenthesis·are·optional·around·<code·class="inline">Documentation</code>.·The·allowed·values·for | 232 | parenthesis·are·optional·around·<code·class="inline">Documentation</code>.·The·allowed·values·for |
| 233 | <code·class="inline">Documentation</code>·are:</p><ul><li><p><strong><a·href="data_types.html#string">literal·string</a>·or | 233 | <code·class="inline">Documentation</code>·are:</p><ul><li><p><strong><a·href="data_types.html#string">literal·string</a>·or |
| 234 | <a·href="expressions.html#unicode-segments">utf-8·encoded·binary·string</a></strong>·-·The·string | 234 | <a·href="expressions.html#unicode-segments">utf-8·encoded·binary·string</a></strong>·-·The·string |
| 235 | documenting·the·entity.·Any·literal·string·is·allowed,·so·both | 235 | documenting·the·entity.·Any·literal·string·is·allowed,·so·both |
| 236 | <a·href="data_types.html#tqstring">triple·quoted·strings</a>·and | 236 | <a·href="data_types.html#tqstring">triple·quoted·strings</a>·and |
| 237 | <a·href="data_types.html#sigil">sigils</a>·that·translate·to·literal·strings·can·be·used. | 237 | <a·href="data_types.html#sigil">sigils</a>·that·translate·to·literal·strings·can·be·used. |
| 238 | The·following·examples·are·equivalent:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id=" | 238 | The·following·examples·are·equivalent:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id="1640215108-1">(</span><span·class="s">"Example·\"docs\""</span><span·class="p"·data-group-id="1640215108-1">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id=" | 239 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="p"·data-group-id="1640215108-2">(</span><span·class="p"·data-group-id="1640215108-3"><<</span><span·class="s">"Example·\"docs\""</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="1640215108-3">>></span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·932d36d97420d28561c76b489b9d98a67db7d755fb4ad862dce2938c2bfab6a7·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">~S/Example·"docs"/</span><span·class="p">.</span><span·class="w"> | 240 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">~S/Example·"docs"/</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""</span><span·class="s">" | 241 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">""</span><span·class="s">" |
| 242 | ···Example·"</span><span·class="ss">docs</span><span·class="s">" | 242 | ···Example·"</span><span·class="ss">docs</span><span·class="s">" |
| 243 | ···"</span><span·class="s">""</span><span·class="w"> | 243 | ···"</span><span·class="s">""</span><span·class="w"> |
| 244 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">~B|Example·"docs"|</span><span·class="p">.</span></code></pre><p>For·clarity·it·is·recommended·to·use·either·normal·<code·class="inline">"strings"</code>·or·triple | 244 | </span><span·class="p">-</span><span·class="na">doc</span><span·class="w">·</span><span·class="s">~B|Example·"docs"|</span><span·class="p">.</span></code></pre><p>For·clarity·it·is·recommended·to·use·either·normal·<code·class="inline">"strings"</code>·or·triple |
| 245 | quoted·strings·for·documentation·attributes.</p></li><li><p><strong><code·class="inline">{file,</code>·<a·href="../../lib/kernel-10.2.7.1/doc/html/file.html#t:name/0"><code·class="inline">file:name/0</code></a>·<code·class="inline">}</code></strong>·-·Read·the·contents·of·filename·and·use | 245 | quoted·strings·for·documentation·attributes.</p></li><li><p><strong><code·class="inline">{file,</code>·<a·href="../../lib/kernel-10.2.7.1/doc/html/file.html#t:name/0"><code·class="inline">file:name/0</code></a>·<code·class="inline">}</code></strong>·-·Read·the·contents·of·filename·and·use |
| 246 | that·as·the·documentation·string.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Set·the·current·entity·as·hidden,·that·is,·it·should·not·be | 246 | that·as·the·documentation·string.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Set·the·current·entity·as·hidden,·that·is,·it·should·not·be |
| Offset 253, 15 lines modified | Offset 253, 15 lines modified | ||
| 253 | ··<a·href="#the-feature-directive"·class="hover-link"> | 253 | ··<a·href="#the-feature-directive"·class="hover-link"> |
| 254 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 254 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 255 | ··</a> | 255 | ··</a> |
| 256 | ··<span·class="text">The·feature·directive</span> | 256 | ··<span·class="text">The·feature·directive</span> |
| 257 | </h2> | 257 | </h2> |
| 258 | <p>While·not·a·module·attribute,·but·rather·a·directive·(since·it·might·affect | 258 | <p>While·not·a·module·attribute,·but·rather·a·directive·(since·it·might·affect |
| 259 | syntax),·there·is·the·<code·class="inline">-feature(..)</code>·directive·used·for·enabling·and·disabling | 259 | syntax),·there·is·the·<code·class="inline">-feature(..)</code>·directive·used·for·enabling·and·disabling |
| 260 | <a·href="../../doc/system/features.html#features">features</a>.</p><p>The·syntax·is·similar·to·that·of·an·attribute,·but·has·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">feature</span><span·class="p"·data-group-id=" | 260 | <a·href="../../doc/system/features.html#features">features</a>.</p><p>The·syntax·is·similar·to·that·of·an·attribute,·but·has·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">feature</span><span·class="p"·data-group-id="2959644245-1">(</span><span·class="n">FeatureName</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">enable</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">disable</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·1f658de911b6735b8a110d572102c1d1ea74571687b9cd001d7dbdab435f8a1e·...·]-1">)</span><span·class="p">.</span></code></pre><p>Note·that·the·<a·href="macros.html#feature-directive">feature·directive</a>·can·only·appear |
| 261 | in·a·prefix·of·the·module.</p><h2·id="comments"·class="section-heading"> | 261 | in·a·prefix·of·the·module.</p><h2·id="comments"·class="section-heading"> |
| 262 | ··<a·href="#comments"·class="hover-link"> | 262 | ··<a·href="#comments"·class="hover-link"> |
| 263 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 263 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 264 | ··</a> | 264 | ··</a> |
| 265 | ··<span·class="text">Comments</span> | 265 | ··<span·class="text">Comments</span> |
| 266 | </h2> | 266 | </h2> |
| 267 | <p>Comments·can·be·placed·anywhere·in·a·module·except·within·strings·and | 267 | <p>Comments·can·be·placed·anywhere·in·a·module·except·within·strings·and |
| Offset 347, 15 lines modified | Offset 347, 15 lines modified | ||
| 347 | ······<p·class="built-using"> | 347 | ······<p·class="built-using"> |
| 348 | ········Built·using | 348 | ········Built·using |
| 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 351 | ······</p> | 351 | ······</p> |
| 352 | <p>Copyright·©·1996-202 | 352 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 353 | ····</footer> | 353 | ····</footer> |
| 354 | ··</div> | 354 | ··</div> |
| 355 | </main> | 355 | </main> |
| 356 | </div> | 356 | </div> |
| 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 358 | ··<script> | 358 | ··<script> |
| 359 | ··let·initialized·=·false; | 359 | ··let·initialized·=·false; |
| Offset 133, 26 lines modified | Offset 133, 26 lines modified | ||
| 133 | ··<span·class="text">Erlang·Program</span> | 133 | ··<span·class="text">Erlang·Program</span> |
| 134 | </h2> | 134 | </h2> |
| 135 | <p>Even·if·all·functions·of·a·module·are·NIFs,·an·Erlang·module·is·still·needed·for | 135 | <p>Even·if·all·functions·of·a·module·are·NIFs,·an·Erlang·module·is·still·needed·for |
| 136 | two·reasons:</p><ul><li>The·NIF·library·must·be·explicitly·loaded·by·Erlang·code·in·the·same·module.</li><li>All·NIFs·of·a·module·must·have·an·Erlang·implementation·as·well.</li></ul><p>Normally·these·are·minimal·stub·implementations·that·throw·an·exception.·But | 136 | two·reasons:</p><ul><li>The·NIF·library·must·be·explicitly·loaded·by·Erlang·code·in·the·same·module.</li><li>All·NIFs·of·a·module·must·have·an·Erlang·implementation·as·well.</li></ul><p>Normally·these·are·minimal·stub·implementations·that·throw·an·exception.·But |
| 137 | they·can·also·be·used·as·fallback·implementations·for·functions·that·do·not·have | 137 | they·can·also·be·used·as·fallback·implementations·for·functions·that·do·not·have |
| 138 | native·implementations·on·some·architectures.</p><p>NIF·libraries·are·loaded·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#load_nif/2"><code·class="inline">erlang:load_nif/2</code></a>,·with·the·name·of·the | 138 | native·implementations·on·some·architectures.</p><p>NIF·libraries·are·loaded·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#load_nif/2"><code·class="inline">erlang:load_nif/2</code></a>,·with·the·name·of·the |
| 139 | shared·library·as·argument.·The·second·argument·can·be·any·term·that·will·be | 139 | shared·library·as·argument.·The·second·argument·can·be·any·term·that·will·be |
| 140 | passed·on·to·the·library·and·used·for·initialization:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 140 | passed·on·to·the·library·and·used·for·initialization:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7529333665-1">(</span><span·class="ss">complex6</span><span·class="p"·data-group-id="7529333665-1">)</span><span·class="p">.</span><span·class="w"> |
| 141 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 141 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7529333665-2">(</span><span·class="p"·data-group-id="7529333665-3">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·716d9f9cf01dcb6722aa07313361f222eb1f1f1119159026ffe99c887717f7c5·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 142 | </span><span·class="p">-</span><span·class="na">nifs</span><span·class="p"·data-group-id=" | 142 | </span><span·class="p">-</span><span·class="na">nifs</span><span·class="p"·data-group-id="7529333665-4">(</span><span·class="p"·data-group-id="7529333665-5">[</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·e377ad3d2f6a153fc29d6a26ec2d8458506140a8a3106762119ea322b766c0f7·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id=" | 143 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id="7529333665-6">(</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="7529333665-6">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 144 | </span><span·class="nf">init</span><span·class="p"·data-group-id="7529333665-7">(</span><span·class="p"·data-group-id="7529333665-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 145 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id=" | 145 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id="7529333665-8">(</span><span·class="s">"./complex6_nif"</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="7529333665-8">)</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 146 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="7529333665-9">(</span><span·class="p">_</span><span·class="n">X</span><span·class="p"·data-group-id="7529333665-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 147 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id=" | 147 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id="7529333665-10">(</span><span·class="ss">nif_library_not_loaded</span><span·class="p"·data-group-id="7529333665-10">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 148 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="7529333665-11">(</span><span·class="p">_</span><span·class="n">Y</span><span·class="p"·data-group-id="7529333665-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id=" | 149 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id="7529333665-12">(</span><span·class="ss">nif_library_not_loaded</span><span·class="p"·data-group-id="7529333665-12">)</span><span·class="p">.</span></code></pre><p>Here,·the·directive·<code·class="inline">on_load</code>·is·used·to·get·function·<code·class="inline">init</code>·to·be·automatically |
| 150 | called·when·the·module·is·loaded.·If·<code·class="inline">init</code>·returns·anything·other·than·<code·class="inline">ok</code>, | 150 | called·when·the·module·is·loaded.·If·<code·class="inline">init</code>·returns·anything·other·than·<code·class="inline">ok</code>, |
| 151 | such·when·the·loading·of·the·NIF·library·fails·in·this·example,·the·module·is | 151 | such·when·the·loading·of·the·NIF·library·fails·in·this·example,·the·module·is |
| 152 | unloaded·and·calls·to·functions·within·it,·fail.</p><p>Loading·the·NIF·library·overrides·the·stub·implementations·and·cause·calls·to | 152 | unloaded·and·calls·to·functions·within·it,·fail.</p><p>Loading·the·NIF·library·overrides·the·stub·implementations·and·cause·calls·to |
| 153 | <code·class="inline">foo</code>·and·<code·class="inline">bar</code>·to·be·dispatched·to·the·NIF·implementations·instead.</p><h2·id="nif-library-code"·class="section-heading"> | 153 | <code·class="inline">foo</code>·and·<code·class="inline">bar</code>·to·be·dispatched·to·the·NIF·implementations·instead.</p><h2·id="nif-library-code"·class="section-heading"> |
| 154 | ··<a·href="#nif-library-code"·class="hover-link"> | 154 | ··<a·href="#nif-library-code"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| Offset 209, 23 lines modified | Offset 209, 23 lines modified | ||
| 209 | ··<a·href="#running-the-example"·class="hover-link"> | 209 | ··<a·href="#running-the-example"·class="hover-link"> |
| 210 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 210 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 211 | ··</a> | 211 | ··</a> |
| 212 | ··<span·class="text">Running·the·Example</span> | 212 | ··<span·class="text">Running·the·Example</span> |
| 213 | </h2> | 213 | </h2> |
| 214 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">unix>·gcc·-o·complex6_nif.so·-fpic·-shared·complex.c·complex6_nif.c | 214 | <p><em>Step·1.</em>·Compile·the·C·code:</p><pre><code·class="text">unix>·gcc·-o·complex6_nif.so·-fpic·-shared·complex.c·complex6_nif.c |
| 215 | windows>·cl·-LD·-MD·-Fe·complex6_nif.dll·complex.c·complex6_nif.c</code></pre><p><em>Step·2:</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="ss">erl</span><span·class="w"> | 215 | windows>·cl·-LD·-MD·-Fe·complex6_nif.dll·complex.c·complex6_nif.c</code></pre><p><em>Step·2:</em>·Start·Erlang·and·compile·the·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="ss">erl</span><span·class="w"> |
| 216 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R13B04</span><span·class="w">·</span><span·class="p"·data-group-id=" | 216 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R13B04</span><span·class="w">·</span><span·class="p"·data-group-id="0967856768-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.7</span><span·class="p">.</span><span·class="mi">5</span><span·class="p"·data-group-id="0967856768-1">)</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·1130,·SHA:·b27d3a818a94276e7edd55a1010d9d9d0494ca129ffe1b555a87e87fbf267dac·...·]-6">]</span><span·class="w"> |
| 217 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.5</span><span·class="w">··</span><span·class="p"·data-group-id=" | 217 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.5</span><span·class="w">··</span><span·class="p"·data-group-id="0967856768-7">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="0967856768-7">)</span><span·class="gp·unselectable"> |
| 218 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 218 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="0967856768-8">(</span><span·class="ss">complex6</span><span·class="p"·data-group-id="0967856768-8">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="p"·data-group-id=" | 219 | </span><span·class="p"·data-group-id="0967856768-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">complex6</span><span·class="p"·data-group-id="0967856768-9">}</span></code></pre><p><em>Step·3:</em>·Run·the·example:</p><pre><code·class="makeup·erlang"·translate="no[·...·truncated·by·diffoscope;·len:·247,·SHA:·b6ad7a7f37b7284946f04d191ceb5ca372320a39345621f020542c9299c18c49·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 220 | </span><span·class="mi">4</span><span·class="gp·unselectable"> | 220 | </span><span·class="mi">4</span><span·class="gp·unselectable"> |
| 221 | 4>·</span><span·class="nc">complex6</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="76 | 221 | 4>·</span><span·class="nc">complex6</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="4761255899-2">(</span><span·class="mi">5</span><span·class="p"·data-group-id="4761255899-2">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="mi">10</span><span·class="gp·unselectable"> | 222 | </span><span·class="mi">10</span><span·class="gp·unselectable"> |
| 223 | 5>·</span><span·class="nc">complex6</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id="76 | 223 | 5>·</span><span·class="nc">complex6</span><span·class="p">:</span><span·class="nf">foo</span><span·class="p"·data-group-id="4761255899-3">(</span><span·class="s">"not·an·integer"</span><span·class="p"·data-group-id="4761255899-3">)</span><span·class="p">.</span><span·class="w"> |
| 224 | </span><span·class="gt">**·exception·error:·bad·argument | 224 | </span><span·class="gt">**·exception·error:·bad·argument |
| 225 | ·····in·function··complex6:foo/1 | 225 | ·····in·function··complex6:foo/1 |
| 226 | ········called·as·comlpex6:foo("not·an·integer")</span></code></pre> | 226 | ········called·as·comlpex6:foo("not·an·integer")</span></code></pre> |
| 227 | </div> | 227 | </div> |
| 228 | <div·class="bottom-actions"·id="bottom-actions"> | 228 | <div·class="bottom-actions"·id="bottom-actions"> |
| 229 | ··<div·class="bottom-actions-item"> | 229 | ··<div·class="bottom-actions-item"> |
| Offset 271, 15 lines modified | Offset 271, 15 lines modified | ||
| 271 | ······<p·class="built-using"> | 271 | ······<p·class="built-using"> |
| 272 | ········Built·using | 272 | ········Built·using |
| 273 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 273 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 274 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 274 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 275 | ······</p> | 275 | ······</p> |
| 276 | <p>Copyright·©·1996-202 | 276 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 277 | ····</footer> | 277 | ····</footer> |
| 278 | ··</div> | 278 | ··</div> |
| 279 | </main> | 279 | </main> |
| 280 | </div> | 280 | </div> |
| 281 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 281 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 282 | ··<script> | 282 | ··<script> |
| 283 | ··let·initialized·=·false; | 283 | ··let·initialized·=·false; |
| Offset 122, 24 lines modified | Offset 122, 24 lines modified | ||
| 122 | ··<span·class="text">Opaque·Type·Aliases</span> | 122 | ··<span·class="text">Opaque·Type·Aliases</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>The·main·use·case·for·opacity·in·Erlang·is·to·hide·the·implementation·of·a·data | 124 | <p>The·main·use·case·for·opacity·in·Erlang·is·to·hide·the·implementation·of·a·data |
| 125 | type,·enabling·evolving·the·API·while·minimizing·the·risk·of·breaking·consumers. | 125 | type,·enabling·evolving·the·API·while·minimizing·the·risk·of·breaking·consumers. |
| 126 | The·runtime·does·not·check·opacity.·Dialyzer·provides·some·opacity-checking,·but | 126 | The·runtime·does·not·check·opacity.·Dialyzer·provides·some·opacity-checking,·but |
| 127 | the·rest·is·up·to·convention.</p><p>This·document·explains·what·Erlang·opacity·is·(and·the·trade-offs·involved)·via | 127 | the·rest·is·up·to·convention.</p><p>This·document·explains·what·Erlang·opacity·is·(and·the·trade-offs·involved)·via |
| 128 | the·example·of·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#t:set/0"><code·class="inline">sets:set()</code></a>·data·type.·This·type·<em>was</em> | 128 | the·example·of·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#t:set/0"><code·class="inline">sets:set()</code></a>·data·type.·This·type·<em>was</em> |
| 129 | defined·in·the·<code·class="inline">sets</code>·module·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">set</span><span·class="p"·data-group-id=" | 129 | defined·in·the·<code·class="inline">sets</code>·module·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">set</span><span·class="p"·data-group-id="4802576156-1">(</span><span·class="n">Element</span><span·class="p"·data-group-id="4802576156-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">set</span><spa[·...·truncated·by·diffoscope;·len:·378,·SHA:·e18a97d7256d4872f2fef820083a115726aad0d59ba12ee1363eb7729de72ebd·...·]-2">}</span><span·class="p">.</span></code></pre><p>OTP·24·changed·the·definition·to·the·following·in |
| 130 | <a·href="https://github.com/erlang/otp/commit/e66941e8d7c47b973dff94c0308ea85a6be1958e">this·commit</a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">set</span><span·class="p"·data-group-id=" | 130 | <a·href="https://github.com/erlang/otp/commit/e66941e8d7c47b973dff94c0308ea85a6be1958e">this·commit</a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">set</span><span·class="p"·data-group-id="5378095892-1">(</span><span·class="n">Element</span><span·class="p"·data-group-id="5378095892-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">set</span><spa[·...·truncated·by·diffoscope;·len:·715,·SHA:·b59525fda75ac22859ace49ae5982a85fb46dade5ca49ac3707f8ddc21796cef·...·]-4">}</span><span·class="p">.</span></code></pre><p>And·this·change·was·safer·and·more·backwards-compatible·than·if·the·type·had |
| 131 | been·defined·with·<code·class="inline">-type</code>·instead·of·<code·class="inline">-opaque</code>.·Here·is·why:·when·a·module | 131 | been·defined·with·<code·class="inline">-type</code>·instead·of·<code·class="inline">-opaque</code>.·Here·is·why:·when·a·module |
| 132 | defines·an·<code·class="inline">-opaque</code>,·the·contract·is·that·only·the·defining·module·should·rely | 132 | defines·an·<code·class="inline">-opaque</code>,·the·contract·is·that·only·the·defining·module·should·rely |
| 133 | on·the·definition·of·the·type:·no·other·modules·should·rely·on·the·definition.</p><p>This·means·that·code·that·pattern-matched·on·<code·class="inline">set</code>·as·a·record/tuple·technically | 133 | on·the·definition·of·the·type:·no·other·modules·should·rely·on·the·definition.</p><p>This·means·that·code·that·pattern-matched·on·<code·class="inline">set</code>·as·a·record/tuple·technically |
| 134 | broke·the·contract,·and·opted·in·to·being·potentially·broken·when·the·definition | 134 | broke·the·contract,·and·opted·in·to·being·potentially·broken·when·the·definition |
| 135 | of·<code·class="inline">set()</code>·changed.·Before·OTP·24,·this·code·printed·<code·class="inline">ok</code>.·In·OTP·24·it·may | 135 | of·<code·class="inline">set()</code>·changed.·Before·OTP·24,·this·code·printed·<code·class="inline">ok</code>.·In·OTP·24·it·may |
| 136 | error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 136 | error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="2376887699-1">(</span><span·class="p"·data-group-id="2376887699-1">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 137 | ····</span><span·class="n">Set</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_tuple</span><span·class="p"·data-group-id=" | 137 | ····</span><span·class="n">Set</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_tuple</span><span·class="p"·data-group-id="2376887699-2">(</span><span·class="n">Set</span><span·class="p"·data-group-id="2376887699-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 138 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 138 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2376887699-3">(</span><span·class="s">"ok"</span><span·class="p"·data-group-id="2376887699-3">)</span><span·class="w"> |
| 139 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p><strong>When·working·with·an·opaque·defined·in·another·module,·here·are·some | 139 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p><strong>When·working·with·an·opaque·defined·in·another·module,·here·are·some |
| 140 | recommendations:</strong></p><ul><li>Don't·examine·the·underlying·type·using·pattern-matching,·guards,·or·functions | 140 | recommendations:</strong></p><ul><li>Don't·examine·the·underlying·type·using·pattern-matching,·guards,·or·functions |
| 141 | that·reveal·the·type,·such·as·<a·href="../../erts-15.2.7/doc/html/erlang.html#tuple_size/1"><code·class="inline">tuple_size/1</code></a>·.</li><li>Instead,·use·functions·provided·by·the·module·for·working·with·the·type.·For | 141 | that·reveal·the·type,·such·as·<a·href="../../erts-15.2.7/doc/html/erlang.html#tuple_size/1"><code·class="inline">tuple_size/1</code></a>·.</li><li>Instead,·use·functions·provided·by·the·module·for·working·with·the·type.·For |
| 142 | example,·<code·class="inline">sets</code>·module·provides·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#new/0"><code·class="inline">sets:new/0</code></a>,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#add_element/2"><code·class="inline">sets:add_element/2</code></a>, | 142 | example,·<code·class="inline">sets</code>·module·provides·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#new/0"><code·class="inline">sets:new/0</code></a>,·<a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#add_element/2"><code·class="inline">sets:add_element/2</code></a>, |
| 143 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#is_element/2"><code·class="inline">sets:is_element/2</code></a>,·and·so·on.</li><li><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#t:set/1"><code·class="inline">sets:set(a)</code></a>·is·a·subtype·of·<code·class="inline">sets:set(a·|·b)</code>·and·not·the | 143 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#is_element/2"><code·class="inline">sets:is_element/2</code></a>,·and·so·on.</li><li><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/sets.html#t:set/1"><code·class="inline">sets:set(a)</code></a>·is·a·subtype·of·<code·class="inline">sets:set(a·|·b)</code>·and·not·the |
| 144 | other·way·around.·Generally,·you·can·rely·on·the·property·that·<code·class="inline">the_opaque(T)</code> | 144 | other·way·around.·Generally,·you·can·rely·on·the·property·that·<code·class="inline">the_opaque(T)</code> |
| 145 | is·a·subtype·of·<code·class="inline">the_opaque(U)</code>·when·T·is·a·subtype·of·U.</p></li></ul><p><strong>When·defining·your·own·opaques,·here·are·some·recommendations:</strong></p><ul><li>Since·consumers·are·expected·to·not·rely·on·the·definition·of·the·opaque·type, | 145 | is·a·subtype·of·<code·class="inline">the_opaque(U)</code>·when·T·is·a·subtype·of·U.</p></li></ul><p><strong>When·defining·your·own·opaques,·here·are·some·recommendations:</strong></p><ul><li>Since·consumers·are·expected·to·not·rely·on·the·definition·of·the·opaque·type, |
| Offset 205, 15 lines modified | Offset 205, 15 lines modified | ||
| 205 | ······<p·class="built-using"> | 205 | ······<p·class="built-using"> |
| 206 | ········Built·using | 206 | ········Built·using |
| 207 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 207 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 208 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 208 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 209 | ······</p> | 209 | ······</p> |
| 210 | <p>Copyright·©·1996-202 | 210 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 211 | ····</footer> | 211 | ····</footer> |
| 212 | ··</div> | 212 | ··</div> |
| 213 | </main> | 213 | </main> |
| 214 | </div> | 214 | </div> |
| 215 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 215 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 216 | ··<script> | 216 | ··<script> |
| 217 | ··let·initialized·=·false; | 217 | ··let·initialized·=·false; |
| Offset 201, 15 lines modified | Offset 201, 15 lines modified | ||
| 201 | ··</a> | 201 | ··</a> |
| 202 | ··<span·class="text">Sanity·check</span> | 202 | ··<span·class="text">Sanity·check</span> |
| 203 | </h2> | 203 | </h2> |
| 204 | <p>The·application·dependencies·can·be·checked·using·the·Erlang·shell. | 204 | <p>The·application·dependencies·can·be·checked·using·the·Erlang·shell. |
| 205 | Application·dependencies·are·verified·among·installed·applications·by | 205 | Application·dependencies·are·verified·among·installed·applications·by |
| 206 | <code·class="inline">otp_patch_apply</code>,·but·these·are·not·necessarily·those·actually·loaded. | 206 | <code·class="inline">otp_patch_apply</code>,·but·these·are·not·necessarily·those·actually·loaded. |
| 207 | By·calling·<code·class="inline">system_information:sanity_check()</code>·one·can·validate | 207 | By·calling·<code·class="inline">system_information:sanity_check()</code>·one·can·validate |
| 208 | dependencies·among·applications·actually·loaded.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">system_information</span><span·class="p">:</span><span·class="nf">sanity_check</span><span·class="p"·data-group-id=" | 208 | dependencies·among·applications·actually·loaded.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">system_information</span><span·class="p">:</span><span·class="nf">sanity_check</span><span·class="p"·data-group-id="3800453839-1">(</span><span·class="p"·data-group-id="3800453839-1">)</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="ss">ok</span></code></pre><p>Please·take·a·look·at·the·reference·of·<a·href="../../lib/runtime_tools-2.1.1/doc/html/system_information.html#sanity_check/0"·title="">sanity_check()</a>·for·more | 209 | </span><span·class="ss">ok</span></code></pre><p>Please·take·a·look·at·the·reference·of·<a·href="../../lib/runtime_tools-2.1.1/doc/html/system_information.html#sanity_check/0"·title="">sanity_check()</a>·for·more |
| 210 | information.</p> | 210 | information.</p> |
| 211 | </div> | 211 | </div> |
| 212 | <div·class="bottom-actions"·id="bottom-actions"> | 212 | <div·class="bottom-actions"·id="bottom-actions"> |
| 213 | ··<div·class="bottom-actions-item"> | 213 | ··<div·class="bottom-actions-item"> |
| Offset 254, 15 lines modified | Offset 254, 15 lines modified | ||
| 254 | ······<p·class="built-using"> | 254 | ······<p·class="built-using"> |
| 255 | ········Built·using | 255 | ········Built·using |
| 256 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 256 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 257 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 257 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 258 | ······</p> | 258 | ······</p> |
| 259 | <p>Copyright·©·1996-202 | 259 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 260 | ····</footer> | 260 | ····</footer> |
| 261 | ··</div> | 261 | ··</div> |
| 262 | </main> | 262 | </main> |
| 263 | </div> | 263 | </div> |
| 264 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 264 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 265 | ··<script> | 265 | ··<script> |
| 266 | ··let·initialized·=·false; | 266 | ··let·initialized·=·false; |
| Offset 307, 15 lines modified | Offset 307, 15 lines modified | ||
| 307 | ······<p·class="built-using"> | 307 | ······<p·class="built-using"> |
| 308 | ········Built·using | 308 | ········Built·using |
| 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 311 | ······</p> | 311 | ······</p> |
| 312 | <p>Copyright·©·1996-202 | 312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 313 | ····</footer> | 313 | ····</footer> |
| 314 | ··</div> | 314 | ··</div> |
| 315 | </main> | 315 | </main> |
| 316 | </div> | 316 | </div> |
| 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 318 | ··<script> | 318 | ··<script> |
| 319 | ··let·initialized·=·false; | 319 | ··let·initialized·=·false; |
| Offset 128, 18 lines modified | Offset 128, 18 lines modified | ||
| 128 | succeeds,·any·unbound·variables·in·the·pattern·become·bound.·If·the·matching | 128 | succeeds,·any·unbound·variables·in·the·pattern·become·bound.·If·the·matching |
| 129 | fails,·an·exception·is·raised.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">X</span><span·class="p">.</span><span·class="w"> | 129 | fails,·an·exception·is·raised.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">X</span><span·class="p">.</span><span·class="w"> |
| 130 | </span><span·class="gt">**·1:1:·variable·'X'·is·unbound·**</span><span·class="gp·unselectable"> | 130 | </span><span·class="gt">**·1:1:·variable·'X'·is·unbound·**</span><span·class="gp·unselectable"> |
| 131 | 2>·</span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">.</span><span·class="w"> | 131 | 2>·</span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">.</span><span·class="w"> |
| 132 | </span><span·class="mi">2</span><span·class="gp·unselectable"> | 132 | </span><span·class="mi">2</span><span·class="gp·unselectable"> |
| 133 | 3>·</span><span·class="n">X</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 133 | 3>·</span><span·class="n">X</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="mi">3</span><span·class="gp·unselectable"> | 134 | </span><span·class="mi">3</span><span·class="gp·unselectable"> |
| 135 | 4>·</span><span·class="p"·data-group-id=" | 135 | 4>·</span><span·class="p"·data-group-id="6805007974-1">{</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="6805007974-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·179,·SHA:·4d580acafe8ab6397ab8fe86746fcaf1d7a19ba60ab150529d21ea5927201718·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·{1,2}</span><span·class="gp·unselectable"> | 136 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·{1,2}</span><span·class="gp·unselectable"> |
| 137 | 5>·</span><span·class="p"·data-group-id=" | 137 | 5>·</span><span·class="p"·data-group-id="6805007974-3">{</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="6805007974-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·179,·SHA:·01467daaaeb8efa424d0c7824db48a4c9715d0531e10866d6ff76b4e5dbfeb67·...·]-4">}</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="p"·data-group-id=" | 138 | </span><span·class="p"·data-group-id="6805007974-5">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="6805007974-5">}</span><span·class="gp·unselectable"> |
| 139 | 6>·</span><span·class="n">Y</span><span·class="p">.</span><span·class="w"> | 139 | 6>·</span><span·class="n">Y</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="mi">3</span></code></pre> | 140 | </span><span·class="mi">3</span></code></pre> |
| 141 | </div> | 141 | </div> |
| 142 | <div·class="bottom-actions"·id="bottom-actions"> | 142 | <div·class="bottom-actions"·id="bottom-actions"> |
| 143 | ··<div·class="bottom-actions-item"> | 143 | ··<div·class="bottom-actions-item"> |
| Offset 184, 15 lines modified | Offset 184, 15 lines modified | ||
| 184 | ······<p·class="built-using"> | 184 | ······<p·class="built-using"> |
| 185 | ········Built·using | 185 | ········Built·using |
| 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 188 | ······</p> | 188 | ······</p> |
| 189 | <p>Copyright·©·1996-202 | 189 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 190 | ····</footer> | 190 | ····</footer> |
| 191 | ··</div> | 191 | ··</div> |
| 192 | </main> | 192 | </main> |
| 193 | </div> | 193 | </div> |
| 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 195 | ··<script> | 195 | ··<script> |
| 196 | ··let·initialized·=·false; | 196 | ··let·initialized·=·false; |
| Offset 225, 15 lines modified | Offset 225, 15 lines modified | ||
| 225 | ······<p·class="built-using"> | 225 | ······<p·class="built-using"> |
| 226 | ········Built·using | 226 | ········Built·using |
| 227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 229 | ······</p> | 229 | ······</p> |
| 230 | <p>Copyright·©·1996-202 | 230 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 231 | ····</footer> | 231 | ····</footer> |
| 232 | ··</div> | 232 | ··</div> |
| 233 | </main> | 233 | </main> |
| 234 | </div> | 234 | </div> |
| 235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 236 | ··<script> | 236 | ··<script> |
| 237 | ··let·initialized·=·false; | 237 | ··let·initialized·=·false; |
| Offset 311, 15 lines modified | Offset 311, 15 lines modified | ||
| 311 | ······<p·class="built-using"> | 311 | ······<p·class="built-using"> |
| 312 | ········Built·using | 312 | ········Built·using |
| 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 315 | ······</p> | 315 | ······</p> |
| 316 | <p>Copyright·©·1996-202 | 316 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 317 | ····</footer> | 317 | ····</footer> |
| 318 | ··</div> | 318 | ··</div> |
| 319 | </main> | 319 | </main> |
| 320 | </div> | 320 | </div> |
| 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 322 | ··<script> | 322 | ··<script> |
| 323 | ··let·initialized·=·false; | 323 | ··let·initialized·=·false; |
| Offset 122, 105 lines modified | Offset 122, 105 lines modified | ||
| 122 | ··<span·class="text">Records·and·Tuples</span> | 122 | ··<span·class="text">Records·and·Tuples</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>The·main·advantage·of·using·records·rather·than·tuples·is·that·fields·in·a | 124 | <p>The·main·advantage·of·using·records·rather·than·tuples·is·that·fields·in·a |
| 125 | record·are·accessed·by·name,·whereas·fields·in·a·tuple·are·accessed·by·position. | 125 | record·are·accessed·by·name,·whereas·fields·in·a·tuple·are·accessed·by·position. |
| 126 | To·illustrate·these·differences,·suppose·that·you·want·to·represent·a·person | 126 | To·illustrate·these·differences,·suppose·that·you·want·to·represent·a·person |
| 127 | with·the·tuple·<code·class="inline">{Name,·Address,·Phone}</code>.</p><p>To·write·functions·that·manipulate·this·data,·remember·the·following:</p><ul><li>The·<code·class="inline">Name</code>·field·is·the·first·element·of·the·tuple.</li><li>The·<code·class="inline">Address</code>·field·is·the·second·element.</li><li>The·<code·class="inline">Phone</code>·field·is·the·third·element.</li></ul><p>For·example,·to·extract·data·from·a·variable·<code·class="inline">P</code>·that·contains·such·a·tuple,·you | 127 | with·the·tuple·<code·class="inline">{Name,·Address,·Phone}</code>.</p><p>To·write·functions·that·manipulate·this·data,·remember·the·following:</p><ul><li>The·<code·class="inline">Name</code>·field·is·the·first·element·of·the·tuple.</li><li>The·<code·class="inline">Address</code>·field·is·the·second·element.</li><li>The·<code·class="inline">Phone</code>·field·is·the·third·element.</li></ul><p>For·example,·to·extract·data·from·a·variable·<code·class="inline">P</code>·that·contains·such·a·tuple,·you |
| 128 | can·write·the·following·code·and·then·use·pattern·matching·to·extract·the | 128 | can·write·the·following·code·and·then·use·pattern·matching·to·extract·the |
| 129 | relevant·fields:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 129 | relevant·fields:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="1924576769-1">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">P</span><span·class="p"·data-group-id="1924576769-1">)</span><span·class="p">,</span><span·class="w"> |
| 130 | </span><span·class="n">Address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 130 | </span><span·class="n">Address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="1924576769-2">(</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">P</span><span·class="p"·data-group-id="1924576769-2">)</span><span·class="p">,</span><span·class="w"> |
| 131 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Such·code·is·difficult·to·read·and·understand,·and·errors·occur·if·the·numbering | 131 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Such·code·is·difficult·to·read·and·understand,·and·errors·occur·if·the·numbering |
| 132 | of·the·elements·in·the·tuple·is·wrong.·If·the·data·representation·of·the·fields | 132 | of·the·elements·in·the·tuple·is·wrong.·If·the·data·representation·of·the·fields |
| 133 | is·changed,·by·re-ordering,·adding,·or·removing·fields,·all·references·to·the | 133 | is·changed,·by·re-ordering,·adding,·or·removing·fields,·all·references·to·the |
| 134 | person·tuple·must·be·checked·and·possibly·modified.</p><p>Records·allow·references·to·the·fields·by·name,·instead·of·by·position.·In·the | 134 | person·tuple·must·be·checked·and·possibly·modified.</p><p>Records·allow·references·to·the·fields·by·name,·instead·of·by·position.·In·the |
| 135 | following·example,·a·record·instead·of·a·tuple·is·used·to·store·the·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="2 | 135 | following·example,·a·record·instead·of·a·tuple·is·used·to·store·the·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="2076705479-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2076705479-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</span[·...·truncated·by·diffoscope;·len:·173,·SHA:·8cca0cec3422b5715c7cd2d7245cbbf08e337e7db5deedf4022fd59be677dc43·...·]9-1">)</span><span·class="p">.</span></code></pre><p>This·enables·references·to·the·fields·of·the·record·by·name.·For·example,·if·<code·class="inline">P</code> |
| 136 | is·a·variable·whose·value·is·a·<code·class="inline">person</code>·record,·the·following·code·access·the | 136 | is·a·variable·whose·value·is·a·<code·class="inline">person</code>·record,·the·following·code·access·the |
| 137 | name·and·address·fields·of·the·records:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> | 137 | name·and·address·fields·of·the·records:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> |
| 138 | </span><span·class="n">Address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">address</span><span·class="p">,</span><span·class="w"> | 138 | </span><span·class="n">Address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">address</span><span·class="p">,</span><span·class="w"> |
| 139 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Internally,·records·are·represented·using·tagged·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 139 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Internally,·records·are·represented·using·tagged·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2213629702-1">{</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Phone</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·66,·SHA:·e50394777fd04d35d6c34a6bf842d6c112ab1cadc5883e6f3fc6f90503deeb60·...·]-1">}</span></code></pre><h2·id="defining-a-record"·class="section-heading"> |
| 140 | ··<a·href="#defining-a-record"·class="hover-link"> | 140 | ··<a·href="#defining-a-record"·class="hover-link"> |
| 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 142 | ··</a> | 142 | ··</a> |
| 143 | ··<span·class="text">Defining·a·Record</span> | 143 | ··<span·class="text">Defining·a·Record</span> |
| 144 | </h2> | 144 | </h2> |
| 145 | <p>This·following·definition·of·a·<code·class="inline">person</code>·is·used·in·several·examples·in·this | 145 | <p>This·following·definition·of·a·<code·class="inline">person</code>·is·used·in·several·examples·in·this |
| 146 | section.·Three·fields·are·included,·<code·class="inline">name</code>,·<code·class="inline">phone</code>,·and·<code·class="inline">address</code>.·The·default | 146 | section.·Three·fields·are·included,·<code·class="inline">name</code>,·<code·class="inline">phone</code>,·and·<code·class="inline">address</code>.·The·default |
| 147 | values·for·<code·class="inline">name</code>·and·<code·class="inline">phone</code>·is·""·and·[],·respectively.·The·default·value·for | 147 | values·for·<code·class="inline">name</code>·and·<code·class="inline">phone</code>·is·""·and·[],·respectively.·The·default·value·for |
| 148 | <code·class="inline">address</code>·is·the·atom·<code·class="inline">undefined</code>,·since·no·default·value·is·supplied·for·this | 148 | <code·class="inline">address</code>·is·the·atom·<code·class="inline">undefined</code>,·since·no·default·value·is·supplied·for·this |
| 149 | field:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 149 | field:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="1614640181-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1614640181-2">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·460,·SHA:·8bbc9626adc9c94b83a565b3b35a95e5eb4e8f8ee850e315d3eb0ab773949d71·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·record·must·be·defined·in·the·shell·to·enable·use·of·the·record·syntax·in |
| 150 | the·examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="6 | 150 | the·examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="6110865720-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6110865720-2">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·458,·SHA:·b3de0269470a7fcc1340e9510ada3d6a5c8a3fd96767f45b6bcab35f4963d3ac·...·]0-1">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="ss">person</span></code></pre><p>This·is·because·record·definitions·are·only·available·at·compile·time,·not·at | 151 | </span><span·class="ss">person</span></code></pre><p>This·is·because·record·definitions·are·only·available·at·compile·time,·not·at |
| 152 | runtime.·For·details·on·records·in·the·shell,·see·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/shell.html"><code·class="inline">shell</code></a>·manual·page·in | 152 | runtime.·For·details·on·records·in·the·shell,·see·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/shell.html"><code·class="inline">shell</code></a>·manual·page·in |
| 153 | STDLIB.</p><h2·id="creating-a-record"·class="section-heading"> | 153 | STDLIB.</p><h2·id="creating-a-record"·class="section-heading"> |
| 154 | ··<a·href="#creating-a-record"·class="hover-link"> | 154 | ··<a·href="#creating-a-record"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Creating·a·Record</span> | 157 | ··<span·class="text">Creating·a·Record</span> |
| 158 | </h2> | 158 | </h2> |
| 159 | <p>A·new·<code·class="inline">person</code>·record·is·created·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 159 | <p>A·new·<code·class="inline">person</code>·record·is·created·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="2832954033-1">{</span><span·class="ss">phone</span><span·class="o">=</span><span·class="p"·data-group-id="2832954033-2">[</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">2</span><span[·...·truncated·by·diffoscope;·len:·475,·SHA:·ebf484b8de2daf3c3622c269e62331302c02a8ce944e8829fa9e47f698d22f87·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 160 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="2832954033-3">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Robert"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">[·...·truncated·by·diffoscope;·len:·707,·SHA:·de47b4d66217498bab158a1c20cbc498d1a50d773fdb65c9dd13bc901cc22e40·...·]-3">}</span></code></pre><p>As·the·<code·class="inline">address</code>·field·was·omitted,·its·default·value·is·used.</p><p>From·Erlang·5.1/OTP·R8B,·a·value·to·all·fields·in·a·record·can·be·set·with·the |
| 161 | special·field·<code·class="inline">_</code>.·<code·class="inline">_</code>·means·"all·fields·not·explicitly·specified".</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 161 | special·field·<code·class="inline">_</code>.·<code·class="inline">_</code>·means·"all·fields·not·explicitly·specified".</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="8587982771-1">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Jakob"</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·125,·SHA:·aa169d5e6184f29d320f4dedebf50c8a14b30e6a4a39a3f6b2cd80c6c5c5a4e0·...·]1-1">}</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 162 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="8587982771-2">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Jakob"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">=[·...·truncated·by·diffoscope;·len:·268,·SHA:·af08d68a1838901ddd668f397f222f57094dc8a5d34e007b6df85dda16a90c6a·...·]1-2">}</span></code></pre><p>It·is·primarily·intended·to·be·used·in·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#match/2"><code·class="inline">ets:match/2</code></a>·and |
| 163 | <a·href="../../lib/mnesia-4.23.5/doc/html/mnesia.html#match_object/3"><code·class="inline">mnesia:match_object/3</code></a>,·to·set·record·fields·to·the·atom·<code·class="inline">'_'</code>.·(This·is·a | 163 | <a·href="../../lib/mnesia-4.23.5/doc/html/mnesia.html#match_object/3"><code·class="inline">mnesia:match_object/3</code></a>,·to·set·record·fields·to·the·atom·<code·class="inline">'_'</code>.·(This·is·a |
| 164 | wildcard·in·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#match/2"><code·class="inline">ets:match/2</code></a>.)</p><h2·id="accessing-a-record-field"·class="section-heading"> | 164 | wildcard·in·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#match/2"><code·class="inline">ets:match/2</code></a>.)</p><h2·id="accessing-a-record-field"·class="section-heading"> |
| 165 | ··<a·href="#accessing-a-record-field"·class="hover-link"> | 165 | ··<a·href="#accessing-a-record-field"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Accessing·a·Record·Field</span> | 168 | ··<span·class="text">Accessing·a·Record·Field</span> |
| 169 | </h2> | 169 | </h2> |
| 170 | <p>The·following·example·shows·how·to·access·a·record·field:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="7 | 170 | <p>The·following·example·shows·how·to·access·a·record·field:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="7571663998-1">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·567,·SHA:·ac84ee9f33fc850467f04d05d5b8c2298ab09f485d0befd6977789ae8928346d·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="7 | 171 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="7571663998-3">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">=</s[·...·truncated·by·diffoscope;·len:·703,·SHA:·6addd17ad81c165293535e9967f2016c4f031a3eeb171ab94ab762c27b4a372a·...·]-3">}</span><span·class="gp·unselectable"> |
| 172 | >·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">.</span><span·class="w"> | 172 | >·</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="s">"Joe"</span></code></pre><h2·id="updating-a-record"·class="section-heading"> | 173 | </span><span·class="s">"Joe"</span></code></pre><h2·id="updating-a-record"·class="section-heading"> |
| 174 | ··<a·href="#updating-a-record"·class="hover-link"> | 174 | ··<a·href="#updating-a-record"·class="hover-link"> |
| 175 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 175 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 176 | ··</a> | 176 | ··</a> |
| 177 | ··<span·class="text">Updating·a·Record</span> | 177 | ··<span·class="text">Updating·a·Record</span> |
| 178 | </h2> | 178 | </h2> |
| 179 | <p>The·following·example·shows·how·to·update·a·record:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="56 | 179 | <p>The·following·example·shows·how·to·update·a·record:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="5634682000-1">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</span><span·class="o">=</span><span·class="p"·data-group-id="5634682000-2">[·...·truncated·by·diffoscope;·len:·371,·SHA:·cbe2226af57fa368941d03995fde62f1069dc02959d726c99e9c5d960d2b2158·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="56 | 180 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="5634682000-3">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">=</sp[·...·truncated·by·diffoscope;·len:·467,·SHA:·5953321a1966f841a7315d8db8735c24de7a25dd4a54cf16e627cd7e4ac846f3·...·]-3">}</span><span·class="gp·unselectable"> |
| 181 | >·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P1</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="56 | 181 | >·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P1</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="5634682000-5">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Robert"</span><span·class="p"·data-group-id="5634682000-5">}</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="56 | 182 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="5634682000-6">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Robert"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">=<[·...·truncated·by·diffoscope;·len:·470,·SHA:·b1a6b05ff8ec4cf31b3484de936ddb0d11cf1b716b5e88d1d38368390eba2d81·...·]-6">}</span></code></pre><h2·id="type-testing"·class="section-heading"> |
| 183 | ··<a·href="#type-testing"·class="hover-link"> | 183 | ··<a·href="#type-testing"·class="hover-link"> |
| 184 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 184 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 185 | ··</a> | 185 | ··</a> |
| 186 | ··<span·class="text">Type·Testing</span> | 186 | ··<span·class="text">Type·Testing</span> |
| 187 | </h2> | 187 | </h2> |
| 188 | <p>The·following·example·shows·that·the·guard·succeeds·if·<code·class="inline">P</code>·is·record·of·type | 188 | <p>The·following·example·shows·that·the·guard·succeeds·if·<code·class="inline">P</code>·is·record·of·type |
| 189 | <code·class="inline">person</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 189 | <code·class="inline">person</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="4061192672-1">(</span><span·class="n">P</span><span·class="p"·data-group-id="4061192672-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="4061192672-2">(</s[·...·truncated·by·diffoscope;·len:·147,·SHA:·a6b2268c98aa0b8f42a8f0bf774e9ff7f3aafd4ce3528b2022e8aa4f30c3c5f3·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">a_person</span><span·class="p">;</span><span·class="w"> |
| 190 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 190 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="4061192672-3">(</span><span·class="p">_</span><span·class="p"·data-group-id="4061192672-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">not_a_person</span><span·class="p">.</span></code></pre><h2·id="pattern-matching"·class="section-heading"> |
| 191 | ··<a·href="#pattern-matching"·class="hover-link"> | 191 | ··<a·href="#pattern-matching"·class="hover-link"> |
| 192 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 192 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 193 | ··</a> | 193 | ··</a> |
| 194 | ··<span·class="text">Pattern·Matching</span> | 194 | ··<span·class="text">Pattern·Matching</span> |
| 195 | </h2> | 195 | </h2> |
| 196 | <p>Matching·can·be·used·in·combination·with·records,·as·shown·in·the·following | 196 | <p>Matching·can·be·used·in·combination·with·records,·as·shown·in·the·following |
| 197 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 197 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">P3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="1084522022-1">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</span><span·class="o">=</span><span·class="p"·data-group-id="1084522022-2[·...·truncated·by·diffoscope;·len:·373,·SHA:·756ea5928db90697eb86db6ed7d703baa2d1ad8951d849fc8e25bab3c9afec40·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 198 | </span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="1084522022-3">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Joe"</span><span·class="p">,</span><span·class="ss">phone</span><span·class="w">·</span><span·class="o">=</[·...·truncated·by·diffoscope;·len:·469,·SHA:·1fca68cfde52c6d00702f3d408e3e0f15cf817e3278c6660eb9a8f9b41885ef7·...·]-3">}</span><span·class="gp·unselectable"> |
| 199 | >·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 199 | >·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="1084522022-5">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="p"·data-group-id="1084522022-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="s">"Joe"</span></code></pre><p>The·following·function·takes·a·list·of·<code·class="inline">person</code>·records·and·searches·for·the | 200 | </span><span·class="s">"Joe"</span></code></pre><p>The·following·function·takes·a·list·of·<code·class="inline">person</code>·records·and·searches·for·the |
| 201 | phone·number·of·a·person·with·a·particular·name:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">find_phone</span><span·class="p"·data-group-id=" | 201 | phone·number·of·a·person·with·a·particular·name:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">find_phone</span><span·class="p"·data-group-id="2794946905-1">(</span><span·class="p"·data-group-id="2794946905-2">[</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="2794946905-3">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="n">Name</[·...·truncated·by·diffoscope;·len:·452,·SHA:·d2a374f96a72b63bcc8851fe08e72272f43fb378bc79a802920b2e028f571ced·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ····</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="p"·data-group-id="2794946905-4">{</span><span·class="ss">found</span><span·class="p">,</span><span·class="w">··</span><span·class="n">Phone</span><span·class="p"·data-group-id="2794946905-4">}</span><span·class="p">;</span><span·class="w"> |
| 203 | </span><span·class="nf">find_phone</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">find_phone</span><span·class="p"·data-group-id="2794946905-5">(</span><span·class="p"·data-group-id="2794946905-6">[</span><span·class="p">_</span><span·class="p">|</span><span·class="w">·</span><span·class="n">T</span><span·class="p"·data-group-id="2794946905-6">]</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·84,·SHA:·0ffa505da68e96c392b490a83628bb82f3d21f451f56125851b9df5f9760e08c·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="nf">find_phone</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="nf">find_phone</span><span·class="p"·data-group-id="2794946905-7">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p"·data-group-id="2794946905-7">)</span><span·class="p">;</span><span·class="w"> |
| 205 | </span><span·class="nf">find_phone</span><span·class="p"·data-group-id=" | 205 | </span><span·class="nf">find_phone</span><span·class="p"·data-group-id="2794946905-8">(</span><span·class="p"·data-group-id="2794946905-9">[</span><span·class="p"·data-group-id="2794946905-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p"·data-group-id="2794946905-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ····</span><span·class="ss">not_found</span><span·class="p">.</span></code></pre><p>The·fields·referred·to·in·the·pattern·can·be·given·in·any·order.</p><h2·id="nested-records"·class="section-heading"> | 206 | ····</span><span·class="ss">not_found</span><span·class="p">.</span></code></pre><p>The·fields·referred·to·in·the·pattern·can·be·given·in·any·order.</p><h2·id="nested-records"·class="section-heading"> |
| 207 | ··<a·href="#nested-records"·class="hover-link"> | 207 | ··<a·href="#nested-records"·class="hover-link"> |
| 208 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 208 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 209 | ··</a> | 209 | ··</a> |
| 210 | ··<span·class="text">Nested·Records</span> | 210 | ··<span·class="text">Nested·Records</span> |
| 211 | </h2> | 211 | </h2> |
| 212 | <p>The·value·of·a·field·in·a·record·can·be·an·instance·of·a·record.·Retrieval·of | 212 | <p>The·value·of·a·field·in·a·record·can·be·an·instance·of·a·record.·Retrieval·of |
| 213 | nested·data·can·be·done·stepwise,·or·in·a·single·step,·as·shown·in·the·following | 213 | nested·data·can·be·done·stepwise,·or·in·a·single·step,·as·shown·in·the·following |
| 214 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 214 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="3878527275-1">(</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3878527275-2">{</span><span·class="ss">first</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·322,·SHA:·ce4139f5341bbd79b0702416a57f06a7642fa36f5df1f72c1fda1490e8b58b80·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 215 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 215 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="3878527275-3">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3878527275-4">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·326,·SHA:·f495fda0cdf7e01a677393ffaf97792c3fbd9c449c9b42190a632e77cd32999d·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 216 | </span><span·class="nf">demo</span><span·class="p"·data-group-id=" | 216 | </span><span·class="nf">demo</span><span·class="p"·data-group-id="3878527275-6">(</span><span·class="p"·data-group-id="3878527275-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ··</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 217 | ··</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="3878527275-7">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">name</span><span·class="p"·data-group-id="3878527275-8">{</span><span·class="ss">first</span><span·class="o">=</span>[·...·truncated·by·diffoscope;·len:·381,·SHA:·4f03c7a852a686c5df01b408e8d9d838de4b14756ec2450e8b4cf30d2cc1ed93·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 218 | ··</span><span·class="n">First</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 218 | ··</span><span·class="n">First</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3878527275-9">(</span><span·class="n">P</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p"·data-group-id="3878527275-9">)</span><span·class="o">#</span><span·class="ss">name</span><span·class="p">.</span><span·class="ss">first</span><span·class="p">.</span></code></pre><p>Here,·<code·class="inline">demo()</code>·evaluates·to·<code·class="inline">"Robert"</code>.</p><h2·id="a-longer-example"·class="section-heading"> |
| 219 | ··<a·href="#a-longer-example"·class="hover-link"> | 219 | ··<a·href="#a-longer-example"·class="hover-link"> |
| 220 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 220 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 221 | ··</a> | 221 | ··</a> |
| 222 | ··<span·class="text">A·Longer·Example</span> | 222 | ··<span·class="text">A·Longer·Example</span> |
| 223 | </h2> | 223 | </h2> |
| 224 | <p>Comments·are·embedded·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·File:·person.hrl</span><span·class="w"> | 224 | <p>Comments·are·embedded·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·File:·person.hrl</span><span·class="w"> |
| Offset 230, 48 lines modified | Offset 230, 48 lines modified | ||
| 230 | </span><span·class="c1">%%····name:··A·string·(default·is·undefined).</span><span·class="w"> | 230 | </span><span·class="c1">%%····name:··A·string·(default·is·undefined).</span><span·class="w"> |
| 231 | </span><span·class="c1">%%····age:···An·integer·(default·is·undefined).</span><span·class="w"> | 231 | </span><span·class="c1">%%····age:···An·integer·(default·is·undefined).</span><span·class="w"> |
| 232 | </span><span·class="c1">%%····phone:·A·list·of·integers·(default·is·[]).</span><span·class="w"> | 232 | </span><span·class="c1">%%····phone:·A·list·of·integers·(default·is·[]).</span><span·class="w"> |
| 233 | </span><span·class="c1">%%····dict:··A·dictionary·containing·various·information</span><span·class="w"> | 233 | </span><span·class="c1">%%····dict:··A·dictionary·containing·various·information</span><span·class="w"> |
| 234 | </span><span·class="c1">%%···········about·the·person.</span><span·class="w"> | 234 | </span><span·class="c1">%%···········about·the·person.</span><span·class="w"> |
| 235 | </span><span·class="c1">%%···········A·{Key,·Value}·list·(default·is·the·empty·list).</span><span·class="w"> | 235 | </span><span·class="c1">%%···········A·{Key,·Value}·list·(default·is·the·empty·list).</span><span·class="w"> |
| 236 | </span><span·class="c1">%%------------------------------------------------------------</span><span·class="w"> | 236 | </span><span·class="c1">%%------------------------------------------------------------</span><span·class="w"> |
| 237 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7 | 237 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7661632616-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661632616-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">age</span><[·...·truncated·by·diffoscope;·len:·877,·SHA:·3ab6980d47e3d8408b6774f583717e5977054a35d217e83c3d69c602fa655d3f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 238 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="6078412647-2">(</span><span·class="s">"person.hrl"</span><span·class="p"·data-group-id="6078412647-2">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 239 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="6078412647-3">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="6078412647-3">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·For·test·purposes·only.</span><span·class="w"> |
| 240 | </span><span·class="c1">%%·This·creates·an·instance·of·a·person.</span><span·class="w"> | 240 | </span><span·class="c1">%%·This·creates·an·instance·of·a·person.</span><span·class="w"> |
| 241 | </span><span·class="c1">%%···Note:·The·phone·number·is·not·supplied·so·the</span><span·class="w"> | 241 | </span><span·class="c1">%%···Note:·The·phone·number·is·not·supplied·so·the</span><span·class="w"> |
| 242 | </span><span·class="c1">%%·········default·value·[]·will·be·used.</span><span·class="w"> | 242 | </span><span·class="c1">%%·········default·value·[]·will·be·used.</span><span·class="w"> |
| 243 | </span><span·class="nf">make_hacker_without_phone</span><span·class="p"·data-group-id=" | 243 | </span><span·class="nf">make_hacker_without_phone</span><span·class="p"·data-group-id="6078412647-4">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Age</span><span·class="p"·data-group-id="6078412647-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 244 | ···</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 244 | ···</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="6078412647-5">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">age</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Age</span><span·class="p">,</span><span·class="w"> |
| 245 | ···········</span><span·class="ss">dict</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 245 | ···········</span><span·class="ss">dict</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6078412647-6">[</span><span·class="p"·data-group-id="6078412647-7">{</span><span·class="ss">computer_knowledge</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">excellent</span><span·class="p"·data-group-id="6078412647-7">}</span><span·class="p">,</span><span·class="w"> |
| 246 | ···················</span><span·class="p"·data-group-id=" | 246 | ···················</span><span·class="p"·data-group-id="6078412647-8">{</span><span·class="ss">drinks</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coke</span><span·class="p"·data-group-id="6078412647-8">}</span><span·class="p"·data-group-id="6078412647-6">]</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·8f0daa1cbb81d0a635195be4663e4e295a0eb8e11f827f8c6f814fec59cda5ac·...·]-5">}</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="c1">%%·This·demonstrates·matching·in·arguments</span><span·class="w"> | 247 | </span><span·class="c1">%%·This·demonstrates·matching·in·arguments</span><span·class="w"> |
| Max diff block lines reached; 13177/72330 bytes (18.22%) of diff not shown. | |||
| Offset 163, 15 lines modified | Offset 163, 15 lines modified | ||
| 163 | ······<p·class="built-using"> | 163 | ······<p·class="built-using"> |
| 164 | ········Built·using | 164 | ········Built·using |
| 165 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 165 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 166 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 166 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 167 | ······</p> | 167 | ······</p> |
| 168 | <p>Copyright·©·1996-202 | 168 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 169 | ····</footer> | 169 | ····</footer> |
| 170 | ··</div> | 170 | ··</div> |
| 171 | </main> | 171 | </main> |
| 172 | </div> | 172 | </div> |
| 173 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 173 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 174 | ··<script> | 174 | ··<script> |
| 175 | ··let·initialized·=·false; | 175 | ··let·initialized·=·false; |
| Offset 165, 15 lines modified | Offset 165, 15 lines modified | ||
| 165 | ······<p·class="built-using"> | 165 | ······<p·class="built-using"> |
| 166 | ········Built·using | 166 | ········Built·using |
| 167 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 167 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 168 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 168 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 169 | ······</p> | 169 | ······</p> |
| 170 | <p>Copyright·©·1996-202 | 170 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 171 | ····</footer> | 171 | ····</footer> |
| 172 | ··</div> | 172 | ··</div> |
| 173 | </main> | 173 | </main> |
| 174 | </div> | 174 | </div> |
| 175 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 175 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 176 | ··<script> | 176 | ··<script> |
| 177 | ··let·initialized·=·false; | 177 | ··let·initialized·=·false; |
| Offset 124, 40 lines modified | Offset 124, 40 lines modified | ||
| 124 | </h2> | 124 | </h2> |
| 125 | <p>To·illustrate·this,·the·messenger·example·from·the·previous·section·is·divided | 125 | <p>To·illustrate·this,·the·messenger·example·from·the·previous·section·is·divided |
| 126 | into·the·following·five·files:</p><ul><li><p><code·class="inline">mess_config.hrl</code></p><p>Header·file·for·configuration·data</p></li><li><p><code·class="inline">mess_interface.hrl</code></p><p>Interface·definitions·between·the·client·and·the·messenger</p></li><li><p><code·class="inline">user_interface.erl</code></p><p>Functions·for·the·user·interface</p></li><li><p><code·class="inline">mess_client.erl</code></p><p>Functions·for·the·client·side·of·the·messenger</p></li><li><p><code·class="inline">mess_server.erl</code></p><p>Functions·for·the·server·side·of·the·messenger</p></li></ul><p>While·doing·this,·the·message·passing·interface·between·the·shell,·the·client, | 126 | into·the·following·five·files:</p><ul><li><p><code·class="inline">mess_config.hrl</code></p><p>Header·file·for·configuration·data</p></li><li><p><code·class="inline">mess_interface.hrl</code></p><p>Interface·definitions·between·the·client·and·the·messenger</p></li><li><p><code·class="inline">user_interface.erl</code></p><p>Functions·for·the·user·interface</p></li><li><p><code·class="inline">mess_client.erl</code></p><p>Functions·for·the·client·side·of·the·messenger</p></li><li><p><code·class="inline">mess_server.erl</code></p><p>Functions·for·the·server·side·of·the·messenger</p></li></ul><p>While·doing·this,·the·message·passing·interface·between·the·shell,·the·client, |
| 127 | and·the·server·is·cleaned·up·and·is·defined·using·<em>records</em>.·Also,·<em>macros</em>·are | 127 | and·the·server·is·cleaned·up·and·is·defined·using·<em>records</em>.·Also,·<em>macros</em>·are |
| 128 | introduced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_config.hrl----</span><span·class="w"> | 128 | introduced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_config.hrl----</span><span·class="w"> |
| 129 | </span><span·class="c1">%%%·Configure·the·location·of·the·server·node,</span><span·class="w"> | 129 | </span><span·class="c1">%%%·Configure·the·location·of·the·server·node,</span><span·class="w"> |
| 130 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 130 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="8567994479-1">(</span><span·class="ss">server_node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">messenger@super</span><span·class="p"·data-group-id="8567994479-1">)</span><span·class="p">.</span><span·class="w"> |
| 131 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_interface.hrl----</span><span·class="w"> | 131 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_interface.hrl----</span><span·class="w"> |
| 132 | </span><span·class="c1">%%%·Message·interface·between·client·and·server·and·client·shell·for</span><span·class="w"> | 132 | </span><span·class="c1">%%%·Message·interface·between·client·and·server·and·client·shell·for</span><span·class="w"> |
| 133 | </span><span·class="c1">%%%·messenger·program</span><span·class="w"> | 133 | </span><span·class="c1">%%%·messenger·program</span><span·class="w"> |
| 134 | </span><span·class="c1">%%%Messages·from·Client·to·server·received·in·server/1·function.</span><span·class="w"> | 134 | </span><span·class="c1">%%%Messages·from·Client·to·server·received·in·server/1·function.</span><span·class="w"> |
| 135 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 135 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-1">(</span><span·class="ss">logon</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-2">{</span><span·class="ss">client_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">username</span><span·class="p[·...·truncated·by·diffoscope;·len:·80,·SHA:·4a009adae02f0f6184d015dbe012b1a356bf89d33fa087d6824903e3ac08d872·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 136 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-3">(</span><span·class="ss">message</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-4">{</span><span·class="ss">client_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">to_name</span><span·class="[·...·truncated·by·diffoscope;·len:·160,·SHA:·004bae63de3ede1355284a10a16131e601129891a1fb32aba136ee2444e8baf7·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 137 | </span><span·class="c1">%%%·{'EXIT',·ClientPid,·Reason}··(client·terminated·or·unreachable.</span><span·class="w"> | 137 | </span><span·class="c1">%%%·{'EXIT',·ClientPid,·Reason}··(client·terminated·or·unreachable.</span><span·class="w"> |
| 138 | </span><span·class="c1">%%%·Messages·from·Server·to·Client,·received·in·await_result/0·function</span><span·class="w"> | 138 | </span><span·class="c1">%%%·Messages·from·Server·to·Client,·received·in·await_result/0·function</span><span·class="w"> |
| 139 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 139 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-5">(</span><span·class="ss">abort_client</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-6">{</span><span·class="ss">message</span><span·class="p"·data-group-id="4483376105-6">}</span><span·class="p"·data-group-id="448337[·...·truncated·by·diffoscope;·len:·4,·SHA:·bb60bd01547340647bd3b49ecb0632c504c89fadbb31b09d483092de91a44e73·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="c1">%%%·Messages·are:·user_exists_at_other_node,</span><span·class="w"> | 140 | </span><span·class="c1">%%%·Messages·are:·user_exists_at_other_node,</span><span·class="w"> |
| 141 | </span><span·class="c1">%%%···············you_are_not_logged_on</span><span·class="w"> | 141 | </span><span·class="c1">%%%···············you_are_not_logged_on</span><span·class="w"> |
| 142 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 142 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-7">(</span><span·class="ss">server_reply</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-8">{</span><span·class="ss">message</span><span·class="p"·data-group-id="4483376105-8">}</span><span·class="p"·data-group-id="448337[·...·truncated·by·diffoscope;·len:·4,·SHA:·bb60bd01547340647bd3b49ecb0632c504c89fadbb31b09d483092de91a44e73·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="c1">%%%·Messages·are:·logged_on</span><span·class="w"> | 143 | </span><span·class="c1">%%%·Messages·are:·logged_on</span><span·class="w"> |
| 144 | </span><span·class="c1">%%%···············receiver_not_found</span><span·class="w"> | 144 | </span><span·class="c1">%%%···············receiver_not_found</span><span·class="w"> |
| 145 | </span><span·class="c1">%%%···············sent··(Message·has·been·sent·(no·guarantee)</span><span·class="w"> | 145 | </span><span·class="c1">%%%···············sent··(Message·has·been·sent·(no·guarantee)</span><span·class="w"> |
| 146 | </span><span·class="c1">%%%·Messages·from·Server·to·Client·received·in·client/1·function</span><span·class="w"> | 146 | </span><span·class="c1">%%%·Messages·from·Server·to·Client·received·in·client/1·function</span><span·class="w"> |
| 147 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 147 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-9">(</span><span·class="ss">message_from</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-10">{</span><span·class="ss">from_name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">message</span><span·cl[·...·truncated·by·diffoscope;·len:·87,·SHA:·e787b55037059b70f420968973a8affc18ed713f565bb084707671546af583d0·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="c1">%%%·Messages·from·shell·to·Client·received·in·client/1·function</span><span·class="w"> | 148 | </span><span·class="c1">%%%·Messages·from·shell·to·Client·received·in·client/1·function</span><span·class="w"> |
| 149 | </span><span·class="c1">%%%·spawn(mess_client,·client,·[server_node(),·Name])</span><span·class="w"> | 149 | </span><span·class="c1">%%%·spawn(mess_client,·client,·[server_node(),·Name])</span><span·class="w"> |
| 150 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 150 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4483376105-11">(</span><span·class="ss">message_to</span><span·class="p">,</span><span·class="p"·data-group-id="4483376105-12">{</span><span·class="ss">to_name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">message</span><span·class[·...·truncated·by·diffoscope;·len:·84,·SHA:·4651a74add3edb4b7644eee6c29a1aaf550402a349aeab41ce6b22a14e74484c·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="c1">%%%·logoff</span><span·class="w"> | 151 | </span><span·class="c1">%%%·logoff</span><span·class="w"> |
| 152 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·user_interface.erl----</span><span·class="w"> | 152 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·user_interface.erl----</span><span·class="w"> |
| 153 | </span><span·class="c1">%%%·User·interface·to·the·messenger·program</span><span·class="w"> | 153 | </span><span·class="c1">%%%·User·interface·to·the·messenger·program</span><span·class="w"> |
| 154 | </span><span·class="c1">%%%·login(Name)</span><span·class="w"> | 154 | </span><span·class="c1">%%%·login(Name)</span><span·class="w"> |
| 155 | </span><span·class="c1">%%%·····One·user·at·a·time·can·log·in·from·each·Erlang·node·in·the</span><span·class="w"> | 155 | </span><span·class="c1">%%%·····One·user·at·a·time·can·log·in·from·each·Erlang·node·in·the</span><span·class="w"> |
| Offset 170, 177 lines modified | Offset 170, 177 lines modified | ||
| 170 | </span><span·class="c1">%%%·····Logs·off·anybody·at·that·node</span><span·class="w"> | 170 | </span><span·class="c1">%%%·····Logs·off·anybody·at·that·node</span><span·class="w"> |
| 171 | </span><span·class="c1">%%%·message(ToName,·Message)</span><span·class="w"> | 171 | </span><span·class="c1">%%%·message(ToName,·Message)</span><span·class="w"> |
| 172 | </span><span·class="c1">%%%·····sends·Message·to·ToName.·Error·messages·if·the·user·of·this</span><span·class="w"> | 172 | </span><span·class="c1">%%%·····sends·Message·to·ToName.·Error·messages·if·the·user·of·this</span><span·class="w"> |
| 173 | </span><span·class="c1">%%%·····function·is·not·logged·on·or·if·ToName·is·not·logged·on·at</span><span·class="w"> | 173 | </span><span·class="c1">%%%·····function·is·not·logged·on·or·if·ToName·is·not·logged·on·at</span><span·class="w"> |
| 174 | </span><span·class="c1">%%%·····any·node.</span><span·class="w"> | 174 | </span><span·class="c1">%%%·····any·node.</span><span·class="w"> |
| 175 | </span><span·class="w"> | 175 | </span><span·class="w"> |
| 176 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 176 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6040330836-1">(</span><span·class="ss">user_interface</span><span·class="p"·data-group-id="6040330836-1">)</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 177 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6040330836-2">(</span><span·class="p"·data-group-id="6040330836-3">[</span><span·class="ss">logon</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logoff</span><span·class="p">/</span><[·...·truncated·by·diffoscope;·len:·246,·SHA:·34d30e70df5e0c5c11cb5a5b311c964f9929e2112c7691c006bb76259745d5eb·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 178 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="6040330836-4">(</span><span·class="s">"mess_interface.hrl"</span><span·class="p"·data-group-id="6040330836-4">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 179 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="6040330836-5">(</span><span·class="s">"mess_config.hrl"</span><span·class="p"·data-group-id="6040330836-5">)</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="nf">logon</span><span·class="p"·data-group-id=" | 180 | </span><span·class="nf">logon</span><span·class="p"·data-group-id="6040330836-6">(</span><span·class="n">Name</span><span·class="p"·data-group-id="6040330836-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id=" | 181 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id="6040330836-7">(</span><span·class="ss">mess_client</span><span·class="p"·data-group-id="6040330836-7">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 182 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 182 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ············</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 183 | ············</span><span·class="nf">register</span><span·class="p"·data-group-id="6040330836-8">(</span><span·class="ss">mess_client</span><span·class="p">,</span><span·class="w"> |
| 184 | ·····················</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 184 | ·····················</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6040330836-9">(</span><span·class="ss">mess_client</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">client</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6040330836-10">[</span><span·class="o">?</[·...·truncated·by·diffoscope;·len:·263,·SHA:·e74fa1a34685cdbe4dd18f11e1bc1652cd565cd7a676f632777bfab5f08043f8·...·]-8">)</span><span·class="p">;</span><span·class="w"> |
| 185 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">already_logged_on</span><span·class="w"> | 185 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">already_logged_on</span><span·class="w"> |
| 186 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 186 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">logoff</span><span·class="p"·data-group-id=" | 187 | </span><span·class="nf">logoff</span><span·class="p"·data-group-id="6040330836-11">(</span><span·class="p"·data-group-id="6040330836-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 188 | ····</span><span·class="ss">mess_client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">logoff</span><span·class="p">.</span><span·class="w"> | 188 | ····</span><span·class="ss">mess_client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">logoff</span><span·class="p">.</span><span·class="w"> |
| 189 | </span><span·class="nf">message</span><span·class="p"·data-group-id=" | 189 | </span><span·class="nf">message</span><span·class="p"·data-group-id="6040330836-12">(</span><span·class="n">ToName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="6040330836-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id=" | 190 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id="6040330836-13">(</span><span·class="ss">mess_client</span><span·class="p"·data-group-id="6040330836-13">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="c1">%·Test·if·the·client·is·running</span><span·class="w"> |
| 191 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 191 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ············</span><span·class="ss">not_logged_on</span><span·class="p">;</span><span·class="w"> | 192 | ············</span><span·class="ss">not_logged_on</span><span·class="p">;</span><span·class="w"> |
| 193 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">mess_client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">message_to</span><span·class="p"·data-group-id=" | 193 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">mess_client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">message_to</span><span·class="p"·data-group-id="6040330836-14">{</span><span·class="ss">to_name</span><span·class="o">=</span><span·class="n">ToName</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">message</span><span·class="o">=</span><span·class="n">Message</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·ac23cd1a7dc11d77d646da9b098d9d74788ec3f084b8b340a98829be69f21cf0·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 194 | ·············</span><span·class="ss">ok</span><span·class="w"> | 194 | ·············</span><span·class="ss">ok</span><span·class="w"> |
| 195 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 195 | </span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_client.erl----</span><span·class="w"> | 196 | </span><span·class="c1">%%%----END·FILE----</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_client.erl----</span><span·class="w"> |
| 197 | </span><span·class="c1">%%%·The·client·process·which·runs·on·each·user·node</span><span·class="w"> | 197 | </span><span·class="c1">%%%·The·client·process·which·runs·on·each·user·node</span><span·class="w"> |
| 198 | </span><span·class="w"> | 198 | </span><span·class="w"> |
| 199 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 199 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8363192158-1">(</span><span·class="ss">mess_client</span><span·class="p"·data-group-id="8363192158-1">)</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 200 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8363192158-2">(</span><span·class="p"·data-group-id="8363192158-3">[</span><span·class="ss">client</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="8363192158-3">]</span><span·class="p"·data-group-id="8363192158-2">)</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 201 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="8363192158-4">(</span><span·class="s">"mess_interface.hrl"</span><span·class="p"·data-group-id="8363192158-4">)</span><span·class="p">.</span><span·class="w"> |
| 202 | </span><span·class="nf">client</span><span·class="p"·data-group-id=" | 202 | </span><span·class="nf">client</span><span·class="p"·data-group-id="8363192158-5">(</span><span·class="n">Server_Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p"·data-group-id="8363192158-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 203 | ····</span><span·class="p"·data-group-id=" | 203 | ····</span><span·class="p"·data-group-id="8363192158-6">{</span><span·class="ss">messenger</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Server_Node</span><span·class="p"·data-group-id="8363192158-6">}</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·476,·SHA:·40032f6d025a5541bcd4f7b84ac7e35a2a3061a8dc7db2c4fcde038cf642680c·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 204 | ····</span><span·class="nf">await_result</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="nf">await_result</span><span·class="p"·data-group-id="8363192158-9">(</span><span·class="p"·data-group-id="8363192158-9">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nf">client</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nf">client</span><span·class="p"·data-group-id="8363192158-10">(</span><span·class="n">Server_Node</span><span·class="p"·data-group-id="8363192158-10">)</span><span·class="p">.</span><span·class="w"> |
| 206 | </span><span·class="nf">client</span><span·class="p"·data-group-id=" | 206 | </span><span·class="nf">client</span><span·class="p"·data-group-id="8363192158-11">(</span><span·class="n">Server_Node</span><span·class="p"·data-group-id="8363192158-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ····</span><span·class="k">receive</span><span·class="w"> | 207 | ····</span><span·class="k">receive</span><span·class="w"> |
| 208 | ········</span><span·class="ss">logoff</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 208 | ········</span><span·class="ss">logoff</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 209 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="8363192158-12">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="8363192158-12">)</span><span·class="p">;</span><span·class="w"> |
| 210 | ········</span><span·class="o">#</span><span·class="ss">message_to</span><span·class="p"·data-group-id=" | 210 | ········</span><span·class="o">#</span><span·class="ss">message_to</span><span·class="p"·data-group-id="8363192158-13">{</span><span·class="ss">to_name</span><span·class="o">=</span><span·class="n">ToName</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">message</span><span·class="o">=</span><span·class="n">Message</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·75bb561cf4285bcf031e537ca3b1682d07ae3b1bf95efdf794f7efd21c1b6d52·...·]-13">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ············</span><span·class="p"·data-group-id=" | 211 | ············</span><span·class="p"·data-group-id="8363192158-14">{</span><span·class="ss">messenger</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Server_Node</span><span·class="p"·data-group-id="8363192158-14">}</span><span·class="w">·</span><span·class="o">!</span><span·class="w"> |
| 212 | ················</span><span·class="o">#</span><span·class="ss">message</span><span·class="p"·data-group-id=" | 212 | ················</span><span·class="o">#</span><span·class="ss">message</span><span·class="p"·data-group-id="8363192158-15">{</span><span·class="ss">client_pid</span><span·class="o">=</span><span·class="nf">self</span><span·class="p"·data-group-id="8363192158-16">(</span><span·class="p"·data-group-id="8363192158-16">)</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·267,·SHA:·f49d046ee0a478b9988dc3c00c392d6a3859f5a14250f68d887b12bec09cf94e·...·]-15">}</span><span·class="p">,</span><span·class="w"> |
| 213 | ············</span><span·class="nf">await_result</span><span·class="p"·data-group-id=" | 213 | ············</span><span·class="nf">await_result</span><span·class="p"·data-group-id="8363192158-17">(</span><span·class="p"·data-group-id="8363192158-17">)</span><span·class="p">;</span><span·class="w"> |
| 214 | ········</span><span·class="p"·data-group-id=" | 214 | ········</span><span·class="p"·data-group-id="8363192158-18">{</span><span·class="ss">message_from</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FromName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="836319215[·...·truncated·by·diffoscope;·len:·1,·SHA:·2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3·...·]-18">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 215 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8363192158-19">(</span><span·class="s">"Message·from·</span><span·class="si">~p</span><span·class="s">:·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·247,·SHA:·80676ad30ebd8d372f44054dd362043b81bf6611b24447741eefb43019f613f1·...·]-19">)</span><span·class="w"> |
| 216 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 216 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 217 | ····</span><span·class="nf">client</span><span·class="p"·data-group-id=" | 217 | ····</span><span·class="nf">client</span><span·class="p"·data-group-id="8363192158-21">(</span><span·class="n">Server_Node</span><span·class="p"·data-group-id="8363192158-21">)</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="c1">%%%·wait·for·a·response·from·the·server</span><span·class="w"> | 218 | </span><span·class="c1">%%%·wait·for·a·response·from·the·server</span><span·class="w"> |
| 219 | </span><span·class="nf">await_result</span><span·class="p"·data-group-id=" | 219 | </span><span·class="nf">await_result</span><span·class="p"·data-group-id="8363192158-22">(</span><span·class="p"·data-group-id="8363192158-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ····</span><span·class="k">receive</span><span·class="w"> | 220 | ····</span><span·class="k">receive</span><span·class="w"> |
| 221 | ········</span><span·class="o">#</span><span·class="ss">abort_client</span><span·class="p"·data-group-id=" | 221 | ········</span><span·class="o">#</span><span·class="ss">abort_client</span><span·class="p"·data-group-id="8363192158-23">{</span><span·class="ss">message</span><span·class="o">=</span><span·class="n">Why</span><span·class="p"·data-group-id="8363192158-23">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 222 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 222 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8363192158-24">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8363192158-25">[</span><span·class="n">Why</[·...·truncated·by·diffoscope;·len:·100,·SHA:·fb3b973d5a88a4242ad901af52fd85bf340c95a13a8a2595fc8b8a8fe5db74b6·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 223 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 223 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="8363192158-26">(</span><span·class="ss">normal</span><span·class="p"·data-group-id="8363192158-26">)</span><span·class="p">;</span><span·class="w"> |
| 224 | ········</span><span·class="o">#</span><span·class="ss">server_reply</span><span·class="p"·data-group-id=" | 224 | ········</span><span·class="o">#</span><span·class="ss">server_reply</span><span·class="p"·data-group-id="8363192158-27">{</span><span·class="ss">message</span><span·class="o">=</span><span·class="n">What</span><span·class="p"·data-group-id="8363192158-27">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 225 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8363192158-28">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8363192158-29">[</span><span·class="n">What<[·...·truncated·by·diffoscope;·len:·101,·SHA:·17e66bfdfdda872e5555a2e02f4788654aa3d870d2cdee77be67e829228924a1·...·]-28">)</span><span·class="w"> |
| 226 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 226 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 227 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 227 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8363192158-30">(</span><span·class="s">"No·response·from·server</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8363192158-31">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·71,·SHA:·631e37a33b9eeec2e4d75f587b3f2fd19bcf462bc8a80a9ff5ea5625fdf8a0b5·...·]-30">)</span><span·class="p">,</span><span·class="w"> |
| 228 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 228 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="8363192158-32">(</span><span·class="ss">timeout</span><span·class="p"·data-group-id="8363192158-32">)</span><span·class="w"> |
| 229 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 229 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="c1">%%%----END·FILE---</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_server.erl----</span><span·class="w"> | 230 | </span><span·class="c1">%%%----END·FILE---</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%----FILE·mess_server.erl----</span><span·class="w"> |
| 231 | </span><span·class="c1">%%%·This·is·the·server·process·of·the·messenger·service</span><span·class="w"> | 231 | </span><span·class="c1">%%%·This·is·the·server·process·of·the·messenger·service</span><span·class="w"> |
| 232 | </span><span·class="w"> | 232 | </span><span·class="w"> |
| 233 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2 | 233 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2100088776-1">(</span><span·class="ss">mess_server</span><span·class="p"·data-group-id="2100088776-1">)</span><span·class="p">.</span><span·class="w"> |
| 234 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="2 | 234 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="2100088776-2">(</span><span·class="p"·data-group-id="2100088776-3">[</span><span·class="ss">start_server</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">server</span><span·class="p">/</[·...·truncated·by·diffoscope;·len:·124,·SHA:·7f79df86b3277b00901c098d63f8ee452f0f52b0434f9fbeb7f05c484c5cc6df·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 235 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2 | 235 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="2100088776-4">(</span><span·class="s">"mess_interface.hrl"</span><span·class="p"·data-group-id="2100088776-4">)</span><span·class="p">.</span><span·class="w"> |
| 236 | </span><span·class="nf">server</span><span·class="p"·data-group-id="2 | 236 | </span><span·class="nf">server</span><span·class="p"·data-group-id="2100088776-5">(</span><span·class="p"·data-group-id="2100088776-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 237 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="2 | 237 | ····</span><span·class="nf">process_flag</span><span·class="p"·data-group-id="2100088776-6">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="2100088776-6">)</span><span·class="p">,</span><span·class="w"> |
| 238 | ····</span><span·class="nf">server</span><span·class="p"·data-group-id="2 | 238 | ····</span><span·class="nf">server</span><span·class="p"·data-group-id="2100088776-7">(</span><span·class="p"·data-group-id="2100088776-8">[</span><span·class="p"·data-group-id="2100088776-8">]</span><span·class="p"·data-group-id="2100088776-7">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="c1">%%%·the·user·list·has·the·format·[{ClientPid1,·Name1},{ClientPid22,·Name2},...]</span><span·class="w"> | 239 | </span><span·class="c1">%%%·the·user·list·has·the·format·[{ClientPid1,·Name1},{ClientPid22,·Name2},...]</span><span·class="w"> |
| 240 | </span><span·class="nf">server</span><span·class="p"·data-group-id="2 | 240 | </span><span·class="nf">server</span><span·class="p"·data-group-id="2100088776-9">(</span><span·class="n">User_List</span><span·class="p"·data-group-id="2100088776-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 241 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2 | 241 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2100088776-10">(</span><span·class="s">"User·list·=·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2100088776-11">[</span><span·clas[·...·truncated·by·diffoscope;·len:·117,·SHA:·688a1953db0aa881b53c41d0ac4eed47d654eec6833e36845a2bc762ffe005d0·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 242 | ····</span><span·class="k">receive</span><span·class="w"> | 242 | ····</span><span·class="k">receive</span><span·class="w"> |
| Max diff block lines reached; 35666/86701 bytes (41.14%) of diff not shown. | |||
| Offset 120, 51 lines modified | Offset 120, 51 lines modified | ||
| 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 120 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 121 | ··</a> | 121 | ··</a> |
| 122 | ··<span·class="text">Function·Declaration·Syntax</span> | 122 | ··<span·class="text">Function·Declaration·Syntax</span> |
| 123 | </h2> | 123 | </h2> |
| 124 | <p>A·<em>function·declaration</em>·is·a·sequence·of·function·clauses·separated·by | 124 | <p>A·<em>function·declaration</em>·is·a·sequence·of·function·clauses·separated·by |
| 125 | semicolons,·and·terminated·by·a·period·(<code·class="inline">.</code>).</p><p>A·<em>function·clause</em>·consists·of·a·<em>clause·head</em>·and·a·<em>clause·body</em>,·separated·by | 125 | semicolons,·and·terminated·by·a·period·(<code·class="inline">.</code>).</p><p>A·<em>function·clause</em>·consists·of·a·<em>clause·head</em>·and·a·<em>clause·body</em>,·separated·by |
| 126 | <code·class="inline">-></code>.</p><p>A·clause·<em>head</em>·consists·of·the·function·name,·an·argument·list,·and·an·optional | 126 | <code·class="inline">-></code>.</p><p>A·clause·<em>head</em>·consists·of·the·function·name,·an·argument·list,·and·an·optional |
| 127 | guard·sequence·beginning·with·the·keyword·<code·class="inline">when</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="p"·data-group-id=" | 127 | guard·sequence·beginning·with·the·keyword·<code·class="inline">when</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Name</span><span·class="p"·data-group-id="0883604307-1">(</span><span·class="n">Pattern11</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="n">Pattern1N</span><span·class="p"·data-group-id="0883604307-1">)</sp[·...·truncated·by·diffoscope;·len:·204,·SHA:·99729c082cd66173a1c26da4c7d4814a0a735dca342ba1b848d34b9979ab919d·...·]-2">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 128 | ····</span><span·class="n">Body1</span><span·class="p">;</span><span·class="w"> | 128 | ····</span><span·class="n">Body1</span><span·class="p">;</span><span·class="w"> |
| 129 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">;</span><span·class="w"> | 129 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">;</span><span·class="w"> |
| 130 | </span><span·class="n">Name</span><span·class="p"·data-group-id=" | 130 | </span><span·class="n">Name</span><span·class="p"·data-group-id="0883604307-3">(</span><span·class="n">PatternK1</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="n">PatternKN</span><span·class="p"·data-group-id="0883604307-3">)</sp[·...·truncated·by·diffoscope;·len:·204,·SHA:·d1a7dd3eab41685b7c016c12a4c6bfc9c4884c71676a66b3903b77cdaaaea634·...·]-4">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 131 | ····</span><span·class="n">BodyK</span><span·class="p">.</span></code></pre><p>The·function·name·is·an·atom.·Each·argument·is·a·pattern.</p><p>The·number·of·arguments·<code·class="inline">N</code>·is·the·<em>arity</em>·of·the·function.·A·function·is | 131 | ····</span><span·class="n">BodyK</span><span·class="p">.</span></code></pre><p>The·function·name·is·an·atom.·Each·argument·is·a·pattern.</p><p>The·number·of·arguments·<code·class="inline">N</code>·is·the·<em>arity</em>·of·the·function.·A·function·is |
| 132 | uniquely·defined·by·the·module·name,·function·name,·and·arity.·That·is,·two | 132 | uniquely·defined·by·the·module·name,·function·name,·and·arity.·That·is,·two |
| 133 | functions·with·the·same·name·and·in·the·same·module,·but·with·different·arities | 133 | functions·with·the·same·name·and·in·the·same·module,·but·with·different·arities |
| 134 | are·two·different·functions.</p><p>A·function·named·<code·class="inline">f</code>·in·module·<code·class="inline">mod</code>·and·with·arity·<code·class="inline">N</code>·is·often·denoted·as | 134 | are·two·different·functions.</p><p>A·function·named·<code·class="inline">f</code>·in·module·<code·class="inline">mod</code>·and·with·arity·<code·class="inline">N</code>·is·often·denoted·as |
| 135 | <code·class="inline">mod:f/N</code>.</p><p>A·clause·<em>body</em>·consists·of·a·sequence·of·expressions·separated·by·comma·(<code·class="inline">,</code>):</p><pre><code·class="text">Expr1, | 135 | <code·class="inline">mod:f/N</code>.</p><p>A·clause·<em>body</em>·consists·of·a·sequence·of·expressions·separated·by·comma·(<code·class="inline">,</code>):</p><pre><code·class="text">Expr1, |
| 136 | ..., | 136 | ..., |
| 137 | ExprN</code></pre><p>Valid·Erlang·expressions·and·guard·sequences·are·described·in | 137 | ExprN</code></pre><p>Valid·Erlang·expressions·and·guard·sequences·are·described·in |
| 138 | <a·href="expressions.html">Expressions</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fact</span><span·class="p"·data-group-id=" | 138 | <a·href="expressions.html">Expressions</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fact</span><span·class="p"·data-group-id="1049370631-1">(</span><span·class="n">N</span><span·class="p"·data-group-id="1049370631-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w">··</span><span·class="c1">%·first·clause·head</span><span·class="w"> |
| 139 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="1049370631-2">(</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">1</span><span·class="p"·data-group-id="1049370631-2">)</span><span·class="p">;</span><span·class="w">·····</span><span·class="c1">%·first·clause·body</span><span·class="w"> |
| 140 | </span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">fact</span><span·class="p"·data-group-id="1049370631-3">(</span><span·class="mi">0</span><span·class="p"·data-group-id="1049370631-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·············</span><span·class="c1">%·second·clause·head</span><span·class="w"> |
| 141 | ····</span><span·class="mi">1</span><span·class="p">.</span><span·class="w">·················</span><span·class="c1">%·second·clause·body</span></code></pre><p><a·href=""·id="eval"></a></p><h2·id="function-evaluation"·class="section-heading"> | 141 | ····</span><span·class="mi">1</span><span·class="p">.</span><span·class="w">·················</span><span·class="c1">%·second·clause·body</span></code></pre><p><a·href=""·id="eval"></a></p><h2·id="function-evaluation"·class="section-heading"> |
| 142 | ··<a·href="#function-evaluation"·class="hover-link"> | 142 | ··<a·href="#function-evaluation"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text">Function·Evaluation</span> | 145 | ··<span·class="text">Function·Evaluation</span> |
| 146 | </h2> | 146 | </h2> |
| 147 | <p>When·a·function·<code·class="inline">M:F/N</code>·is·called,·first·the·code·for·the·function·is·located. | 147 | <p>When·a·function·<code·class="inline">M:F/N</code>·is·called,·first·the·code·for·the·function·is·located. |
| 148 | If·the·function·cannot·be·found,·an·<code·class="inline">undef</code>·runtime·error·occurs.·Notice·that | 148 | If·the·function·cannot·be·found,·an·<code·class="inline">undef</code>·runtime·error·occurs.·Notice·that |
| 149 | the·function·must·be·exported·to·be·visible·outside·the·module·it·is·defined·in.</p><p>If·the·function·is·found,·the·function·clauses·are·scanned·sequentially·until·a | 149 | the·function·must·be·exported·to·be·visible·outside·the·module·it·is·defined·in.</p><p>If·the·function·is·found,·the·function·clauses·are·scanned·sequentially·until·a |
| 150 | clause·is·found·that·fulfills·both·of·the·following·two·conditions:</p><ol><li>The·patterns·in·the·clause·head·can·be·successfully·matched·against·the·given | 150 | clause·is·found·that·fulfills·both·of·the·following·two·conditions:</p><ol><li>The·patterns·in·the·clause·head·can·be·successfully·matched·against·the·given |
| 151 | arguments.</li><li>The·guard·sequence,·if·any,·is·true.</li></ol><p>If·such·a·clause·cannot·be·found,·a·<code·class="inline">function_clause</code>·runtime·error·occurs.</p><p>If·such·a·clause·is·found,·the·corresponding·clause·body·is·evaluated.·That·is, | 151 | arguments.</li><li>The·guard·sequence,·if·any,·is·true.</li></ol><p>If·such·a·clause·cannot·be·found,·a·<code·class="inline">function_clause</code>·runtime·error·occurs.</p><p>If·such·a·clause·is·found,·the·corresponding·clause·body·is·evaluated.·That·is, |
| 152 | the·expressions·in·the·body·are·evaluated·sequentially·and·the·value·of·the·last | 152 | the·expressions·in·the·body·are·evaluated·sequentially·and·the·value·of·the·last |
| 153 | expression·is·returned.</p><p>Consider·the·function·<code·class="inline">fact</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 153 | expression·is·returned.</p><p>Consider·the·function·<code·class="inline">fact</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8458833625-1">(</span><span·class="ss">mod</span><span·class="p"·data-group-id="8458833625-1">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8458833625-2">(</span><span·class="p"·data-group-id="8458833625-3">[</span><span·class="ss">fact</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8458833625-3">]</span><span·class="p"·data-group-id="8458833625-2">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 155 | </span><span·class="nf">fact</span><span·class="p"·data-group-id="8458833625-4">(</span><span·class="n">N</span><span·class="p"·data-group-id="8458833625-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 156 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 156 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="8458833625-5">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="8458833625-5">)</span><span·class="p">;</span><span·class="w"> |
| 157 | </span><span·class="nf">fact</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">fact</span><span·class="p"·data-group-id="8458833625-6">(</span><span·class="mi">0</span><span·class="p"·data-group-id="8458833625-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="mi">1</span><span·class="p">.</span></code></pre><p>Assume·that·you·want·to·calculate·the·factorial·for·1:</p><pre><code·class="text">1>·mod:fact(1).</code></pre><p>Evaluation·starts·at·the·first·clause.·The·pattern·<code·class="inline">N</code>·is·matched·against | 158 | ····</span><span·class="mi">1</span><span·class="p">.</span></code></pre><p>Assume·that·you·want·to·calculate·the·factorial·for·1:</p><pre><code·class="text">1>·mod:fact(1).</code></pre><p>Evaluation·starts·at·the·first·clause.·The·pattern·<code·class="inline">N</code>·is·matched·against |
| 159 | argument·1.·The·matching·succeeds·and·the·guard·(<code·class="inline">N·>·0</code>)·is·true,·thus·<code·class="inline">N</code>·is | 159 | argument·1.·The·matching·succeeds·and·the·guard·(<code·class="inline">N·>·0</code>)·is·true,·thus·<code·class="inline">N</code>·is |
| 160 | bound·to·1,·and·the·corresponding·body·is·evaluated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="6 | 160 | bound·to·1,·and·the·corresponding·body·is·evaluated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="6689570277-1">(</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">1</span><span·class="p"·data-group-id="6689570277-1">)</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="66[·...·truncated·by·diffoscope;·len:·287,·SHA:·3b2f7de5d8e5bfd6918eea5b664d8478474bbfbff76692b27dae5952f992fce4·...·]-2">)</span><span·class="w"> |
| 161 | </span><span·class="mi">1</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="6 | 161 | </span><span·class="mi">1</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nf">fact</span><span·class="p"·data-group-id="6689570277-3">(</span><span·class="mi">0</span><span·class="p"·data-group-id="6689570277-3">)</span></code></pre><p>Now,·<code·class="inline">fact(0)</code>·is·called,·and·the·function·clauses·are·scanned |
| 162 | sequentially·again.·First,·the·pattern·<code·class="inline">N</code>·is·matched·against·0.·The | 162 | sequentially·again.·First,·the·pattern·<code·class="inline">N</code>·is·matched·against·0.·The |
| 163 | matching·succeeds,·but·the·guard·(<code·class="inline">N·>·0</code>)·is·false.·Second,·the | 163 | matching·succeeds,·but·the·guard·(<code·class="inline">N·>·0</code>)·is·false.·Second,·the |
| 164 | pattern·<code·class="inline">0</code>·is·matched·against·the·argument·<code·class="inline">0</code>.·The·matching·succeeds | 164 | pattern·<code·class="inline">0</code>·is·matched·against·the·argument·<code·class="inline">0</code>.·The·matching·succeeds |
| 165 | and·the·body·is·evaluated:</p><pre><code·class="text">1·*·fact(0)·=> | 165 | and·the·body·is·evaluated:</p><pre><code·class="text">1·*·fact(0)·=> |
| 166 | 1·*·1·=> | 166 | 1·*·1·=> |
| 167 | 1</code></pre><p>Evaluation·has·succeed·and·<code·class="inline">mod:fact(1)</code>·returns·1.</p><p>If·<code·class="inline">mod:fact/1</code>·is·called·with·a·negative·number·as·argument,·no·clause·head | 167 | 1</code></pre><p>Evaluation·has·succeed·and·<code·class="inline">mod:fact(1)</code>·returns·1.</p><p>If·<code·class="inline">mod:fact/1</code>·is·called·with·a·negative·number·as·argument,·no·clause·head |
| 168 | matches.·A·<code·class="inline">function_clause</code>·runtime·error·occurs.</p><h2·id="tail-recursion"·class="section-heading"> | 168 | matches.·A·<code·class="inline">function_clause</code>·runtime·error·occurs.</p><h2·id="tail-recursion"·class="section-heading"> |
| Offset 173, 17 lines modified | Offset 173, 17 lines modified | ||
| 173 | ··</a> | 173 | ··</a> |
| 174 | ··<span·class="text">Tail·recursion</span> | 174 | ··<span·class="text">Tail·recursion</span> |
| 175 | </h2> | 175 | </h2> |
| 176 | <p>If·the·last·expression·of·a·function·body·is·a·function·call,·a | 176 | <p>If·the·last·expression·of·a·function·body·is·a·function·call,·a |
| 177 | <em>tail-recursive·call</em>·is·done.·This·is·to·ensure·that·no·system | 177 | <em>tail-recursive·call</em>·is·done.·This·is·to·ensure·that·no·system |
| 178 | resources,·for·example,·call·stack,·are·consumed.·This·means·that·an | 178 | resources,·for·example,·call·stack,·are·consumed.·This·means·that·an |
| 179 | infinite·loop·using·tail-recursive·calls·will·not·exhaust·the·call | 179 | infinite·loop·using·tail-recursive·calls·will·not·exhaust·the·call |
| 180 | stack·and·can·(in·principle)·run·forever.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="1 | 180 | stack·and·can·(in·principle)·run·forever.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="1053120442-1">(</span><span·class="n">N</span><span·class="p"·data-group-id="1053120442-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1 | 181 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1053120442-2">(</span><span·class="s">"</span><span·class="si">~w</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1053120442-3">[</span><span·class="n">N</span>[·...·truncated·by·diffoscope;·len:·94,·SHA:·0d7f6a36843d7c8feed0222f87f15ded02d74b8a83a930ba45e756bc1ad6c40c·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 182 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="1 | 182 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="1053120442-4">(</span><span·class="n">N</span><span·class="o">+</span><span·class="mi">1</span><span·class="p"·data-group-id="1053120442-4">)</span><span·class="p">.</span></code></pre><p>The·earlier·factorial·example·is·a·counter-example.·It·is·not |
| 183 | tail-recursive,·since·a·multiplication·is·done·on·the·result·of·the·recursive | 183 | tail-recursive,·since·a·multiplication·is·done·on·the·result·of·the·recursive |
| 184 | call·to·<code·class="inline">fact(N-1)</code>.</p><h2·id="built-in-functions-bifs"·class="section-heading"> | 184 | call·to·<code·class="inline">fact(N-1)</code>.</p><h2·id="built-in-functions-bifs"·class="section-heading"> |
| 185 | ··<a·href="#built-in-functions-bifs"·class="hover-link"> | 185 | ··<a·href="#built-in-functions-bifs"·class="hover-link"> |
| 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Built-In·Functions·(BIFs)</span> | 188 | ··<span·class="text">Built-In·Functions·(BIFs)</span> |
| 189 | </h2> | 189 | </h2> |
| Offset 191, 17 lines modified | Offset 191, 17 lines modified | ||
| 191 | system.·BIFs·do·things·that·are·difficult·or·impossible·to·implement | 191 | system.·BIFs·do·things·that·are·difficult·or·impossible·to·implement |
| 192 | in·Erlang.·Most·of·the·BIFs·belong·to·module·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>,·but·there | 192 | in·Erlang.·Most·of·the·BIFs·belong·to·module·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>,·but·there |
| 193 | are·also·BIFs·belonging·to·a·few·other·modules,·for·example·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html"><code·class="inline">lists</code></a> | 193 | are·also·BIFs·belonging·to·a·few·other·modules,·for·example·<a·href="../../lib/stdlib-6.2.2.1/doc/html/lists.html"><code·class="inline">lists</code></a> |
| 194 | and·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html"><code·class="inline">ets</code></a>.</p><p>The·most·commonly·used·BIFs·belonging·to·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>·are·<em>auto-imported</em>.·They·do | 194 | and·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html"><code·class="inline">ets</code></a>.</p><p>The·most·commonly·used·BIFs·belonging·to·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>·are·<em>auto-imported</em>.·They·do |
| 195 | not·need·to·be·prefixed·with·the·module·name.·Which·BIFs·that·are·auto-imported | 195 | not·need·to·be·prefixed·with·the·module·name.·Which·BIFs·that·are·auto-imported |
| 196 | is·specified·in·the·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>·module·in·ERTS.·For·example,·standard-type | 196 | is·specified·in·the·<a·href="../../erts-15.2.7/doc/html/erlang.html"><code·class="inline">erlang</code></a>·module·in·ERTS.·For·example,·standard-type |
| 197 | conversion·BIFs·like·<code·class="inline">atom_to_list</code>·and·BIFs·allowed·in·guards·can·be·called | 197 | conversion·BIFs·like·<code·class="inline">atom_to_list</code>·and·BIFs·allowed·in·guards·can·be·called |
| 198 | without·specifying·the·module·name.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id=" | 198 | without·specifying·the·module·name.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">tuple_size</span><span·class="p"·data-group-id="3787581743-1">(</span><span·class="p"·data-group-id="3787581743-2">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3787581743-2">}</span><span[·...·truncated·by·diffoscope;·len:·34,·SHA:·543168b5070fc351b107e30a3c13238e99ec61ec816997269959cce66630c23e·...·]43-1">)</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="mi">3</span><span·class="gp·unselectable"> | 199 | </span><span·class="mi">3</span><span·class="gp·unselectable"> |
| 200 | 2>·</span><span·class="nf">atom_to_list</span><span·class="p"·data-group-id=" | 200 | 2>·</span><span·class="nf">atom_to_list</span><span·class="p"·data-group-id="3787581743-3">(</span><span·class="ss">'Erlang'</span><span·class="p"·data-group-id="3787581743-3">)</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="s">"Erlang"</span></code></pre> | 201 | </span><span·class="s">"Erlang"</span></code></pre> |
| 202 | </div> | 202 | </div> |
| 203 | <div·class="bottom-actions"·id="bottom-actions"> | 203 | <div·class="bottom-actions"·id="bottom-actions"> |
| 204 | ··<div·class="bottom-actions-item"> | 204 | ··<div·class="bottom-actions-item"> |
| 205 | ······<a·href="documentation.html"·class="bottom-actions-button"·rel="prev"> | 205 | ······<a·href="documentation.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 245, 15 lines modified | Offset 245, 15 lines modified | ||
| 245 | ······<p·class="built-using"> | 245 | ······<p·class="built-using"> |
| 246 | ········Built·using | 246 | ········Built·using |
| 247 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 247 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 248 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 248 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 249 | ······</p> | 249 | ······</p> |
| 250 | <p>Copyright·©·1996-202 | 250 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 251 | ····</footer> | 251 | ····</footer> |
| 252 | ··</div> | 252 | ··</div> |
| 253 | </main> | 253 | </main> |
| 254 | </div> | 254 | </div> |
| 255 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 255 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 256 | ··<script> | 256 | ··<script> |
| 257 | ··let·initialized·=·false; | 257 | ··let·initialized·=·false; |
| Offset 125, 18 lines modified | Offset 125, 18 lines modified | ||
| 125 | (grow·and·shrink·dynamically)·with·small·memory·footprint,·fast·to·create·and | 125 | (grow·and·shrink·dynamically)·with·small·memory·footprint,·fast·to·create·and |
| 126 | terminate,·and·the·scheduling·overhead·is·low.</p><h2·id="process-creation"·class="section-heading"> | 126 | terminate,·and·the·scheduling·overhead·is·low.</p><h2·id="process-creation"·class="section-heading"> |
| 127 | ··<a·href="#process-creation"·class="hover-link"> | 127 | ··<a·href="#process-creation"·class="hover-link"> |
| 128 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 128 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 129 | ··</a> | 129 | ··</a> |
| 130 | ··<span·class="text">Process·Creation</span> | 130 | ··<span·class="text">Process·Creation</span> |
| 131 | </h2> | 131 | </h2> |
| 132 | <p>A·process·is·created·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/3"><code·class="inline">spawn()</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 132 | <p>A·process·is·created·by·calling·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/3"><code·class="inline">spawn()</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">spawn</span><span·class="p"·data-group-id="5875825595-1">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Args</span><span·class="p"·data-group-id="5875825595-1">)</span><s[·...·truncated·by·diffoscope;·len:·195,·SHA:·e50331e9a9a3ca254bd472df3a18ef0c0a0d76e674149a54a047e1685a57ad3f·...·]-2">)</span><span·class="w"> |
| 133 | ··</span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 133 | ··</span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="5875825595-3">(</span><span·class="p"·data-group-id="5875825595-3">)</span><span·class="w"> |
| 134 | ··</span><span·class="n">Args</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 134 | ··</span><span·class="n">Args</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5875825595-4">[</span><span·class="n">Arg1</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="n">ArgN</span><span·class="p"·data-group-id="5875825595-4">]</span><span·class="w"> |
| 135 | ····</span><span·class="n">ArgI</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 135 | ····</span><span·class="n">ArgI</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="5875825595-5">(</span><span·class="p"·data-group-id="5875825595-5">)</span></code></pre><p><code·class="inline">spawn()</code>·creates·a·new·process·and·returns·the·pid.</p><p>The·new·process·starts·executing·in·<code·class="inline">Module:Name(Arg1,...,ArgN)</code>·where·the |
| 136 | arguments·are·the·elements·of·the·(possible·empty)·<code·class="inline">Args</code>·argument·list.</p><p>There·exist·a·number·of·different·<code·class="inline">spawn</code>·BIFs:</p><ul><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/4"><code·class="inline">spawn/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_link/4"><code·class="inline">spawn_link/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_monitor/4"><code·class="inline">spawn_monitor/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_opt/5"><code·class="inline">spawn_opt/2,3,4,5</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_request/5"><code·class="inline">spawn_request/1,2,3,4,5</code></a></li></ul><h2·id="registered-processes"·class="section-heading"> | 136 | arguments·are·the·elements·of·the·(possible·empty)·<code·class="inline">Args</code>·argument·list.</p><p>There·exist·a·number·of·different·<code·class="inline">spawn</code>·BIFs:</p><ul><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn/4"><code·class="inline">spawn/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_link/4"><code·class="inline">spawn_link/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_monitor/4"><code·class="inline">spawn_monitor/1,2,3,4</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_opt/5"><code·class="inline">spawn_opt/2,3,4,5</code></a></li><li><a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_request/5"><code·class="inline">spawn_request/1,2,3,4,5</code></a></li></ul><h2·id="registered-processes"·class="section-heading"> |
| 137 | ··<a·href="#registered-processes"·class="hover-link"> | 137 | ··<a·href="#registered-processes"·class="hover-link"> |
| 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 139 | ··</a> | 139 | ··</a> |
| 140 | ··<span·class="text">Registered·Processes</span> | 140 | ··<span·class="text">Registered·Processes</span> |
| 141 | </h2> | 141 | </h2> |
| 142 | <p>Besides·addressing·a·process·by·using·its·pid,·there·are·also·BIFs·for | 142 | <p>Besides·addressing·a·process·by·using·its·pid,·there·are·also·BIFs·for |
| Offset 583, 15 lines modified | Offset 583, 15 lines modified | ||
| 583 | ······<p·class="built-using"> | 583 | ······<p·class="built-using"> |
| 584 | ········Built·using | 584 | ········Built·using |
| 585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 587 | ······</p> | 587 | ······</p> |
| 588 | <p>Copyright·©·1996-202 | 588 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 589 | ····</footer> | 589 | ····</footer> |
| 590 | ··</div> | 590 | ··</div> |
| 591 | </main> | 591 | </main> |
| 592 | </div> | 592 | </div> |
| 593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 594 | ··<script> | 594 | ··<script> |
| 595 | ··let·initialized·=·false; | 595 | ··let·initialized·=·false; |
| Offset 123, 17 lines modified | Offset 123, 17 lines modified | ||
| 123 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 123 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 124 | ··</a> | 124 | ··</a> |
| 125 | ··<span·class="text">Defining·Records</span> | 125 | ··<span·class="text">Defining·Records</span> |
| 126 | </h2> | 126 | </h2> |
| 127 | <p>A·record·definition·consists·of·the·name·of·the·record,·followed·by·the·field | 127 | <p>A·record·definition·consists·of·the·name·of·the·record,·followed·by·the·field |
| 128 | names·of·the·record.·Record·and·field·names·must·be·atoms.·Each·field·can·be | 128 | names·of·the·record.·Record·and·field·names·must·be·atoms.·Each·field·can·be |
| 129 | given·an·optional·default·value.·If·no·default·value·is·supplied,·<code·class="inline">undefined</code>·is | 129 | given·an·optional·default·value.·If·no·default·value·is·supplied,·<code·class="inline">undefined</code>·is |
| 130 | used.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 130 | used.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="1415697804-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1415697804-2">{</span><span·class="n">Field1</span><span·class="w">·</span><span·class="p"·data-group-id="1415697804-3">[</span>[·...·truncated·by·diffoscope;·len:·117,·SHA:·f13a3b5c88fcce1064a9b571671fa5421a927904f468dcac904fdcd93faf542b·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 131 | ···············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 131 | ···············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 132 | ···············</span><span·class="n">FieldN</span><span·class="w">·</span><span·class="p"·data-group-id=" | 132 | ···············</span><span·class="n">FieldN</span><span·class="w">·</span><span·class="p"·data-group-id="1415697804-4">[</span><span·class="o">=</span><span·class="w">·</span><span·class="n">ExprN</span><span·class="p"·data-group-id="1415697804-4">]</span><span·class="p"·data-group-id="1415697804-2">}</span><span·class="p"·data-group-id="1415697804-1">)</span><span·class="p">.</span></code></pre><p>The·default·value·for·a·field·is·an·arbitrary·expression,·except·that·it·must |
| 133 | not·use·any·variables.</p><p>A·record·definition·can·be·placed·anywhere·among·the·attributes·and·function | 133 | not·use·any·variables.</p><p>A·record·definition·can·be·placed·anywhere·among·the·attributes·and·function |
| 134 | declarations·of·a·module,·but·the·definition·must·come·before·any·usage·of·the | 134 | declarations·of·a·module,·but·the·definition·must·come·before·any·usage·of·the |
| 135 | record.</p><p>If·a·record·is·used·in·several·modules,·it·is·recommended·that·the·record | 135 | record.</p><p>If·a·record·is·used·in·several·modules,·it·is·recommended·that·the·record |
| 136 | definition·is·placed·in·an·include·file.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Starting·from·Erlang/OTP·26,·records·can·be·defined·in·the·Erlang·shell | 136 | definition·is·placed·in·an·include·file.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Starting·from·Erlang/OTP·26,·records·can·be·defined·in·the·Erlang·shell |
| 137 | using·the·syntax·described·in·this·section.·In·earlier·releases,·it·was | 137 | using·the·syntax·described·in·this·section.·In·earlier·releases,·it·was |
| 138 | necessary·to·use·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/shell.html"><code·class="inline">shell</code></a>·built-in·function·<code·class="inline">rd/2</code>.</p></section><h2·id="creating-records"·class="section-heading"> | 138 | necessary·to·use·the·<a·href="../../lib/stdlib-6.2.2.1/doc/html/shell.html"><code·class="inline">shell</code></a>·built-in·function·<code·class="inline">rd/2</code>.</p></section><h2·id="creating-records"·class="section-heading"> |
| 139 | ··<a·href="#creating-records"·class="hover-link"> | 139 | ··<a·href="#creating-records"·class="hover-link"> |
| Offset 143, 32 lines modified | Offset 143, 32 lines modified | ||
| 143 | </h2> | 143 | </h2> |
| 144 | <p>The·following·expression·creates·a·new·<code·class="inline">Name</code>·record·where·the·value·of·each | 144 | <p>The·following·expression·creates·a·new·<code·class="inline">Name</code>·record·where·the·value·of·each |
| 145 | field·<code·class="inline">FieldI</code>·is·the·value·of·evaluating·the·corresponding·expression·<code·class="inline">ExprI</code>:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p>The·fields·can·be·in·any·order,·not·necessarily·the·same·order·as·in·the·record | 145 | field·<code·class="inline">FieldI</code>·is·the·value·of·evaluating·the·corresponding·expression·<code·class="inline">ExprI</code>:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p>The·fields·can·be·in·any·order,·not·necessarily·the·same·order·as·in·the·record |
| 146 | definition,·and·fields·can·be·omitted.·Omitted·fields·get·their·respective | 146 | definition,·and·fields·can·be·omitted.·Omitted·fields·get·their·respective |
| 147 | default·value·instead.</p><p>If·several·fields·are·to·be·assigned·the·same·value,·the·following·construction | 147 | default·value·instead.</p><p>If·several·fields·are·to·be·assigned·the·same·value,·the·following·construction |
| 148 | can·be·used:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK,·_=ExprL}</code></pre><p>Omitted·fields·then·get·the·value·of·evaluating·<code·class="inline">ExprL</code>·instead·of·their·default | 148 | can·be·used:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK,·_=ExprL}</code></pre><p>Omitted·fields·then·get·the·value·of·evaluating·<code·class="inline">ExprL</code>·instead·of·their·default |
| 149 | values.·This·feature·is·primarily·intended·to·be·used·to·create·patterns·for·ETS | 149 | values.·This·feature·is·primarily·intended·to·be·used·to·create·patterns·for·ETS |
| 150 | and·Mnesia·match·functions.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 150 | and·Mnesia·match·functions.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4739959699-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4739959699-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</spa[·...·truncated·by·diffoscope;·len:·175,·SHA:·1e26e472c9935fb361b524c5beb8ebfa81b0dd8e61002624351c9b2c3699064d·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 151 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id="4739959699-3">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p"·data-group-id="4739959699-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 152 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_object</span><span·class="p"·data-group-id=" | 152 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_object</span><span·class="p"·data-group-id="4739959699-4">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="4739959699-5">{</span><span·class="ss">name</span><span·class="o">=</span><[·...·truncated·by·diffoscope;·len:·251,·SHA:·2bcd4fc8fb344d52b4f33c0fbb46a495559e1c140bd5bcccfc5c568ffe0e1608·...·]-4">)</span><span·class="p">.</span></code></pre><h2·id="accessing-record-fields"·class="section-heading"> |
| 153 | ··<a·href="#accessing-record-fields"·class="hover-link"> | 153 | ··<a·href="#accessing-record-fields"·class="hover-link"> |
| 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 155 | ··</a> | 155 | ··</a> |
| 156 | ··<span·class="text">Accessing·Record·Fields</span> | 156 | ··<span·class="text">Accessing·Record·Fields</span> |
| 157 | </h2> | 157 | </h2> |
| 158 | <pre><code·class="text">Expr#Name.Field</code></pre><p>Returns·the·value·of·the·specified·field.·<code·class="inline">Expr</code>·is·to·evaluate·to·a·<code·class="inline">Name</code> | 158 | <pre><code·class="text">Expr#Name.Field</code></pre><p>Returns·the·value·of·the·specified·field.·<code·class="inline">Expr</code>·is·to·evaluate·to·a·<code·class="inline">Name</code> |
| 159 | record.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 159 | record.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="2910420088-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2910420088-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</spa[·...·truncated·by·diffoscope;·len:·175,·SHA:·bdbdd399cfdaae1fb02eb7d53bfc9d627aaa6abf555c246270d3e2cc3abf9d10·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="nf">get_person_name</span><span·class="p"·data-group-id=" | 160 | </span><span·class="nf">get_person_name</span><span·class="p"·data-group-id="2910420088-3">(</span><span·class="n">Person</span><span·class="p"·data-group-id="2910420088-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ····</span><span·class="n">Person</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">.</span></code></pre><p>The·following·expression·returns·the·position·of·the·specified·field·in·the | 161 | ····</span><span·class="n">Person</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">.</span></code></pre><p>The·following·expression·returns·the·position·of·the·specified·field·in·the |
| 162 | tuple·representation·of·the·record:</p><pre><code·class="text">#Name.Field</code></pre><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 162 | tuple·representation·of·the·record:</p><pre><code·class="text">#Name.Field</code></pre><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8577169979-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8577169979-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">phone</spa[·...·truncated·by·diffoscope;·len:·175,·SHA:·e8968b0167c23c497d822e21e9a52f0c73a03829062b4ef0a0f9b6320115fd09·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 163 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id="8577169979-3">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List</span><span·class="p"·data-group-id="8577169979-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 164 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keyfind</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keyfind</span><span·class="p"·data-group-id="8577169979-4">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·63,·SHA:·afb4629118b562550cc606c6872e8db9fcbc4a889c5673faadb61f5a617804e8·...·]-4">)</span><span·class="p">.</span></code></pre><h2·id="updating-records"·class="section-heading"> |
| 165 | ··<a·href="#updating-records"·class="hover-link"> | 165 | ··<a·href="#updating-records"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Updating·Records</span> | 168 | ··<span·class="text">Updating·Records</span> |
| 169 | </h2> | 169 | </h2> |
| 170 | <pre><code·class="text">Expr#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p><code·class="inline">Expr</code>·is·to·evaluate·to·a·<code·class="inline">Name</code>·record.·A·copy·of·this·record·is·returned, | 170 | <pre><code·class="text">Expr#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p><code·class="inline">Expr</code>·is·to·evaluate·to·a·<code·class="inline">Name</code>·record.·A·copy·of·this·record·is·returned, |
| 171 | with·the·value·of·each·specified·field·<code·class="inline">FieldI</code>·changed·to·the·value·of | 171 | with·the·value·of·each·specified·field·<code·class="inline">FieldI</code>·changed·to·the·value·of |
| Offset 178, 51 lines modified | Offset 178, 51 lines modified | ||
| 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 179 | ··</a> | 179 | ··</a> |
| 180 | ··<span·class="text">Records·in·Guards</span> | 180 | ··<span·class="text">Records·in·Guards</span> |
| 181 | </h2> | 181 | </h2> |
| 182 | <p>Since·record·expressions·are·expanded·to·tuple·expressions,·creating | 182 | <p>Since·record·expressions·are·expanded·to·tuple·expressions,·creating |
| 183 | records·and·accessing·record·fields·are·allowed·in·guards.·However, | 183 | records·and·accessing·record·fields·are·allowed·in·guards.·However, |
| 184 | all·subexpressions·(for·initializing·fields),·must·be·valid·guard | 184 | all·subexpressions·(for·initializing·fields),·must·be·valid·guard |
| 185 | expressions·as·well.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle</span><span·class="p"·data-group-id=" | 185 | expressions·as·well.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle</span><span·class="p"·data-group-id="7515887712-1">(</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="7515887712-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·442,·SHA:·2475cd3014055abea9654817f500810d6295f1c58c990433b6d3955e48e79ac2·...·]-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 186 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 186 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">handle</span><span·class="p"·data-group-id=" | 187 | </span><span·class="nf">handle</span><span·class="p"·data-group-id="7515887712-3">(</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="7515887712-3">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">running</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 188 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>There·is·also·a·type·test·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_record/2"><code·class="inline">is_record(Term,·RecordTag)</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">is_person</span><span·class="p"·data-group-id="4 | 188 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>There·is·also·a·type·test·BIF·<a·href="../../erts-15.2.7/doc/html/erlang.html#is_record/2"><code·class="inline">is_record(Term,·RecordTag)</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">is_person</span><span·class="p"·data-group-id="4746471004-1">(</span><span·class="n">P</span><span·class="p"·data-group-id="4746471004-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="4746471004-2">(</sp[·...·truncated·by·diffoscope;·len:·146,·SHA:·aaec9c8fdfc5538c97a17f54fd12fc3ec2ef6f7abd5281f4eeaaf7292733893a·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 189 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 189 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 190 | </span><span·class="nf">is_person</span><span·class="p"·data-group-id="4 | 190 | </span><span·class="nf">is_person</span><span·class="p"·data-group-id="4746471004-3">(</span><span·class="p">_</span><span·class="n">P</span><span·class="p"·data-group-id="4746471004-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 191 | ····</span><span·class="ss">false</span><span·class="p">.</span></code></pre><h2·id="records-in-patterns"·class="section-heading"> | 191 | ····</span><span·class="ss">false</span><span·class="p">.</span></code></pre><h2·id="records-in-patterns"·class="section-heading"> |
| 192 | ··<a·href="#records-in-patterns"·class="hover-link"> | 192 | ··<a·href="#records-in-patterns"·class="hover-link"> |
| 193 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 193 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 194 | ··</a> | 194 | ··</a> |
| 195 | ··<span·class="text">Records·in·Patterns</span> | 195 | ··<span·class="text">Records·in·Patterns</span> |
| 196 | </h2> | 196 | </h2> |
| 197 | <p>A·pattern·that·matches·a·certain·record·is·created·in·the·same·way·as·a·record | 197 | <p>A·pattern·that·matches·a·certain·record·is·created·in·the·same·way·as·a·record |
| 198 | is·created:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p>In·this·case,·one·or·more·of·<code·class="inline">Expr1</code>·...·<code·class="inline">ExprK</code>·can·be·unbound·variables.</p><h2·id="nested-records"·class="section-heading"> | 198 | is·created:</p><pre><code·class="text">#Name{Field1=Expr1,·...,·FieldK=ExprK}</code></pre><p>In·this·case,·one·or·more·of·<code·class="inline">Expr1</code>·...·<code·class="inline">ExprK</code>·can·be·unbound·variables.</p><h2·id="nested-records"·class="section-heading"> |
| 199 | ··<a·href="#nested-records"·class="hover-link"> | 199 | ··<a·href="#nested-records"·class="hover-link"> |
| 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 201 | ··</a> | 201 | ··</a> |
| 202 | ··<span·class="text">Nested·Records</span> | 202 | ··<span·class="text">Nested·Records</span> |
| 203 | </h2> | 203 | </h2> |
| 204 | <p>Assume·the·following·record·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8070449483-1">(</span><span·class="ss">nrec0</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8070449483-2">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"nested0"</span><span·class="p"·data-group-id="8070449483-2">}</span><span·class="p"·data-group-id="8070449483-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 205 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8070449483-3">(</span><span·class="ss">nrec1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8070449483-4">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"nested1"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">nrec0</span><span·class="o">=</span><span·class="o">#</span><span·class="ss">nrec0</span><span·class="p"·data-group-id="8070449483-5">{</span><span·class="p"·data-group-id="8070449483-5">}</span><span·class="p"·data-group-id="8070449483-4">}</span><span·class="p"·data-group-id="8070449483-3">)</span><span·class="p">.</span><span·class="w"> | ||
| 206 | < | 204 | <p>Assume·the·following·record·definitions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5968908816-1">(</span><span·class="ss">nrec0</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·313,·SHA:·d7b97e3d461bfb694eca6fa447e2a04edc84ba8d5b29833af3b5e1e21031f4f7·...·]">)</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5968908816-3">(</span><span·class="ss">nrec1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5968908816-4">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"nested1"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">nrec0</span><span·class="o">=</span><span·class="o">#</span><span·class="ss">nrec0</span><span·class="p"·data-group-id="5968908816-5">{</span><span·class="p"·data-group-id="5968908816-5">}</span><span·class="p"·data-group-id="5968908816-4">}</span><span·class="p"·data-group-id="5968908816-3">)</span><span·class="p">.</span><span·class="w"> | ||
| 206 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5968908816-6">(</span><span·class="ss">nrec2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5968908816-7">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"nested2"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">nrec1</span><span·class="o">=</span><span·class="o">#</span><span·class="ss">nrec1</span><span·class="p"·data-group-id="5968908816-8">{</span><span·class="p"·data-group-id="5968908816-8">}</span><span·class="p"·data-group-id="5968908816-7">}</span><span·class="p"·data-group-id="5968908816-6">)</span><span·class="p">.</span><span·class="w"> | ||
| 207 | </span><span·class="n">N2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">nrec2</span><span·class="p"·data-group-id=" | 207 | </span><span·class="n">N2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">nrec2</span><span·class="p"·data-group-id="5968908816-9">{</span><span·class="p"·data-group-id="5968908816-9">}</span><span·class="p">,</span></code></pre><p>Accessing·or·updating·nested·records·can·be·written·without·parentheses:</p><pre><code·class="text">"nested0"·=·N2#nrec2.nrec1#nrec1.nrec0#nrec0.name, |
| 208 | ····N0n·=·N2#nrec2.nrec1#nrec1.nrec0#nrec0{name·=·"nested0a"},</code></pre><p>which·is·equivalent·to:</p><pre><code·class="text">"nested0"·=·((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name, | 208 | ····N0n·=·N2#nrec2.nrec1#nrec1.nrec0#nrec0{name·=·"nested0a"},</code></pre><p>which·is·equivalent·to:</p><pre><code·class="text">"nested0"·=·((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name, |
| 209 | N0n·=·((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0{name·=·"nested0a"},</code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·R14,·parentheses·were·necessary·when·accessing·or·updating | 209 | N0n·=·((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0{name·=·"nested0a"},</code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·R14,·parentheses·were·necessary·when·accessing·or·updating |
| 210 | nested·records.</p></section><h2·id="internal-representation-of-records"·class="section-heading"> | 210 | nested·records.</p></section><h2·id="internal-representation-of-records"·class="section-heading"> |
| 211 | ··<a·href="#internal-representation-of-records"·class="hover-link"> | 211 | ··<a·href="#internal-representation-of-records"·class="hover-link"> |
| 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 213 | ··</a> | 213 | ··</a> |
| 214 | ··<span·class="text">Internal·Representation·of·Records</span> | 214 | ··<span·class="text">Internal·Representation·of·Records</span> |
| 215 | </h2> | 215 | </h2> |
| 216 | <p>Record·expressions·are·translated·to·tuple·expressions·during·compilation.·A | 216 | <p>Record·expressions·are·translated·to·tuple·expressions·during·compilation.·A |
| 217 | record·defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8488029949-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8488029949-2">{</span><span·class="n">Field1</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FieldN</span><span·class="p"·data-group-id="8488029949-2">}</span><span·class="p"·data-group-id="8488029949-1">)</span><span·class="p">.</span></code></pre><p>is·internally·represented·by·the·tuple:</p><pre><code·class="text">{Name,·Value1,·...,·ValueN}</code></pre><p>Here·each·<code·class="inline">ValueI</code>·is·the·default·value·for·<code·class="inline">FieldI</code>.</p><p>To·each·module·using·records,·a·pseudo·function·is·added·during·compilation·to | ||
| 218 | obtain·information·about·records:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">record_info</span><span·class="p"·data-group-id="1742970347-1">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="1742970347-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="1742970347-2">[</span><span·class="n">Field</span><span·class="p"·data-group-id="1742970347-2">]</span><span·class="w"> | ||
| 219 | 217 | record·defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="0017223047-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·721,·SHA:·8f9553377b97d10eec37623865adbfd6769bdf0131275e9ddcfb2ede24e968bd·...·] | |
| 218 | obtain·information·about·records:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">record_info</span><span·class="p"·data-group-id="3994526054-1">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="3994526054-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="3994526054-2">[</span><span·class="n">Field</span><span·class="p"·data-group-id="3994526054-2">]</span><span·class="w"> | ||
| 219 | </span><span·class="nf">record_info</span><span·class="p"·data-group-id="3994526054-3">(</span><span·class="nb">size</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="3994526054-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Size</span></code></pre><p><code·class="inline">Size</code>·is·the·size·of·the·tuple·representation,·that·is,·one·more·than·the | ||
| 220 | number·of·fields.</p> | 220 | number·of·fields.</p> |
| 221 | </div> | 221 | </div> |
| 222 | <div·class="bottom-actions"·id="bottom-actions"> | 222 | <div·class="bottom-actions"·id="bottom-actions"> |
| 223 | ··<div·class="bottom-actions-item"> | 223 | ··<div·class="bottom-actions-item"> |
| 224 | ······<a·href="macros.html"·class="bottom-actions-button"·rel="prev"> | 224 | ······<a·href="macros.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 266, 15 lines modified | Offset 266, 15 lines modified | ||
| 266 | ······<p·class="built-using"> | 266 | ······<p·class="built-using"> |
| 267 | ········Built·using | 267 | ········Built·using |
| 268 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 268 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 269 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 269 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 270 | ······</p> | 270 | ······</p> |
| 271 | <p>Copyright·©·1996-202 | 271 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 272 | ····</footer> | 272 | ····</footer> |
| 273 | ··</div> | 273 | ··</div> |
| 274 | </main> | 274 | </main> |
| 275 | </div> | 275 | </div> |
| 276 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 276 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 277 | ··<script> | 277 | ··<script> |
| 278 | ··let·initialized·=·false; | 278 | ··let·initialized·=·false; |
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 223, 38 lines modified | Offset 223, 38 lines modified | ||
| 223 | ··<span·class="text">update</span> | 223 | ··<span·class="text">update</span> |
| 224 | </h3> | 224 | </h3> |
| 225 | <p>If·a·more·complex·change·has·been·made,·for·example,·a·change·to·the·format·of | 225 | <p>If·a·more·complex·change·has·been·made,·for·example,·a·change·to·the·format·of |
| 226 | the·internal·state·of·a·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a>,·simple·code·replacement·is·not·sufficient. | 226 | the·internal·state·of·a·<a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html"><code·class="inline">gen_server</code></a>,·simple·code·replacement·is·not·sufficient. |
| 227 | Instead,·it·is·necessary·to:</p><ul><li>Suspend·the·processes·using·the·module·(to·avoid·that·they·try·to·handle·any | 227 | Instead,·it·is·necessary·to:</p><ul><li>Suspend·the·processes·using·the·module·(to·avoid·that·they·try·to·handle·any |
| 228 | requests·before·the·code·replacement·is·completed).</li><li>Ask·them·to·transform·the·internal·state·format·and·switch·to·the·new·version | 228 | requests·before·the·code·replacement·is·completed).</li><li>Ask·them·to·transform·the·internal·state·format·and·switch·to·the·new·version |
| 229 | of·the·module.</li><li>Remove·the·old·version.</li><li>Resume·the·processes.</li></ul><p>This·is·called·<em>synchronized·code·replacement</em>·and·for·this·the·following | 229 | of·the·module.</li><li>Remove·the·old·version.</li><li>Resume·the·processes.</li></ul><p>This·is·called·<em>synchronized·code·replacement</em>·and·for·this·the·following |
| 230 | instructions·are·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4095548753-1">{</span><span·class="ss">update</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4095548753-2">{</span><span·class="ss">advanced</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Extra</span><span·class="p"·data-group-id="4095548753-2">}</span><span·class="p"·data-group-id="4095548753-1">}</span><span·class="w"> | ||
| 231 | 230 | instructions·are·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8084821315-1">{</span><span·class="ss">update</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·309,·SHA:·fb22c95fff9a6d16d0ace3e1cf31719e66b477b958ba35701d43eb960510ca17·...·] | |
| 231 | </span><span·class="p"·data-group-id="8084821315-3">{</span><span·class="ss">update</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">supervisor</span><span·class="p"·data-group-id="8084821315-3">}</span></code></pre><p><code·class="inline">update</code>·with·argument·<code·class="inline">{advanced,Extra}</code>·is·used·when·changing·the·internal | ||
| 232 | state·of·a·behaviour·as·described·above.·It·causes·behaviour·processes·to·call | 232 | state·of·a·behaviour·as·described·above.·It·causes·behaviour·processes·to·call |
| 233 | the·callback·function·<code·class="inline">code_change/3</code>,·passing·the·term·<code·class="inline">Extra</code>·and·some·other | 233 | the·callback·function·<code·class="inline">code_change/3</code>,·passing·the·term·<code·class="inline">Extra</code>·and·some·other |
| 234 | information·as·arguments.·See·the·manual·pages·for·the·respective·behaviours·and | 234 | information·as·arguments.·See·the·manual·pages·for·the·respective·behaviours·and |
| 235 | <a·href="appup_cookbook.html#int_state">Appup·Cookbook</a>.</p><p><code·class="inline">update</code>·with·argument·<code·class="inline">supervisor</code>·is·used·when·changing·the·start | 235 | <a·href="appup_cookbook.html#int_state">Appup·Cookbook</a>.</p><p><code·class="inline">update</code>·with·argument·<code·class="inline">supervisor</code>·is·used·when·changing·the·start |
| 236 | specification·of·a·supervisor.·See·<a·href="appup_cookbook.html#sup">Appup·Cookbook</a>.</p><p>When·a·module·is·to·be·updated,·the·release·handler·finds·which·processes·that | 236 | specification·of·a·supervisor.·See·<a·href="appup_cookbook.html#sup">Appup·Cookbook</a>.</p><p>When·a·module·is·to·be·updated,·the·release·handler·finds·which·processes·that |
| 237 | are·<em>using</em>·the·module·by·traversing·the·supervision·tree·of·each·running | 237 | are·<em>using</em>·the·module·by·traversing·the·supervision·tree·of·each·running |
| 238 | application·and·checking·all·the·child·specifications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 238 | application·and·checking·all·the·child·specifications:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7565566007-1">{</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StartFunc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Restart</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·221,·SHA:·8a2bd389b4e01879c9e89ac2bdbc82bdeec1496e2ccab1a59a6df3e3cb29d24a·...·]7-1">}</span></code></pre><p>A·process·uses·a·module·if·the·name·is·listed·in·<code·class="inline">Modules</code>·in·the·child |
| 239 | specification·for·the·process.</p><p>If·<code·class="inline">Modules=dynamic</code>,·which·is·the·case·for·event·managers,·the·event·manager | 239 | specification·for·the·process.</p><p>If·<code·class="inline">Modules=dynamic</code>,·which·is·the·case·for·event·managers,·the·event·manager |
| 240 | process·informs·the·release·handler·about·the·list·of·currently·installed·event | 240 | process·informs·the·release·handler·about·the·list·of·currently·installed·event |
| 241 | handlers·(<code·class="inline">gen_event</code>),·and·it·is·checked·if·the·module·name·is·in·this·list | 241 | handlers·(<code·class="inline">gen_event</code>),·and·it·is·checked·if·the·module·name·is·in·this·list |
| 242 | instead.</p><p>The·release·handler·suspends,·asks·for·code·change,·and·resumes·processes·by | 242 | instead.</p><p>The·release·handler·suspends,·asks·for·code·change,·and·resumes·processes·by |
| 243 | calling·the·functions·<code·class="inline">sys:suspend/1,2</code>,·<code·class="inline">sys:change_code/4,5</code>,·and | 243 | calling·the·functions·<code·class="inline">sys:suspend/1,2</code>,·<code·class="inline">sys:change_code/4,5</code>,·and |
| 244 | <code·class="inline">sys:resume/1,2</code>,·respectively.</p><h3·id="add_module-and-delete_module"·class="section-heading"> | 244 | <code·class="inline">sys:resume/1,2</code>,·respectively.</p><h3·id="add_module-and-delete_module"·class="section-heading"> |
| 245 | ··<a·href="#add_module-and-delete_module"·class="hover-link"> | 245 | ··<a·href="#add_module-and-delete_module"·class="hover-link"> |
| 246 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 246 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 247 | ··</a> | 247 | ··</a> |
| 248 | ··<span·class="text">add_module·and·delete_module</span> | 248 | ··<span·class="text">add_module·and·delete_module</span> |
| 249 | </h3> | 249 | </h3> |
| 250 | <p>If·a·new·module·is·introduced,·the·following·instruction·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 250 | <p>If·a·new·module·is·introduced,·the·following·instruction·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7595175286-1">{</span><span·class="ss">add_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p"·data-group-id="7595175286-1">}</span></code></pre><p>This·instruction·loads·module·<code·class="inline">Module</code>.·When·running·Erlang·in |
| 251 | embedded·mode·it·is·necessary·to·use·this·this·instruction.·It·is·not | 251 | embedded·mode·it·is·necessary·to·use·this·this·instruction.·It·is·not |
| 252 | strictly·required·when·running·Erlang·in·interactive·mode,·since·the | 252 | strictly·required·when·running·Erlang·in·interactive·mode,·since·the |
| 253 | code·server·automatically·searches·for·and·loads·unloaded·modules.</p><p>The·opposite·of·<code·class="inline">add_module</code>·is·<code·class="inline">delete_module</code>,·which·unloads·a·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="05 | 253 | code·server·automatically·searches·for·and·loads·unloaded·modules.</p><p>The·opposite·of·<code·class="inline">add_module</code>·is·<code·class="inline">delete_module</code>,·which·unloads·a·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0567124955-1">{</span><span·class="nb">delete_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p"·data-group-id="0567124955-1">}</span></code></pre><p>Any·process,·in·any·application,·with·<code·class="inline">Module</code>·as·residence·module,·is |
| 254 | killed·when·the·instruction·is·evaluated.·Therefore,·the·user·must | 254 | killed·when·the·instruction·is·evaluated.·Therefore,·the·user·must |
| 255 | ensure·that·all·such·processes·are·terminated·before·deleting·module | 255 | ensure·that·all·such·processes·are·terminated·before·deleting·module |
| 256 | <code·class="inline">Module</code>·to·avoid·a·situation·with·failing·supervisor·restarts.</p><h3·id="application-instructions"·class="section-heading"> | 256 | <code·class="inline">Module</code>·to·avoid·a·situation·with·failing·supervisor·restarts.</p><h3·id="application-instructions"·class="section-heading"> |
| 257 | ··<a·href="#application-instructions"·class="hover-link"> | 257 | ··<a·href="#application-instructions"·class="hover-link"> |
| 258 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 258 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 259 | ··</a> | 259 | ··</a> |
| 260 | ··<span·class="text">Application·Instructions</span> | 260 | ··<span·class="text">Application·Instructions</span> |
| Offset 341, 60 lines modified | Offset 341, 60 lines modified | ||
| 341 | <code·class="inline">.app</code>·file.</li><li>Each·<code·class="inline">UpFromVsn</code>·is·a·previous·version·of·the·application·to·upgrade·from.</li><li>Each·<code·class="inline">DownToVsn</code>·is·a·previous·version·of·the·application·to·downgrade·to.</li><li>Each·<code·class="inline">Instructions</code>·is·a·list·of·release·handling·instructions.</li></ul><p><code·class="inline">UpFromVsn</code>·and·<code·class="inline">DownToVsn</code>·can·also·be·specified·as·regular·expressions.·For | 341 | <code·class="inline">.app</code>·file.</li><li>Each·<code·class="inline">UpFromVsn</code>·is·a·previous·version·of·the·application·to·upgrade·from.</li><li>Each·<code·class="inline">DownToVsn</code>·is·a·previous·version·of·the·application·to·downgrade·to.</li><li>Each·<code·class="inline">Instructions</code>·is·a·list·of·release·handling·instructions.</li></ul><p><code·class="inline">UpFromVsn</code>·and·<code·class="inline">DownToVsn</code>·can·also·be·specified·as·regular·expressions.·For |
| 342 | more·information·about·the·syntax·and·contents·of·the·<code·class="inline">.appup</code>·file,·see | 342 | more·information·about·the·syntax·and·contents·of·the·<code·class="inline">.appup</code>·file,·see |
| 343 | <a·href="../../lib/sasl-4.2.2/doc/html/appup.html"><code·class="inline">appup</code></a>·in·SASL.</p><p><a·href="appup_cookbook.html">Appup·Cookbook</a>·includes·examples·of·<code·class="inline">.appup</code>·files·for | 343 | <a·href="../../lib/sasl-4.2.2/doc/html/appup.html"><code·class="inline">appup</code></a>·in·SASL.</p><p><a·href="appup_cookbook.html">Appup·Cookbook</a>·includes·examples·of·<code·class="inline">.appup</code>·files·for |
| 344 | typical·upgrade/downgrade·cases.</p><p><em>Example:</em>·Consider·the·release·<code·class="inline">ch_rel-1</code>·from | 344 | typical·upgrade/downgrade·cases.</p><p><em>Example:</em>·Consider·the·release·<code·class="inline">ch_rel-1</code>·from |
| 345 | <a·href="release_structure.html#ch_rel">Releases</a>.·Assume·you·want·to·add·a·function | 345 | <a·href="release_structure.html#ch_rel">Releases</a>.·Assume·you·want·to·add·a·function |
| 346 | <code·class="inline">available/0</code>·to·server·<code·class="inline">ch3</code>,·which·returns·the·number·of·available·channels | 346 | <code·class="inline">available/0</code>·to·server·<code·class="inline">ch3</code>,·which·returns·the·number·of·available·channels |
| 347 | (when·trying·out·the·example,·make·the·change·in·a·copy·of·the·original | 347 | (when·trying·out·the·example,·make·the·change·in·a·copy·of·the·original |
| 348 | directory,·to·ensure·that·the·first·version·is·still·available):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 348 | directory,·to·ensure·that·the·first·version·is·still·available):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9257701994-1">(</span><span·class="ss">ch3</span><span·class="p"·data-group-id="9257701994-1">)</span><span·class="p">.</span><span·class="w"> |
| 349 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 349 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="9257701994-2">(</span><span·class="ss">gen_server</span><span·class="p"·data-group-id="9257701994-2">)</span><span·class="p">.</span><span·class="w"> |
| 350 | </span><span·class="w"> | 350 | </span><span·class="w"> |
| 351 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 351 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9257701994-3">(</span><span·class="p"·data-group-id="9257701994-4">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="9257701994-4">]</span><span·class="p"·data-group-id="9257701994-3">)</span><span·class="p">.</span><span·class="w"> |
| 352 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 352 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9257701994-5">(</span><span·class="p"·data-group-id="9257701994-6">[</span><span·class="ss">alloc</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">free</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·115,·SHA:·46d4d76fe1cf9d438a9f37a26e234727db57608a53e370069d5596288942dd45·...·]4-5">)</span><span·class="p">.</span><span·class="w"> |
| 353 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 353 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9257701994-7">(</span><span·class="p"·data-group-id="9257701994-8">[</span><span·class="ss">available</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="9257701994-8">]</span><span·class="p"·data-group-id="9257701994-7">)</span><span·class="p">.</span><span·class="w"> |
| 354 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 354 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9257701994-9">(</span><span·class="p"·data-group-id="9257701994-10">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</s[·...·truncated·by·diffoscope;·len:·255,·SHA:·af893743d22d86094c1c878d3abc56aa8144795191a8e6567e1172d5e7c05256·...·]4-9">)</span><span·class="p">.</span><span·class="w"> |
| 355 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 355 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="9257701994-11">(</span><span·class="p"·data-group-id="9257701994-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 356 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 356 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="9257701994-12">(</span><span·class="p"·data-group-id="9257701994-13">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p"·data-group-id="9257701994-13">}</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·406,·SHA:·b1a580238424cf2abe8abbc2a644625d0575187ec2ba2b48eb484257d7fa369b·...·]4-12">)</span><span·class="p">.</span><span·class="w"> |
| 357 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id=" | 357 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="9257701994-16">(</span><span·class="p"·data-group-id="9257701994-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 358 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 358 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9257701994-17">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data-group-id="9257701994-17">)</span><span·class="p">.</span><span·class="w"> |
| 359 | </span><span·class="nf">free</span><span·class="p"·data-group-id=" | 359 | </span><span·class="nf">free</span><span·class="p"·data-group-id="9257701994-18">(</span><span·class="n">Ch</span><span·class="p"·data-group-id="9257701994-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 360 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id=" | 360 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="9257701994-19">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9257701994-20">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·0a3f7ae185155cf1fe5569bd4274ba7a13a78153ab29f567c2ac01725775ac26·...·]4-19">)</span><span·class="p">.</span><span·class="w"> |
| 361 | </span><span·class="nf">available</span><span·class="p"·data-group-id=" | 361 | </span><span·class="nf">available</span><span·class="p"·data-group-id="9257701994-21">(</span><span·class="p"·data-group-id="9257701994-21">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 362 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 362 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9257701994-22">(</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">available</span><span·class="p"·data-group-id="9257701994-22">)</span><span·class="p">.</span><span·class="w"> |
| 363 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 363 | </span><span·class="nf">init</span><span·class="p"·data-group-id="9257701994-23">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="9257701994-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 364 | ····</span><span·class="p"·data-group-id=" | 364 | ····</span><span·class="p"·data-group-id="9257701994-24">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">channels</span><span·class="p"·data-group-id="9257701994-25">(</span><span·class="p"·data-group-id="9257701994-25">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·21,·SHA:·0794023f337af6a13eede4f471957a95d9c213c726c4c6d5f9ffe8e8123a402c·...·]4-24">}</span><span·class="p">.</span><span·class="w"> |
| 365 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 365 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="9257701994-26">(</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·9,·SHA:·4de5f100d70ffcb25edf34a3ddc8a64d6f50c2723f680f86455b2a1a5702cdd5·...·]4-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 366 | ····</span><span·class="p"·data-group-id=" | 366 | ····</span><span·class="p"·data-group-id="9257701994-27">{</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="9257701994-27">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·142,·SHA:·68c90948954eab7f763b42583efc8635dde379e4233a26017e33831a569b59e7·...·]4-28">)</span><span·class="p">,</span><span·class="w"> |
| 367 | ····</span><span·class="p"·data-group-id=" | 367 | ····</span><span·class="p"·data-group-id="9257701994-29">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="9257701994-29">}</span><span·class="p">;</span><span·class="w"> |
| 368 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 368 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="9257701994-30">(</span><span·class="ss">available</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·13,·SHA:·42b4df640dbfef47190ff567be1cfadf8734b05aeec5564953abaeb8f7b8ac74·...·]4-30">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 369 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">available</span><span·class="p"·data-group-id=" | 369 | ····</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">available</span><span·class="p"·data-group-id="9257701994-31">(</span><span·class="n">Chs</span><span·class="p"·data-group-id="9257701994-31">)</span><span·class="p">,</span><span·class="w"> |
| 370 | ····</span><span·class="p"·data-group-id=" | 370 | ····</span><span·class="p"·data-group-id="9257701994-32">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="9257701994-32">}</span><span·class="p">.</span><span·class="w"> |
| 371 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id=" | 371 | </span><span·class="nf">handle_cast</span><span·class="p"·data-group-id="9257701994-33">(</span><span·class="p"·data-group-id="9257701994-34">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ch</span><span·class="p"·data-group-id="9257701994-34">}</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·90,·SHA:·8551e5df3f70f41e98447e492679af33461688a18ce5df7ff7a803cae2eecb5c·...·]4-33">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 372 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 372 | ····</span><span·class="n">Chs2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="9257701994-35">(</span><span·class="n">Ch</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs</span><span·class="p"·data-group-id="9257701994-35">)</span><span·class="p">,</span><span·class="w"> |
| 373 | ····</span><span·class="p"·data-group-id=" | 373 | ····</span><span·class="p"·data-group-id="9257701994-36">{</span><span·class="ss">noreply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Chs2</span><span·class="p"·data-group-id="9257701994-36">}</span><span·class="p">.</span></code></pre><p>A·new·version·of·the·<code·class="inline">ch_app.app</code>·file·must·now·be·created,·where·the·version·is |
| 374 | updated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 374 | updated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7449240268-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w"> |
| 375 | ·</span><span·class="p"·data-group-id=" | 375 | ·</span><span·class="p"·data-group-id="7449240268-2">[</span><span·class="p"·data-group-id="7449240268-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Channel·allocator"</span><span·class="p"·data-group-id="7449240268-3">}</span><span·class="p">,</span><span·class="w"> |
| 376 | ··</span><span·class="p"·data-group-id=" | 376 | ··</span><span·class="p"·data-group-id="7449240268-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2"</span><span·class="p"·data-group-id="7449240268-4">}</span><span·class="p">,</span><span·class="w"> |
| 377 | ··</span><span·class="p"·data-group-id=" | 377 | ··</span><span·class="p"·data-group-id="7449240268-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7449240268-6">[</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_sup<[·...·truncated·by·diffoscope;·len:·175,·SHA:·e208d9641f712c9535673e070630cc90c87319f662494d08caefa52947c45053·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 378 | ··</span><span·class="p"·data-group-id=" | 378 | ··</span><span·class="p"·data-group-id="7449240268-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7449240268-8">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="7449240268-8">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·e68fd763e501935df86d86615e6b32c50961fcd0e95f08a72c28161023e3371c·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 379 | ··</span><span·class="p"·data-group-id=" | 379 | ··</span><span·class="p"·data-group-id="7449240268-9">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7449240268-10">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">s[·...·truncated·by·diffoscope;·len:·183,·SHA:·aec9724140cbf3fcb9fb578842e76fdf9a8c934b612ca6620a809c108d36f551·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 380 | ··</span><span·class="p"·data-group-id=" | 380 | ··</span><span·class="p"·data-group-id="7449240268-11">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7449240268-12">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="p"·data-group-id="7449240268-13">[</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·ba3b5fced0d734096c19ed5159a8d9664ddaca37a2058749e9197814741c5e04·...·]-11">}</span><span·class="w"> |
| 381 | ·</span><span·class="p"·data-group-id=" | 381 | ·</span><span·class="p"·data-group-id="7449240268-2">]</span><span·class="p"·data-group-id="7449240268-1">}</span><span·class="p">.</span></code></pre><p>To·upgrade·<code·class="inline">ch_app</code>·from·<code·class="inline">"1"</code>·to·<code·class="inline">"2"</code>·(and·to·downgrade·from·<code·class="inline">"2"</code>·to·<code·class="inline">"1"</code>), |
| 382 | you·only·need·to·load·the·new·(old)·version·of·the·<code·class="inline">ch3</code>·callback·module.·Create | 382 | you·only·need·to·load·the·new·(old)·version·of·the·<code·class="inline">ch3</code>·callback·module.·Create |
| 383 | the·application·upgrade·file·<code·class="inline">ch_app.appup</code>·in·the·<code·class="inline">ebin</code>·directory:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 383 | the·application·upgrade·file·<code·class="inline">ch_app.appup</code>·in·the·<code·class="inline">ebin</code>·directory:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3829431154-1">{</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w"> |
| 384 | ·</span><span·class="p"·data-group-id=" | 384 | ·</span><span·class="p"·data-group-id="3829431154-2">[</span><span·class="p"·data-group-id="3829431154-3">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3829431154-4">[</span><span·class="p"·data-group-id="3829431154-5"[·...·truncated·by·diffoscope;·len:·319,·SHA:·bbc8bbd7c43b244eb12ce7d20ef5c04d5dcac68b70d3d648e78133a0c2254db8·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 385 | ·</span><span·class="p"·data-group-id=" | 385 | ·</span><span·class="p"·data-group-id="3829431154-6">[</span><span·class="p"·data-group-id="3829431154-7">{</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3829431154-8">[</span><span·class="p"·data-group-id="3829431154-9"[·...·truncated·by·diffoscope;·len:·319,·SHA:·c8a85f78d2079fa7c02743c85d7b92009e89ba852691c944c059694acb94ae76·...·]-6">]</span><span·class="w"> |
| 386 | </span><span·class="p"·data-group-id=" | 386 | </span><span·class="p"·data-group-id="3829431154-1">}</span><span·class="p">.</span></code></pre><p><a·href=""·id="relup"></a></p><h2·id="release-upgrade-file"·class="section-heading"> |
| 387 | ··<a·href="#release-upgrade-file"·class="hover-link"> | 387 | ··<a·href="#release-upgrade-file"·class="hover-link"> |
| 388 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 388 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 389 | ··</a> | 389 | ··</a> |
| 390 | ··<span·class="text">Release·Upgrade·File</span> | 390 | ··<span·class="text">Release·Upgrade·File</span> |
| 391 | </h2> | 391 | </h2> |
| 392 | <p>To·define·how·to·upgrade/downgrade·between·the·new·version·and·previous·versions | 392 | <p>To·define·how·to·upgrade/downgrade·between·the·new·version·and·previous·versions |
| 393 | of·a·release,·a·<em>release·upgrade·file</em>,·or·in·short·<code·class="inline">.relup</code>·file,·is·to·be | 393 | of·a·release,·a·<em>release·upgrade·file</em>,·or·in·short·<code·class="inline">.relup</code>·file,·is·to·be |
| Offset 405, 22 lines modified | Offset 405, 22 lines modified | ||
| 405 | are·to·be·added·and·deleted,·and·which·applications·that·must·be·upgraded·and/or | 405 | are·to·be·added·and·deleted,·and·which·applications·that·must·be·upgraded·and/or |
| 406 | downgraded.·The·instructions·for·this·are·fetched·from·the·<code·class="inline">.appup</code>·files·and | 406 | downgraded.·The·instructions·for·this·are·fetched·from·the·<code·class="inline">.appup</code>·files·and |
| 407 | transformed·into·a·single·list·of·low-level·instructions·in·the·right·order.</p><p>If·the·<code·class="inline">relup</code>·file·is·relatively·simple,·it·can·be·created·manually.·It·is·only | 407 | transformed·into·a·single·list·of·low-level·instructions·in·the·right·order.</p><p>If·the·<code·class="inline">relup</code>·file·is·relatively·simple,·it·can·be·created·manually.·It·is·only |
| 408 | to·contain·low-level·instructions.</p><p>For·details·about·the·syntax·and·contents·of·the·release·upgrade·file,·see | 408 | to·contain·low-level·instructions.</p><p>For·details·about·the·syntax·and·contents·of·the·release·upgrade·file,·see |
| 409 | <a·href="../../lib/sasl-4.2.2/doc/html/relup.html"><code·class="inline">relup</code></a>·in·SASL.</p><p><em>Example,·continued·from·the·previous·section:</em>·You·have·a·new·version·"2"·of | 409 | <a·href="../../lib/sasl-4.2.2/doc/html/relup.html"><code·class="inline">relup</code></a>·in·SASL.</p><p><em>Example,·continued·from·the·previous·section:</em>·You·have·a·new·version·"2"·of |
| 410 | <code·class="inline">ch_app</code>·and·an·<code·class="inline">.appup</code>·file.·A·new·version·of·the·<code·class="inline">.rel</code>·file·is·also·needed. | 410 | <code·class="inline">ch_app</code>·and·an·<code·class="inline">.appup</code>·file.·A·new·version·of·the·<code·class="inline">.rel</code>·file·is·also·needed. |
| 411 | This·time·the·file·is·called·<code·class="inline">ch_rel-2.rel</code>·and·the·release·version·string·is | 411 | This·time·the·file·is·called·<code·class="inline">ch_rel-2.rel</code>·and·the·release·version·string·is |
| 412 | changed·from·"A"·to·"B":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 412 | changed·from·"A"·to·"B":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5492091327-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 413 | ·</span><span·class="p"·data-group-id=" | 413 | ·</span><span·class="p"·data-group-id="5492091327-2">{</span><span·class="s">"ch_rel"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"B"</span><span·class="p"·data-group-id="5492091327-2">}</span><span·class="p">,</span><span·class="w"> |
| 414 | ·</span><span·class="p"·data-group-id=" | 414 | ·</span><span·class="p"·data-group-id="5492091327-3">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"14.2.5"</span><span·class="p"·data-group-id="5492091327-3">}</span><span·class="p">,</span><span·class="w"> |
| 415 | ·</span><span·class="p"·data-group-id=" | 415 | ·</span><span·class="p"·data-group-id="5492091327-4">[</span><span·class="p"·data-group-id="5492091327-5">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"9.2.4"</span><span·class="p"·data-group-id="5492091327-5">}</span><span·class="p">,</span><span·class="w"> |
| 416 | ··</span><span·class="p"·data-group-id=" | 416 | ··</span><span·class="p"·data-group-id="5492091327-6">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"5.2.3"</span><span·class="p"·data-group-id="5492091327-6">}</span><span·class="p">,</span><span·class="w"> |
| 417 | ··</span><span·class="p"·data-group-id=" | 417 | ··</span><span·class="p"·data-group-id="5492091327-7">{</span><span·class="ss">sasl</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"4.2.1"</span><span·class="p"·data-group-id="5492091327-7">}</span><span·class="p">,</span><span·class="w"> |
| 418 | ··</span><span·class="p"·data-group-id=" | 418 | ··</span><span·class="p"·data-group-id="5492091327-8">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2"</span><span·class="p"·data-group-id="5492091327-8">}</span><span·class="p"·data-group-id="5492091327-4">]</span><span·class="w"> |
| 419 | </span><span·class="p"·data-group-id=" | 419 | </span><span·class="p"·data-group-id="5492091327-1">}</span><span·class="p">.</span></code></pre><p>Now·the·<code·class="inline">relup</code>·file·can·be·generated:</p><pre><code·class="text">1>·systools:make_relup("ch_rel-2",·["ch_rel-1"],·["ch_rel-1"]). |
| 420 | ok</code></pre><p>This·generates·a·<code·class="inline">relup</code>·file·with·instructions·for·how·to·upgrade·from·version | 420 | ok</code></pre><p>This·generates·a·<code·class="inline">relup</code>·file·with·instructions·for·how·to·upgrade·from·version |
| 421 | "A"·("ch_rel-1")·to·version·"B"·("ch_rel-2")·and·how·to·downgrade·from·version | 421 | "A"·("ch_rel-1")·to·version·"B"·("ch_rel-2")·and·how·to·downgrade·from·version |
| 422 | "B"·to·version·"A".</p><p>Both·the·old·and·new·versions·of·the·<code·class="inline">.app</code>·and·<code·class="inline">.rel</code>·files·must·be·in·the·code | 422 | "B"·to·version·"A".</p><p>Both·the·old·and·new·versions·of·the·<code·class="inline">.app</code>·and·<code·class="inline">.rel</code>·files·must·be·in·the·code |
| 423 | path,·as·well·as·the·<code·class="inline">.appup</code>·and·(new)·<code·class="inline">.beam</code>·files.·The·code·path·can·be | 423 | path,·as·well·as·the·<code·class="inline">.appup</code>·and·(new)·<code·class="inline">.beam</code>·files.·The·code·path·can·be |
| 424 | extended·by·using·the·option·<code·class="inline">path</code>:</p><pre><code·class="text">1>·systools:make_relup("ch_rel-2",·["ch_rel-1"],·["ch_rel-1"], | 424 | extended·by·using·the·option·<code·class="inline">path</code>:</p><pre><code·class="text">1>·systools:make_relup("ch_rel-2",·["ch_rel-1"],·["ch_rel-1"], |
| 425 | [{path,["../ch_rel-1", | 425 | [{path,["../ch_rel-1", |
| 426 | "../ch_rel-1/lib/ch_app-1/ebin"]}]). | 426 | "../ch_rel-1/lib/ch_app-1/ebin"]}]). |
| Offset 433, 25 lines modified | Offset 433, 25 lines modified | ||
| 433 | <p>When·you·have·made·a·new·version·of·a·release,·a·release·package·can·be·created | 433 | <p>When·you·have·made·a·new·version·of·a·release,·a·release·package·can·be·created |
| 434 | with·this·new·version·and·transferred·to·the·target·environment.</p><p>To·install·the·new·version·of·the·release·in·runtime,·the·<em>release | 434 | with·this·new·version·and·transferred·to·the·target·environment.</p><p>To·install·the·new·version·of·the·release·in·runtime,·the·<em>release |
| 435 | handler</em>·is·used.·This·is·a·process·belonging·to·the·SASL·application, | 435 | handler</em>·is·used.·This·is·a·process·belonging·to·the·SASL·application, |
| Max diff block lines reached; 23164/69668 bytes (33.25%) of diff not shown. | |||
| Offset 136, 37 lines modified | Offset 136, 37 lines modified | ||
| 136 | ··<a·href="#release-resource-file"·class="hover-link"> | 136 | ··<a·href="#release-resource-file"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Release·Resource·File</span> | 139 | ··<span·class="text">Release·Resource·File</span> |
| 140 | </h2> | 140 | </h2> |
| 141 | <p>To·define·a·release,·create·a·<em>release·resource·file</em>,·or·in·short·a·<code·class="inline">.rel</code> | 141 | <p>To·define·a·release,·create·a·<em>release·resource·file</em>,·or·in·short·a·<code·class="inline">.rel</code> |
| 142 | file.·In·the·file,·specify·the·name·and·version·of·the·release,·which·ERTS | 142 | file.·In·the·file,·specify·the·name·and·version·of·the·release,·which·ERTS |
| 143 | version·it·is·based·on,·and·which·applications·it·consists·of:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 143 | version·it·is·based·on,·and·which·applications·it·consists·of:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2918235839-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2918235839-2">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="n">Vsn</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·273,·SHA:·0fedf45f3281d8045b35a369b160ecfafc611b867878a2248a589c5ba1b13c3c·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 144 | ·</span><span·class="p"·data-group-id=" | 144 | ·</span><span·class="p"·data-group-id="2918235839-4">[</span><span·class="p"·data-group-id="2918235839-5">{</span><span·class="n">Application1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsn1</span><span·class="p"·data-group-id="2918235839-5">}</span><span·class="p">,</span><span·class="w"> |
| 145 | ···</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 145 | ···</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 146 | ··</span><span·class="p"·data-group-id=" | 146 | ··</span><span·class="p"·data-group-id="2918235839-6">{</span><span·class="n">ApplicationN</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsnN</span><span·class="p"·data-group-id="2918235839-6">}</span><span·class="p"·data-group-id="2918235839-4">]</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·d604c66862b07067f9904084f180f163ab4418c8c7c1bf5ebdb65714a0d090cc·...·]-1">}</span><span·class="p">.</span></code></pre><p><code·class="inline">Name</code>,·<code·class="inline">Vsn</code>,·<code·class="inline">EVsn</code>,·and·<code·class="inline">AppVsn</code>·are·strings.</p><p>The·file·must·be·named·<code·class="inline">Rel.rel</code>,·where·<code·class="inline">Rel</code>·is·a·unique·name.</p><p>Each·<code·class="inline">Application</code>·(atom)·and·<code·class="inline">AppVsn</code>·is·the·name·and·version·of·an·application |
| 147 | included·in·the·release.·The·minimal·release·based·on·Erlang/OTP·consists·of·the | 147 | included·in·the·release.·The·minimal·release·based·on·Erlang/OTP·consists·of·the |
| 148 | Kernel·and·STDLIB·applications,·so·these·applications·must·be·included·in·the | 148 | Kernel·and·STDLIB·applications,·so·these·applications·must·be·included·in·the |
| 149 | list.</p><p>If·the·release·is·to·be·upgraded,·it·must·also·include·the·SASL·application.</p><p><a·href=""·id="ch_rel"></a></p><p>Here·is·an·example·showing·the·<code·class="inline">.app</code>·file·for·a·release·of·<code·class="inline">ch_app</code>·from | 149 | list.</p><p>If·the·release·is·to·be·upgraded,·it·must·also·include·the·SASL·application.</p><p><a·href=""·id="ch_rel"></a></p><p>Here·is·an·example·showing·the·<code·class="inline">.app</code>·file·for·a·release·of·<code·class="inline">ch_app</code>·from |
| 150 | the·<a·href="applications.html#ch_app">Applications</a>·section:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 150 | the·<a·href="applications.html#ch_app">Applications</a>·section:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0047230649-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w"> |
| 151 | ·</span><span·class="p"·data-group-id=" | 151 | ·</span><span·class="p"·data-group-id="0047230649-2">[</span><span·class="p"·data-group-id="0047230649-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Channel·allocator"</span><span·class="p"·data-group-id="0047230649-3">}</span><span·class="p">,</span><span·class="w"> |
| 152 | ··</span><span·class="p"·data-group-id=" | 152 | ··</span><span·class="p"·data-group-id="0047230649-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="0047230649-4">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ··</span><span·class="p"·data-group-id=" | 153 | ··</span><span·class="p"·data-group-id="0047230649-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0047230649-6">[</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ch_sup<[·...·truncated·by·diffoscope;·len:·175,·SHA:·4789ad7c9d663633ee33513ba99dd084c8a117e259aeade1869b56bae796d14a·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 154 | ··</span><span·class="p"·data-group-id=" | 154 | ··</span><span·class="p"·data-group-id="0047230649-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0047230649-8">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="0047230649-8">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·aba28f0852ec1d5ffca64d1d5f97eccb3a9d44b639858236d1434f8a7cee935f·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ··</span><span·class="p"·data-group-id=" | 155 | ··</span><span·class="p"·data-group-id="0047230649-9">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0047230649-10">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">s[·...·truncated·by·diffoscope;·len:·183,·SHA:·cafe1ae55849a184081cb8eda1d8e04eb8605dd0a9f5ee7ff6f735af451bec83·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ··</span><span·class="p"·data-group-id=" | 156 | ··</span><span·class="p"·data-group-id="0047230649-11">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0047230649-12">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="p"·data-group-id="0047230649-13">[</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·64dc10f004662b644d9dab2b119eea8a239fbac9cd1c7f4f0da705aff21bc7f1·...·]-11">}</span><span·class="w"> |
| 157 | ·</span><span·class="p"·data-group-id=" | 157 | ·</span><span·class="p"·data-group-id="0047230649-2">]</span><span·class="p"·data-group-id="0047230649-1">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">.rel</code>·file·must·also·contain·<code·class="inline">kernel</code>,·<code·class="inline">stdlib</code>,·and·<code·class="inline">sasl</code>,·as·these |
| 158 | applications·are·required·by·<code·class="inline">ch_app</code>.·The·file·is·called·<code·class="inline">ch_rel-1.rel</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="08 | 158 | applications·are·required·by·<code·class="inline">ch_app</code>.·The·file·is·called·<code·class="inline">ch_rel-1.rel</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0823342847-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w"> |
| 159 | ·</span><span·class="p"·data-group-id="08 | 159 | ·</span><span·class="p"·data-group-id="0823342847-2">{</span><span·class="s">"ch_rel"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"A"</span><span·class="p"·data-group-id="0823342847-2">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ·</span><span·class="p"·data-group-id="08 | 160 | ·</span><span·class="p"·data-group-id="0823342847-3">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"14.2.5"</span><span·class="p"·data-group-id="0823342847-3">}</span><span·class="p">,</span><span·class="w"> |
| 161 | ·</span><span·class="p"·data-group-id="08 | 161 | ·</span><span·class="p"·data-group-id="0823342847-4">[</span><span·class="p"·data-group-id="0823342847-5">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"9.2.4"</span><span·class="p"·data-group-id="0823342847-5">}</span><span·class="p">,</span><span·class="w"> |
| 162 | ··</span><span·class="p"·data-group-id="08 | 162 | ··</span><span·class="p"·data-group-id="0823342847-6">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"5.2.3"</span><span·class="p"·data-group-id="0823342847-6">}</span><span·class="p">,</span><span·class="w"> |
| 163 | ··</span><span·class="p"·data-group-id="08 | 163 | ··</span><span·class="p"·data-group-id="0823342847-7">{</span><span·class="ss">sasl</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"4.2.1"</span><span·class="p"·data-group-id="0823342847-7">}</span><span·class="p">,</span><span·class="w"> |
| 164 | ··</span><span·class="p"·data-group-id="08 | 164 | ··</span><span·class="p"·data-group-id="0823342847-8">{</span><span·class="ss">ch_app</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"1"</span><span·class="p"·data-group-id="0823342847-8">}</span><span·class="p"·data-group-id="0823342847-4">]</span><span·class="w"> |
| 165 | </span><span·class="p"·data-group-id="08 | 165 | </span><span·class="p"·data-group-id="0823342847-1">}</span><span·class="p">.</span></code></pre><p><a·href=""·id="boot"></a></p><h2·id="generating-boot-scripts"·class="section-heading"> |
| 166 | ··<a·href="#generating-boot-scripts"·class="hover-link"> | 166 | ··<a·href="#generating-boot-scripts"·class="hover-link"> |
| 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 168 | ··</a> | 168 | ··</a> |
| 169 | ··<span·class="text">Generating·Boot·Scripts</span> | 169 | ··<span·class="text">Generating·Boot·Scripts</span> |
| 170 | </h2> | 170 | </h2> |
| 171 | <p><a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·in·the·SASL·application·includes·tools·to·build·and·check | 171 | <p><a·href="../../lib/sasl-4.2.2/doc/html/systools.html"><code·class="inline">systools</code></a>·in·the·SASL·application·includes·tools·to·build·and·check |
| 172 | releases.·The·functions·read·the·<code·class="inline">.rel</code>·and·<code·class="inline">.app</code>·files·and·perform | 172 | releases.·The·functions·read·the·<code·class="inline">.rel</code>·and·<code·class="inline">.app</code>·files·and·perform |
| Offset 190, 17 lines modified | Offset 190, 17 lines modified | ||
| 190 | ··<a·href="#creating-a-release-package"·class="hover-link"> | 190 | ··<a·href="#creating-a-release-package"·class="hover-link"> |
| 191 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 191 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 192 | ··</a> | 192 | ··</a> |
| 193 | ··<span·class="text">Creating·a·Release·Package</span> | 193 | ··<span·class="text">Creating·a·Release·Package</span> |
| 194 | </h2> | 194 | </h2> |
| 195 | <p>The·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html#make_tar/2"><code·class="inline">systools:make_tar/1,2</code></a>·function·takes·a | 195 | <p>The·<a·href="../../lib/sasl-4.2.2/doc/html/systools.html#make_tar/2"><code·class="inline">systools:make_tar/1,2</code></a>·function·takes·a |
| 196 | <code·class="inline">.rel</code>·file·as·input·and·creates·a·zipped·tar·file·with·the·code·for | 196 | <code·class="inline">.rel</code>·file·as·input·and·creates·a·zipped·tar·file·with·the·code·for |
| 197 | the·specified·applications,·a·<em>release·package</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_script</span><span·class="p"·data-group-id=" | 197 | the·specified·applications,·a·<em>release·package</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_script</span><span·class="p"·data-group-id="6866693102-1">(</span><span·class="s">"ch_rel-1"</span><span·class="p"·data-group-id="6866693102-1">)</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 198 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 199 | 2>·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_tar</span><span·class="p"·data-group-id=" | 199 | 2>·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_tar</span><span·class="p"·data-group-id="6866693102-2">(</span><span·class="s">"ch_rel-1"</span><span·class="p"·data-group-id="6866693102-2">)</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="ss">ok</span></code></pre><p>The·release·package·by·default·contains:</p><ul><li>The·<code·class="inline">.app</code>·files</li><li>The·<code·class="inline">.rel</code>·file</li><li>The·object·code·for·all·applications,·structured·according·to·the | 200 | </span><span·class="ss">ok</span></code></pre><p>The·release·package·by·default·contains:</p><ul><li>The·<code·class="inline">.app</code>·files</li><li>The·<code·class="inline">.rel</code>·file</li><li>The·object·code·for·all·applications,·structured·according·to·the |
| 201 | <a·href="applications.html#app_dir">application·directory·structure</a></li><li>The·binary·boot·script·renamed·to·<code·class="inline">start.boot</code></li></ul><pre><code·class="text">%·tar·tf·ch_rel-1.tar | 201 | <a·href="applications.html#app_dir">application·directory·structure</a></li><li>The·binary·boot·script·renamed·to·<code·class="inline">start.boot</code></li></ul><pre><code·class="text">%·tar·tf·ch_rel-1.tar |
| 202 | lib/kernel-9.2.4/ebin/kernel.app | 202 | lib/kernel-9.2.4/ebin/kernel.app |
| 203 | lib/kernel-9.2.4/ebin/application.beam | 203 | lib/kernel-9.2.4/ebin/application.beam |
| 204 | ... | 204 | ... |
| 205 | lib/stdlib-5.2.3/ebin/stdlib.app | 205 | lib/stdlib-5.2.3/ebin/stdlib.app |
| 206 | lib/stdlib-5.2.3/ebin/argparse.beam | 206 | lib/stdlib-5.2.3/ebin/argparse.beam |
| Offset 351, 15 lines modified | Offset 351, 15 lines modified | ||
| 351 | ······<p·class="built-using"> | 351 | ······<p·class="built-using"> |
| 352 | ········Built·using | 352 | ········Built·using |
| 353 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 353 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 354 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 354 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 355 | ······</p> | 355 | ······</p> |
| 356 | <p>Copyright·©·1996-202 | 356 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 357 | ····</footer> | 357 | ····</footer> |
| 358 | ··</div> | 358 | ··</div> |
| 359 | </main> | 359 | </main> |
| 360 | </div> | 360 | </div> |
| 361 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 361 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 362 | ··<script> | 362 | ··<script> |
| 363 | ··let·initialized·=·false; | 363 | ··let·initialized·=·false; |
| Offset 128, 68 lines modified | Offset 128, 68 lines modified | ||
| 128 | </h2> | 128 | </h2> |
| 129 | <p>Before·improving·the·messenger·program,·let·us·look·at·some·general·principles, | 129 | <p>Before·improving·the·messenger·program,·let·us·look·at·some·general·principles, |
| 130 | using·the·ping·pong·program·as·an·example.·Recall·that·when·"ping"·finishes,·it | 130 | using·the·ping·pong·program·as·an·example.·Recall·that·when·"ping"·finishes,·it |
| 131 | tells·"pong"·that·it·has·done·so·by·sending·the·atom·<code·class="inline">finished</code>·as·a·message·to | 131 | tells·"pong"·that·it·has·done·so·by·sending·the·atom·<code·class="inline">finished</code>·as·a·message·to |
| 132 | "pong"·so·that·"pong"·can·also·finish.·Another·way·to·let·"pong"·finish·is·to | 132 | "pong"·so·that·"pong"·can·also·finish.·Another·way·to·let·"pong"·finish·is·to |
| 133 | make·"pong"·exit·if·it·does·not·receive·a·message·from·ping·within·a·certain | 133 | make·"pong"·exit·if·it·does·not·receive·a·message·from·ping·within·a·certain |
| 134 | time.·This·can·be·done·by·adding·a·<em>time-out</em>·to·<code·class="inline">pong</code>·as·shown·in·the | 134 | time.·This·can·be·done·by·adding·a·<em>time-out</em>·to·<code·class="inline">pong</code>·as·shown·in·the |
| 135 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 135 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9910507749-1">(</span><span·class="ss">tut19</span><span·class="p"·data-group-id="9910507749-1">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="w"> | 136 | </span><span·class="w"> |
| 137 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 137 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9910507749-2">(</span><span·class="p"·data-group-id="9910507749-3">[</span><span·class="ss">start_ping</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_pong</span><span·class="p">[·...·truncated·by·diffoscope;·len:·378,·SHA:·d1d4fd70b69702dfef7fbacacb0afa499e88b586197328ea9d5e1ce0a2119fab·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="nf">ping</span><span·class="p"·data-group-id=" | 138 | </span><span·class="nf">ping</span><span·class="p"·data-group-id="9910507749-4">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Node</span><span·class="p"·data-group-id="9910507749-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9910507749-5">(</span><span·class="s">"ping·finished</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9910507749-6">[</span><span·class="p"·data-group-id="99105[·...·truncated·by·diffoscope;·len:·58,·SHA:·561ed0d4c20b5f76f95f7a3a676fe17c6ee12bfb0f980da0157564e941950234·...·]-5">)</span><span·class="p">;</span><span·class="w"> |
| 140 | </span><span·class="nf">ping</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">ping</span><span·class="p"·data-group-id="9910507749-7">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Node</span><span·class="p"·data-group-id="9910507749-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ····</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="p"·data-group-id="9910507749-8">{</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Node</span><span·class="p"·data-group-id="9910507749-8">}</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·305,·SHA:·5b6e1016bea2fb7ccdb19ef7566938274112291523448f537b9222522a87cc5c·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 142 | ····</span><span·class="k">receive</span><span·class="w"> | 142 | ····</span><span·class="k">receive</span><span·class="w"> |
| 143 | ········</span><span·class="ss">pong</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 143 | ········</span><span·class="ss">pong</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 144 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 144 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9910507749-11">(</span><span·class="s">"Ping·received·pong</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9910507749-12">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·ffb30e51dc9d3219a1fad14665ccb8fc708b4898a8b9ec81ddb5e2721b8ae251·...·]-11">)</span><span·class="w"> |
| 145 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 145 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 146 | ····</span><span·class="nf">ping</span><span·class="p"·data-group-id=" | 146 | ····</span><span·class="nf">ping</span><span·class="p"·data-group-id="9910507749-13">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Node</span><span·class="p"·data-group-id="9[·...·truncated·by·diffoscope;·len:·9,·SHA:·8d7c76910c1747bebaabba9b05cce7e29c50b4485e43729581bd01f7713b653d·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="nf">pong</span><span·class="p"·data-group-id=" | 147 | </span><span·class="nf">pong</span><span·class="p"·data-group-id="9910507749-14">(</span><span·class="p"·data-group-id="9910507749-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 148 | ····</span><span·class="k">receive</span><span·class="w"> | 148 | ····</span><span·class="k">receive</span><span·class="w"> |
| 149 | ········</span><span·class="p"·data-group-id=" | 149 | ········</span><span·class="p"·data-group-id="9910507749-15">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ping_PID</span><span·class="p"·data-group-id="9910507749-15">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 150 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9910507749-16">(</span><span·class="s">"Pong·received·ping</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9910507749-17">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·2818970268ee1bfd98f4c97d0aec7a7fbe7fbc9f297dd2174efea768f6c80554·...·]-16">)</span><span·class="p">,</span><span·class="w"> |
| 151 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> | 151 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> |
| 152 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id=" | 152 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id="9910507749-18">(</span><span·class="p"·data-group-id="9910507749-18">)</span><span·class="w"> |
| 153 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 153 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 154 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 154 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9910507749-19">(</span><span·class="s">"Pong·timed·out</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9910507749-20">[</span><span·class="p"·data-group-id="99[·...·truncated·by·diffoscope;·len:·62,·SHA:·13b402d903570c00c6ce7b1ba682804e05929b5b1c53ed0d3d73f6b6e74a92c0·...·]-19">)</span><span·class="w"> |
| 155 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 155 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="nf">start_pong</span><span·class="p"·data-group-id=" | 156 | </span><span·class="nf">start_pong</span><span·class="p"·data-group-id="9910507749-21">(</span><span·class="p"·data-group-id="9910507749-21">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="9910507749-22">(</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="9910507749-23">(</span><span·class="ss">tut19</span><span·class="p">,</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·282,·SHA:·93636d126d2be6033804673adae2286094b3e80e55f78bd9313466898f207e86·...·]-22">)</span><span·class="p">.</span><span·class="w"> |
| 158 | </span><span·class="nf">start_ping</span><span·class="p"·data-group-id=" | 158 | </span><span·class="nf">start_ping</span><span·class="p"·data-group-id="9910507749-25">(</span><span·class="n">Pong_Node</span><span·class="p"·data-group-id="9910507749-25">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 159 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 159 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="9910507749-26">(</span><span·class="ss">tut19</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9910507749-27">[</span><span·class="mi">3</span><[·...·truncated·by·diffoscope;·len:·174,·SHA:·84e6c99b08576e488af54dcc6bd41b320948af05db3fab331f55c2d8faf51119·...·]-26">)</span><span·class="p">.</span></code></pre><p>After·this·is·compiled·and·the·file·<code·class="inline">tut19.beam</code>·is·copied·to·the·necessary |
| 160 | directories,·the·following·is·seen·on·(pong@kosken):</p><pre><code·class="text">(pong@kosken)1>·tut19:start_pong(). | 160 | directories,·the·following·is·seen·on·(pong@kosken):</p><pre><code·class="text">(pong@kosken)1>·tut19:start_pong(). |
| 161 | true | 161 | true |
| 162 | Pong·received·ping | 162 | Pong·received·ping |
| 163 | Pong·received·ping | 163 | Pong·received·ping |
| 164 | Pong·received·ping | 164 | Pong·received·ping |
| 165 | Pong·timed·out</code></pre><p>And·the·following·is·seen·on·(ping@gollum):</p><pre><code·class="text">(ping@gollum)1>·tut19:start_ping(pong@kosken). | 165 | Pong·timed·out</code></pre><p>And·the·following·is·seen·on·(ping@gollum):</p><pre><code·class="text">(ping@gollum)1>·tut19:start_ping(pong@kosken). |
| 166 | <0.36.0> | 166 | <0.36.0> |
| 167 | Ping·received·pong | 167 | Ping·received·pong |
| 168 | Ping·received·pong | 168 | Ping·received·pong |
| 169 | Ping·received·pong | 169 | Ping·received·pong |
| 170 | ping·finished</code></pre><p>The·time-out·is·set·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pong</span><span·class="p"·data-group-id=" | 170 | ping·finished</code></pre><p>The·time-out·is·set·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pong</span><span·class="p"·data-group-id="0796080356-1">(</span><span·class="p"·data-group-id="0796080356-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 171 | ····</span><span·class="k">receive</span><span·class="w"> | 171 | ····</span><span·class="k">receive</span><span·class="w"> |
| 172 | ········</span><span·class="p"·data-group-id=" | 172 | ········</span><span·class="p"·data-group-id="0796080356-2">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ping_PID</span><span·class="p"·data-group-id="0796080356-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 173 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0796080356-3">(</span><span·class="s">"Pong·received·ping</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0796080356-4">[</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·63,·SHA:·a026996981c070fc7b218a5951dbad77b6138aebe119b7131a683f97d3f498a2·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 174 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> | 174 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> |
| 175 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id=" | 175 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id="0796080356-5">(</span><span·class="p"·data-group-id="0796080356-5">)</span><span·class="w"> |
| 176 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 176 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 177 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0796080356-6">(</span><span·class="s">"Pong·timed·out</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0796080356-7">[</span><span·class="p"·data-group-id="0796[·...·truncated·by·diffoscope;·len:·59,·SHA:·cb5e2b88f9422ca2296815de0ed23a255a5c753a6a57707b00daa0990fd232d6·...·]-6">)</span><span·class="w"> |
| 178 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·time-out·(<code·class="inline">after·5000</code>)·is·started·when·<code·class="inline">receive</code>·is·entered.·The·time-out | 178 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·time-out·(<code·class="inline">after·5000</code>)·is·started·when·<code·class="inline">receive</code>·is·entered.·The·time-out |
| 179 | is·canceled·if·<code·class="inline">{ping,Ping_PID}</code>·is·received.·If·<code·class="inline">{ping,Ping_PID}</code>·is·not | 179 | is·canceled·if·<code·class="inline">{ping,Ping_PID}</code>·is·received.·If·<code·class="inline">{ping,Ping_PID}</code>·is·not |
| 180 | received,·the·actions·following·the·time-out·are·done·after·5000·milliseconds. | 180 | received,·the·actions·following·the·time-out·are·done·after·5000·milliseconds. |
| 181 | <code·class="inline">after</code>·must·be·last·in·the·<code·class="inline">receive</code>,·that·is,·preceded·by·all·other·message | 181 | <code·class="inline">after</code>·must·be·last·in·the·<code·class="inline">receive</code>,·that·is,·preceded·by·all·other·message |
| 182 | reception·specifications·in·the·<code·class="inline">receive</code>.·It·is·also·possible·to·call·a | 182 | reception·specifications·in·the·<code·class="inline">receive</code>.·It·is·also·possible·to·call·a |
| 183 | function·that·returned·an·integer·for·the·time-out:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">after</span><span·class="w">·</span><span·class="nf">pong_timeout</span><span·class="p"·data-group-id=" | 183 | function·that·returned·an·integer·for·the·time-out:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">after</span><span·class="w">·</span><span·class="nf">pong_timeout</span><span·class="p"·data-group-id="5203449335-1">(</span><span·class="p"·data-group-id="5203449335-1">)</span><span·class="w">·</span><span·class="p">-></span></code></pre><p>In·general,·there·are·better·ways·than·using·time-outs·to·supervise·parts·of·a |
| 184 | distributed·Erlang·system.·Time-outs·are·usually·appropriate·to·supervise | 184 | distributed·Erlang·system.·Time-outs·are·usually·appropriate·to·supervise |
| 185 | external·events,·for·example,·if·you·have·expected·a·message·from·some·external | 185 | external·events,·for·example,·if·you·have·expected·a·message·from·some·external |
| 186 | system·within·a·specified·time.·For·example,·a·time-out·can·be·used·to·log·a | 186 | system·within·a·specified·time.·For·example,·a·time-out·can·be·used·to·log·a |
| 187 | user·out·of·the·messenger·system·if·they·have·not·accessed·it·for,·say,·ten | 187 | user·out·of·the·messenger·system·if·they·have·not·accessed·it·for,·say,·ten |
| 188 | minutes.</p><h2·id="error-handling"·class="section-heading"> | 188 | minutes.</p><h2·id="error-handling"·class="section-heading"> |
| 189 | ··<a·href="#error-handling"·class="hover-link"> | 189 | ··<a·href="#error-handling"·class="hover-link"> |
| 190 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 190 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 209, 96 lines modified | Offset 209, 96 lines modified | ||
| 209 | something·called·a·<em>signal</em>·to·all·the·processes·it·has·links·to.</p><p>The·signal·carries·information·about·the·pid·it·was·sent·from·and·the·exit | 209 | something·called·a·<em>signal</em>·to·all·the·processes·it·has·links·to.</p><p>The·signal·carries·information·about·the·pid·it·was·sent·from·and·the·exit |
| 210 | reason.</p><p>The·default·behaviour·of·a·process·that·receives·a·normal·exit·is·to·ignore·the | 210 | reason.</p><p>The·default·behaviour·of·a·process·that·receives·a·normal·exit·is·to·ignore·the |
| 211 | signal.</p><p>The·default·behaviour·in·the·two·other·cases·(that·is,·abnormal·exit)·above·is | 211 | signal.</p><p>The·default·behaviour·in·the·two·other·cases·(that·is,·abnormal·exit)·above·is |
| 212 | to:</p><ul><li>Bypass·all·messages·to·the·receiving·process.</li><li>Kill·the·receiving·process.</li><li>Propagate·the·same·error·signal·to·the·links·of·the·killed·process.</li></ul><p>In·this·way·you·can·connect·all·processes·in·a·transaction·together·using·links. | 212 | to:</p><ul><li>Bypass·all·messages·to·the·receiving·process.</li><li>Kill·the·receiving·process.</li><li>Propagate·the·same·error·signal·to·the·links·of·the·killed·process.</li></ul><p>In·this·way·you·can·connect·all·processes·in·a·transaction·together·using·links. |
| 213 | If·one·of·the·processes·exits·abnormally,·all·the·processes·in·the·transaction | 213 | If·one·of·the·processes·exits·abnormally,·all·the·processes·in·the·transaction |
| 214 | are·killed.·As·it·is·often·wanted·to·create·a·process·and·link·to·it·at·the·same | 214 | are·killed.·As·it·is·often·wanted·to·create·a·process·and·link·to·it·at·the·same |
| 215 | time,·there·is·a·special·BIF,·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_link/1">spawn_link</a>·that·does·the | 215 | time,·there·is·a·special·BIF,·<a·href="../../erts-15.2.7/doc/html/erlang.html#spawn_link/1">spawn_link</a>·that·does·the |
| 216 | same·as·<code·class="inline">spawn</code>,·but·also·creates·a·link·to·the·spawned·process.</p><p>Now·an·example·of·the·ping·pong·example·using·links·to·terminate·"pong":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 216 | same·as·<code·class="inline">spawn</code>,·but·also·creates·a·link·to·the·spawned·process.</p><p>Now·an·example·of·the·ping·pong·example·using·links·to·terminate·"pong":</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6299170600-1">(</span><span·class="ss">tut20</span><span·class="p"·data-group-id="6299170600-1">)</span><span·class="p">.</span><span·class="w"> |
| 217 | </span><span·class="w"> | 217 | </span><span·class="w"> |
| 218 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 218 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6299170600-2">(</span><span·class="p"·data-group-id="6299170600-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">··</span><span·class="ss">ping</span><span·class="p">/</span><s[·...·truncated·by·diffoscope;·len:·242,·SHA:·48536afe45dfcde2c5f047d1a5f9d77e8656607e6f9ddd5a3bc422b3ed137f47·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="nf">ping</span><span·class="p"·data-group-id=" | 219 | </span><span·class="nf">ping</span><span·class="p"·data-group-id="6299170600-4">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="6299170600-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ····</span><span·class="nf">link</span><span·class="p"·data-group-id=" | 220 | ····</span><span·class="nf">link</span><span·class="p"·data-group-id="6299170600-5">(</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="6299170600-5">)</span><span·class="p">,</span><span·class="w"> |
| 221 | ····</span><span·class="nf">ping1</span><span·class="p"·data-group-id=" | 221 | ····</span><span·class="nf">ping1</span><span·class="p"·data-group-id="6299170600-6">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="6299170600-6">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="nf">ping1</span><span·class="p"·data-group-id=" | 222 | </span><span·class="nf">ping1</span><span·class="p"·data-group-id="6299170600-7">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="6299170600-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ····</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 223 | ····</span><span·class="nf">exit</span><span·class="p"·data-group-id="6299170600-8">(</span><span·class="ss">ping</span><span·class="p"·data-group-id="6299170600-8">)</span><span·class="p">;</span><span·class="w"> |
| 224 | </span><span·class="nf">ping1</span><span·class="p"·data-group-id=" | 224 | </span><span·class="nf">ping1</span><span·class="p"·data-group-id="6299170600-9">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="6299170600-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ····</span><span·class="n">Pong_Pid</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="n">Pong_Pid</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6299170600-10">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="6299170600-11">(</span><span·class="p"·data-group-id="6299170600-11">)</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·c8f09f821d627d1f8b83edea4a7e894d5502ee134d568fd799a459979762efcd·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 226 | ····</span><span·class="k">receive</span><span·class="w"> | 226 | ····</span><span·class="k">receive</span><span·class="w"> |
| 227 | ········</span><span·class="ss">pong</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 227 | ········</span><span·class="ss">pong</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 228 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6299170600-12">(</span><span·class="s">"Ping·received·pong</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6299170600-13">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·6db0f3af0047b9f2e912e7e656099b933371d60acfc171720a4e13c3d29d6798·...·]-12">)</span><span·class="w"> |
| 229 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 229 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 230 | ····</span><span·class="nf">ping1</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="nf">ping1</span><span·class="p"·data-group-id="6299170600-14">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="62[·...·truncated·by·diffoscope;·len:·8,·SHA:·ca6ba8d9f99587a76e7a45819329acfbdcb84634ae9d90a3213a59ab4b88bf9d·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="nf">pong</span><span·class="p"·data-group-id=" | 231 | </span><span·class="nf">pong</span><span·class="p"·data-group-id="6299170600-15">(</span><span·class="p"·data-group-id="6299170600-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="k">receive</span><span·class="w"> | 232 | ····</span><span·class="k">receive</span><span·class="w"> |
| 233 | ········</span><span·class="p"·data-group-id=" | 233 | ········</span><span·class="p"·data-group-id="6299170600-16">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ping_PID</span><span·class="p"·data-group-id="6299170600-16">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 234 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 234 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6299170600-17">(</span><span·class="s">"Pong·received·ping</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6299170600-18">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·da337f14ec2934209781349e3dc0382c9f3ea577e4c412cef311abe6fe223669·...·]-17">)</span><span·class="p">,</span><span·class="w"> |
| 235 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> | 235 | ············</span><span·class="n">Ping_PID</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w"> |
| 236 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id=" | 236 | ············</span><span·class="nf">pong</span><span·class="p"·data-group-id="6299170600-19">(</span><span·class="p"·data-group-id="6299170600-19">)</span><span·class="w"> |
| 237 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 237 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 238 | </span><span·class="nf">start</span><span·class="p"·data-group-id="6299170600-20">(</span><span·class="n">Ping_Node</span><span·class="p"·data-group-id="6299170600-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 239 | ····</span><span·class="n">PongPID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 239 | ····</span><span·class="n">PongPID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6299170600-21">(</span><span·class="ss">tut20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6299170600-22">[</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·69,·SHA:·500f0f1b968a3ba2c2be6a8d02a4b10662aa71b55fb69053f75237caf92c1f1d·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 240 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 240 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6299170600-23">(</span><span·class="n">Ping_Node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tut20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·252,·SHA:·4d141abae628f80f2abb0ac07d74ba91e201e7beb2ea066c491daacbd07898b9·...·]-23">)</span><span·class="p">.</span></code></pre><pre><code·class="text">(s1@bill)3>·tut20:start(s2@kosken). |
| 241 | Pong·received·ping | 241 | Pong·received·ping |
| 242 | <3820.41.0> | 242 | <3820.41.0> |
| 243 | Ping·received·pong | 243 | Ping·received·pong |
| 244 | Pong·received·ping | 244 | Pong·received·ping |
| 245 | Ping·received·pong | 245 | Ping·received·pong |
| 246 | Pong·received·ping | 246 | Pong·received·ping |
| 247 | Ping·received·pong</code></pre><p>This·is·a·slight·modification·of·the·ping·pong·program·where·both·processes·are | 247 | Ping·received·pong</code></pre><p>This·is·a·slight·modification·of·the·ping·pong·program·where·both·processes·are |
| 248 | spawned·from·the·same·<code·class="inline">start/1</code>·function,·and·the·"ping"·process·can·be·spawned | 248 | spawned·from·the·same·<code·class="inline">start/1</code>·function,·and·the·"ping"·process·can·be·spawned |
| 249 | on·a·separate·node.·Notice·the·use·of·the·<code·class="inline">link</code>·BIF.·"Ping"·calls | 249 | on·a·separate·node.·Notice·the·use·of·the·<code·class="inline">link</code>·BIF.·"Ping"·calls |
| 250 | <a·href="../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit(ping)</code></a>·when·it·finishes·and·this·causes·an·exit·signal·to·be | 250 | <a·href="../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit(ping)</code></a>·when·it·finishes·and·this·causes·an·exit·signal·to·be |
| 251 | sent·to·"pong",·which·also·terminates.</p><p>It·is·possible·to·modify·the·default·behaviour·of·a·process·so·that·it·does·not | 251 | sent·to·"pong",·which·also·terminates.</p><p>It·is·possible·to·modify·the·default·behaviour·of·a·process·so·that·it·does·not |
| 252 | get·killed·when·it·receives·abnormal·exit·signals.·Instead,·all·signals·are | 252 | get·killed·when·it·receives·abnormal·exit·signals.·Instead,·all·signals·are |
| 253 | turned·into·normal·messages·on·the·format·<code·class="inline">{'EXIT',FromPID,Reason}</code>·and·added·to | 253 | turned·into·normal·messages·on·the·format·<code·class="inline">{'EXIT',FromPID,Reason}</code>·and·added·to |
| 254 | the·end·of·the·receiving·process'·message·queue.·This·behaviour·is·set·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">process_flag</span><span·class="p"·data-group-id=" | 254 | the·end·of·the·receiving·process'·message·queue.·This·behaviour·is·set·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">process_flag</span><span·class="p"·data-group-id="9055642683-1">(</span><span·class="ss">trap_exit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="9055642683-1">)</span></code></pre><p>There·are·several·other·process·flags,·see·<a·href="../../erts-15.2.7/doc/html/erlang.html#process_flag/2">erlang(3)</a>. |
| 255 | Changing·the·default·behaviour·of·a·process·in·this·way·is·usually·not·done·in | 255 | Changing·the·default·behaviour·of·a·process·in·this·way·is·usually·not·done·in |
| 256 | standard·user·programs,·but·is·left·to·the·supervisory·programs·in·OTP.·However, | 256 | standard·user·programs,·but·is·left·to·the·supervisory·programs·in·OTP.·However, |
| 257 | the·ping·pong·program·is·modified·to·illustrate·exit·trapping.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 257 | the·ping·pong·program·is·modified·to·illustrate·exit·trapping.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0443376402-1">(</span><span·class="ss">tut21</span><span·class="p"·data-group-id="0443376402-1">)</span><span·class="p">.</span><span·class="w"> |
| 258 | </span><span·class="w"> | 258 | </span><span·class="w"> |
| 259 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 259 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0443376402-2">(</span><span·class="p"·data-group-id="0443376402-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">··</span><span·class="ss">ping</span><span·class="p">/</span><s[·...·truncated·by·diffoscope;·len:·242,·SHA:·1117a3f4a19f93593c6b2c7149f4f36317b4f6d06f81b8904311b802bf89fd58·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="nf">ping</span><span·class="p"·data-group-id=" | 260 | </span><span·class="nf">ping</span><span·class="p"·data-group-id="0443376402-4">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pong_Pid</span><span·class="p"·data-group-id="0443376402-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 73431/116487 bytes (63.04%) of diff not shown. | |||
| Offset 131, 15 lines modified | Offset 131, 15 lines modified | ||
| 131 | ······<p·class="built-using"> | 131 | ······<p·class="built-using"> |
| 132 | ········Built·using | 132 | ········Built·using |
| 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 135 | ······</p> | 135 | ······</p> |
| 136 | <p>Copyright·©·1996-202 | 136 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 137 | ····</footer> | 137 | ····</footer> |
| 138 | ··</div> | 138 | ··</div> |
| 139 | </main> | 139 | </main> |
| 140 | </div> | 140 | </div> |
| 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 142 | ··<script> | 142 | ··<script> |
| 143 | ··let·initialized·=·false; | 143 | ··let·initialized·=·false; |
| Offset 128, 48 lines modified | Offset 128, 48 lines modified | ||
| 128 | the·order·specified·by·this·list,·and·are·terminated·in·the·reverse·order.</p><h2·id="example"·class="section-heading"> | 128 | the·order·specified·by·this·list,·and·are·terminated·in·the·reverse·order.</p><h2·id="example"·class="section-heading"> |
| 129 | ··<a·href="#example"·class="hover-link"> | 129 | ··<a·href="#example"·class="hover-link"> |
| 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 131 | ··</a> | 131 | ··</a> |
| 132 | ··<span·class="text">Example</span> | 132 | ··<span·class="text">Example</span> |
| 133 | </h2> | 133 | </h2> |
| 134 | <p>The·callback·module·for·a·supervisor·starting·the·server·from | 134 | <p>The·callback·module·for·a·supervisor·starting·the·server·from |
| 135 | <a·href="gen_server_concepts.html#ex">gen_server·Behaviour</a>·can·look·as·follows:</p><p><a·href=""·id="ex"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 135 | <a·href="gen_server_concepts.html#ex">gen_server·Behaviour</a>·can·look·as·follows:</p><p><a·href=""·id="ex"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1466123043-1">(</span><span·class="ss">ch_sup</span><span·class="p"·data-group-id="1466123043-1">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 136 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="1466123043-2">(</span><span·class="ss">supervisor</span><span·class="p"·data-group-id="1466123043-2">)</span><span·class="p">.</span><span·class="w"> |
| 137 | </span><span·class="w"> | 137 | </span><span·class="w"> |
| 138 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 138 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1466123043-3">(</span><span·class="p"·data-group-id="1466123043-4">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="1466123043-4">]</span><span·class="p"·data-group-id="1466123043-3">)</span><span·class="p">.</span><span·class="w"> |
| 139 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 139 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1466123043-5">(</span><span·class="p"·data-group-id="1466123043-6">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="1466123043-6">]</span><span·class="p"·data-group-id="1466123043-5">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="1466123043-7">(</span><span·class="p"·data-group-id="1466123043-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="1466123043-8">(</span><span·class="ss">ch_sup</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-9">[</span><span·class="p"·data-group-id="1466123043-9">]</span><span·class="p"·data-group-id="1466123043-8">)</span><span·class="p">.</span><span·class="w"> |
| 142 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 142 | </span><span·class="nf">init</span><span·class="p"·data-group-id="1466123043-10">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="1466123043-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 143 | ····</span><span·class="n">SupFlags</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 143 | ····</span><span·class="n">SupFlags</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-11">#{</span><span·class="ss">strategy</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">one_for_one</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">intensity</span><span·cl[·...·truncated·by·diffoscope;·len:·313,·SHA:·d938ca1184b50ec84a040a403ab6b010771ee051cbdde080ffc2254cce34bb49·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 144 | ····</span><span·class="n">ChildSpecs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 144 | ····</span><span·class="n">ChildSpecs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-12">[</span><span·class="p"·data-group-id="1466123043-13">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w"> |
| 145 | ····················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 145 | ····················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-14">{</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-15">[</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·73,·SHA:·19d5a26e56cdd85e41b0ed60b0718e5b3f28617d7ef434f40dd91a1a507e3639·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 146 | ····················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w"> | 146 | ····················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w"> |
| 147 | ····················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w"> | 147 | ····················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w"> |
| 148 | ····················</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w"> | 148 | ····················</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w"> |
| 149 | ····················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 149 | ····················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-16">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="1466123043-16">]</span><span·class="p"·data-group-id="1466123043-13">}</span><span·class="p"·data-group-id="1466123043-12">]</span><span·class="p">,</span><span·class="w"> |
| 150 | ····</span><span·class="p"·data-group-id=" | 150 | ····</span><span·class="p"·data-group-id="1466123043-17">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1466123043-18">{</span><span·class="n">SupFlags</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ChildSpecs[·...·truncated·by·diffoscope;·len:·102,·SHA:·c801ed54a9eddda50bb146849425218fd2cd84d58c843fa4ac635eb32d4e986e·...·]-17">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">SupFlags</code>·variable·in·the·return·value·from·<code·class="inline">init/1</code>·represents·the |
| 151 | <a·href="sup_princ.html#flags">supervisor·flags</a>.</p><p>The·<code·class="inline">ChildSpecs</code>·variable·in·the·return·value·from·<code·class="inline">init/1</code>·is·a·list·of | 151 | <a·href="sup_princ.html#flags">supervisor·flags</a>.</p><p>The·<code·class="inline">ChildSpecs</code>·variable·in·the·return·value·from·<code·class="inline">init/1</code>·is·a·list·of |
| 152 | <a·href="sup_princ.html#spec">child·specifications</a>.</p><p><a·href=""·id="flags"></a></p><h2·id="supervisor-flags"·class="section-heading"> | 152 | <a·href="sup_princ.html#spec">child·specifications</a>.</p><p><a·href=""·id="flags"></a></p><h2·id="supervisor-flags"·class="section-heading"> |
| 153 | ··<a·href="#supervisor-flags"·class="hover-link"> | 153 | ··<a·href="#supervisor-flags"·class="hover-link"> |
| 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 155 | ··</a> | 155 | ··</a> |
| 156 | ··<span·class="text">Supervisor·Flags</span> | 156 | ··<span·class="text">Supervisor·Flags</span> |
| 157 | </h2> | 157 | </h2> |
| 158 | <p>This·is·the·type·definition·for·the·supervisor·flags:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sup_flags</span><span·class="p"·data-group-id=" | 158 | <p>This·is·the·type·definition·for·the·supervisor·flags:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sup_flags</span><span·class="p"·data-group-id="5891159662-1">(</span><span·class="p"·data-group-id="5891159662-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5891159662-2">#{</span><span·class="ss">strategy</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·53370253fcae6e5153aa03df6ce464b958ef63f0a73b6fe6c81186f568690072·...·]-3">)</span><span·class="p">,</span><span·class="w">···········</span><span·class="c1">%·optional</span><span·class="w"> |
| 159 | ················</span><span·class="ss">intensity</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id=" | 159 | ················</span><span·class="ss">intensity</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id="5891159662-4">(</span><span·class="p"·data-group-id="5891159662-4">)</span><span·class="p">,</span><span·class="w">···</span><span·class="c1">%·optional</span><span·class="w"> |
| 160 | ················</span><span·class="ss">period</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id=" | 160 | ················</span><span·class="ss">period</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id="5891159662-5">(</span><span·class="p"·data-group-id="5891159662-5">)</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·optional</span><span·class="w"> |
| 161 | ················</span><span·class="ss">auto_shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id=" | 161 | ················</span><span·class="ss">auto_shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id="5891159662-6">(</span><span·class="p"·data-group-id="5891159662-6">)</span><span·class="p"·data-group-id="5891159662-2">}</span><span·class="w">·</span><span·class="c1">%·optional</span><span·class="w"> |
| 162 | ····</span><span·class="nf">strategy</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="nf">strategy</span><span·class="p"·data-group-id="5891159662-7">(</span><span·class="p"·data-group-id="5891159662-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">one_for_all</span><span·class="w"> |
| 163 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">one_for_one</span><span·class="w"> | 163 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">one_for_one</span><span·class="w"> |
| 164 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">rest_for_one</span><span·class="w"> | 164 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">rest_for_one</span><span·class="w"> |
| 165 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">simple_one_for_one</span><span·class="w"> | 165 | ···············</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">simple_one_for_one</span><span·class="w"> |
| 166 | ····</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id="5891159662-8">(</span><span·class="p"·data-group-id="5891159662-8">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">never</span><span·class="w"> |
| 167 | ····················</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">any_significant</span><span·class="w"> | 167 | ····················</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">any_significant</span><span·class="w"> |
| 168 | ····················</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">all_significant</span></code></pre><ul><li><code·class="inline">strategy</code>·specifies·the·<a·href="sup_princ.html#strategy">restart·strategy</a>.</li><li><code·class="inline">intensity</code>·and·<code·class="inline">period</code>·specify·the | 168 | ····················</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">all_significant</span></code></pre><ul><li><code·class="inline">strategy</code>·specifies·the·<a·href="sup_princ.html#strategy">restart·strategy</a>.</li><li><code·class="inline">intensity</code>·and·<code·class="inline">period</code>·specify·the |
| 169 | <a·href="sup_princ.html#max_intensity">maximum·restart·intensity</a>.</li><li><code·class="inline">auto_shutdown</code>·specifies·whether·and·when·a·supervisor·should | 169 | <a·href="sup_princ.html#max_intensity">maximum·restart·intensity</a>.</li><li><code·class="inline">auto_shutdown</code>·specifies·whether·and·when·a·supervisor·should |
| 170 | <a·href="sup_princ.html#automatic-shutdown">automatically·shut·itself·down</a>.</li></ul><p><a·href=""·id="strategy"></a></p><h2·id="restart-strategy"·class="section-heading"> | 170 | <a·href="sup_princ.html#automatic-shutdown">automatically·shut·itself·down</a>.</li></ul><p><a·href=""·id="strategy"></a></p><h2·id="restart-strategy"·class="section-heading"> |
| 171 | ··<a·href="#restart-strategy"·class="hover-link"> | 171 | ··<a·href="#restart-strategy"·class="hover-link"> |
| 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 173 | ··</a> | 173 | ··</a> |
| Offset 408, 28 lines modified | Offset 408, 28 lines modified | ||
| 408 | exhaust·the·<a·href="sup_princ.html#max_intensity">Maximum·Restart·Intensity</a>·of·the | 408 | exhaust·the·<a·href="sup_princ.html#max_intensity">Maximum·Restart·Intensity</a>·of·the |
| 409 | parent·supervisor.</p></section><p><a·href=""·id="spec"></a></p><h2·id="child-specification"·class="section-heading"> | 409 | parent·supervisor.</p></section><p><a·href=""·id="spec"></a></p><h2·id="child-specification"·class="section-heading"> |
| 410 | ··<a·href="#child-specification"·class="hover-link"> | 410 | ··<a·href="#child-specification"·class="hover-link"> |
| 411 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 411 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 412 | ··</a> | 412 | ··</a> |
| 413 | ··<span·class="text">Child·Specification</span> | 413 | ··<span·class="text">Child·Specification</span> |
| 414 | </h2> | 414 | </h2> |
| 415 | <p>The·type·definition·for·a·child·specification·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">child_spec</span><span·class="p"·data-group-id=" | 415 | <p>The·type·definition·for·a·child·specification·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">child_spec</span><span·class="p"·data-group-id="1906493573-1">(</span><span·class="p"·data-group-id="1906493573-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1906493573-2">#{</span><span·class="ss">id</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·173,·SHA:·3693c48d6182cd2eb25be0d9102ba84909260722a235914c101e52e63cb2efc9·...·]-3">)</span><span·class="p">,</span><span·class="w">·············</span><span·class="c1">%·mandatory</span><span·class="w"> |
| 416 | ·················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">mfargs</span><span·class="p"·data-group-id=" | 416 | ·················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">mfargs</span><span·class="p"·data-group-id="1906493573-4">(</span><span·class="p"·data-group-id="1906493573-4">)</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·mandatory</span><span·class="w"> |
| 417 | ·················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">restart</span><span·class="p"·data-group-id=" | 417 | ·················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">restart</span><span·class="p"·data-group-id="1906493573-5">(</span><span·class="p"·data-group-id="1906493573-5">)</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·optional</span><span·class="w"> |
| 418 | ·················</span><span·class="ss">significant</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">significant</span><span·class="p"·data-group-id=" | 418 | ·················</span><span·class="ss">significant</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">significant</span><span·class="p"·data-group-id="1906493573-6">(</span><span·class="p"·data-group-id="1906493573-6">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·optional</span><span·class="w"> |
| 419 | ·················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">shutdown</span><span·class="p"·data-group-id=" | 419 | ·················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">shutdown</span><span·class="p"·data-group-id="1906493573-7">(</span><span·class="p"·data-group-id="1906493573-7">)</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·optional</span><span·class="w"> |
| 420 | ·················</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">worker</span><span·class="p"·data-group-id=" | 420 | ·················</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">worker</span><span·class="p"·data-group-id="1906493573-8">(</span><span·class="p"·data-group-id="1906493573-8">)</span><span·class="p">,</span><span·class="w">·············</span><span·class="c1">%·optional</span><span·class="w"> |
| 421 | ·················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id=" | 421 | ·················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id="1906493573-9">(</span><span·class="p"·data-group-id="1906493573-9">)</span><span·class="p"·data-group-id="1906493573-2">}</span><span·class="w">·········</span><span·class="c1">%·optional</span><span·class="w"> |
| 422 | ····</span><span·class="nf">child_id</span><span·class="p"·data-group-id=" | 422 | ····</span><span·class="nf">child_id</span><span·class="p"·data-group-id="1906493573-10">(</span><span·class="p"·data-group-id="1906493573-10">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1906493573-11">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·cb7055b193037db60992eac91c3a4032271ba22ac0734c95c17a166145e88e94·...·]-11">)</span><span·class="w"> |
| 423 | ····</span><span·class="nf">mfargs</span><span·class="p"·data-group-id=" | 423 | ····</span><span·class="nf">mfargs</span><span·class="p"·data-group-id="1906493573-12">(</span><span·class="p"·data-group-id="1906493573-12">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1906493573-13">{</span><span·class="n">M</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·962,·SHA:·abd4a0e4458d05292187f2df8bc879649d71dd62ecd19c2bff2a231ba60ff662·...·]-13">}</span><span·class="w"> |
| 424 | ····</span><span·class="nf">modules</span><span·class="p"·data-group-id=" | 424 | ····</span><span·class="nf">modules</span><span·class="p"·data-group-id="1906493573-18">(</span><span·class="p"·data-group-id="1906493573-18">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1906493573-19">[</span><span·class="nf">module</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·126,·SHA:·006a9f110d5b676c3a02244639dae2b8fe567623c46c4a4a1670b9e35675620d·...·]-19">]</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">dynamic</span><span·class="w"> |
| 425 | ····</span><span·class="nf">restart</span><span·class="p"·data-group-id=" | 425 | ····</span><span·class="nf">restart</span><span·class="p"·data-group-id="1906493573-21">(</span><span·class="p"·data-group-id="1906493573-21">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">permanent</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">transient</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">temporary</span><span·class="w"> |
| 426 | ····</span><span·class="nf">significant</span><span·class="p"·data-group-id=" | 426 | ····</span><span·class="nf">significant</span><span·class="p"·data-group-id="1906493573-22">(</span><span·class="p"·data-group-id="1906493573-22">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="1906493573-23">(</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·94a6a9277fd945c42ff40722479ad92eb4892af5b97bdff709770a951d7aeb25·...·]-23">)</span><span·class="w"> |
| 427 | ····</span><span·class="nf">shutdown</span><span·class="p"·data-group-id=" | 427 | ····</span><span·class="nf">shutdown</span><span·class="p"·data-group-id="1906493573-24">(</span><span·class="p"·data-group-id="1906493573-24">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·126,·SHA:·c79fcc795db11d8503f92c6bb13e5cb3128a0f87b5095ab86d824d3b41ed0f4a·...·]-25">)</span><span·class="w"> |
| 428 | ····</span><span·class="nf">worker</span><span·class="p"·data-group-id=" | 428 | ····</span><span·class="nf">worker</span><span·class="p"·data-group-id="1906493573-26">(</span><span·class="p"·data-group-id="1906493573-26">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">worker</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">supervisor</span></code></pre><ul><li><p><code·class="inline">id</code>·is·used·to·identify·the·child·specification·internally·by·the·supervisor.</p><p>The·<code·class="inline">id</code>·key·is·mandatory.</p><p>Note·that·this·identifier·occasionally·has·been·called·"name".·As·far·as |
| 429 | possible,·the·terms·"identifier"·or·"id"·are·now·used·but·in·order·to·keep | 429 | possible,·the·terms·"identifier"·or·"id"·are·now·used·but·in·order·to·keep |
| 430 | backwards·compatibility,·some·occurrences·of·"name"·can·still·be·found,·for | 430 | backwards·compatibility,·some·occurrences·of·"name"·can·still·be·found,·for |
| 431 | example·in·error·messages.</p></li><li><p><code·class="inline">start</code>·defines·the·function·call·used·to·start·the·child·process.·It·is·a | 431 | example·in·error·messages.</p></li><li><p><code·class="inline">start</code>·defines·the·function·call·used·to·start·the·child·process.·It·is·a |
| 432 | module-function-arguments·tuple·used·as·<a·href="../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,·F,·A)</code></a>.</p><p>It·is·to·be·(or·result·in)·a·call·to·any·of·the·following:</p><ul><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link/2,3</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/3,4</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_statem.html#start_link/4"><code·class="inline">gen_statem:start_link/3,4</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#start_link/2"><code·class="inline">gen_event:start_link/0,1,2</code></a></li><li>A·function·compliant·with·these·functions.·For·details,·see | 432 | module-function-arguments·tuple·used·as·<a·href="../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,·F,·A)</code></a>.</p><p>It·is·to·be·(or·result·in)·a·call·to·any·of·the·following:</p><ul><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link/2,3</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#start_link/4"><code·class="inline">gen_server:start_link/3,4</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_statem.html#start_link/4"><code·class="inline">gen_statem:start_link/3,4</code></a></li><li><a·href="../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#start_link/2"><code·class="inline">gen_event:start_link/0,1,2</code></a></li><li>A·function·compliant·with·these·functions.·For·details,·see |
| 433 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html"><code·class="inline">supervisor</code></a>.</li></ul><p>The·<code·class="inline">start</code>·key·is·mandatory.</p></li><li><p><a·href=""·id="restart"></a>·<code·class="inline">restart</code>·defines·when·a·terminated·child·process·is·to·be | 433 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html"><code·class="inline">supervisor</code></a>.</li></ul><p>The·<code·class="inline">start</code>·key·is·mandatory.</p></li><li><p><a·href=""·id="restart"></a>·<code·class="inline">restart</code>·defines·when·a·terminated·child·process·is·to·be |
| 434 | restarted.</p><ul><li>A·<code·class="inline">permanent</code>·child·process·is·always·restarted.</li><li>A·<code·class="inline">temporary</code>·child·process·is·never·restarted·(not·even·when·the·supervisor | 434 | restarted.</p><ul><li>A·<code·class="inline">permanent</code>·child·process·is·always·restarted.</li><li>A·<code·class="inline">temporary</code>·child·process·is·never·restarted·(not·even·when·the·supervisor |
| 435 | restart·strategy·is·<code·class="inline">rest_for_one</code>·or·<code·class="inline">one_for_all</code>·and·a·sibling·death | 435 | restart·strategy·is·<code·class="inline">rest_for_one</code>·or·<code·class="inline">one_for_all</code>·and·a·sibling·death |
| Offset 457, 53 lines modified | Offset 457, 53 lines modified | ||
| 457 | <code·class="inline">supervisor</code>,·the·default·value·<code·class="inline">infinity</code>·will·be·used.</p></li><li><p><code·class="inline">type</code>·specifies·whether·the·child·process·is·a·supervisor·or·a·worker.</p><p>The·<code·class="inline">type</code>·key·is·optional.·If·it·is·not·given,·the·default·value·<code·class="inline">worker</code> | 457 | <code·class="inline">supervisor</code>,·the·default·value·<code·class="inline">infinity</code>·will·be·used.</p></li><li><p><code·class="inline">type</code>·specifies·whether·the·child·process·is·a·supervisor·or·a·worker.</p><p>The·<code·class="inline">type</code>·key·is·optional.·If·it·is·not·given,·the·default·value·<code·class="inline">worker</code> |
| 458 | will·be·used.</p></li><li><p><code·class="inline">modules</code>·has·to·be·a·list·consisting·of·a·single·element.·The·value | 458 | will·be·used.</p></li><li><p><code·class="inline">modules</code>·has·to·be·a·list·consisting·of·a·single·element.·The·value |
| 459 | of·that·element·depends·on·the·behaviour·of·the·process:</p><ul><li>If·the·child·process·is·a·<code·class="inline">gen_event</code>,·the·element·has·to·be·the·atom | 459 | of·that·element·depends·on·the·behaviour·of·the·process:</p><ul><li>If·the·child·process·is·a·<code·class="inline">gen_event</code>,·the·element·has·to·be·the·atom |
| 460 | <code·class="inline">dynamic</code>.</li><li>Otherwise,·the·element·should·be·<code·class="inline">Module</code>,·where·<code·class="inline">Module</code>·is·the | 460 | <code·class="inline">dynamic</code>.</li><li>Otherwise,·the·element·should·be·<code·class="inline">Module</code>,·where·<code·class="inline">Module</code>·is·the |
| 461 | name·of·the·callback·module.</li></ul><p>This·information·is·used·by·the·release·handler·during·upgrades·and | 461 | name·of·the·callback·module.</li></ul><p>This·information·is·used·by·the·release·handler·during·upgrades·and |
| 462 | downgrades;·see·<a·href="release_handling.html">Release·Handling</a>.</p><p>The·<code·class="inline">modules</code>·key·is·optional.·If·it·is·not·given,·it·defaults·to·<code·class="inline">[M]</code>,·where | 462 | downgrades;·see·<a·href="release_handling.html">Release·Handling</a>.</p><p>The·<code·class="inline">modules</code>·key·is·optional.·If·it·is·not·given,·it·defaults·to·<code·class="inline">[M]</code>,·where |
| 463 | <code·class="inline">M</code>·comes·from·the·child's·start·<code·class="inline">{M,F,A}</code>.</p></li></ul><p><em>Example:</em>·The·child·specification·to·start·the·server·<code·class="inline">ch3</code>·in·the·previous | 463 | <code·class="inline">M</code>·comes·from·the·child's·start·<code·class="inline">{M,F,A}</code>.</p></li></ul><p><em>Example:</em>·The·child·specification·to·start·the·server·<code·class="inline">ch3</code>·in·the·previous |
| 464 | example·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 464 | example·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8941856664-1">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w"> |
| 465 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 465 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8941856664-2">{</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8941856664-3">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·70,·SHA:·65828a737e12f07386bdab922510e60e01ec5d2862d6afc4c5a6739ebed1bc83·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 466 | ··</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w"> | 466 | ··</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">permanent</span><span·class="p">,</span><span·class="w"> |
| 467 | ··</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w"> | 467 | ··</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p">,</span><span·class="w"> |
| 468 | ··</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w"> | 468 | ··</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">worker</span><span·class="p">,</span><span·class="w"> |
| 469 | ··</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 469 | ··</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8941856664-4">[</span><span·class="ss">ch3</span><span·class="p"·data-group-id="8941856664-4">]</span><span·class="p"·data-group-id="8941856664-1">}</span></code></pre><p>or·simplified,·relying·on·the·default·values:</p><pre><code·class="text">#{id·=>·ch3, |
| 470 | ··start·=>·{ch3,·start_link,·[]}, | 470 | ··start·=>·{ch3,·start_link,·[]}, |
| 471 | ··shutdown·=>·brutal_kill}</code></pre><p>Example:·A·child·specification·to·start·the·event·manager·from·the·chapter·about | 471 | ··shutdown·=>·brutal_kill}</code></pre><p>Example:·A·child·specification·to·start·the·event·manager·from·the·chapter·about |
| 472 | <a·href="events.html#mgr">gen_event</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 472 | <a·href="events.html#mgr">gen_event</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4867514008-1">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">error_man</span><span·class="p">,</span><span·class="w"> |
| 473 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 473 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4867514008-2">{</span><span·class="ss">gen_event</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4867514008-3">[</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·292,·SHA:·545d0c06a730aafc213bca1881a3132a0adb55264871736ee7f0ab2ff390e181·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 474 | ··</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">dynamic</span><span·class="p"·data-group-id=" | 474 | ··</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">dynamic</span><span·class="p"·data-group-id="4867514008-1">}</span></code></pre><p>Both·server·and·event·manager·are·registered·processes·which·can·be·expected·to |
| 475 | be·always·accessible.·Thus·they·are·specified·to·be·<code·class="inline">permanent</code>.</p><p><code·class="inline">ch3</code>·does·not·need·to·do·any·cleaning·up·before·termination.·Thus,·no·shutdown | 475 | be·always·accessible.·Thus·they·are·specified·to·be·<code·class="inline">permanent</code>.</p><p><code·class="inline">ch3</code>·does·not·need·to·do·any·cleaning·up·before·termination.·Thus,·no·shutdown |
| 476 | time·is·needed,·but·<code·class="inline">brutal_kill</code>·is·sufficient.·<code·class="inline">error_man</code>·can·need·some·time | 476 | time·is·needed,·but·<code·class="inline">brutal_kill</code>·is·sufficient.·<code·class="inline">error_man</code>·can·need·some·time |
| 477 | for·the·event·handlers·to·clean·up,·thus·the·shutdown·time·is·set·to·5000·ms | 477 | for·the·event·handlers·to·clean·up,·thus·the·shutdown·time·is·set·to·5000·ms |
| 478 | (which·is·the·default·value).</p><p>Example:·A·child·specification·to·start·another·supervisor:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 478 | (which·is·the·default·value).</p><p>Example:·A·child·specification·to·start·another·supervisor:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0222288000-1">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">sup</span><span·class="p">,</span><span·class="w"> |
| 479 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 479 | ··</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0222288000-2">{</span><span·class="ss">sup</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0222288000-3">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·70,·SHA:·ee4971514df3b5f183092a15c486bda6d58bfd9e7c88b4e1449d64ea15ee230e·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 480 | ··</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">transient</span><span·class="p">,</span><span·class="w"> | 480 | ··</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">transient</span><span·class="p">,</span><span·class="w"> |
| 481 | ··</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">supervisor</span><span·class="p"·data-group-id=" | 481 | ··</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">supervisor</span><span·class="p"·data-group-id="0222288000-1">}</span><span·class="w">·</span><span·class="c1">%·will·cause·default·shutdown=>infinity</span></code></pre><p><a·href=""·id="super_tree"></a></p><h2·id="starting-a-supervisor"·class="section-heading"> |
| 482 | ··<a·href="#starting-a-supervisor"·class="hover-link"> | 482 | ··<a·href="#starting-a-supervisor"·class="hover-link"> |
| 483 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 483 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 484 | ··</a> | 484 | ··</a> |
| 485 | ··<span·class="text">Starting·a·Supervisor</span> | 485 | ··<span·class="text">Starting·a·Supervisor</span> |
| 486 | </h2> | 486 | </h2> |
| 487 | <p>In·the·previous·example,·the·supervisor·is·started·by·calling | 487 | <p>In·the·previous·example,·the·supervisor·is·started·by·calling |
| 488 | <code·class="inline">ch_sup:start_link()</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 488 | <code·class="inline">ch_sup:start_link()</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start_link</span><span·class="p"·data-group-id="8949065810-1">(</span><span·class="p"·data-group-id="8949065810-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 489 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 489 | ····</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="8949065810-2">(</span><span·class="ss">ch_sup</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8949065810-3">[</span><span·class="p"·data-group-id="8949065810-3">]</span><span·class="p"·data-group-id="8949065810-2">)</span><span·class="p">.</span></code></pre><p><code·class="inline">ch_sup:start_link</code>·calls·function·<a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/2"><code·class="inline">supervisor:start_link/2</code></a>,·which·spawns·and |
| 490 | links·to·a·new·process,·a·supervisor.</p><ul><li>The·first·argument,·<code·class="inline">ch_sup</code>,·is·the·name·of·the·callback·module,·that·is,·the | 490 | links·to·a·new·process,·a·supervisor.</p><ul><li>The·first·argument,·<code·class="inline">ch_sup</code>,·is·the·name·of·the·callback·module,·that·is,·the |
| 491 | module·where·the·<code·class="inline">init</code>·callback·function·is·located.</li><li>The·second·argument,·<code·class="inline">[]</code>,·is·a·term·that·is·passed·as·is·to·the·callback | 491 | module·where·the·<code·class="inline">init</code>·callback·function·is·located.</li><li>The·second·argument,·<code·class="inline">[]</code>,·is·a·term·that·is·passed·as·is·to·the·callback |
| 492 | function·<code·class="inline">init</code>.·Here,·<code·class="inline">init</code>·does·not·need·any·data·and·ignores·the·argument.</li></ul><p>In·this·case,·the·supervisor·is·not·registered.·Instead·its·pid·must·be·used.·A | 492 | function·<code·class="inline">init</code>.·Here,·<code·class="inline">init</code>·does·not·need·any·data·and·ignores·the·argument.</li></ul><p>In·this·case,·the·supervisor·is·not·registered.·Instead·its·pid·must·be·used.·A |
| 493 | name·can·be·specified·by·calling | 493 | name·can·be·specified·by·calling |
| 494 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link({local,·Name},·Module,·Args)</code></a> | 494 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link({local,·Name},·Module,·Args)</code></a> |
| 495 | or | 495 | or |
| 496 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link({global,·Name},·Module,·Args)</code></a>.</p><p>The·new·supervisor·process·calls·the·callback·function·<code·class="inline">ch_sup:init([])</code>.·<code·class="inline">init</code> | 496 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link({global,·Name},·Module,·Args)</code></a>.</p><p>The·new·supervisor·process·calls·the·callback·function·<code·class="inline">ch_sup:init([])</code>.·<code·class="inline">init</code> |
| 497 | has·to·return·<code·class="inline">{ok,·{SupFlags,·ChildSpecs}}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id=" | 497 | has·to·return·<code·class="inline">{ok,·{SupFlags,·ChildSpecs}}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init</span><span·class="p"·data-group-id="7417649735-1">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="7417649735-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 498 | ····</span><span·class="n">SupFlags</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 498 | ····</span><span·class="n">SupFlags</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7417649735-2">#{</span><span·class="p"·data-group-id="7417649735-2">}</span><span·class="p">,</span><span·class="w"> |
| 499 | ····</span><span·class="n">ChildSpecs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 499 | ····</span><span·class="n">ChildSpecs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7417649735-3">[</span><span·class="p"·data-group-id="7417649735-4">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w"> |
| 500 | ····················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 500 | ····················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="7417649735-5">{</span><span·class="ss">ch3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_link</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7417649735-6">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·68,·SHA:·748097b4291085fe2f49184725bd46ea582c61092afc8251119e306f1bcf2351·...·]35-5">}</span><span·class="p">,</span><span·class="w"> |
| 501 | ····················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p"·data-group-id=" | 501 | ····················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">brutal_kill</span><span·class="p"·data-group-id="7417649735-4">}</span><span·class="p"·data-group-id="7417649735-3">]</span><span·class="p">,</span><span·class="w"> |
| 502 | ····</span><span·class="p"·data-group-id=" | 502 | ····</span><span·class="p"·data-group-id="7417649735-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7417649735-8">{</span><span·class="n">SupFlags</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ChildSpecs</[·...·truncated·by·diffoscope;·len:·97,·SHA:·952dbb71ca63c8ac58dcaaa3c3340e2f7fdd0fb66e909aef5d0bedf50f655b11·...·]35-7">}</span><span·class="p">.</span></code></pre><p>Subsequently,·the·supervisor·starts·its·child·processes·according·to·the·child |
| 503 | specifications·in·the·start·specification.·In·this·case·there·is·a·single·child | 503 | specifications·in·the·start·specification.·In·this·case·there·is·a·single·child |
| 504 | process,·called·<code·class="inline">ch3</code>.</p><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link/3</code></a>·is·synchronous.·It·does·not·return·until·all·child | 504 | process,·called·<code·class="inline">ch3</code>.</p><p><a·href="../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#start_link/3"><code·class="inline">supervisor:start_link/3</code></a>·is·synchronous.·It·does·not·return·until·all·child |
| 505 | processes·have·been·started.</p><h2·id="adding-a-child-process"·class="section-heading"> | 505 | processes·have·been·started.</p><h2·id="adding-a-child-process"·class="section-heading"> |
| Max diff block lines reached; 12344/65957 bytes (18.72%) of diff not shown. | |||
| Offset 216, 15 lines modified | Offset 216, 15 lines modified | ||
| 216 | ······<p·class="built-using"> | 216 | ······<p·class="built-using"> |
| 217 | ········Built·using | 217 | ········Built·using |
| 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 220 | ······</p> | 220 | ······</p> |
| 221 | <p>Copyright·©·1996-202 | 221 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 222 | ····</footer> | 222 | ····</footer> |
| 223 | ··</div> | 223 | ··</div> |
| 224 | </main> | 224 | </main> |
| 225 | </div> | 225 | </div> |
| 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 227 | ··<script> | 227 | ··<script> |
| 228 | ··let·initialized·=·false; | 228 | ··let·initialized·=·false; |
| Offset 266, 15 lines modified | Offset 266, 15 lines modified | ||
| 266 | ······<p·class="built-using"> | 266 | ······<p·class="built-using"> |
| 267 | ········Built·using | 267 | ········Built·using |
| 268 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 268 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 269 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 269 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 270 | ······</p> | 270 | ······</p> |
| 271 | <p>Copyright·©·1996-202 | 271 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 272 | ····</footer> | 272 | ····</footer> |
| 273 | ··</div> | 273 | ··</div> |
| 274 | </main> | 274 | </main> |
| 275 | </div> | 275 | </div> |
| 276 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 276 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 277 | ··<script> | 277 | ··<script> |
| 278 | ··let·initialized·=·false; | 278 | ··let·initialized·=·false; |
| Offset 146, 73 lines modified | Offset 146, 73 lines modified | ||
| 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 147 | ··</a> | 147 | ··</a> |
| 148 | ··<span·class="text">Deleting·an·Element</span> | 148 | ··<span·class="text">Deleting·an·Element</span> |
| 149 | </h3> | 149 | </h3> |
| 150 | <p>The·<code·class="inline">delete</code>·operation·is·considered·successful·if·the·element·was·not·present | 150 | <p>The·<code·class="inline">delete</code>·operation·is·considered·successful·if·the·element·was·not·present |
| 151 | in·the·table.·Hence·all·attempts·to·check·that·the·element·is·present·in·the | 151 | in·the·table.·Hence·all·attempts·to·check·that·the·element·is·present·in·the |
| 152 | Ets/Mnesia·table·before·deletion·are·unnecessary.·Here·follows·an·example·for | 152 | Ets/Mnesia·table·before·deletion·are·unnecessary.·Here·follows·an·example·for |
| 153 | Ets·tables:</p><p><strong>DO</strong></p><pre><code·class="text">ets:delete(Tab,·Key),</code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 153 | Ets·tables:</p><p><strong>DO</strong></p><pre><code·class="text">ets:delete(Tab,·Key),</code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id="4998585020-1">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="4998585020-1">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 154 | ····</span><span·class="p"·data-group-id=" | 154 | ····</span><span·class="p"·data-group-id="4998585020-2">[</span><span·class="p"·data-group-id="4998585020-2">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 155 | ········</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 155 | ········</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 156 | ····</span><span·class="p"·data-group-id=" | 156 | ····</span><span·class="p"·data-group-id="4998585020-3">[</span><span·class="p">_</span><span·class="p">|</span><span·class="p">_</span><span·class="p"·data-group-id="4998585020-3">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ········</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 157 | ········</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="4998585020-4">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="4998585020-4">)</span><span·class="w"> |
| 158 | </span><span·class="k">end</span><span·class="p">,</span></code></pre><h3·id="fetching-data"·class="section-heading"> | 158 | </span><span·class="k">end</span><span·class="p">,</span></code></pre><h3·id="fetching-data"·class="section-heading"> |
| 159 | ··<a·href="#fetching-data"·class="hover-link"> | 159 | ··<a·href="#fetching-data"·class="hover-link"> |
| 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 161 | ··</a> | 161 | ··</a> |
| 162 | ··<span·class="text">Fetching·Data</span> | 162 | ··<span·class="text">Fetching·Data</span> |
| 163 | </h3> | 163 | </h3> |
| 164 | <p>Do·not·fetch·data·that·you·already·have.</p><p>Consider·that·you·have·a·module·that·handles·the·abstract·data·type·<code·class="inline">Person</code>. | 164 | <p>Do·not·fetch·data·that·you·already·have.</p><p>Consider·that·you·have·a·module·that·handles·the·abstract·data·type·<code·class="inline">Person</code>. |
| 165 | You·export·the·interface·function·<code·class="inline">print_person/1</code>,·which·uses·the·internal | 165 | You·export·the·interface·function·<code·class="inline">print_person/1</code>,·which·uses·the·internal |
| 166 | functions·<code·class="inline">print_name/1</code>,·<code·class="inline">print_age/1</code>,·and·<code·class="inline">print_occupation/1</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·the·function·<code·class="inline">print_name/1</code>,·and·so·on,·had·been·interface·functions,·the | 166 | functions·<code·class="inline">print_name/1</code>,·<code·class="inline">print_age/1</code>,·and·<code·class="inline">print_occupation/1</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·the·function·<code·class="inline">print_name/1</code>,·and·so·on,·had·been·interface·functions,·the |
| 167 | situation·would·have·been·different,·as·you·do·not·want·the·user·of·the | 167 | situation·would·have·been·different,·as·you·do·not·want·the·user·of·the |
| 168 | interface·to·know·about·the·internal·data·representation.</p></section><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%·Interface·function</span><span·class="w"> | 168 | interface·to·know·about·the·internal·data·representation.</p></section><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%·Interface·function</span><span·class="w"> |
| 169 | </span><span·class="nf">print_person</span><span·class="p"·data-group-id=" | 169 | </span><span·class="nf">print_person</span><span·class="p"·data-group-id="8813464584-1">(</span><span·class="n">PersonId</span><span·class="p"·data-group-id="8813464584-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ····</span><span·class="c1">%%·Look·up·the·person·in·the·named·table·person,</span><span·class="w"> | 170 | ····</span><span·class="c1">%%·Look·up·the·person·in·the·named·table·person,</span><span·class="w"> |
| 171 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 171 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id="8813464584-2">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PersonId</span><span·class="p"·data-group-id="8813464584-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 172 | ········</span><span·class="p"·data-group-id=" | 172 | ········</span><span·class="p"·data-group-id="8813464584-3">[</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-3">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ············</span><span·class="nf">print_name</span><span·class="p"·data-group-id="4413773131-4">(</span><span·class="n">Person</span><span·class="p"·data-group-id="4413773131-4">)</span><span·class="p">,</span><span·class="w"> | ||
| 174 | ············</span><span·class="nf">print_age</span><span·class="p"·data-group-id="4413773131-5">(</span><span·class="n">Person</span><span·class="p"·data-group-id="4413773131-5">)</span><span·class="p">,</span><span·class="w"> | ||
| 175 | ············</span><span·class="nf">print_ | 173 | ············</span><span·class="nf">print_name</span><span·class="p"·data-group-id="8813464584-4">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-4">)</span><span·class="p">,</span><span·class="w"> |
| 174 | ············</span><span·class="nf">print_age</span><span·class="p"·data-group-id="8813464584-5">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-5">)</span><span·class="p">,</span><span·class="w"> | ||
| 175 | ············</span><span·class="nf">print_occupation</span><span·class="p"·data-group-id="8813464584-6">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-6">)</span><span·class="p">;</span><span·class="w"> | ||
| 176 | ········</span><span·class="p"·data-group-id=" | 176 | ········</span><span·class="p"·data-group-id="8813464584-7">[</span><span·class="p"·data-group-id="8813464584-7">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 177 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8813464584-8">(</span><span·class="s">"No·person·with·ID·=·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8813464584-9">[</span><sp[·...·truncated·by·diffoscope;·len:·122,·SHA:·1eb146758c06cf4094f40c3bf17f11f7a78335e93660b95a0c20a5d04a0b9ff6·...·]-8">)</span><span·class="w"> |
| 178 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 178 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="c1">%%%·Internal·functions</span><span·class="w"> | 179 | </span><span·class="c1">%%%·Internal·functions</span><span·class="w"> |
| 180 | </span><span·class="nf">print_name</span><span·class="p"·data-group-id=" | 180 | </span><span·class="nf">print_name</span><span·class="p"·data-group-id="8813464584-10">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 181 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8813464584-11">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8813464584-12">[</span><span·class[·...·truncated·by·diffoscope;·len:·219,·SHA:·325b5fdfc3b12285d3ae62bfe41cdb907056702b36ba507eb4c9ab80a369f7ed·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="nf">print_age</span><span·class="p"·data-group-id=" | 182 | </span><span·class="nf">print_age</span><span·class="p"·data-group-id="8813464584-13">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 183 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8813464584-14">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8813464584-15">[</span><span·class[·...·truncated·by·diffoscope;·len:·218,·SHA:·9ea2544865d2d6565e7f0a2ce9346ee7fe7a2fb52970646eae896d5de2374e2a·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="nf">print_occupation</span><span·class="p"·data-group-id=" | 184 | </span><span·class="nf">print_occupation</span><span·class="p"·data-group-id="8813464584-16">(</span><span·class="n">Person</span><span·class="p"·data-group-id="8813464584-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8813464584-17">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8813464584-18">[</span><span·class[·...·truncated·by·diffoscope;·len:·225,·SHA:·b250dc2ad746ac8497e373f8258546fb82405a38cef9f939c77568286a4c2e8e·...·]-17">)</span><span·class="p">.</span></code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%·Interface·function</span><span·class="w"> |
| 186 | </span><span·class="nf">print_person</span><span·class="p"·data-group-id=" | 186 | </span><span·class="nf">print_person</span><span·class="p"·data-group-id="8083650955-1">(</span><span·class="n">PersonId</span><span·class="p"·data-group-id="8083650955-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 187 | ····</span><span·class="c1">%%·Look·up·the·person·in·the·named·table·person,</span><span·class="w"> | 187 | ····</span><span·class="c1">%%·Look·up·the·person·in·the·named·table·person,</span><span·class="w"> |
| 188 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 188 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id="8083650955-2">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PersonId</span><span·class="p"·data-group-id="8083650955-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 189 | ········</span><span·class="p"·data-group-id=" | 189 | ········</span><span·class="p"·data-group-id="8083650955-3">[</span><span·class="n">Person</span><span·class="p"·data-group-id="8083650955-3">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ············</span><span·class="nf">print_name</span><span·class="p"·data-group-id=" | 190 | ············</span><span·class="nf">print_name</span><span·class="p"·data-group-id="8083650955-4">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-4">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ············</span><span·class="nf">print_age</span><span·class="p"·data-group-id=" | 191 | ············</span><span·class="nf">print_age</span><span·class="p"·data-group-id="8083650955-5">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-5">)</span><span·class="p">,</span><span·class="w"> |
| 192 | ············</span><span·class="nf">print_occupation</span><span·class="p"·data-group-id=" | 192 | ············</span><span·class="nf">print_occupation</span><span·class="p"·data-group-id="8083650955-6">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-6">)</span><span·class="p">;</span><span·class="w"> |
| 193 | ········</span><span·class="p"·data-group-id=" | 193 | ········</span><span·class="p"·data-group-id="8083650955-7">[</span><span·class="p"·data-group-id="8083650955-7">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 194 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8083650955-8">(</span><span·class="s">"No·person·with·ID·=·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8083650955-9">[</span><sp[·...·truncated·by·diffoscope;·len:·122,·SHA:·be528717f071407538c26569bea30a3931e5b5559f10bc8db237fb196396c8ad·...·]-8">)</span><span·class="w"> |
| 195 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 195 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="c1">%%%·Internal·functions</span><span·class="w"> | 196 | </span><span·class="c1">%%%·Internal·functions</span><span·class="w"> |
| 197 | </span><span·class="nf">print_name</span><span·class="p"·data-group-id=" | 197 | </span><span·class="nf">print_name</span><span·class="p"·data-group-id="8083650955-10">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 198 | ····</span><span·class="p"·data-group-id=" | 198 | ····</span><span·class="p"·data-group-id="8083650955-11">[</span><span·class="n">Person</span><span·class="p"·data-group-id="8083650955-11">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</sp[·...·truncated·by·diffoscope;·len:·207,·SHA:·a3c34b0796803c035801437be56d6728e1889ab5679adc864c1f44ff703c8049·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| 199 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8083650955-13">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8083650955-14">[</span><span·class[·...·truncated·by·diffoscope;·len:·219,·SHA:·14834c91999f0a6dde4d27637345d96d3e4afabfbf38502ac962933ae820d388·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="nf">print_age</span><span·class="p"·data-group-id=" | 200 | </span><span·class="nf">print_age</span><span·class="p"·data-group-id="8083650955-15">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ····</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="p"·data-group-id="8083650955-16">[</span><span·class="n">Person</span><span·class="p"·data-group-id="8083650955-16">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</sp[·...·truncated·by·diffoscope;·len:·207,·SHA:·54ac18a9ab820f7fc84f13a3e66689d18ed4ee375177f8db01205c00fe4bf78a·...·]-17">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8083650955-18">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8083650955-19">[</span><span·class[·...·truncated·by·diffoscope;·len:·218,·SHA:·184f6a47119cbb4b8bd5d23ac8dde16aa517f386599bf3482c5d04ef7a7145b0·...·]-18">)</span><span·class="p">.</span><span·class="w"> |
| 203 | </span><span·class="nf">print_occupation</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">print_occupation</span><span·class="p"·data-group-id="8083650955-20">(</span><span·class="n">PersonID</span><span·class="p"·data-group-id="8083650955-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="p"·data-group-id="8083650955-21">[</span><span·class="n">Person</span><span·class="p"·data-group-id="8083650955-21">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</sp[·...·truncated·by·diffoscope;·len:·207,·SHA:·9bcc475231e0114602045e94f9068a709844838993e5bcb7d475d3213fd2dc50·...·]-22">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8083650955-23">(</span><span·class="s">"No·person·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8083650955-24">[</span><span·class[·...·truncated·by·diffoscope;·len:·225,·SHA:·c44dc8466e453a9a1359bf7971d406610a28782361d8656194774d769c49b4fb·...·]-23">)</span><span·class="p">.</span></code></pre><h3·id="non-persistent-database-storage"·class="section-heading"> |
| 206 | ··<a·href="#non-persistent-database-storage"·class="hover-link"> | 206 | ··<a·href="#non-persistent-database-storage"·class="hover-link"> |
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Non-Persistent·Database·Storage</span> | 209 | ··<span·class="text">Non-Persistent·Database·Storage</span> |
| 210 | </h3> | 210 | </h3> |
| 211 | <p>For·non-persistent·database·storage,·prefer·Ets·tables·over·Mnesia | 211 | <p>For·non-persistent·database·storage,·prefer·Ets·tables·over·Mnesia |
| 212 | <code·class="inline">local_content</code>·tables.·Even·the·Mnesia·<code·class="inline">dirty_write</code>·operations·carry·a·fixed | 212 | <code·class="inline">local_content</code>·tables.·Even·the·Mnesia·<code·class="inline">dirty_write</code>·operations·carry·a·fixed |
| Offset 226, 38 lines modified | Offset 226, 38 lines modified | ||
| 226 | </h3> | 226 | </h3> |
| 227 | <p>Assuming·an·Ets·table·that·uses·<code·class="inline">idno</code>·as·key·and·contains·the·following:</p><pre><code·class="text">[#person{idno·=·1,·name·=·"Adam",··age·=·31,·occupation·=·"mailman"}, | 227 | <p>Assuming·an·Ets·table·that·uses·<code·class="inline">idno</code>·as·key·and·contains·the·following:</p><pre><code·class="text">[#person{idno·=·1,·name·=·"Adam",··age·=·31,·occupation·=·"mailman"}, |
| 228 | ·#person{idno·=·2,·name·=·"Bryan",·age·=·31,·occupation·=·"cashier"}, | 228 | ·#person{idno·=·2,·name·=·"Bryan",·age·=·31,·occupation·=·"cashier"}, |
| 229 | ·#person{idno·=·3,·name·=·"Bryan",·age·=·35,·occupation·=·"banker"}, | 229 | ·#person{idno·=·3,·name·=·"Bryan",·age·=·35,·occupation·=·"banker"}, |
| 230 | ·#person{idno·=·4,·name·=·"Carl",··age·=·25,·occupation·=·"mailman"}]</code></pre><p>If·you·<em>must</em>·return·all·data·stored·in·the·Ets·table,·you·can·use | 230 | ·#person{idno·=·4,·name·=·"Carl",··age·=·25,·occupation·=·"mailman"}]</code></pre><p>If·you·<em>must</em>·return·all·data·stored·in·the·Ets·table,·you·can·use |
| 231 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#tab2list/1"><code·class="inline">ets:tab2list/1</code></a>.·However,·usually·you·are·only·interested·in·a·subset·of·the | 231 | <a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#tab2list/1"><code·class="inline">ets:tab2list/1</code></a>.·However,·usually·you·are·only·interested·in·a·subset·of·the |
| 232 | information·in·which·case·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#tab2list/1"><code·class="inline">ets:tab2list/1</code></a>·is·expensive.·If·you·only·want·to | 232 | information·in·which·case·<a·href="../../lib/stdlib-6.2.2.1/doc/html/ets.html#tab2list/1"><code·class="inline">ets:tab2list/1</code></a>·is·expensive.·If·you·only·want·to |
| 233 | extract·one·field·from·each·record,·for·example,·the·age·of·every·person,·then:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 233 | extract·one·field·from·each·record,·for·example,·the·age·of·every·person,·then:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="5127296133-1">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5127296133-2">[</span><span·class="p"·data-group-id="5127296133-3">{</span><span·class="o">#</span><span·class="ss">person</span>[·...·truncated·by·diffoscope;·len:·41,·SHA:·f32107dfeee28203963b885ede1446966ebc7302379abe8a3c0832249d8d3181·...·]-4">{</span><span·class="ss">idno</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> |
| 234 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> | 234 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> |
| 235 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> | 235 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 236 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id=" | 236 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="5127296133-4">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ················</span><span·class="p"·data-group-id=" | 237 | ················</span><span·class="p"·data-group-id="5127296133-5">[</span><span·class="p"·data-group-id="5127296133-5">]</span><span·class="p">,</span><span·class="w"> |
| 238 | ················</span><span·class="p"·data-group-id="4676650054-6">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="4676650054-6">]</span><span·class="p"·data-group-id="4676650054-3">}</span><span·class="p"·data-group-id="4676650054-2">]</span><span·class="p"·data-group-id="4676650054-1">)</span><span·class="p">,</span></code></pre><p><strong>DO·NOT</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TabList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">tab2list</span><span·class="p"·data-group-id="1555713801-1">(</span><span·class="n">Tab</span><span·class="p"·data-group-id="1555713801-1">)</span><span·class="p">,</span><span·class="w"> | ||
| 239 | </span><span·class=" | 238 | ················</span><span·class="p"·data-group-id="5127296133-6">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="5127296133-6">]</span><span·class="p"·data-group-id="5127296133-3">}</span><span·class="p"·data-group-id="5127296[·...·truncated·by·diffoscope;·len:·493,·SHA:·8bc824b059a87511ff97a905c1251ff9747429591f9376295ae78e46b34b7811·...·]</span><span·class="p">,</span><span·class="w"> |
| 239 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="2620415143-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2620415143-3">(</span><span·class="n">X</span><span·class="p"·data-group-id="2620415143-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">age</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TabList</span><span·class="p"·data-group-id="2620415143-2">)</span><span·class="p">,</span></code></pre><p>If·you·are·only·interested·in·the·age·of·all·persons·named·"Bryan",·then:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="8565672947-1">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8565672947-2">[</span><span·class="p"·data-group-id="8565672947-3">{</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="8565672947-4">{</span><span·class="ss">idno</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> | ||
| 240 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Bryan"</span><span·class="p">,</span><span·class="w"> | 240 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Bryan"</span><span·class="p">,</span><span·class="w"> |
| 241 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> | 241 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 242 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id=" | 242 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="8565672947-4">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ················</span><span·class="p"·data-group-id=" | 243 | ················</span><span·class="p"·data-group-id="8565672947-5">[</span><span·class="p"·data-group-id="8565672947-5">]</span><span·class="p">,</span><span·class="w"> |
| 244 | ················</span><span·class="p"·data-group-id=" | 244 | ················</span><span·class="p"·data-group-id="8565672947-6">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8565672947-6">]</span><span·class="p"·data-group-id="8565672947-3">}</span><span·class="p"·data-group-id="8565672947-2">]</span><span·class="p"·data-group-id="85656729[·...·truncated·by·diffoscope;·len:·410,·SHA:·bb2e41bbda17e5675c199bb922ed1f68bc21ea8f06be6fc6ed32b2d77841fe62·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 245 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 245 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="5203000454-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="5203000454-3">(</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="5203000454-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="k">case</span><span·class="w">·</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">name</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 246 | ································</span><span·class="s">"Bryan"</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 246 | ································</span><span·class="s">"Bryan"</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 247 | ····································</span><span·class="p"·data-group-id=" | 247 | ····································</span><span·class="p"·data-group-id="5203000454-4">[</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">person</span><span·class="p">.</span><span·class="ss">age</span><span·class="p">|</span><span·class="n">Acc</span><span·class="p"·data-group-id="5203000454-4">]</span><span·class="p">;</span><span·class="w"> |
| 248 | ·································</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 248 | ·································</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 249 | ·····································</span><span·class="n">Acc</span><span·class="w"> | 249 | ·····································</span><span·class="n">Acc</span><span·class="w"> |
| 250 | ···························</span><span·class="k">end</span><span·class="w"> | 250 | ···························</span><span·class="k">end</span><span·class="w"> |
| 251 | ·············</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 251 | ·············</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5203000454-5">[</span><span·class="p"·data-group-id="5203000454-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TabList</span><span·class="p"·data-group-id="5203000454-2">)</span></code></pre><p>If·you·need·all·information·stored·in·the·Ets·table·about·persons·named·"Bryan", |
| 252 | then:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="9 | 252 | then:</p><p><strong>DO</strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="1599158104-1">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1599158104-2">[</span><span·class="p"·data-group-id="1599158104-3">{</span><span·class="o">#</span><span·class="ss">person</span>[·...·truncated·by·diffoscope;·len:·40,·SHA:·edadd21c3af97edd8bf9e67887fd7ebd5b8dd37333cafd16d086783f4ccc00f8·...·]4-4">{</span><span·class="ss">idno</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> |
| 253 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Bryan"</span><span·class="p">,</span><span·class="w"> | 253 | ··························</span><span·class="ss">name</span><span·class="o">=</span><span·class="s">"Bryan"</span><span·class="p">,</span><span·class="w"> |
| 254 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> | 254 | ··························</span><span·class="ss">age</span><span·class="o">=</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> |
| 255 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="9 | 255 | ··························</span><span·class="ss">occupation</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="1599158104-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1599158104-5">[</span><span·class="p"·data-group-id="1599158104-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1[·...·truncated·by·diffoscope;·len:·689,·SHA:·288599d2a4293ab6e4642a78d7a2b4dc558831986d32adaae792123b7d31621d·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 256 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id=" | 256 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id="5295250887-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="5295250887-3">(</span><span·class="n">X</span><span·class="p"·data-group-id="5295250887-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·411,·SHA:·a0e3358b4ff44e7d914ae4563af8467d3060db76a364b3c90cd386f12611af56·...·]-2">)</span><span·class="p">,</span></code></pre><h3·id="ordered_set-tables"·class="section-heading"> |
| 257 | ··<a·href="#ordered_set-tables"·class="hover-link"> | 257 | ··<a·href="#ordered_set-tables"·class="hover-link"> |
| 258 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 258 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 259 | ··</a> | 259 | ··</a> |
| 260 | ··<span·class="text"><code·class="inline">ordered_set</code>·Tables</span> | 260 | ··<span·class="text"><code·class="inline">ordered_set</code>·Tables</span> |
| 261 | </h3> | 261 | </h3> |
| 262 | <p>If·the·data·in·the·table·is·to·be·accessed·so·that·the·order·of·the·keys·in·the | 262 | <p>If·the·data·in·the·table·is·to·be·accessed·so·that·the·order·of·the·keys·in·the |
| 263 | table·is·significant,·the·table·type·<code·class="inline">ordered_set</code>·can·be·used·instead·of·the | 263 | table·is·significant,·the·table·type·<code·class="inline">ordered_set</code>·can·be·used·instead·of·the |
| Offset 293, 20 lines modified | Offset 293, 20 lines modified | ||
| 293 | Clearly,·the·second·table·would·have·to·be·kept·consistent·with·the·master | 293 | Clearly,·the·second·table·would·have·to·be·kept·consistent·with·the·master |
| 294 | table.·Mnesia·can·do·this·for·you,·but·a·home-brew·index·table·can·be·very | 294 | table.·Mnesia·can·do·this·for·you,·but·a·home-brew·index·table·can·be·very |
| 295 | efficient·compared·to·the·overhead·involved·in·using·Mnesia.</p><p>An·index·table·for·the·table·in·the·previous·examples·would·have·to·be·a·bag·(as | 295 | efficient·compared·to·the·overhead·involved·in·using·Mnesia.</p><p>An·index·table·for·the·table·in·the·previous·examples·would·have·to·be·a·bag·(as |
| 296 | keys·would·appear·more·than·once)·and·can·have·the·following·contents:</p><pre><code·class="text">[#index_entry{name="Adam",·idno=1}, | 296 | keys·would·appear·more·than·once)·and·can·have·the·following·contents:</p><pre><code·class="text">[#index_entry{name="Adam",·idno=1}, |
| 297 | ·#index_entry{name="Bryan",·idno=2}, | 297 | ·#index_entry{name="Bryan",·idno=2}, |
| 298 | ·#index_entry{name="Bryan",·idno=3}, | 298 | ·#index_entry{name="Bryan",·idno=3}, |
| 299 | ·#index_entry{name="Carl",·idno=4}]</code></pre><p>Given·this·index·table,·a·lookup·of·the·<code·class="inline">age</code>·fields·for·all·persons·named | 299 | ·#index_entry{name="Carl",·idno=4}]</code></pre><p>Given·this·index·table,·a·lookup·of·the·<code·class="inline">age</code>·fields·for·all·persons·named |
| 300 | "Bryan"·can·be·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MatchingIDs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 300 | "Bryan"·can·be·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MatchingIDs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id="6003150271-1">(</span><span·class="n">IndexTable</span><span·class="p">,</span><span·class="s">"Bryan"</span><span·class="p"·data-group-id="6003150271-1">)</span><span·class="p">,</span><span·class="w"> |
| 301 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id=" | 301 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="6003150271-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="6003150271-3">(</span><span·class="o">#</span><span·class="ss">index_entry</span><span·class="p"·data-group-id="6003150271-4">{</span><span·class="ss">idno</span><span·class="w[·...·truncated·by·diffoscope;·len:·177,·SHA:·92d4d1d3b9a77ff22948c2de325fa4dbe98cdef56cab8d1bf89ff666e59999b1·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 302 | ·················</span><span·class="p"·data-group-id=" | 302 | ·················</span><span·class="p"·data-group-id="6003150271-5">[</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="6003150271-6">{</span><span·class="ss">age</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Age</span><s[·...·truncated·by·diffoscope;·len:·458,·SHA:·fa20aae9697c2f6167f8570b30e19b74c1e5b75c924756ef1cd7bc023e165ced·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 303 | ·················</span><span·class="n">Age</span><span·class="w"> | 303 | ·················</span><span·class="n">Age</span><span·class="w"> |
| Max diff block lines reached; 17971/72386 bytes (24.83%) of diff not shown. | |||
| Offset 184, 15 lines modified | Offset 184, 15 lines modified | ||
| 184 | ······<p·class="built-using"> | 184 | ······<p·class="built-using"> |
| 185 | ········Built·using | 185 | ········Built·using |
| 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 188 | ······</p> | 188 | ······</p> |
| 189 | <p>Copyright·©·1996-202 | 189 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 190 | ····</footer> | 190 | ····</footer> |
| 191 | ··</div> | 191 | ··</div> |
| 192 | </main> | 192 | </main> |
| 193 | </div> | 193 | </div> |
| 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 195 | ··<script> | 195 | ··<script> |
| 196 | ··let·initialized·=·false; | 196 | ··let·initialized·=·false; |
| Offset 238, 124 lines modified | Offset 238, 124 lines modified | ||
| 238 | and·optional·<code·class="inline">(=>)</code>·association·types.·If·an·association·type·is·mandatory,·an | 238 | and·optional·<code·class="inline">(=>)</code>·association·types.·If·an·association·type·is·mandatory,·an |
| 239 | association·with·that·type·needs·to·be·present.·In·the·case·of·an·optional | 239 | association·with·that·type·needs·to·be·present.·In·the·case·of·an·optional |
| 240 | association·type·it·is·not·required·for·the·key·type·to·be·present.</p><p>The·notation·<code·class="inline">#{}</code>·specifies·the·singleton·type·for·the·empty·map.·Note·that | 240 | association·type·it·is·not·required·for·the·key·type·to·be·present.</p><p>The·notation·<code·class="inline">#{}</code>·specifies·the·singleton·type·for·the·empty·map.·Note·that |
| 241 | this·notation·is·not·a·shorthand·for·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a>·type.</p><p>For·convenience,·the·following·types·are·also·built-in.·They·can·be·thought·as | 241 | this·notation·is·not·a·shorthand·for·the·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a>·type.</p><p>For·convenience,·the·following·types·are·also·built-in.·They·can·be·thought·as |
| 242 | predefined·aliases·for·the·type·unions·also·shown·in·the·table.</p><p><a·href=""·id="builtin_types"></a></p><table><thead><tr><th·style="text-align:·left;"><em>Built-in·type</em></th><th·style="text-align:·left;"><em>Defined·as</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:term/0"><code·class="inline">term/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:any/0"><code·class="inline">any/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:binary/0"><code·class="inline">binary/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:_*8>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_binary/0"><code·class="inline">nonempty_binary/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:8,·_:_*8>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:bitstring/0"><code·class="inline">bitstring/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:_*1>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_bitstring/0"><code·class="inline">nonempty_bitstring/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:1,·_:_*1>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a></td><td·style="text-align:·left;"><code·class="inline">'false'</code>·|·<code·class="inline">'true'</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..255</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:char/0"><code·class="inline">char/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..16#10ffff</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nil/0"><code·class="inline">nil/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:number/0"><code·class="inline">number/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>·|·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:float/0"><code·class="inline">float/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[any()]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:maybe_improper_list/0"><code·class="inline">maybe_improper_list/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:maybe_improper_list/2"><code·class="inline">maybe_improper_list(any(),·any())</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_list/0"><code·class="inline">nonempty_list/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_list/1"><code·class="inline">nonempty_list(any())</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:string/0"><code·class="inline">string/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[char()]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_string/0"><code·class="inline">nonempty_string/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[char(),...]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:iodata/0"><code·class="inline">iodata/0</code></a></td><td·style="text-align:·left;"><code·class="inline">iolist()</code>·|·<code·class="inline">binary()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:iolist/0"><code·class="inline">iolist/0</code></a></td><td·style="text-align:·left;"><code·class="inline">maybe_improper_list(byte()</code>·|·<code·class="inline">binary()</code>·|·<code·class="inline">iolist(),·binary()</code>·|·<code·class="inline">[])</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a></td><td·style="text-align:·left;"><code·class="inline">#{any()·=>·any()}</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:function/0"><code·class="inline">function/0</code></a></td><td·style="text-align:·left;"><code·class="inline">fun()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:module/0"><code·class="inline">module/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:mfa/0"><code·class="inline">mfa/0</code></a></td><td·style="text-align:·left;"><code·class="inline">{module(),atom(),arity()}</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:arity/0"><code·class="inline">arity/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..255</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:identifier/0"><code·class="inline">identifier/0</code></a></td><td·style="text-align:·left;"><code·class="inline">pid()</code>·|·<code·class="inline">port()</code>·|·<code·class="inline">reference()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#node/0"><code·class="inline">node/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:timeout/0"><code·class="inline">timeout/0</code></a></td><td·style="text-align:·left;"><code·class="inline">'infinity'</code>·|·<code·class="inline">non_neg_integer()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:no_return/0"><code·class="inline">no_return/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:none/0"><code·class="inline">none/0</code></a></td></tr></tbody></table><p><em>Table:·Built-in·types,·predefined·aliases</em></p><p>In·addition,·the·following·three·built-in·types·exist·and·can·be·thought·as | 242 | predefined·aliases·for·the·type·unions·also·shown·in·the·table.</p><p><a·href=""·id="builtin_types"></a></p><table><thead><tr><th·style="text-align:·left;"><em>Built-in·type</em></th><th·style="text-align:·left;"><em>Defined·as</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:term/0"><code·class="inline">term/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:any/0"><code·class="inline">any/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:binary/0"><code·class="inline">binary/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:_*8>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_binary/0"><code·class="inline">nonempty_binary/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:8,·_:_*8>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:bitstring/0"><code·class="inline">bitstring/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:_*1>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_bitstring/0"><code·class="inline">nonempty_bitstring/0</code></a></td><td·style="text-align:·left;"><code·class="inline"><<_:1,·_:_*1>></code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a></td><td·style="text-align:·left;"><code·class="inline">'false'</code>·|·<code·class="inline">'true'</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..255</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:char/0"><code·class="inline">char/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..16#10ffff</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nil/0"><code·class="inline">nil/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:number/0"><code·class="inline">number/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>·|·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:float/0"><code·class="inline">float/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[any()]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:maybe_improper_list/0"><code·class="inline">maybe_improper_list/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:maybe_improper_list/2"><code·class="inline">maybe_improper_list(any(),·any())</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_list/0"><code·class="inline">nonempty_list/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_list/1"><code·class="inline">nonempty_list(any())</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:string/0"><code·class="inline">string/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[char()]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:nonempty_string/0"><code·class="inline">nonempty_string/0</code></a></td><td·style="text-align:·left;"><code·class="inline">[char(),...]</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:iodata/0"><code·class="inline">iodata/0</code></a></td><td·style="text-align:·left;"><code·class="inline">iolist()</code>·|·<code·class="inline">binary()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:iolist/0"><code·class="inline">iolist/0</code></a></td><td·style="text-align:·left;"><code·class="inline">maybe_improper_list(byte()</code>·|·<code·class="inline">binary()</code>·|·<code·class="inline">iolist(),·binary()</code>·|·<code·class="inline">[])</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a></td><td·style="text-align:·left;"><code·class="inline">#{any()·=>·any()}</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:function/0"><code·class="inline">function/0</code></a></td><td·style="text-align:·left;"><code·class="inline">fun()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:module/0"><code·class="inline">module/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:mfa/0"><code·class="inline">mfa/0</code></a></td><td·style="text-align:·left;"><code·class="inline">{module(),atom(),arity()}</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:arity/0"><code·class="inline">arity/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..255</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:identifier/0"><code·class="inline">identifier/0</code></a></td><td·style="text-align:·left;"><code·class="inline">pid()</code>·|·<code·class="inline">port()</code>·|·<code·class="inline">reference()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#node/0"><code·class="inline">node/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:timeout/0"><code·class="inline">timeout/0</code></a></td><td·style="text-align:·left;"><code·class="inline">'infinity'</code>·|·<code·class="inline">non_neg_integer()</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:no_return/0"><code·class="inline">no_return/0</code></a></td><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:none/0"><code·class="inline">none/0</code></a></td></tr></tbody></table><p><em>Table:·Built-in·types,·predefined·aliases</em></p><p>In·addition,·the·following·three·built-in·types·exist·and·can·be·thought·as |
| 243 | defined·below,·though·strictly·their·"type·definition"·is·not·valid·syntax | 243 | defined·below,·though·strictly·their·"type·definition"·is·not·valid·syntax |
| 244 | according·to·the·type·language·defined·above.</p><table><thead><tr><th·style="text-align:·left;"><em>Built-in·type</em></th><th·style="text-align:·left;"><em>Can·be·thought·defined·by·the·syntax</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:pos_integer/0"><code·class="inline">pos_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">1..</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:neg_integer/0"><code·class="inline">neg_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">..-1</code></td></tr></tbody></table><p><em>Table:·Additional·built-in·types</em></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·following·built-in·list·types·also·exist,·but·they·are·expected·to·be | 244 | according·to·the·type·language·defined·above.</p><table><thead><tr><th·style="text-align:·left;"><em>Built-in·type</em></th><th·style="text-align:·left;"><em>Can·be·thought·defined·by·the·syntax</em></th></tr></thead><tbody><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">0..</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:pos_integer/0"><code·class="inline">pos_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">1..</code></td></tr><tr><td·style="text-align:·left;"><a·href="../../erts-15.2.7/doc/html/erlang.html#t:neg_integer/0"><code·class="inline">neg_integer/0</code></a></td><td·style="text-align:·left;"><code·class="inline">..-1</code></td></tr></tbody></table><p><em>Table:·Additional·built-in·types</em></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·following·built-in·list·types·also·exist,·but·they·are·expected·to·be |
| 245 | rarely·used.·Hence,·they·have·long·names:</p></section><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">nonempty_maybe_improper_list</span><span·class="p"·data-group-id=" | 245 | rarely·used.·Hence,·they·have·long·names:</p></section><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">nonempty_maybe_improper_list</span><span·class="p"·data-group-id="7228403842-1">(</span><span·class="p"·data-group-id="7228403842-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">nonempty_maybe_improper_list</span><span·class="p"·data-group-id="72[·...·truncated·by·diffoscope;·len:·375,·SHA:·02548006bc209801fa515856df5d7aca642435dd5faf5fa82968aba9168fdd06·...·]-2">)</span><span·class="w"> |
| 246 | </span><span·class="nf">nonempty_improper_list</span><span·class="p"·data-group-id=" | 246 | </span><span·class="nf">nonempty_improper_list</span><span·class="p"·data-group-id="7228403842-5">(</span><span·class="n">Type1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type2</span><span·class="p"·data-group-id="7228403842-5">)</span><span·class="w"> |
| 247 | </span><span·class="nf">nonempty_maybe_improper_list</span><span·class="p"·data-group-id=" | 247 | </span><span·class="nf">nonempty_maybe_improper_list</span><span·class="p"·data-group-id="7228403842-6">(</span><span·class="n">Type1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type2</span><span·class="p"·data-group-id="7228403842-6">)</span></code></pre><p>where·the·last·two·types·define·the·set·of·Erlang·terms·one·would·expect.</p><p>Also·for·convenience,·record·notation·is·allowed·to·be·used.·Records·are |
| 248 | shorthands·for·the·corresponding·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Record</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Erlang_Atom</span><span·class="p"·data-group-id=" | 248 | shorthands·for·the·corresponding·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Record</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Erlang_Atom</span><span·class="p"·data-group-id="3310967544-1">{</span><span·class="p"·data-group-id="3310967544-1">}</span><span·class="w"> |
| 249 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Erlang_Atom</span><span·class="p"·data-group-id=" | 249 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Erlang_Atom</span><span·class="p"·data-group-id="3310967544-2">{</span><span·class="n">Fields</span><span·class="p"·data-group-id="3310967544-2">}</span></code></pre><p>Records·are·extended·to·possibly·contain·type·information.·This·is·described·in |
| 250 | <a·href="typespec.html#typeinrecords">Type·Information·in·Record·Declarations</a>.</p><h3·id="redefining-built-in-types"·class="section-heading"> | 250 | <a·href="typespec.html#typeinrecords">Type·Information·in·Record·Declarations</a>.</p><h3·id="redefining-built-in-types"·class="section-heading"> |
| 251 | ··<a·href="#redefining-built-in-types"·class="hover-link"> | 251 | ··<a·href="#redefining-built-in-types"·class="hover-link"> |
| 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 252 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 253 | ··</a> | 253 | ··</a> |
| 254 | ··<span·class="text">Redefining·built-in·types</span> | 254 | ··<span·class="text">Redefining·built-in·types</span> |
| 255 | </h3> | 255 | </h3> |
| 256 | <section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Starting·from·Erlang/OTP·26,·it·is·permitted·to·define·a·type·having·the·same | 256 | <section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Starting·from·Erlang/OTP·26,·it·is·permitted·to·define·a·type·having·the·same |
| 257 | name·as·a·built-in·type.</p></section><p>It·is·recommended·to·avoid·deliberately·reusing·built-in·names·because·it·can·be | 257 | name·as·a·built-in·type.</p></section><p>It·is·recommended·to·avoid·deliberately·reusing·built-in·names·because·it·can·be |
| 258 | confusing.·However,·when·an·Erlang/OTP·release·introduces·a·new·type,·code·that | 258 | confusing.·However,·when·an·Erlang/OTP·release·introduces·a·new·type,·code·that |
| 259 | happened·to·define·its·own·type·having·the·same·name·will·continue·to·work.</p><p>As·an·example,·imagine·that·the·Erlang/OTP·42·release·introduces·a·new·type | 259 | happened·to·define·its·own·type·having·the·same·name·will·continue·to·work.</p><p>As·an·example,·imagine·that·the·Erlang/OTP·42·release·introduces·a·new·type |
| 260 | <code·class="inline">gadget()</code>·defined·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">gadget</span><span·class="p"·data-group-id=" | 260 | <code·class="inline">gadget()</code>·defined·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">gadget</span><span·class="p"·data-group-id="8695997503-1">(</span><span·class="p"·data-group-id="8695997503-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8695997503-2">{</span><span·class="ss">'gadget'[·...·truncated·by·diffoscope;·len:·236,·SHA:·a1ba750a4701492079fb727d7548c5d42c4f54e2b9cca4ac9e383094c2bb6b38·...·]-2">}</span><span·class="p">.</span></code></pre><p>Further·imagine·that·some·code·has·its·own·(different)·definition·of·<code·class="inline">gadget()</code>, |
| 261 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">gadget</span><span·class="p"·data-group-id=" | 261 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">gadget</span><span·class="p"·data-group-id="0481054124-1">(</span><span·class="p"·data-group-id="0481054124-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="0481054124-2">#{</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·261c07c43ad1ba2bedee5c8de2006bb3aa4bbd6cf8a892c23d5a7fede08b6877·...·]-2">}</span><span·class="p">.</span></code></pre><p>Since·redefinitions·are·allowed,·the·code·will·still·compile·(but·with·a |
| 262 | warning),·and·Dialyzer·will·not·emit·any·additional·warnings.</p><h2·id="type-declarations-of-user-defined-types"·class="section-heading"> | 262 | warning),·and·Dialyzer·will·not·emit·any·additional·warnings.</p><h2·id="type-declarations-of-user-defined-types"·class="section-heading"> |
| 263 | ··<a·href="#type-declarations-of-user-defined-types"·class="hover-link"> | 263 | ··<a·href="#type-declarations-of-user-defined-types"·class="hover-link"> |
| 264 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 264 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 265 | ··</a> | 265 | ··</a> |
| 266 | ··<span·class="text">Type·Declarations·of·User-Defined·Types</span> | 266 | ··<span·class="text">Type·Declarations·of·User-Defined·Types</span> |
| 267 | </h2> | 267 | </h2> |
| 268 | <p>As·seen,·the·basic·syntax·of·a·type·is·an·atom·followed·by·closed·parentheses. | 268 | <p>As·seen,·the·basic·syntax·of·a·type·is·an·atom·followed·by·closed·parentheses. |
| 269 | New·types·are·declared·using·<code·class="inline">-type</code>·and·<code·class="inline">-opaque</code>·attributes·as·in·the | 269 | New·types·are·declared·using·<code·class="inline">-type</code>·and·<code·class="inline">-opaque</code>·attributes·as·in·the |
| 270 | following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">my_struct_type</span><span·class="p"·data-group-id=" | 270 | following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">my_struct_type</span><span·class="p"·data-group-id="0438003810-1">(</span><span·class="p"·data-group-id="0438003810-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">.</span><span·class="w"> |
| 271 | </span><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">my_opaq_type</span><span·class="p"·data-group-id=" | 271 | </span><span·class="p">-</span><span·class="na">opaque</span><span·class="w">·</span><span·class="nf">my_opaq_type</span><span·class="p"·data-group-id="0438003810-2">(</span><span·class="p"·data-group-id="0438003810-2">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">.</span></code></pre><p>The·type·name·is·the·atom·<code·class="inline">my_struct_type</code>,·followed·by·parentheses.·<code·class="inline">Type</code>·is·a |
| 272 | type·as·defined·in·the·previous·section.·A·current·restriction·is·that·<code·class="inline">Type</code> | 272 | type·as·defined·in·the·previous·section.·A·current·restriction·is·that·<code·class="inline">Type</code> |
| 273 | can·contain·only·predefined·types,·or·user-defined·types·which·are·either·of·the | 273 | can·contain·only·predefined·types,·or·user-defined·types·which·are·either·of·the |
| 274 | following:</p><ul><li>Module-local·type,·that·is,·with·a·definition·that·is·present·in·the·code·of | 274 | following:</p><ul><li>Module-local·type,·that·is,·with·a·definition·that·is·present·in·the·code·of |
| 275 | the·module</li><li>Remote·type,·that·is,·type·defined·in,·and·exported·by,·other·modules;·more | 275 | the·module</li><li>Remote·type,·that·is,·type·defined·in,·and·exported·by,·other·modules;·more |
| 276 | about·this·soon.</li></ul><p>For·module-local·types,·the·restriction·that·their·definition·exists·in·the | 276 | about·this·soon.</li></ul><p>For·module-local·types,·the·restriction·that·their·definition·exists·in·the |
| 277 | module·is·enforced·by·the·compiler·and·results·in·a·compilation·error.·(A | 277 | module·is·enforced·by·the·compiler·and·results·in·a·compilation·error.·(A |
| 278 | similar·restriction·currently·exists·for·records.)</p><p>Type·declarations·can·also·be·parameterized·by·including·type·variables·between | 278 | similar·restriction·currently·exists·for·records.)</p><p>Type·declarations·can·also·be·parameterized·by·including·type·variables·between |
| 279 | the·parentheses.·The·syntax·of·type·variables·is·the·same·as·Erlang·variables, | 279 | the·parentheses.·The·syntax·of·type·variables·is·the·same·as·Erlang·variables, |
| 280 | that·is,·starts·with·an·upper-case·letter.·These·variables·is·to | 280 | that·is,·starts·with·an·upper-case·letter.·These·variables·is·to |
| 281 | appear·on·the·RHS·of·the·definition.·A·concrete·example·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">orddict</span><span·class="p"·data-group-id="7849715722-1">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Val</span><span·class="p"·data-group-id="7849715722-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7849715722-2">[</span><span·class="p"·data-group-id="7849715722-3">{</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Val</span><span·class="p"·data-group-id="7849715722-3">}</span><span·class="p"·data-group-id="7849715722-2">]</span><span·class="p">.</span></code></pre><p>A·module·can·export·some·types·to·declare·that·other·modules·are·allowed·to | ||
| 282 | 281 | appear·on·the·RHS·of·the·definition.·A·concrete·example·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">orddict</span><span·class="p"·data-group-id="87[·...·truncated·by·diffoscope;·len:·693,·SHA:·3053cdf70c74fe32973b383d248d7a55de9b59c6778edaa9a09a84f73f03827d·...·]·to | |
| 282 | refer·to·them·as·<em>remote·types</em>.·This·declaration·has·the·following·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">export_type</span><span·class="p"·data-group-id="3087072639-1">(</span><span·class="p"·data-group-id="3087072639-2">[</span><span·class="n">T1</span><span·class="o">/</span><span·class="n">A1</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tk</span><span·class="o">/</span><span·class="n">Ak</span><span·class="p"·data-group-id="3087072639-2">]</span><span·class="p"·data-group-id="3087072639-1">)</span><span·class="p">.</span></code></pre><p>Here·the·<code·class="inline">Ti</code>s·are·atoms·(the·name·of·the·type)·and·the·<code·class="inline">Ai</code>s·are·their·arguments.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">export_type</span><span·class="p"·data-group-id="8029647915-1">(</span><span·class="p"·data-group-id="8029647915-2">[</span><span·class="ss">my_struct_type</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">orddict</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="8029647915-2">]</span><span·class="p"·data-group-id="8029647915-1">)</span><span·class="p">.</span></code></pre><p>Assuming·that·these·types·are·exported·from·module·<code·class="inline">'mod'</code>,·you·can·refer·to | ||
| 283 | them·from·other·modules·using·remote·type·expressions·like·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mod</span><span·class="p">:</span><span·class="nf">my_struct_type</span><span·class="p"·data-group-id="5 | 283 | them·from·other·modules·using·remote·type·expressions·like·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mod</span><span·class="p">:</span><span·class="nf">my_struct_type</span><span·class="p"·data-group-id="5072947704-1">(</span><span·class="p"·data-group-id="5072947704-1">)</span><span·class="w"> |
| 284 | </span><span·class="nc">mod</span><span·class="p">:</span><span·class="nf">orddict</span><span·class="p"·data-group-id="5 | 284 | </span><span·class="nc">mod</span><span·class="p">:</span><span·class="nf">orddict</span><span·class="p"·data-group-id="5072947704-2">(</span><span·class="nf">atom</span><span·class="p"·data-group-id="5072947704-3">(</span><span·class="p"·data-group-id="5072947704-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·122,·SHA:·efe6de22795c363d226fc5fa85129fe2cb81aa761a043a73fab3536728579bf7·...·]-2">)</span></code></pre><p>It·is·not·allowed·to·refer·to·types·that·are·not·declared·as·exported.</p><p>Types·declared·as·<code·class="inline">opaque</code>·represent·sets·of·terms·whose·structure·is·not |
| 285 | supposed·to·be·visible·from·outside·of·their·defining·module.·That·is,·only·the | 285 | supposed·to·be·visible·from·outside·of·their·defining·module.·That·is,·only·the |
| 286 | module·defining·them·is·allowed·to·depend·on·their·term·structure.·Consequently, | 286 | module·defining·them·is·allowed·to·depend·on·their·term·structure.·Consequently, |
| 287 | such·types·do·not·make·much·sense·as·module·local·-·module·local·types·are·not | 287 | such·types·do·not·make·much·sense·as·module·local·-·module·local·types·are·not |
| 288 | accessible·by·other·modules·anyway·-·and·is·always·to·be·exported.</p><p>Read·more·on·<a·href="opaques.html">Opaques</a></p><p><a·href=""·id="typeinrecords"></a></p><h2·id="type-information-in-record-declarations"·class="section-heading"> | 288 | accessible·by·other·modules·anyway·-·and·is·always·to·be·exported.</p><p>Read·more·on·<a·href="opaques.html">Opaques</a></p><p><a·href=""·id="typeinrecords"></a></p><h2·id="type-information-in-record-declarations"·class="section-heading"> |
| 289 | ··<a·href="#type-information-in-record-declarations"·class="hover-link"> | 289 | ··<a·href="#type-information-in-record-declarations"·class="hover-link"> |
| 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 291 | ··</a> | 291 | ··</a> |
| 292 | ··<span·class="text">Type·Information·in·Record·Declarations</span> | 292 | ··<span·class="text">Type·Information·in·Record·Declarations</span> |
| 293 | </h2> | 293 | </h2> |
| 294 | <p>The·types·of·record·fields·can·be·specified·in·the·declaration·of·the·record. | 294 | <p>The·types·of·record·fields·can·be·specified·in·the·declaration·of·the·record. |
| 295 | The·syntax·for·this·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 295 | The·syntax·for·this·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5048866366-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5048866366-2">{</span><span·class="ss">field1</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><spa[·...·truncated·by·diffoscope;·len:·422,·SHA:·769d10282d3a45f1953edc75141de8c449b21f11780e2918e7a46dbbc8fab020·...·]-1">)</span><span·class="p">.</span></code></pre><p>For·fields·without·type·annotations,·their·type·defaults·to·<code·class="inline">any()</code>.·That·is,·the |
| 296 | previous·example·is·a·shorthand·for·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 296 | previous·example·is·a·shorthand·for·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5687520254-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5687520254-2">{</span><span·class="ss">field1</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><spa[·...·truncated·by·diffoscope;·len:·651,·SHA:·00741aca1b868af51cd0732192079831ab4266a7ae57a3173591ff5844a13f3c·...·]-1">)</span><span·class="p">.</span></code></pre><p>In·the·presence·of·initial·values·for·fields,·the·type·must·be·declared·after |
| 297 | the·initialization,·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 297 | the·initialization,·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5811291215-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5811291215-2">{</span><span·class="ss">field1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·698,·SHA:·187b24fb7d1309e647f4bbab43e38e1acab459767a073e97ac3b725ce2e6d3e4·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·initial·values·for·fields·are·to·be·compatible·with·(that·is,·a·member·of) |
| 298 | the·corresponding·types.·This·is·checked·by·the·compiler·and·results·in·a | 298 | the·corresponding·types.·This·is·checked·by·the·compiler·and·results·in·a |
| 299 | compilation·error·if·a·violation·is·detected.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·19,·for·fields·without·initial·values,·the·singleton·type | 299 | compilation·error·if·a·violation·is·detected.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·19,·for·fields·without·initial·values,·the·singleton·type |
| 300 | <code·class="inline">'undefined'</code>·was·added·to·all·declared·types.·In·other·words,·the·following | 300 | <code·class="inline">'undefined'</code>·was·added·to·all·declared·types.·In·other·words,·the·following |
| 301 | two·record·declarations·had·identical·effects:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 301 | two·record·declarations·had·identical·effects:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="9618850993-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9618850993-2">{</span><span·class="ss">f1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·239,·SHA:·926658988aa57eca78e3669ea033063244adc292116db4b35f3a1261d7cae917·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 302 | ·············</span><span·class="ss">f2</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">float</span><span·class="p"·data-group-id=" | 302 | ·············</span><span·class="ss">f2</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">float</span><span·class="p"·data-group-id="9618850993-4">(</span><span·class="p"·data-group-id="9618850993-4">)</span><span·class="p">,</span><span·class="w"> |
| 303 | ·············</span><span·class="ss">f3</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id=" | 303 | ·············</span><span·class="ss">f3</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id="9618850993-2">}</span><span·class="p"·data-group-id="9618850993-1">)</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="w"> | 304 | </span><span·class="w"> |
| 305 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 305 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="9618850993-5">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9618850993-6">{</span><span·class="ss">f1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·239,·SHA:·9f04aea1ce48bf6d50e5915660e7f630eaa8df03085c106afe381b151b761c59·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 306 | ··············</span><span·class="ss">f2</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'undefined'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">float</span><span·class="p"·data-group-id=" | 306 | ··············</span><span·class="ss">f2</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'undefined'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">float</span><span·class="p"·data-group-id="9618850993-8">(</span><span·class="p"·data-group-id="9618850993-8">)</span><span·class="p">,</span><span·class="w"> |
| 307 | ··············</span><span·class="ss">f3</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'undefined'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id=" | 307 | ··············</span><span·class="ss">f3</span><span·class="w">······</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'undefined'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id="9618850993-6">}</span><span·class="p"·data-group-id="9618850993-5">)</span><span·class="p">.</span></code></pre><p>This·is·no·longer·the·case.·If·you·require·<code·class="inline">'undefined'</code>·in·your·record·field |
| 308 | type,·you·must·explicitly·add·it·to·the·typespec,·as·in·the·2nd·example.</p></section><p>Any·record,·containing·type·information·or·not,·once·defined,·can·be·used·as·a | 308 | type,·you·must·explicitly·add·it·to·the·typespec,·as·in·the·2nd·example.</p></section><p>Any·record,·containing·type·information·or·not,·once·defined,·can·be·used·as·a |
| 309 | type·using·the·following·syntax:</p><pre><code·class="text">#rec{}</code></pre><p>In·addition,·the·record·fields·can·be·further·specified·when·using·a·record·type | 309 | type·using·the·following·syntax:</p><pre><code·class="text">#rec{}</code></pre><p>In·addition,·the·record·fields·can·be·further·specified·when·using·a·record·type |
| 310 | by·adding·type·information·about·the·field·as·follows:</p><pre><code·class="text">#rec{some_field·::·Type}</code></pre><p>Any·unspecified·fields·are·assumed·to·have·the·type·in·the·original·record | 310 | by·adding·type·information·about·the·field·as·follows:</p><pre><code·class="text">#rec{some_field·::·Type}</code></pre><p>Any·unspecified·fields·are·assumed·to·have·the·type·in·the·original·record |
| 311 | declaration.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>When·records·are·used·to·create·patterns·for·ETS·and·Mnesia·match·functions, | 311 | declaration.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>When·records·are·used·to·create·patterns·for·ETS·and·Mnesia·match·functions, |
| 312 | Dialyzer·may·need·some·help·not·to·emit·bad·warnings.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">height</span><span·class="p"·data-group-id=" | 312 | Dialyzer·may·need·some·help·not·to·emit·bad·warnings.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">height</span><span·class="p"·data-group-id="9473495042-1">(</span><span·class="p"·data-group-id="9473495042-1">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id="9473495042-2">(</sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·08bd3d2cd56d969c4e8617f9cd4be397298f4558b4508b3967e359e8be899a75·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 313 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 313 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="9473495042-3">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9473495042-4">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><sp[·...·truncated·by·diffoscope;·len:·561,·SHA:·5a1145346cd1bdf2e25d97ec00d55be008c31e4f2aed64c2db32c2e69d6702a1·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 314 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 314 | </span><span·class="nf">lookup</span><span·class="p"·data-group-id="9473495042-7">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p"·data-group-id="9473495042-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 315 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_object</span><span·class="p"·data-group-id=" | 315 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_object</span><span·class="p"·data-group-id="9473495042-8">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="9473495042-9">{</span><span·class="ss">name</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·347,·SHA:·aac2fca3be3369b53a4c62a3379c2cd42915d05d9cbe10ad061757638c6fcda3·...·]-8">)</span><span·class="p">.</span></code></pre><p>Dialyzer·will·emit·a·warning·since·<code·class="inline">'_'</code>·is·not·in·the·type·of·record·field |
| 316 | <code·class="inline">height</code>.</p><p>The·recommended·way·of·dealing·with·this·is·to·declare·the·smallest·record | 316 | <code·class="inline">height</code>.</p><p>The·recommended·way·of·dealing·with·this·is·to·declare·the·smallest·record |
| 317 | field·types·to·accommodate·all·your·needs,·and·then·create·refinements·as | 317 | field·types·to·accommodate·all·your·needs,·and·then·create·refinements·as |
| 318 | needed.·The·modified·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7 | 318 | needed.·The·modified·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="2736915210-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2736915210-2">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><sp[·...·truncated·by·diffoscope;·len:·668,·SHA:·57009415a370597ac775ad346c0714e837da5ee49616eff14e9ffa20050f38dc·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 319 | </span><span·class="w"> | 319 | </span><span·class="w"> |
| 320 | </span><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">person</span><span·class="p"·data-group-id="7 | 320 | </span><span·class="p">-</span><span·class="na">type</span><span·class="w">·</span><span·class="nf">person</span><span·class="p"·data-group-id="2736915210-5">(</span><span·class="p"·data-group-id="2736915210-5">)</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·325,·SHA:·1e486f7fad7828620c0323dbf6d516054b7c552614e6e6178ad690afec2a1ee5·...·]-6">}</span><span·class="p">.</span></code></pre><p>In·specifications·and·type·declarations·the·type·<code·class="inline">person()</code>·is·to·be·preferred |
| 321 | before·<code·class="inline">#person{}</code>.</p></section><h2·id="specifications-for-functions"·class="section-heading"> | 321 | before·<code·class="inline">#person{}</code>.</p></section><h2·id="specifications-for-functions"·class="section-heading"> |
| 322 | ··<a·href="#specifications-for-functions"·class="hover-link"> | 322 | ··<a·href="#specifications-for-functions"·class="hover-link"> |
| 323 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 323 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 324 | ··</a> | 324 | ··</a> |
| 325 | ··<span·class="text">Specifications·for·Functions</span> | 325 | ··<span·class="text">Specifications·for·Functions</span> |
| 326 | </h2> | 326 | </h2> |
| 327 | <p>A·specification·(or·contract)·for·a·function·is·given·using·the·<code·class="inline">-spec</code> | 327 | <p>A·specification·(or·contract)·for·a·function·is·given·using·the·<code·class="inline">-spec</code> |
| 328 | attribute.·The·general·format·is·as·follows:</p><pre><code·class="text">-spec·Function(ArgType1,·...,·ArgTypeN)·->·ReturnType.</code></pre><p>An·implementation·of·the·function·with·the·same·name·<code·class="inline">Function</code>·must·exist·in | 328 | attribute.·The·general·format·is·as·follows:</p><pre><code·class="text">-spec·Function(ArgType1,·...,·ArgTypeN)·->·ReturnType.</code></pre><p>An·implementation·of·the·function·with·the·same·name·<code·class="inline">Function</code>·must·exist·in |
| 329 | the·current·module,·and·the·arity·of·the·function·must·match·the·number·of | 329 | the·current·module,·and·the·arity·of·the·function·must·match·the·number·of |
| 330 | arguments,·otherwise·the·compilation·fails.</p><p>The·following·longer·format·with·module·name·is·also·valid·as·long·as·<code·class="inline">Module</code> | 330 | arguments,·otherwise·the·compilation·fails.</p><p>The·following·longer·format·with·module·name·is·also·valid·as·long·as·<code·class="inline">Module</code> |
| 331 | is·the·name·of·the·current·module.·This·can·be·useful·for·documentation | 331 | is·the·name·of·the·current·module.·This·can·be·useful·for·documentation |
| 332 | purposes.</p><pre><code·class="text">-spec·Module:Function(ArgType1,·...,·ArgTypeN)·->·ReturnType.</code></pre><p>Also,·for·documentation·purposes,·argument·names·can·be·given:</p><pre><code·class="text">-spec·Function(ArgName1·::·Type1,·...,·ArgNameN·::·TypeN)·->·RT.</code></pre><p>A·function·specification·can·be·overloaded.·That·is,·it·can·have·several·types, | 332 | purposes.</p><pre><code·class="text">-spec·Module:Function(ArgType1,·...,·ArgTypeN)·->·ReturnType.</code></pre><p>Also,·for·documentation·purposes,·argument·names·can·be·given:</p><pre><code·class="text">-spec·Function(ArgName1·::·Type1,·...,·ArgNameN·::·TypeN)·->·RT.</code></pre><p>A·function·specification·can·be·overloaded.·That·is,·it·can·have·several·types, |
| 333 | separated·by·a·semicolon·(<code·class="inline">;</code>).·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 333 | separated·by·a·semicolon·(<code·class="inline">;</code>).·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="1763962777-1">(</span><span·class="n">T1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T2</span><span·class="p"·data-group-id="1763962777-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">T3</span><span·class="p">;</span><span·class="w"> |
| 334 | ·········</span><span·class="p"·data-group-id=" | 334 | ·········</span><span·class="p"·data-group-id="1763962777-2">(</span><span·class="n">T4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T5</span><span·class="p"·data-group-id="1763962777-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">T6</span><span·class="p">.</span></code></pre><p>A·current·restriction,·which·currently·results·in·a·warning·by·Dialyzer,·is·that |
| 335 | the·domains·of·the·argument·types·cannot·overlap.·For·example,·the·following | 335 | the·domains·of·the·argument·types·cannot·overlap.·For·example,·the·following |
| 336 | specification·results·in·a·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="4396137341-1">(</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id="4396137341-2">(</span><span·class="p"·data-group-id="4396137341-2">)</span><span·class="p"·data-group-id="4396137341-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id="4396137341-3">(</span><span·class="p"·data-group-id="4396137341-3">)</span><span·class="p">;</span><span·class="w"> | ||
| 337 | ···· | 336 | specification·results·in·a·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="7010405578-1">(</span><span·class="[·...·truncated·by·diffoscope;·len:·438,·SHA:·c70be9582ff6a837a84c7cf8a1bbdc59fa8b63236551421a0666de93d4bb6723·...·] |
| 337 | ·········</span><span·class="p"·data-group-id="7010405578-4">(</span><span·class="nf">integer</span><span·class="p"·data-group-id="7010405578-5">(</span><span·class="p"·data-group-id="7010405578-5">)</span><span·class="p"·data-group-id="7010405578-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7010405578-6">(</span><span·class="p"·data-group-id="7010405578-6">)</span><span·class="p">.</span></code></pre><p>Type·variables·can·be·used·in·specifications·to·specify·relations·for·the·input | ||
| 338 | and·output·arguments·of·a·function.·For·example,·the·following·specification | 338 | and·output·arguments·of·a·function.·For·example,·the·following·specification |
| 339 | defines·the·type·of·a·polymorphic·identity·function:</p><pre><code·class="text">-spec·id(X)·->·X.</code></pre><p>Notice·that·the·above·specification·does·not·restrict·the·input·and·output·type | 339 | defines·the·type·of·a·polymorphic·identity·function:</p><pre><code·class="text">-spec·id(X)·->·X.</code></pre><p>Notice·that·the·above·specification·does·not·restrict·the·input·and·output·type |
| 340 | in·any·way.·These·types·can·be·constrained·by·guard-like·subtype·constraints·and | 340 | in·any·way.·These·types·can·be·constrained·by·guard-like·subtype·constraints·and |
| 341 | provide·bounded·quantification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">id</span><span·class="p"·data-group-id=" | 341 | provide·bounded·quantification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">id</span><span·class="p"·data-group-id="0378086386-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="0378086386-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="k">when</span><span·[·...·truncated·by·diffoscope;·len:·261,·SHA:·c786c66faed9f3961becca0a6fd2fc99d8dddb548ff427cb914d2dbf41b8b99f·...·]-2">)</span><span·class="p">.</span></code></pre><p>Currently,·the·<code·class="inline">::</code>·constraint·(read·as·"is·a·subtype·of")·is·the·only·guard |
| 342 | constraint·that·can·be·used·in·the·<code·class="inline">when</code>·part·of·a·<code·class="inline">-spec</code>·attribute.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·above·function·specification·uses·multiple·occurrences·of·the·same·type | 342 | constraint·that·can·be·used·in·the·<code·class="inline">when</code>·part·of·a·<code·class="inline">-spec</code>·attribute.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·above·function·specification·uses·multiple·occurrences·of·the·same·type |
| 343 | variable.·That·provides·more·type·information·than·the·following·function | 343 | variable.·That·provides·more·type·information·than·the·following·function |
| 344 | specification,·where·the·type·variables·are·missing:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">id</span><span·class="p"·data-group-id=" | 344 | specification,·where·the·type·variables·are·missing:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">id</span><span·class="p"·data-group-id="2309877233-1">(</span><span·class="nf">tuple</span><span·class="p"·data-group-id="2309877233-2">(</span><span·class="p"·data-group-id="2309877233-2">)</span><span·class="p"·data-group-id="2309877233-1">)</span><span·class="w">·</span><span·class="p">-><[·...·truncated·by·diffoscope;·len:·153,·SHA:·d2a817853b263af81dbeb64e338322eb2658951a404a89a1228ebfafbb58d2b9·...·]-3">)</span><span·class="p">.</span></code></pre><p>The·latter·specification·says·that·the·function·takes·some·tuple·and·returns |
| 345 | some·tuple.·The·specification·with·the·<code·class="inline">X</code>·type·variable·specifies·that·the | 345 | some·tuple.·The·specification·with·the·<code·class="inline">X</code>·type·variable·specifies·that·the |
| 346 | function·takes·a·tuple·and·returns·<em>the·same</em>·tuple.</p><p>However,·it·is·up·to·the·tools·that·process·the·specifications·to·choose | 346 | function·takes·a·tuple·and·returns·<em>the·same</em>·tuple.</p><p>However,·it·is·up·to·the·tools·that·process·the·specifications·to·choose |
| 347 | whether·to·take·this·extra·information·into·account·or·not.</p></section><p>The·scope·of·a·<code·class="inline">::</code>·constraint·is·the·<code·class="inline">(...)·->·RetType</code>·specification·after | 347 | whether·to·take·this·extra·information·into·account·or·not.</p></section><p>The·scope·of·a·<code·class="inline">::</code>·constraint·is·the·<code·class="inline">(...)·->·RetType</code>·specification·after |
| 348 | which·it·appears.·To·avoid·confusion,·it·is·suggested·that·different·variables | 348 | which·it·appears.·To·avoid·confusion,·it·is·suggested·that·different·variables |
| 349 | are·used·in·different·constituents·of·an·overloaded·contract,·as·shown·in·the | 349 | are·used·in·different·constituents·of·an·overloaded·contract,·as·shown·in·the |
| 350 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="4431727838-1">(</span><span·class="p"·data-group-id="4431727838-2">{</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4431727838-3">(</span><span·class="p"·data-group-id="4431727838-3">)</span><span·class="p"·data-group-id="4431727838-2">}</span><span·class="p"·data-group-id="4431727838-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="4431727838-4">(</span><span·class="p"·data-group-id="4431727838-4">)</span><span·class="p">;</span><span·class="w"> | ||
| 351 | · | 350 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="4410521728-1">(</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·807,·SHA:·d70e03f6374e123bcd28c3af91f8c331307c4cf0d7206ebf7e64bdf2e1c1bec0·...·] |
| 351 | ·········</span><span·class="p"·data-group-id="4410521728-5">(</span><span·class="p"·data-group-id="4410521728-6">[</span><span·class="n">Y</span><span·class="p"·data-group-id="4410521728-6">]</span><span·class="p"·data-group-id="4410521728-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">number</span><span·class="p"·data-group-id="4410521728-7">(</span><span·class="p"·data-group-id="4410521728-7">)</span><span·class="p">.</span></code></pre><p>Some·functions·in·Erlang·are·not·meant·to·return;·either·because·they·define | ||
| 352 | servers·or·because·they·are·used·to·throw·exceptions,·as·in·the·following | 352 | servers·or·because·they·are·used·to·throw·exceptions,·as·in·the·following |
| 353 | function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_error</span><span·class="p"·data-group-id="49 | 353 | function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_error</span><span·class="p"·data-group-id="4915843605-1">(</span><span·class="n">Err</span><span·class="p"·data-group-id="4915843605-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">throw</span><span·class="p"·data-group-id="4915843605-2">(</span[·...·truncated·by·diffoscope;·len:·251,·SHA:·414df87fbb184e5f4c7c2078c062ba6f7c6b5941cd620095b87bd9a73653e632·...·]-2">)</span><span·class="p">.</span></code></pre><p>For·such·functions,·it·is·recommended·to·use·the·special·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:no_return/0"><code·class="inline">no_return/0</code></a>·type |
| 354 | for·their·"return",·through·a·contract·of·the·following·form:</p><pre><code·class="text">-spec·my_error(term())·->·no_return().</code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Erlang·uses·the·shorthand·version·<code·class="inline">_</code>·as·an·anonymous·type·variable·equivalent | 354 | for·their·"return",·through·a·contract·of·the·following·form:</p><pre><code·class="text">-spec·my_error(term())·->·no_return().</code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Erlang·uses·the·shorthand·version·<code·class="inline">_</code>·as·an·anonymous·type·variable·equivalent |
| 355 | to·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:term/0"><code·class="inline">term/0</code></a>·or·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:any/0"><code·class="inline">any/0</code></a>.·For·example,·the·following·function</p><pre><code·class="text">-spec·Function(string(),·_)·->·string().</code></pre><p>is·equivalent·to:</p><pre><code·class="text">-spec·Function(string(),·any())·->·string().</code></pre></section> | 355 | to·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:term/0"><code·class="inline">term/0</code></a>·or·<a·href="../../erts-15.2.7/doc/html/erlang.html#t:any/0"><code·class="inline">any/0</code></a>.·For·example,·the·following·function</p><pre><code·class="text">-spec·Function(string(),·_)·->·string().</code></pre><p>is·equivalent·to:</p><pre><code·class="text">-spec·Function(string(),·any())·->·string().</code></pre></section> |
| 356 | </div> | 356 | </div> |
| 357 | <div·class="bottom-actions"·id="bottom-actions"> | 357 | <div·class="bottom-actions"·id="bottom-actions"> |
| 358 | ··<div·class="bottom-actions-item"> | 358 | ··<div·class="bottom-actions-item"> |
| Max diff block lines reached; 677/70925 bytes (0.95%) of diff not shown. | |||
| Offset 215, 15 lines modified | Offset 215, 15 lines modified | ||
| 215 | ······<p·class="built-using"> | 215 | ······<p·class="built-using"> |
| 216 | ········Built·using | 216 | ········Built·using |
| 217 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 217 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 218 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 218 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 219 | ······</p> | 219 | ······</p> |
| 220 | <p>Copyright·©·1996-202 | 220 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 221 | ····</footer> | 221 | ····</footer> |
| 222 | ··</div> | 222 | ··</div> |
| 223 | </main> | 223 | </main> |
| 224 | </div> | 224 | </div> |
| 225 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 225 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 226 | ··<script> | 226 | ··<script> |
| 227 | ··let·initialized·=·false; | 227 | ··let·initialized·=·false; |
| Offset 329, 15 lines modified | Offset 329, 15 lines modified | ||
| 329 | ······<p·class="built-using"> | 329 | ······<p·class="built-using"> |
| 330 | ········Built·using | 330 | ········Built·using |
| 331 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 331 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 332 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 332 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 333 | ······</p> | 333 | ······</p> |
| 334 | <p>Copyright·©·1996-202 | 334 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 335 | ····</footer> | 335 | ····</footer> |
| 336 | ··</div> | 336 | ··</div> |
| 337 | </main> | 337 | </main> |
| 338 | </div> | 338 | </div> |
| 339 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 339 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 340 | ··<script> | 340 | ··<script> |
| 341 | ··let·initialized·=·false; | 341 | ··let·initialized·=·false; |
| Offset 149, 45 lines modified | Offset 149, 45 lines modified | ||
| 149 | occurrences·of·<code·class="inline">maybe</code>·without·quotes.</p><p><a·href=""·id="float_matching"></a></p><h3·id="0-0-and-0-0-will-no-longer-be-exactly-equal"·class="section-heading"> | 149 | occurrences·of·<code·class="inline">maybe</code>·without·quotes.</p><p><a·href=""·id="float_matching"></a></p><h3·id="0-0-and-0-0-will-no-longer-be-exactly-equal"·class="section-heading"> |
| 150 | ··<a·href="#0-0-and-0-0-will-no-longer-be-exactly-equal"·class="hover-link"> | 150 | ··<a·href="#0-0-and-0-0-will-no-longer-be-exactly-equal"·class="hover-link"> |
| 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 152 | ··</a> | 152 | ··</a> |
| 153 | ··<span·class="text">0.0·and·-0.0·will·no·longer·be·exactly·equal</span> | 153 | ··<span·class="text">0.0·and·-0.0·will·no·longer·be·exactly·equal</span> |
| 154 | </h3> | 154 | </h3> |
| 155 | <p>Currently,·the·floating·point·numbers·<code·class="inline">0.0</code>·and·<code·class="inline">-0.0</code>·have·distinct·internal | 155 | <p>Currently,·the·floating·point·numbers·<code·class="inline">0.0</code>·and·<code·class="inline">-0.0</code>·have·distinct·internal |
| 156 | representations.·That·can·be·seen·if·they·are·converted·to·binaries:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 156 | representations.·That·can·be·seen·if·they·are·converted·to·binaries:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="2675289259-1"><<</span><span·class="mf">0.0</span><span·class="o">/</span><span·class="nb">float</span><span·class="p"·data-group-id="2675289259-1">>></span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="2675289259-2"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·182,·SHA:·3e2dd66d0ac7b923bebfe8ab0e74ca68a3057cafe2c9f06e27c787f36123527f·...·]-2">>></span><span·class="gp·unselectable"> |
| 158 | 2>·</span><span·class="p"·data-group-id=" | 158 | 2>·</span><span·class="p"·data-group-id="2675289259-3"><<</span><span·class="o">-</span><span·class="mf">0.0</span><span·class="o">/</span><span·class="nb">float</span><span·class="p"·data-group-id="2675289259-3">>></span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="p"·data-group-id=" | 159 | </span><span·class="p"·data-group-id="2675289259-4"><<</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><spa[·...·truncated·by·diffoscope;·len:·184,·SHA:·90b883aca7fb5c7dcf8c8a3cde2ec2c16c9f9b0603f783d5b9a4c6ed307c209d·...·]-4">>></span></code></pre><p>However,·when·they·are·matched·against·each·other·or·compared·using·the·<code·class="inline">=:=</code> |
| 160 | operator,·they·are·considered·to·be·equal.·Thus,·<code·class="inline">0.0·=:=·-0.0</code>·currently | 160 | operator,·they·are·considered·to·be·equal.·Thus,·<code·class="inline">0.0·=:=·-0.0</code>·currently |
| 161 | returns·<code·class="inline">true</code>.</p><p>In·Erlang/OTP·27,·<code·class="inline">0.0·=:=·-0.0</code>·will·return·<code·class="inline">false</code>,·and·matching·<code·class="inline">0.0</code>·against | 161 | returns·<code·class="inline">true</code>.</p><p>In·Erlang/OTP·27,·<code·class="inline">0.0·=:=·-0.0</code>·will·return·<code·class="inline">false</code>,·and·matching·<code·class="inline">0.0</code>·against |
| 162 | <code·class="inline">-0.0</code>·will·fail.·When·used·as·map·keys,·<code·class="inline">0.0</code>·and·<code·class="inline">-0.0</code>·will·be·considered·to | 162 | <code·class="inline">-0.0</code>·will·fail.·When·used·as·map·keys,·<code·class="inline">0.0</code>·and·<code·class="inline">-0.0</code>·will·be·considered·to |
| 163 | be·distinct.</p><p>The·<code·class="inline">==</code>·operator·will·continue·to·return·<code·class="inline">true</code>·for·<code·class="inline">0.0·==·-0.0</code>.</p><p>To·help·to·find·code·that·might·need·to·be·revised,·in·OTP·27·there·will·be·a | 163 | be·distinct.</p><p>The·<code·class="inline">==</code>·operator·will·continue·to·return·<code·class="inline">true</code>·for·<code·class="inline">0.0·==·-0.0</code>.</p><p>To·help·to·find·code·that·might·need·to·be·revised,·in·OTP·27·there·will·be·a |
| 164 | new·compiler·warning·when·matching·against·<code·class="inline">0.0</code>·or·comparing·to·that·value | 164 | new·compiler·warning·when·matching·against·<code·class="inline">0.0</code>·or·comparing·to·that·value |
| 165 | using·the·<code·class="inline">=:=</code>·operator.·The·warning·can·be·suppressed·by·matching·against | 165 | using·the·<code·class="inline">=:=</code>·operator.·The·warning·can·be·suppressed·by·matching·against |
| 166 | <code·class="inline">+0.0</code>·instead·of·<code·class="inline">0.0</code>.</p><p>We·plan·to·introduce·the·same·warning·in·OTP·26.1,·but·by·default·it·will·be | 166 | <code·class="inline">+0.0</code>·instead·of·<code·class="inline">0.0</code>.</p><p>We·plan·to·introduce·the·same·warning·in·OTP·26.1,·but·by·default·it·will·be |
| 167 | disabled.</p><p><a·href=""·id="singleton_typevars"></a></p><h3·id="singleton-type-variables-will-become-a-compile-time-error"·class="section-heading"> | 167 | disabled.</p><p><a·href=""·id="singleton_typevars"></a></p><h3·id="singleton-type-variables-will-become-a-compile-time-error"·class="section-heading"> |
| 168 | ··<a·href="#singleton-type-variables-will-become-a-compile-time-error"·class="hover-link"> | 168 | ··<a·href="#singleton-type-variables-will-become-a-compile-time-error"·class="hover-link"> |
| 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 170 | ··</a> | 170 | ··</a> |
| 171 | ··<span·class="text">Singleton·type·variables·will·become·a·compile-time·error</span> | 171 | ··<span·class="text">Singleton·type·variables·will·become·a·compile-time·error</span> |
| 172 | </h3> | 172 | </h3> |
| 173 | <p>Before·Erlang/OTP·26,·the·compiler·would·silenty·accept·the·following·spec:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 173 | <p>Before·Erlang/OTP·26,·the·compiler·would·silenty·accept·the·following·spec:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">f</span><span·class="p"·data-group-id="0770709659-1">(</span><span·class="n">Opts</span><span·class="p"·data-group-id="0770709659-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="0770709659-2">(</sp[·...·truncated·by·diffoscope;·len:·43,·SHA:·722321800052ab9c6bda300c0dd8c1d003a65e7965ae4a931cb5009aa16f59e7·...·]9-2">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 174 | ····</span><span·class="n">Opts</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 174 | ····</span><span·class="n">Opts</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="0770709659-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Unknown</span><span·class="p"·data-group-id="0770709659-3">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·195,·SHA:·f8e8ec22861e575fac90b7588574b8c516490c1ef42cadc62303a9020a42e6eb·...·]9-4">}</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">f</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nf">f</span><span·class="p"·data-group-id="0770709659-5">(</span><span·class="p">_</span><span·class="p"·data-group-id="0770709659-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">error</span><span·class="p">.</span></code></pre><p>In·OTP·26,·the·compiler·emits·a·warning·pointing·out·that·the·type·variable |
| 176 | <code·class="inline">Unknown</code>·is·unbound:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">t</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">6</span><span·class="p">:</span><span·class="mi">18</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">variable</span><span·class="w">·</span><span·class="ss">'Unknown'</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">only</span><span·class="w">·</span><span·class="ss">used</span><span·class="w">·</span><span·class="nf">once</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | <code·class="inline">Unknown</code>·is·unbound:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">t</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">6</span><span·class="p">:</span><span·class="mi">18</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">variable</span><span·class="w">·</span><span·class="ss">'Unknown'</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">only</span><span·class="w">·</span><span·class="ss">used</span><span·class="w">·</span><span·class="nf">once</span><span·class="w">·</span><span·class="p"·data-group-id="0983317033-1">(</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">unbound</span><span·class="p"·data-group-id="0983317033-1">)</span><span·class="w"> |
| 177 | </span><span·class="c1">%····6|·····Opts·::·{ok,·Unknown}·|·{error,·Unknown}.</span><span·class="w"> | 177 | </span><span·class="c1">%····6|·····Opts·::·{ok,·Unknown}·|·{error,·Unknown}.</span><span·class="w"> |
| 178 | </span><span·class="c1">%·····|··················^</span></code></pre><p>In·OTP·27,·that·warning·will·become·an·error.</p><p><a·href=""·id="escripts_will_be_compiled"></a></p><h3·id="escripts-will-be-compiled-by-default"·class="section-heading"> | 178 | </span><span·class="c1">%·····|··················^</span></code></pre><p>In·OTP·27,·that·warning·will·become·an·error.</p><p><a·href=""·id="escripts_will_be_compiled"></a></p><h3·id="escripts-will-be-compiled-by-default"·class="section-heading"> |
| 179 | ··<a·href="#escripts-will-be-compiled-by-default"·class="hover-link"> | 179 | ··<a·href="#escripts-will-be-compiled-by-default"·class="hover-link"> |
| 180 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 180 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 181 | ··</a> | 181 | ··</a> |
| 182 | ··<span·class="text">Escripts·will·be·compiled·by·default</span> | 182 | ··<span·class="text">Escripts·will·be·compiled·by·default</span> |
| 183 | </h3> | 183 | </h3> |
| 184 | <p>Escripts·will·be·compiled·by·default·instead·of·interpreted.·That·means·that·the | 184 | <p>Escripts·will·be·compiled·by·default·instead·of·interpreted.·That·means·that·the |
| 185 | <code·class="inline">compiler</code>·application·must·be·available.</p><p>The·old·behavior·of·interpreting·escripts·can·be·restored·by·adding·the | 185 | <code·class="inline">compiler</code>·application·must·be·available.</p><p>The·old·behavior·of·interpreting·escripts·can·be·restored·by·adding·the |
| 186 | following·line·to·the·script·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">mode</span><span·class="p"·data-group-id=" | 186 | following·line·to·the·script·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">mode</span><span·class="p"·data-group-id="9500399856-1">(</span><span·class="ss">interpret</span><span·class="p"·data-group-id="9500399856-1">)</span><span·class="p">.</span></code></pre><p>In·OTP·28,·support·for·interpreting·an·escript·will·be·removed.</p><h3·id="code_path_choice-will-default-to-strict"·class="section-heading"> |
| 187 | ··<a·href="#code_path_choice-will-default-to-strict"·class="hover-link"> | 187 | ··<a·href="#code_path_choice-will-default-to-strict"·class="hover-link"> |
| 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 189 | ··</a> | 189 | ··</a> |
| 190 | ··<span·class="text">-code_path_choice·will·default·to·strict</span> | 190 | ··<span·class="text">-code_path_choice·will·default·to·strict</span> |
| 191 | </h3> | 191 | </h3> |
| 192 | <p>This·command·line·option·controls·if·paths·given·in·the·command·line,·boot | 192 | <p>This·command·line·option·controls·if·paths·given·in·the·command·line,·boot |
| 193 | scripts,·and·the·code·server·should·be·interpreted·as·is·strict·or·relaxed.</p><p>OTP·26·and·earlier·defaults·to·<code·class="inline">relaxed</code>,·which·means·<code·class="inline">-pa·myapp/ebin</code>·would | 193 | scripts,·and·the·code·server·should·be·interpreted·as·is·strict·or·relaxed.</p><p>OTP·26·and·earlier·defaults·to·<code·class="inline">relaxed</code>,·which·means·<code·class="inline">-pa·myapp/ebin</code>·would |
| Offset 231, 18 lines modified | Offset 231, 18 lines modified | ||
| 231 | " | 231 | " |
| 232 | String·Content | 232 | String·Content |
| 233 | " | 233 | " |
| 234 | %% | 234 | %% |
| 235 | %%·In·OTP·27·it·is·instead·interpreted·as·a | 235 | %%·In·OTP·27·it·is·instead·interpreted·as·a |
| 236 | %%·Triple-Quoted·String·equivalent·to | 236 | %%·Triple-Quoted·String·equivalent·to |
| 237 | "String·Content"</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="s">""</span><span·class="s">""</span><span·class="w"> | 237 | "String·Content"</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="s">""</span><span·class="s">""</span><span·class="w"> |
| 238 | </span><span·class="o">++</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 238 | </span><span·class="o">++</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="7605252049-1">(</span><span·class="p"·data-group-id="7605252049-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w"> |
| 239 | </span><span·class="s">""</span><span·class="s">""</span><span·class="w"> | 239 | </span><span·class="s">""</span><span·class="s">""</span><span·class="w"> |
| 240 | </span><span·class="c1">%%·Became</span><span·class="w"> | 240 | </span><span·class="c1">%%·Became</span><span·class="w"> |
| 241 | </span><span·class="s">""</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 241 | </span><span·class="s">""</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="7605252049-2">(</span><span·class="p"·data-group-id="7605252049-2">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">""</span><span·class="w"> |
| 242 | </span><span·class="c1">%%</span><span·class="w"> | 242 | </span><span·class="c1">%%</span><span·class="w"> |
| 243 | </span><span·class="c1">%%·In·OTP·27·it·is·instead·interpreted·as·a</span><span·class="w"> | 243 | </span><span·class="c1">%%·In·OTP·27·it·is·instead·interpreted·as·a</span><span·class="w"> |
| 244 | </span><span·class="c1">%%·Triple-Quoted·String·(triple-or-more)·equivalent·to</span><span·class="w"> | 244 | </span><span·class="c1">%%·Triple-Quoted·String·(triple-or-more)·equivalent·to</span><span·class="w"> |
| 245 | </span><span·class="s">"++·foo()·++"</span></code></pre><p>From·Erlang/OTP·26.1·up·to·27.0·the·compiler·issues·a·warning·for·a·sequence·of | 245 | </span><span·class="s">"++·foo()·++"</span></code></pre><p>From·Erlang/OTP·26.1·up·to·27.0·the·compiler·issues·a·warning·for·a·sequence·of |
| 246 | 3·or·more·double-quote·characters·since·that·is·almost·certainly·a·mistake·or | 246 | 3·or·more·double-quote·characters·since·that·is·almost·certainly·a·mistake·or |
| 247 | something·like·a·result·of·bad·automatic·code·generation.·If·a·users·gets·that | 247 | something·like·a·result·of·bad·automatic·code·generation.·If·a·users·gets·that |
| 248 | warning,·the·code·should·be·corrected·for·example·by·inserting·appropriate | 248 | warning,·the·code·should·be·corrected·for·example·by·inserting·appropriate |
| Offset 358, 15 lines modified | Offset 358, 15 lines modified | ||
| 358 | ······<p·class="built-using"> | 358 | ······<p·class="built-using"> |
| 359 | ········Built·using | 359 | ········Built·using |
| 360 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 360 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 361 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 361 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 362 | ······</p> | 362 | ······</p> |
| 363 | <p>Copyright·©·1996-202 | 363 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 364 | ····</footer> | 364 | ····</footer> |
| 365 | ··</div> | 365 | ··</div> |
| 366 | </main> | 366 | </main> |
| 367 | </div> | 367 | </div> |
| 368 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 368 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 369 | ··<script> | 369 | ··<script> |
| 370 | ··let·initialized·=·false; | 370 | ··let·initialized·=·false; |
| Offset 139, 15 lines modified | Offset 139, 15 lines modified | ||
| 139 | ······<p·class="built-using"> | 139 | ······<p·class="built-using"> |
| 140 | ········Built·using | 140 | ········Built·using |
| 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 143 | ······</p> | 143 | ······</p> |
| 144 | <p>Copyright·©·1996-202 | 144 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 145 | ····</footer> | 145 | ····</footer> |
| 146 | ··</div> | 146 | ··</div> |
| 147 | </main> | 147 | </main> |
| 148 | </div> | 148 | </div> |
| 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 150 | ··<script> | 150 | ··<script> |
| 151 | ··let·initialized·=·false; | 151 | ··let·initialized·=·false; |
| Offset 512, 15 lines modified | Offset 512, 15 lines modified | ||
| 512 | ······<p·class="built-using"> | 512 | ······<p·class="built-using"> |
| 513 | ········Built·using | 513 | ········Built·using |
| 514 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 514 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 515 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 515 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 516 | ······</p> | 516 | ······</p> |
| 517 | <p>Copyright·©·1996-202 | 517 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 518 | ····</footer> | 518 | ····</footer> |
| 519 | ··</div> | 519 | ··</div> |
| 520 | </main> | 520 | </main> |
| 521 | </div> | 521 | </div> |
| 522 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 522 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 523 | ··<script> | 523 | ··<script> |
| 524 | ··let·initialized·=·false; | 524 | ··let·initialized·=·false; |
| Offset 202, 15 lines modified | Offset 202, 15 lines modified | ||
| 202 | ······<p·class="built-using"> | 202 | ······<p·class="built-using"> |
| 203 | ········Built·using | 203 | ········Built·using |
| 204 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 204 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 205 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 205 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 206 | ······</p> | 206 | ······</p> |
| 207 | <p>Copyright·©·1996-202 | 207 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 208 | ····</footer> | 208 | ····</footer> |
| 209 | ··</div> | 209 | ··</div> |
| 210 | </main> | 210 | </main> |
| 211 | </div> | 211 | </div> |
| 212 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 212 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 213 | ··<script> | 213 | ··<script> |
| 214 | ··let·initialized·=·false; | 214 | ··let·initialized·=·false; |
| Offset 237, 50 lines modified | Offset 237, 50 lines modified | ||
| 237 | <code·class="inline">uds_dist</code>·example·using·a·port·driver·written·in·C,·<code·class="inline">erl_uds_dist</code>·is·written | 237 | <code·class="inline">uds_dist</code>·example·using·a·port·driver·written·in·C,·<code·class="inline">erl_uds_dist</code>·is·written |
| 238 | entirely·in·Erlang.</p><h3·id="exported-callback-functions"·class="section-heading"> | 238 | entirely·in·Erlang.</p><h3·id="exported-callback-functions"·class="section-heading"> |
| 239 | ··<a·href="#exported-callback-functions"·class="hover-link"> | 239 | ··<a·href="#exported-callback-functions"·class="hover-link"> |
| 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 241 | ··</a> | 241 | ··</a> |
| 242 | ··<span·class="text">Exported·Callback·Functions</span> | 242 | ··<span·class="text">Exported·Callback·Functions</span> |
| 243 | </h3> | 243 | </h3> |
| 244 | <p>The·following·functions·are·mandatory:</p><ul><li><pre·id="listen"><code·class="makeup·erlang"·translate="no"><span·class="nf">listen</span><span·class="p"·data-group-id=" | 244 | <p>The·following·functions·are·mandatory:</p><ul><li><pre·id="listen"><code·class="makeup·erlang"·translate="no"><span·class="nf">listen</span><span·class="p"·data-group-id="7500479199-1">(</span><span·class="n">Name</span><span·class="p"·data-group-id="7500479199-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 245 | </span><span·class="err"> </span><span·class="err"> </span><span·class="p"·data-group-id=" | 245 | </span><span·class="err"> </span><span·class="err"> </span><span·class="p"·data-group-id="7500479199-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7500479199-3">{</span><span·class="n">Listen</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Address</span>[·...·truncated·by·diffoscope;·len:·456,·SHA:·b3e4fc3a418986d004bbb037722b10f2e0377c3f229029d8d6b7d12f4e048efc·...·]-4">}</span><span·class="w"> |
| 246 | </span><span·class="nf">listen</span><span·class="p"·data-group-id=" | 246 | </span><span·class="nf">listen</span><span·class="p"·data-group-id="7500479199-5">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="n">Host</span><span·class="p"·data-group-id="7500479199-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 247 | </span><span·class="err"> </span><span·class="err"> </span><span·class="p"·data-group-id=" | 247 | </span><span·class="err"> </span><span·class="err"> </span><span·class="p"·data-group-id="7500479199-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7500479199-7">{</span><span·class="n">Listen</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Address</span>[·...·truncated·by·diffoscope;·len:·456,·SHA:·131819fec057a754aed09da1cba350c9a5974b80ada7f08d803ce66eb7c7bac6·...·]-8">}</span></code></pre><p><code·class="inline">listen/2</code>·is·called·once·in·order·to·listen·for·incoming·connection·requests. |
| 248 | The·call·is·made·when·the·distribution·is·brought·up.·The·argument·<code·class="inline">Name</code>·is | 248 | The·call·is·made·when·the·distribution·is·brought·up.·The·argument·<code·class="inline">Name</code>·is |
| 249 | the·part·of·the·node·name·before·the·<code·class="inline">@</code>·sign·in·the·full·node·name.·It·can·be | 249 | the·part·of·the·node·name·before·the·<code·class="inline">@</code>·sign·in·the·full·node·name.·It·can·be |
| 250 | either·an·atom·or·a·string.·The·argument·<code·class="inline">Host</code>·is·the·part·of·the·node·name | 250 | either·an·atom·or·a·string.·The·argument·<code·class="inline">Host</code>·is·the·part·of·the·node·name |
| 251 | after·the·<code·class="inline">@</code>·sign·in·the·full·node·name.·It·is·always·a·string.</p><p>The·return·value·consists·of·a·<code·class="inline">Listen</code>·handle·(which·is·later·passed·to·the | 251 | after·the·<code·class="inline">@</code>·sign·in·the·full·node·name.·It·is·always·a·string.</p><p>The·return·value·consists·of·a·<code·class="inline">Listen</code>·handle·(which·is·later·passed·to·the |
| 252 | <a·href="alt_dist.html#accept"><code·class="inline">accept/1</code></a>·callback),·<code·class="inline">Address</code>·which·is·a | 252 | <a·href="alt_dist.html#accept"><code·class="inline">accept/1</code></a>·callback),·<code·class="inline">Address</code>·which·is·a |
| 253 | <code·class="inline">#net_address{}</code>·record·with·information·about·the·address·for·the·node·(the | 253 | <code·class="inline">#net_address{}</code>·record·with·information·about·the·address·for·the·node·(the |
| 254 | <code·class="inline">#net_address{}</code>·record·is·defined·in·<code·class="inline">kernel/include/net_address.hrl</code>),·and | 254 | <code·class="inline">#net_address{}</code>·record·is·defined·in·<code·class="inline">kernel/include/net_address.hrl</code>),·and |
| 255 | <code·class="inline">Creation</code>·which·(currently)·is·an·integer·<code·class="inline">1</code>,·<code·class="inline">2</code>,·or·<code·class="inline">3</code>.</p><p>If·<a·href="epmd_cmd.html"><code·class="inline">epmd</code></a>·is·to·be·used·for·node·discovery,·you·typically·want | 255 | <code·class="inline">Creation</code>·which·(currently)·is·an·integer·<code·class="inline">1</code>,·<code·class="inline">2</code>,·or·<code·class="inline">3</code>.</p><p>If·<a·href="epmd_cmd.html"><code·class="inline">epmd</code></a>·is·to·be·used·for·node·discovery,·you·typically·want |
| 256 | to·use·the·<code·class="inline">erl_epmd</code>·module·(part·of·the·<code·class="inline">kernel</code>·application)·in·order·to | 256 | to·use·the·<code·class="inline">erl_epmd</code>·module·(part·of·the·<code·class="inline">kernel</code>·application)·in·order·to |
| 257 | register·the·listen·port·with·<code·class="inline">epmd</code>·and·retrieve·<code·class="inline">Creation</code>·to·use.</p></li><li><pre·id="address"><code·class="makeup·erlang"·translate="no"><span·class="nf">address</span><span·class="p"·data-group-id=" | 257 | register·the·listen·port·with·<code·class="inline">epmd</code>·and·retrieve·<code·class="inline">Creation</code>·to·use.</p></li><li><pre·id="address"><code·class="makeup·erlang"·translate="no"><span·class="nf">address</span><span·class="p"·data-group-id="6871546204-1">(</span><span·class="p"·data-group-id="6871546204-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 258 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">Address</span></code></pre><p><code·class="inline">address/0</code>·is·called·in·order·to·get·the·<code·class="inline">Address</code>·part·of·the | 258 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">Address</span></code></pre><p><code·class="inline">address/0</code>·is·called·in·order·to·get·the·<code·class="inline">Address</code>·part·of·the |
| 259 | <a·href="alt_dist.html#listen"><code·class="inline">listen/2</code></a>·function·without·creating·a·listen·socket. | 259 | <a·href="alt_dist.html#listen"><code·class="inline">listen/2</code></a>·function·without·creating·a·listen·socket. |
| 260 | All·fields·except·<code·class="inline">address</code>·have·to·be·set·in·the·returned·record</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">address</span><span·class="p"·data-group-id=" | 260 | All·fields·except·<code·class="inline">address</code>·have·to·be·set·in·the·returned·record</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">address</span><span·class="p"·data-group-id="2518071044-1">(</span><span·class="p"·data-group-id="2518071044-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 261 | ····</span><span·class="p"·data-group-id=" | 261 | ····</span><span·class="p"·data-group-id="2518071044-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Host</span><span·class="p"·data-group-id="2518071044-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·173,·SHA:·6405a8eec18dcf11a345cffca2b1307d87a856a32758114c5077bb2d676a7f97·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 262 | ····</span><span·class="o">#</span><span·class="ss">net_address</span><span·class="p"·data-group-id=" | 262 | ····</span><span·class="o">#</span><span·class="ss">net_address</span><span·class="p"·data-group-id="2518071044-4">{</span><span·class="w">·</span><span·class="ss">host</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Host</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">protocol</span><sp[·...·truncated·by·diffoscope;·len:·611,·SHA:·cd22db2fea96eff50d4c873c91daf54d764613a6572585d804335d66e219d2f5·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 263 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">AcceptorPid</span></code></pre><p><code·class="inline">accept/1</code>·should·spawn·a·process·that·accepts·connections.·This·process | 263 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">AcceptorPid</span></code></pre><p><code·class="inline">accept/1</code>·should·spawn·a·process·that·accepts·connections.·This·process |
| 264 | should·preferably·execute·on·<code·class="inline">max</code>·priority.·The·process·identifier·of·this | 264 | should·preferably·execute·on·<code·class="inline">max</code>·priority.·The·process·identifier·of·this |
| 265 | process·should·be·returned.</p><p>The·<code·class="inline">Listen</code>·argument·will·be·the·same·as·the·<code·class="inline">Listen</code>·handle·part·of·the | 265 | process·should·be·returned.</p><p>The·<code·class="inline">Listen</code>·argument·will·be·the·same·as·the·<code·class="inline">Listen</code>·handle·part·of·the |
| 266 | return·value·of·the·<a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback·above. | 266 | return·value·of·the·<a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback·above. |
| 267 | <code·class="inline">accept/1</code>·is·called·only·once·when·the·distribution·protocol·is·started.</p><p>The·caller·of·this·function·is·a·representative·for·<code·class="inline">net_kernel</code>·(this·may·or | 267 | <code·class="inline">accept/1</code>·is·called·only·once·when·the·distribution·protocol·is·started.</p><p>The·caller·of·this·function·is·a·representative·for·<code·class="inline">net_kernel</code>·(this·may·or |
| 268 | may·not·be·the·process·registered·as·<code·class="inline">net_kernel</code>)·and·is·in·this·document | 268 | may·not·be·the·process·registered·as·<code·class="inline">net_kernel</code>)·and·is·in·this·document |
| 269 | identified·as·<code·class="inline">Kernel</code>.·When·a·connection·has·been·accepted·by·the·acceptor | 269 | identified·as·<code·class="inline">Kernel</code>.·When·a·connection·has·been·accepted·by·the·acceptor |
| 270 | process,·it·needs·to·inform·<code·class="inline">Kernel</code>·about·the·accepted·connection.·This·is | 270 | process,·it·needs·to·inform·<code·class="inline">Kernel</code>·about·the·accepted·connection.·This·is |
| 271 | done·by·passing·a·message·on·the·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Kernel</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 271 | done·by·passing·a·message·on·the·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Kernel</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7588854566-1">{</span><span·class="ss">accept</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AcceptorPid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DistController</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·157,·SHA:·6018a979bc20820c594dcb92e9b1cacb8b7f33ddb8f25d0cbb2371563849faac·...·]-1">}</span></code></pre><p><code·class="inline">DistController</code>·is·either·the·process·or·port·identifier·of·the·distribution |
| 272 | controller·for·the·connection.·The·distribution·controller·should·be·created | 272 | controller·for·the·connection.·The·distribution·controller·should·be·created |
| 273 | by·the·acceptor·processes·when·a·new·connection·is·accepted.·Its·job·is·to | 273 | by·the·acceptor·processes·when·a·new·connection·is·accepted.·Its·job·is·to |
| 274 | dispatch·traffic·on·the·connection.</p><p><code·class="inline">Kernel</code>·responds·with·one·of·the·following·messages:</p><ul><li><p><strong><code·class="inline">{Kernel,·controller,·SupervisorPid}</code></strong>·-·The·request·was·accepted·and | 274 | dispatch·traffic·on·the·connection.</p><p><code·class="inline">Kernel</code>·responds·with·one·of·the·following·messages:</p><ul><li><p><strong><code·class="inline">{Kernel,·controller,·SupervisorPid}</code></strong>·-·The·request·was·accepted·and |
| 275 | <code·class="inline">SupervisorPid</code>·is·the·process·identifier·of·the·connection·supervisor | 275 | <code·class="inline">SupervisorPid</code>·is·the·process·identifier·of·the·connection·supervisor |
| 276 | process·(which·is·created·in·the | 276 | process·(which·is·created·in·the |
| 277 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>·callback).</p></li><li><p><strong><code·class="inline">{Kernel,·unsupported_protocol}</code></strong>·-·The·request·was·rejected.·This·is·a | 277 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>·callback).</p></li><li><p><strong><code·class="inline">{Kernel,·unsupported_protocol}</code></strong>·-·The·request·was·rejected.·This·is·a |
| 278 | fatal·error.·The·acceptor·process·should·terminate.</p></li></ul><p>When·an·accept·sequence·has·been·completed·the·acceptor·process·is·expected·to | 278 | fatal·error.·The·acceptor·process·should·terminate.</p></li></ul><p>When·an·accept·sequence·has·been·completed·the·acceptor·process·is·expected·to |
| 279 | continue·accepting·further·requests.</p></li><li><pre·id="accept_connection"><code·class="makeup·erlang"·translate="no"><span·class="nf">accept_connection</span><span·class="p"·data-group-id=" | 279 | continue·accepting·further·requests.</p></li><li><pre·id="accept_connection"><code·class="makeup·erlang"·translate="no"><span·class="nf">accept_connection</span><span·class="p"·data-group-id="6635695842-1">(</span><span·class="n">AcceptorPid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DistCtrl</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MyNode</span><span·class="p">,</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·155,·SHA:·c003bbf57253dbc8ce6359b6279dbd39dc62777f38a12a8737d1988f0d7e1312·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 280 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">ConnectionSupervisorPid</span></code></pre><p><code·class="inline">accept_connection/5</code>·should·spawn·a·process·that·will·perform·the·Erlang | 280 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">ConnectionSupervisorPid</span></code></pre><p><code·class="inline">accept_connection/5</code>·should·spawn·a·process·that·will·perform·the·Erlang |
| 281 | distribution·handshake·for·the·connection.·If·the·handshake·successfully | 281 | distribution·handshake·for·the·connection.·If·the·handshake·successfully |
| 282 | completes·it·should·continue·to·function·as·a·connection·supervisor.·This | 282 | completes·it·should·continue·to·function·as·a·connection·supervisor.·This |
| 283 | process·should·preferably·execute·on·<code·class="inline">max</code>·priority·and·should·be·linked·to | 283 | process·should·preferably·execute·on·<code·class="inline">max</code>·priority·and·should·be·linked·to |
| 284 | the·caller.·The·<code·class="inline">dist_util:net_ticker_spawn_options()</code>·function·can·be·called | 284 | the·caller.·The·<code·class="inline">dist_util:net_ticker_spawn_options()</code>·function·can·be·called |
| 285 | to·get·spawn·options·suitable·for·this·process·which·can·be·passed·directly·to | 285 | to·get·spawn·options·suitable·for·this·process·which·can·be·passed·directly·to |
| 286 | <a·href="erlang.html#spawn_opt/4"><code·class="inline">erlang:spawn_opt/4</code></a>.·<code·class="inline">dist_util:net_ticker_spawn_options()</code>·will·by·default | 286 | <a·href="erlang.html#spawn_opt/4"><code·class="inline">erlang:spawn_opt/4</code></a>.·<code·class="inline">dist_util:net_ticker_spawn_options()</code>·will·by·default |
| Offset 294, 15 lines modified | Offset 294, 15 lines modified | ||
| 294 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li><li><p><strong><code·class="inline">Allowed</code></strong>·-·To·be·passed·along·to | 294 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li><li><p><strong><code·class="inline">Allowed</code></strong>·-·To·be·passed·along·to |
| 295 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li><li><p><strong><code·class="inline">SetupTime</code></strong>·-·Time·used·for·creating·a·setup·timer·by·a·call·to | 295 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li><li><p><strong><code·class="inline">SetupTime</code></strong>·-·Time·used·for·creating·a·setup·timer·by·a·call·to |
| 296 | <code·class="inline">dist_util:start_timer(SetupTime)</code>.·The·timer·should·be·passed·along·to | 296 | <code·class="inline">dist_util:start_timer(SetupTime)</code>.·The·timer·should·be·passed·along·to |
| 297 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li></ul><p>The·created·process·should·provide·callbacks·and·other·information·needed·for | 297 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>.</p></li></ul><p>The·created·process·should·provide·callbacks·and·other·information·needed·for |
| 298 | the·handshake·in·a·<a·href="alt_dist.html#hs_data_record"><code·class="inline">#hs_data{}</code></a>·record·and·call | 298 | the·handshake·in·a·<a·href="alt_dist.html#hs_data_record"><code·class="inline">#hs_data{}</code></a>·record·and·call |
| 299 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>·with·this·record.</p><p><code·class="inline">dist_util:handshake_other_started(HsData)</code>·will·perform·the·handshake·and·if | 299 | <code·class="inline">dist_util:handshake_other_started(HsData)</code>·with·this·record.</p><p><code·class="inline">dist_util:handshake_other_started(HsData)</code>·will·perform·the·handshake·and·if |
| 300 | the·handshake·successfully·completes·this·process·will·then·continue·in·a | 300 | the·handshake·successfully·completes·this·process·will·then·continue·in·a |
| 301 | connection·supervisor·loop·as·long·as·the·connection·is·up.</p></li><li><pre·id="setup"><code·class="makeup·erlang"·translate="no"><span·class="nf">setup</span><span·class="p"·data-group-id=" | 301 | connection·supervisor·loop·as·long·as·the·connection·is·up.</p></li><li><pre·id="setup"><code·class="makeup·erlang"·translate="no"><span·class="nf">setup</span><span·class="p"·data-group-id="9228949101-1">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MyNode</span><span·class="p">,</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·153,·SHA:·0fcf142bf0577412eabfc7fcc601f6cd62f4edccd8c4848dc398b6fa74059118·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 302 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">ConnectionSupervisorPid</span></code></pre><p><code·class="inline">setup/5</code>·should·spawn·a·process·that·connects·to·<code·class="inline">Node</code>.·When·connection·has | 302 | </span><span·class="err"> </span><span·class="err"> </span><span·class="n">ConnectionSupervisorPid</span></code></pre><p><code·class="inline">setup/5</code>·should·spawn·a·process·that·connects·to·<code·class="inline">Node</code>.·When·connection·has |
| 303 | been·established·it·should·perform·the·Erlang·distribution·handshake·for·the | 303 | been·established·it·should·perform·the·Erlang·distribution·handshake·for·the |
| 304 | connection.·If·the·handshake·successfully·completes·it·should·continue·to | 304 | connection.·If·the·handshake·successfully·completes·it·should·continue·to |
| 305 | function·as·a·connection·supervisor.·This·process·should·preferably·execute·on | 305 | function·as·a·connection·supervisor.·This·process·should·preferably·execute·on |
| 306 | <code·class="inline">max</code>·priority·and·should·be·linked·to·the·caller.·The | 306 | <code·class="inline">max</code>·priority·and·should·be·linked·to·the·caller.·The |
| 307 | <code·class="inline">dist_util:net_ticker_spawn_options()</code>·function·can·be·called·to·get·spawn | 307 | <code·class="inline">dist_util:net_ticker_spawn_options()</code>·function·can·be·called·to·get·spawn |
| 308 | options·suitable·for·this·process·which·can·be·passed·directly·to | 308 | options·suitable·for·this·process·which·can·be·passed·directly·to |
| Offset 320, 23 lines modified | Offset 320, 23 lines modified | ||
| 320 | may·not·be·the·process·registered·as·<code·class="inline">net_kernel</code>)·and·is·in·this·document | 320 | may·not·be·the·process·registered·as·<code·class="inline">net_kernel</code>)·and·is·in·this·document |
| 321 | identified·as·<code·class="inline">Kernel</code>.</p><p>This·function·should,·besides·spawning·the·connection·supervisor,·also·create | 321 | identified·as·<code·class="inline">Kernel</code>.</p><p>This·function·should,·besides·spawning·the·connection·supervisor,·also·create |
| 322 | a·distribution·controller.·The·distribution·controller·is·either·a·process·or | 322 | a·distribution·controller.·The·distribution·controller·is·either·a·process·or |
| 323 | a·port·which·is·responsible·for·dispatching·traffic.</p><p>The·created·process·should·provide·callbacks·and·other·information·needed·for | 323 | a·port·which·is·responsible·for·dispatching·traffic.</p><p>The·created·process·should·provide·callbacks·and·other·information·needed·for |
| 324 | the·handshake·in·a·<a·href="alt_dist.html#hs_data_record"><code·class="inline">#hs_data{}</code></a>·record·and·call | 324 | the·handshake·in·a·<a·href="alt_dist.html#hs_data_record"><code·class="inline">#hs_data{}</code></a>·record·and·call |
| 325 | <code·class="inline">dist_util:handshake_we_started(HsData)</code>·with·this·record.</p><p><code·class="inline">dist_util:handshake_we_started(HsData)</code>·will·perform·the·handshake·and·the | 325 | <code·class="inline">dist_util:handshake_we_started(HsData)</code>·with·this·record.</p><p><code·class="inline">dist_util:handshake_we_started(HsData)</code>·will·perform·the·handshake·and·the |
| 326 | handshake·successfully·completes·this·process·will·then·continue·in·a | 326 | handshake·successfully·completes·this·process·will·then·continue·in·a |
| 327 | connection·supervisor·loop·as·long·as·the·connection·is·up.</p></li><li><pre·id="close"><code·class="makeup·erlang"·translate="no"><span·class="nf">close</span><span·class="p"·data-group-id=" | 327 | connection·supervisor·loop·as·long·as·the·connection·is·up.</p></li><li><pre·id="close"><code·class="makeup·erlang"·translate="no"><span·class="nf">close</span><span·class="p"·data-group-id="4040099602-1">(</span><span·class="n">Listen</span><span·class="p"·data-group-id="4040099602-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 328 | </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">void</span><span·class="p"·data-group-id=" | 328 | </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">void</span><span·class="p"·data-group-id="4040099602-2">(</span><span·class="p"·data-group-id="4040099602-2">)</span></code></pre><p>Called·in·order·to·close·the·<code·class="inline">Listen</code>·handle·that·originally·was·passed·from |
| 329 | the·<a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.</p></li><li><pre·id="select"><code·class="makeup·erlang"·translate="no"><span·class="nf">select</span><span·class="p"·data-group-id=" | 329 | the·<a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.</p></li><li><pre·id="select"><code·class="makeup·erlang"·translate="no"><span·class="nf">select</span><span·class="p"·data-group-id="2582299680-1">(</span><span·class="n">NodeName</span><span·class="p"·data-group-id="2582299680-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 330 | </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">boolean</span><span·class="p"·data-group-id=" | 330 | </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">boolean</span><span·class="p"·data-group-id="2582299680-2">(</span><span·class="p"·data-group-id="2582299680-2">)</span></code></pre><p>Return·<code·class="inline">true</code>·if·the·host·name·part·of·the·<code·class="inline">NodeName</code>·is·valid·for·use·with |
| 331 | this·protocol;·otherwise,·<code·class="inline">false</code>.</p></li></ul><p>There·are·also·two·optional·functions·that·may·be·exported:</p><ul><li><pre·id="setopts"><code·class="makeup·erlang"·translate="no"><span·class="nf">setopts</span><span·class="p"·data-group-id="5147692513-1">(</span><span·class="n">Listen</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opts</span><span·class="p"·data-group-id="5147692513-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 332 | 331 | this·protocol;·otherwise,·<code·class="inline">false</code>.</p></li></ul><p>There·are·also·two·optional·functions·that·may·be·exported:</p><ul><li><pre·id="setopts"><code·class="makeup·erlang"·translate="no"><span·class="nf">setopts</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·262,·SHA:·90dda8bb809c061c6688aba6382db3983980129f47818e682c4d5b0ff540fcb4·...·] | |
| 332 | </span><span·class="err"> </span><span·class="err"> </span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="0182596335-2">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Error</span><span·class="p"·data-group-id="0182596335-2">}</span></code></pre><p>The·argument·<code·class="inline">Listen</code>·is·the·handle·originally·passed·from·the | ||
| 333 | <a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.·The·argument·<code·class="inline">Opts</code>·is·a·list·of | 333 | <a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.·The·argument·<code·class="inline">Opts</code>·is·a·list·of |
| 334 | options·to·set·on·future·connections.</p></li><li><pre·id="getopts"><code·class="makeup·erlang"·translate="no"><span·class="nf">getopts</span><span·class="p"·data-group-id="1454363684-1">(</span><span·class="n">Listen</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opts</span><span·class="p"·data-group-id="1454363684-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 335 | 334 | options·to·set·on·future·connections.</p></li><li><pre·id="getopts"><code·class="makeup·erlang"·translate="no"><span·class="nf">getopts</span><span·class="p"·data-group-id="4273822047-1">(</span><span·class="n">Listen</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·164,·SHA:·79e67b6437eb140f7d75b108162a9990ddb41e5a1f4b09412f53be5ae7f62391·...·] | |
| 335 | </span><span·class="err"> </span><span·class="err"> </span><span·class="p"·data-group-id="4273822047-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OptionValues</span><span·class="p"·data-group-id="4273822047-2">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4273822047-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Error</span><span·class="p"·data-group-id="4273822047-3">}</span></code></pre><p>The·argument·<code·class="inline">Listen</code>·is·the·handle·originally·passed·from·the | ||
| 336 | <a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.·The·argument·<code·class="inline">Opts</code>·is·a·list·of | 336 | <a·href="alt_dist.html#listen"><code·class="inline">listen/1</code></a>·callback.·The·argument·<code·class="inline">Opts</code>·is·a·list·of |
| 337 | options·to·read·for·future·connections.</p></li></ul><p><a·href=""·id="hs_data_record"></a></p><h3·id="the-hs_data-record"·class="section-heading"> | 337 | options·to·read·for·future·connections.</p></li></ul><p><a·href=""·id="hs_data_record"></a></p><h3·id="the-hs_data-record"·class="section-heading"> |
| 338 | ··<a·href="#the-hs_data-record"·class="hover-link"> | 338 | ··<a·href="#the-hs_data-record"·class="hover-link"> |
| 339 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 339 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 340 | ··</a> | 340 | ··</a> |
| 341 | ··<span·class="text">The·#hs_data{}·Record</span> | 341 | ··<span·class="text">The·#hs_data{}·Record</span> |
| 342 | </h3> | 342 | </h3> |
| Offset 350, 44 lines modified | Offset 350, 44 lines modified | ||
| 350 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_other_node">other_node</code></strong>·-·Name·of·the·other·node.·This·field | 350 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_other_node">other_node</code></strong>·-·Name·of·the·other·node.·This·field |
| 351 | is·only·mandatory·when·this·node·initiates·the·connection.·That·is,·when | 351 | is·only·mandatory·when·this·node·initiates·the·connection.·That·is,·when |
| 352 | connection·is·set·up·via·<a·href="alt_dist.html#setup"><code·class="inline">setup/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_this_node">this_node</code></strong>·-·The·node·name·of·this·node.</p></li><li><p><strong><code·class="inline"·id="hs_data_socket">socket</code></strong>·-·The·identifier·of·the·distribution | 352 | connection·is·set·up·via·<a·href="alt_dist.html#setup"><code·class="inline">setup/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_this_node">this_node</code></strong>·-·The·node·name·of·this·node.</p></li><li><p><strong><code·class="inline"·id="hs_data_socket">socket</code></strong>·-·The·identifier·of·the·distribution |
| 353 | controller.</p></li><li><p><strong><code·class="inline"·id="hs_data_timer">timer</code></strong>·-·The·timer·created·using | 353 | controller.</p></li><li><p><strong><code·class="inline"·id="hs_data_timer">timer</code></strong>·-·The·timer·created·using |
| 354 | <code·class="inline">dist_util:start_timer/1</code>.</p></li><li><p><strong><code·class="inline"·id="hs_data_allowed">allowed</code></strong>·-·Information·passed·as·<code·class="inline">Allowed</code>·to | 354 | <code·class="inline">dist_util:start_timer/1</code>.</p></li><li><p><strong><code·class="inline"·id="hs_data_allowed">allowed</code></strong>·-·Information·passed·as·<code·class="inline">Allowed</code>·to |
| 355 | <code·class="inline">accept_connection/5</code>.·This·field·is·only·mandatory·when·the·remote·node | 355 | <code·class="inline">accept_connection/5</code>.·This·field·is·only·mandatory·when·the·remote·node |
| 356 | initiated·the·connection.·That·is,·when·the·connection·is·set·up·via | 356 | initiated·the·connection.·That·is,·when·the·connection·is·set·up·via |
| 357 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_send">f_send</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="5748080476-1">(</span><span·class="n">DistCtrlr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5748080476-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="5748080476-2">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Error</span><span·class="p"·data-group-id="5748080476-2">}</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller·and·<code·class="inline">Data</code> | ||
| 358 | 357 | <a·href="alt_dist.html#accept_connection"><code·class="inline">accept_connection/5</code></a>.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_send">f_send</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·[·...·truncated·by·diffoscope;·len:·809,·SHA:·d56030f15d0e2556308fa1e006b9e8f76ba6b4125bb7f96f215127c0fd1e7a03·...·] | |
| 358 | is·io·data·to·pass·to·the·other·side.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_recv">f_recv</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="2704529244-1">(</span><span·class="n">DistCtrlr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Length</span><span·class="p"·data-group-id="2704529244-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2704529244-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Packet</span><span·class="p"·data-group-id="2704529244-2">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="2704529244-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="2704529244-3">}</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller.·If | ||
| 359 | <code·class="inline">Length</code>·is·<code·class="inline">0</code>,·all·available·bytes·should·be·returned.·If·<code·class="inline">Length·>·0</code>, | 359 | <code·class="inline">Length</code>·is·<code·class="inline">0</code>,·all·available·bytes·should·be·returned.·If·<code·class="inline">Length·>·0</code>, |
| 360 | exactly·<code·class="inline">Length</code>·bytes·should·be·returned,·or·an·error;·possibly·discarding | 360 | exactly·<code·class="inline">Length</code>·bytes·should·be·returned,·or·an·error;·possibly·discarding |
| 361 | less·than·<code·class="inline">Length</code>·bytes·of·data·when·the·connection·is·closed·from·the·other | 361 | less·than·<code·class="inline">Length</code>·bytes·of·data·when·the·connection·is·closed·from·the·other |
| 362 | side.·It·is·used·for·passive·receive·of·data·from·the·other·end.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_setopts_pre_nodeup">f_setopts_pre_nodeup</code></strong>·-·A·fun·with·the | 362 | side.·It·is·used·for·passive·receive·of·data·from·the·other·end.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_setopts_pre_nodeup">f_setopts_pre_nodeup</code></strong>·-·A·fun·with·the |
| 363 | following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 363 | following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="0415070715-1">(</span><span·class="n">DistCtrlr</span><span·class="p"·data-group-id="0415070715-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">|</span[·...·truncated·by·diffoscope;·len:·224,·SHA:·daeb906df7ebacbd7f65cdc6c35ae50e388b0aade768b3e85092a95d2d89b255·...·]-2">}</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller.·Called |
| 364 | just·before·the·distribution·channel·is·taken·up·for·normal·traffic.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_setopts_post_nodeup">f_setopts_post_nodeup</code></strong>·-·A·fun·with | 364 | just·before·the·distribution·channel·is·taken·up·for·normal·traffic.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_setopts_post_nodeup">f_setopts_post_nodeup</code></strong>·-·A·fun·with |
| 365 | the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 365 | the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="3882866088-1">(</span><span·class="n">DistCtrlr</span><span·class="p"·data-group-id="3882866088-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">|</span[·...·truncated·by·diffoscope;·len:·224,·SHA:·25683503a100a31c965c6e71f9b22b92ea37573e40cfbdf8c98cfccb79ba09b6·...·]-2">}</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller.·Called |
| 366 | just·after·distribution·channel·has·been·taken·up·for·normal·traffic.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_getll">f_getll</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 366 | just·after·distribution·channel·has·been·taken·up·for·normal·traffic.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_getll">f_getll</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="4149543527-1">(</span><span·class="n">DistCtrlr</span><span·class="p"·data-group-id="4149543527-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">ID</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller·and·<code·class="inline">ID</code>·is |
| 367 | the·identifier·of·the·low·level·entity·that·handles·the·connection·(often | 367 | the·identifier·of·the·low·level·entity·that·handles·the·connection·(often |
| 368 | <code·class="inline">DistCtrlr</code>·itself).</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_address">f_address</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 368 | <code·class="inline">DistCtrlr</code>·itself).</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_f_address">f_address</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="5015918617-1">(</span><span·class="n">DistCtrlr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="5015918617-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">NetAddress</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller,·<code·class="inline">Node</code>·is |
| 369 | the·node·name·of·the·node·on·the·other·end,·and·<code·class="inline">NetAddress</code>·is·a | 369 | the·node·name·of·the·node·on·the·other·end,·and·<code·class="inline">NetAddress</code>·is·a |
| 370 | <code·class="inline">#net_address{}</code>·record·with·information·about·the·address·for·the·<code·class="inline">Node</code>·on | 370 | <code·class="inline">#net_address{}</code>·record·with·information·about·the·address·for·the·<code·class="inline">Node</code>·on |
| 371 | the·other·end·of·the·connection.·The·<code·class="inline">#net_address{}</code>·record·is·defined·in | 371 | the·other·end·of·the·connection.·The·<code·class="inline">#net_address{}</code>·record·is·defined·in |
| 372 | <code·class="inline">kernel/include/net_address.hrl</code>.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_mf_tick">mf_tick</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 372 | <code·class="inline">kernel/include/net_address.hrl</code>.</p><p>Only·used·during·handshake·phase.</p></li><li><p><strong><code·class="inline"·id="hs_data_mf_tick">mf_tick</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="4844429696-1">(</span><span·class="n">DistCtrlr</span><span·class="p"·data-group-id="4844429696-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">void</span><span·class="p"·data-group-id="4844429696-2">[·...·truncated·by·diffoscope;·len:·49,·SHA:·efbe0a1b9e28c7426ac9b6c456e45814f5edcb6bd54be4024a709eaae5d99037·...·]-2">)</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller.·This |
| 373 | function·should·send·information·over·the·connection·that·is·not·interpreted | 373 | function·should·send·information·over·the·connection·that·is·not·interpreted |
| 374 | by·the·other·end·while·increasing·the·statistics·of·received·packets·on·the | 374 | by·the·other·end·while·increasing·the·statistics·of·received·packets·on·the |
| 375 | other·end.·This·is·usually·implemented·by·sending·an·empty·packet.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>It·is·of·vital·importance·that·this·operation·does·not·block·the·caller·for | 375 | other·end.·This·is·usually·implemented·by·sending·an·empty·packet.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>It·is·of·vital·importance·that·this·operation·does·not·block·the·caller·for |
| 376 | a·long·time.·This·since·it·is·called·from·the·connection·supervisor.</p></section><p>Used·when·connection·is·up.</p></li><li><p><strong><code·class="inline"·id="hs_data_mf_getstat">mf_getstat</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 376 | a·long·time.·This·since·it·is·called·from·the·connection·supervisor.</p></section><p>Used·when·connection·is·up.</p></li><li><p><strong><code·class="inline"·id="hs_data_mf_getstat">mf_getstat</code></strong>·-·A·fun·with·the·following·signature:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="2275814570-1">(</span><span·class="n">DistCtrlr</span><span·class="p"·data-group-id="2275814570-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2275814570-2">{</span><span·class="ss">ok<[·...·truncated·by·diffoscope;·len:·280,·SHA:·ac482c99c96a92f425472cb442f6cd6b6effd91e0b778d133ea569065a9e0a86·...·]-2">}</span></code></pre><p>where·<code·class="inline">DistCtrlr</code>·is·the·identifier·of·the·distribution·controller,·<code·class="inline">Received</code> |
| 377 | is·received·packets,·<code·class="inline">Sent</code>·is·sent·packets,·and·<code·class="inline">PendSend</code>·is·amount·of·data | 377 | is·received·packets,·<code·class="inline">Sent</code>·is·sent·packets,·and·<code·class="inline">PendSend</code>·is·amount·of·data |
| 378 | in·queue·to·be·sent·(typically·in·bytes,·but·<code·class="inline">dist_util</code>·only·checks·whether | 378 | in·queue·to·be·sent·(typically·in·bytes,·but·<code·class="inline">dist_util</code>·only·checks·whether |
| 379 | the·value·is·non-zero·to·know·there·is·data·in·queue)·or·a·<a·href="erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a> | 379 | the·value·is·non-zero·to·know·there·is·data·in·queue)·or·a·<a·href="erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a> |
| 380 | indicating·whether·there·are·packets·in·queue·to·be·sent.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>It·is·of·vital·importance·that·this·operation·does·not·block·the·caller·for | 380 | indicating·whether·there·are·packets·in·queue·to·be·sent.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>It·is·of·vital·importance·that·this·operation·does·not·block·the·caller·for |
| 381 | a·long·time.·This·since·it·is·called·from·the·connection·supervisor.</p></section><p>Used·when·connection·is·up.</p></li><li><p><strong><code·class="inline"·id="hs_data_request_type">request_type</code></strong>·-·The·request·<code·class="inline">Type</code>·as·passed·to | 381 | a·long·time.·This·since·it·is·called·from·the·connection·supervisor.</p></section><p>Used·when·connection·is·up.</p></li><li><p><strong><code·class="inline"·id="hs_data_request_type">request_type</code></strong>·-·The·request·<code·class="inline">Type</code>·as·passed·to |
| 382 | <a·href="alt_dist.html#setup"><code·class="inline">setup/5</code></a>.·This·is·only·mandatory·when·the·connection·has | 382 | <a·href="alt_dist.html#setup"><code·class="inline">setup/5</code></a>.·This·is·only·mandatory·when·the·connection·has |
| Max diff block lines reached; 3563/55577 bytes (6.41%) of diff not shown. | |||
| Offset 241, 15 lines modified | Offset 241, 15 lines modified | ||
| 241 | ······<p·class="built-using"> | 241 | ······<p·class="built-using"> |
| 242 | ········Built·using | 242 | ········Built·using |
| 243 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 243 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 244 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 244 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 245 | ······</p> | 245 | ······</p> |
| 246 | <p>Copyright·©·1996-202 | 246 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 247 | ····</footer> | 247 | ····</footer> |
| 248 | ··</div> | 248 | ··</div> |
| 249 | </main> | 249 | </main> |
| 250 | </div> | 250 | </div> |
| 251 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 251 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 252 | ··<script> | 252 | ··<script> |
| 253 | ··let·initialized·=·false; | 253 | ··let·initialized·=·false; |
| Offset 641, 15 lines modified | Offset 641, 15 lines modified | ||
| 641 | ······<p·class="built-using"> | 641 | ······<p·class="built-using"> |
| 642 | ········Built·using | 642 | ········Built·using |
| 643 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 643 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 644 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 644 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 645 | ······</p> | 645 | ······</p> |
| 646 | <p>Copyright·©·1996-202 | 646 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 647 | ····</footer> | 647 | ····</footer> |
| 648 | ··</div> | 648 | ··</div> |
| 649 | </main> | 649 | </main> |
| 650 | </div> | 650 | </div> |
| 651 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 651 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 652 | ··<script> | 652 | ··<script> |
| 653 | ··let·initialized·=·false; | 653 | ··let·initialized·=·false; |
| Offset 209, 17 lines modified | Offset 209, 17 lines modified | ||
| 209 | they·have·to·follow·certain·restrictions.·The·convention·for·making | 209 | they·have·to·follow·certain·restrictions.·The·convention·for·making |
| 210 | this·clear·is·to·have·a·comment·above·the·function·that·explains·that | 210 | this·clear·is·to·have·a·comment·above·the·function·that·explains·that |
| 211 | the·function·is·transformed·by·YCF·(see·<code·class="inline">maps_values_1_helper</code>·in | 211 | the·function·is·transformed·by·YCF·(see·<code·class="inline">maps_values_1_helper</code>·in |
| 212 | <code·class="inline">erl_map.c</code>·for·an·example).·If·only·the·transformed·version·of·the | 212 | <code·class="inline">erl_map.c</code>·for·an·example).·If·only·the·transformed·version·of·the |
| 213 | function·is·used,·the·convention·is·to·"comment·out"·the·source·for·the | 213 | function·is·used,·the·convention·is·to·"comment·out"·the·source·for·the |
| 214 | function·by·surrounding·it·with·the·following·<code·class="inline">#ifdef</code>·(this·way,·one | 214 | function·by·surrounding·it·with·the·following·<code·class="inline">#ifdef</code>·(this·way,·one |
| 215 | will·not·get·warnings·about·unused·functions):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">#</span><span·class="ss">ifdef</span><span·class="w">·</span><span·class="n">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</span><span·class="w"> | 215 | will·not·get·warnings·about·unused·functions):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">#</span><span·class="ss">ifdef</span><span·class="w">·</span><span·class="n">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</span><span·class="w"> |
| 216 | </span><span·class="ss">void</span><span·class="w">·</span><span·class="nf">my_fun</span><span·class="p"·data-group-id=" | 216 | </span><span·class="ss">void</span><span·class="w">·</span><span·class="nf">my_fun</span><span·class="p"·data-group-id="4387788164-1">(</span><span·class="p"·data-group-id="4387788164-1">)</span><span·class="w">·</span><span·class="p"·data-group-id="4387788164-2">{</span><span·class="w"> |
| 217 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 217 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="p"·data-group-id=" | 218 | </span><span·class="p"·data-group-id="4387788164-2">}</span><span·class="w"> |
| 219 | </span><span·class="p">#</span><span·class="ss">endif</span><span·class="w">·</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span></code></pre><p>While·editing·the·function·one·can·define | 219 | </span><span·class="p">#</span><span·class="ss">endif</span><span·class="w">·</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span></code></pre><p>While·editing·the·function·one·can·define |
| 220 | <code·class="inline">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</code>·so·that·one·can·see·errors | 220 | <code·class="inline">INCLUDE_YCF_TRANSFORMED_ONLY_FUNCTIONS</code>·so·that·one·can·see·errors |
| 221 | and·warnings·in·the·non-transformed·source.</p><h3·id="where-to-place-ycf-transformed-functions"·class="section-heading"> | 221 | and·warnings·in·the·non-transformed·source.</p><h3·id="where-to-place-ycf-transformed-functions"·class="section-heading"> |
| 222 | ··<a·href="#where-to-place-ycf-transformed-functions"·class="hover-link"> | 222 | ··<a·href="#where-to-place-ycf-transformed-functions"·class="hover-link"> |
| 223 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 223 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 224 | ··</a> | 224 | ··</a> |
| 225 | ··<span·class="text">Where·to·Place·YCF·Transformed·Functions</span> | 225 | ··<span·class="text">Where·to·Place·YCF·Transformed·Functions</span> |
| Offset 365, 15 lines modified | Offset 365, 15 lines modified | ||
| 365 | ······<p·class="built-using"> | 365 | ······<p·class="built-using"> |
| 366 | ········Built·using | 366 | ········Built·using |
| 367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 369 | ······</p> | 369 | ······</p> |
| 370 | <p>Copyright·©·1996-202 | 370 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 371 | ····</footer> | 371 | ····</footer> |
| 372 | ··</div> | 372 | ··</div> |
| 373 | </main> | 373 | </main> |
| 374 | </div> | 374 | </div> |
| 375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 376 | ··<script> | 376 | ··<script> |
| 377 | ··let·initialized·=·false; | 377 | ··let·initialized·=·false; |
| Offset 145, 26 lines modified | Offset 145, 26 lines modified | ||
| 145 | </h2> | 145 | </h2> |
| 146 | <p>The·code·is·loaded·very·similarly·to·how·it·is·loaded·for·the·interpreter.·Each·beam | 146 | <p>The·code·is·loaded·very·similarly·to·how·it·is·loaded·for·the·interpreter.·Each·beam |
| 147 | file·is·parsed·and·then·optimized·through·the·transformations·described·in | 147 | file·is·parsed·and·then·optimized·through·the·transformations·described·in |
| 148 | <a·href="beam_makeops.html#defining-transformation-rules">beam_makeops</a>.·The·transformations | 148 | <a·href="beam_makeops.html#defining-transformation-rules">beam_makeops</a>.·The·transformations |
| 149 | used·in·BeamAsm·are·much·simpler·than·the·interpreter's,·as·most·of·the | 149 | used·in·BeamAsm·are·much·simpler·than·the·interpreter's,·as·most·of·the |
| 150 | transformations·for·the·interpreter·are·done·only·to·eliminate·the·instruction | 150 | transformations·for·the·interpreter·are·done·only·to·eliminate·the·instruction |
| 151 | dispatch·overhead.</p><p>Then·each·instruction·is·encoded·using·the·C++·functions·in·the | 151 | dispatch·overhead.</p><p>Then·each·instruction·is·encoded·using·the·C++·functions·in·the |
| 152 | <code·class="inline">jit/$ARCH/instr_*.cpp</code>·files.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">void</span><span·class="w">·</span><span·class="n">BeamModuleAssembler</span><span·class="p">:</span><span·class="p">:</span><span·class="nf">emit_is_nonempty_list</span><span·class="p"·data-group-id=" | 152 | <code·class="inline">jit/$ARCH/instr_*.cpp</code>·files.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">void</span><span·class="w">·</span><span·class="n">BeamModuleAssembler</span><span·class="p">:</span><span·class="p">:</span><span·class="nf">emit_is_nonempty_list</span><span·class="p"·data-group-id="8230931410-1">(</span><span·class="ss">const</span><span·class="w">·</span><span·class="n">ArgVal</span><span·class="w">·</span><span·class="err">&</span><span·class="n">Fail</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">const<[·...·truncated·by·diffoscope;·len:·257,·SHA:·99b9e00faf7d50451e5eed3078bae217e97ad4abccf2cd12edd8499ef6ccd85c·...·]-2">{</span><span·class="w"> |
| 153 | ··</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">test</span><span·class="p"·data-group-id=" | 153 | ··</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">test</span><span·class="p"·data-group-id="8230931410-3">(</span><span·class="nf">getArgRef</span><span·class="p"·data-group-id="8230931410-4">(</span><span·class="n">Src</span><span·class="p"·data-group-id="8230931410-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">imm<[·...·truncated·by·diffoscope;·len:·327,·SHA:·f3f5d4dc6488d19e66c6f90a849820355a14b581d0cbe072c92ac8f4589cb026·...·]-3">)</span><span·class="p">;</span><span·class="w"> |
| 154 | ··</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">jne</span><span·class="p"·data-group-id=" | 154 | ··</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">jne</span><span·class="p"·data-group-id="8230931410-6">(</span><span·class="ss">labels</span><span·class="p"·data-group-id="8230931410-7">[</span><span·class="n">Fail</span><span·class="p">.</span><span·class="nf">getLabel</span><span·class="p"·data-group-id="8230931410-8">(</span><span·class="p"[·...·truncated·by·diffoscope;·len:·132,·SHA:·decc0d78234b8d4171206de5f2310474ad85cbbf2b4442e3296b8bde6a809ab6·...·]-6">)</span><span·class="p">;</span><span·class="w"> |
| 155 | </span><span·class="p"·data-group-id=" | 155 | </span><span·class="p"·data-group-id="8230931410-2">}</span></code></pre><p><a·href="https://github.com/asmjit/asmjit">asmjit</a>·provides·a·fairly·straightforward |
| 156 | mapping·from·a·C++·function·call·to·the·x86·assembly·instruction.·The·above | 156 | mapping·from·a·C++·function·call·to·the·x86·assembly·instruction.·The·above |
| 157 | instruction·tests·if·the·value·in·the·<code·class="inline">Src</code>·register·is·a·non-empty·list·and·if | 157 | instruction·tests·if·the·value·in·the·<code·class="inline">Src</code>·register·is·a·non-empty·list·and·if |
| 158 | it·is·not·then·it·jumps·to·the·fail·label.</p><p>For·comparison,·the·interpreter·has·8·combinations·and·specializations·of | 158 | it·is·not·then·it·jumps·to·the·fail·label.</p><p>For·comparison,·the·interpreter·has·8·combinations·and·specializations·of |
| 159 | this·implementation·to·minimize·the·instruction·dispatch·overhead·for | 159 | this·implementation·to·minimize·the·instruction·dispatch·overhead·for |
| 160 | common·patterns.</p><p>The·original·register·allocation·done·by·the·Erlang·compiler·is·used·to·manage·the | 160 | common·patterns.</p><p>The·original·register·allocation·done·by·the·Erlang·compiler·is·used·to·manage·the |
| 161 | liveness·of·values·and·the·physical·registers·are·statically·allocated·to·keep | 161 | liveness·of·values·and·the·physical·registers·are·statically·allocated·to·keep |
| 162 | the·necessary·process·state.·At·the·moment·this·is·the·static·register | 162 | the·necessary·process·state.·At·the·moment·this·is·the·static·register |
| 163 | allocation·on·x86-64:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">rbx</span><span·class="p">:</span><span·class="w">·</span><span·class="n">ErtsSchedulerRegisters</span><span·class="w">·</span><span·class="nf">struct</span><span·class="w">·</span><span·class="p"·data-group-id=" | 163 | allocation·on·x86-64:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">rbx</span><span·class="p">:</span><span·class="w">·</span><span·class="n">ErtsSchedulerRegisters</span><span·class="w">·</span><span·class="nf">struct</span><span·class="w">·</span><span·class="p"·data-group-id="1370754764-1">(</span><span·class="ss">contains</span><span·class="w">·</span><span·class="ss">x</span><span·class="o">/</span><span·class="nb">float</span><span·class="w">·</span><span·class="ss">registers</span><span·class="w">·</span><span·class="ow">an[·...·truncated·by·diffoscope;·len:·157,·SHA:·e8a587a714ca9c9fed8f3a1ee298853eb15fabb2dc8eaabdfecaacf1875c9c97·...·]-1">)</span><span·class="w"> |
| 164 | </span><span·class="nc">rbp</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Current</span><span·class="w">·</span><span·class="ss">frame</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="err">`</span><span·class="ss">perf</span><span·class="err">`</span><span·class="w">·</span><span·class="ss">support</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">enabled</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">otherwise</span><span·class="w">·</span><span·class="ss">this</span><span·class="w"> | 164 | </span><span·class="nc">rbp</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Current</span><span·class="w">·</span><span·class="ss">frame</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="err">`</span><span·class="ss">perf</span><span·class="err">`</span><span·class="w">·</span><span·class="ss">support</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">enabled</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">otherwise</span><span·class="w">·</span><span·class="ss">this</span><span·class="w"> |
| 165 | ·····</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">an</span><span·class="w">·</span><span·class="ss">optional</span><span·class="w">·</span><span·class="ss">save</span><span·class="w">·</span><span·class="ss">slot</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">stack</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="ss">executing</span><span·class="w">·</span><span·class="n">C</span><span·class="w"> | 165 | ·····</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">an</span><span·class="w">·</span><span·class="ss">optional</span><span·class="w">·</span><span·class="ss">save</span><span·class="w">·</span><span·class="ss">slot</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">stack</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="ss">executing</span><span·class="w">·</span><span·class="n">C</span><span·class="w"> |
| 166 | ·····</span><span·class="ss">code</span><span·class="p">.</span><span·class="w"> | 166 | ·····</span><span·class="ss">code</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="nc">r12</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Active</span><span·class="w">·</span><span·class="ss">code</span><span·class="w">·</span><span·class="ss">index</span><span·class="w"> | 167 | </span><span·class="nc">r12</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Active</span><span·class="w">·</span><span·class="ss">code</span><span·class="w">·</span><span·class="ss">index</span><span·class="w"> |
| 168 | </span><span·class="nc">r13</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Current</span><span·class="w">·</span><span·class="ss">running</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> | 168 | </span><span·class="nc">r13</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Current</span><span·class="w">·</span><span·class="ss">running</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> |
| 169 | </span><span·class="nc">r14</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Remaining</span><span·class="w">·</span><span·class="ss">reductions</span><span·class="w"> | 169 | </span><span·class="nc">r14</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Remaining</span><span·class="w">·</span><span·class="ss">reductions</span><span·class="w"> |
| 170 | </span><span·class="nc">r15</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">heap</span><span·class="w">·</span><span·class="ss">pointer</span></code></pre><p>Note·that·all·of·these·are·callee·save·registers·under·the·System·V·and·Windows | 170 | </span><span·class="nc">r15</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">heap</span><span·class="w">·</span><span·class="ss">pointer</span></code></pre><p>Note·that·all·of·these·are·callee·save·registers·under·the·System·V·and·Windows |
| Offset 183, 21 lines modified | Offset 183, 21 lines modified | ||
| 183 | shared·and·only·the·arguments·to·the·instructions·vary.·Using·as·little·memory·as | 183 | shared·and·only·the·arguments·to·the·instructions·vary.·Using·as·little·memory·as |
| 184 | possible·has·many·advantages;·less·memory·is·used,·loading·time·decreases, | 184 | possible·has·many·advantages;·less·memory·is·used,·loading·time·decreases, |
| 185 | higher·cache·hit-rate.</p><p>In·BeamAsm·we·need·to·achieve·something·similar·since·the·load-time·of·a·module | 185 | higher·cache·hit-rate.</p><p>In·BeamAsm·we·need·to·achieve·something·similar·since·the·load-time·of·a·module |
| 186 | scales·almost·linearly·with·the·amount·of·memory·it·uses.·Early·BeamAsm·prototypes | 186 | scales·almost·linearly·with·the·amount·of·memory·it·uses.·Early·BeamAsm·prototypes |
| 187 | used·about·double·the·amount·of·memory·for·code·as·the·interpreter,·while·current | 187 | used·about·double·the·amount·of·memory·for·code·as·the·interpreter,·while·current |
| 188 | versions·use·about·10%·more.·How·was·this·achieved?</p><p>In·BeamAsm·we·heavily·use·shared·code·fragments·to·try·to·emit·as·much·code·as | 188 | versions·use·about·10%·more.·How·was·this·achieved?</p><p>In·BeamAsm·we·heavily·use·shared·code·fragments·to·try·to·emit·as·much·code·as |
| 189 | possible·as·global·shared·fragments·instead·of·duplicating·the·code·unnecessarily. | 189 | possible·as·global·shared·fragments·instead·of·duplicating·the·code·unnecessarily. |
| 190 | For·instance,·the·return·instruction·looks·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Label</span><span·class="w">·</span><span·class="ss">yield</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">newLabel</span><span·class="p"·data-group-id=" | 190 | For·instance,·the·return·instruction·looks·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Label</span><span·class="w">·</span><span·class="ss">yield</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">newLabel</span><span·class="p"·data-group-id="8986214300-1">(</span><span·class="p"·data-group-id="8986214300-1">)</span><span·class="p">;</span><span·class="w"> |
| 191 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Decrement</span><span·class="w">·</span><span·class="ss">reduction</span><span·class="w">·</span><span·class="ss">counter</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 191 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Decrement</span><span·class="w">·</span><span·class="ss">reduction</span><span·class="w">·</span><span·class="ss">counter</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 192 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">dec</span><span·class="p"·data-group-id=" | 192 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">dec</span><span·class="p"·data-group-id="8986214300-2">(</span><span·class="n">FCALLS</span><span·class="p"·data-group-id="8986214300-2">)</span><span·class="p">;</span><span·class="w"> |
| 193 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">If</span><span·class="w">·</span><span·class="n">FCALLS</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">jump</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">yield</span><span·class="o">-</span><span·class="ss">on</span><span·class="o">-</span><span·class="ss">return</span><span·class="w">·</span><span·class="ss">fragment</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 193 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">If</span><span·class="w">·</span><span·class="n">FCALLS</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">jump</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">yield</span><span·class="o">-</span><span·class="ss">on</span><span·class="o">-</span><span·class="ss">return</span><span·class="w">·</span><span·class="ss">fragment</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 194 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">jl</span><span·class="p"·data-group-id=" | 194 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">jl</span><span·class="p"·data-group-id="8986214300-3">(</span><span·class="nf">resolve_fragment</span><span·class="p"·data-group-id="8986214300-4">(</span><span·class="ss">ga</span><span·class="p">-></span><span·class="nf">get_dispatch_return</span><span·class="p"·data-group-id="8986214300-5"[·...·truncated·by·diffoscope;·len:·156,·SHA:·340a2b18639e67e46b91df22ab5ead69557bf9693fb8da226031fe36629dc2f3·...·]-3">)</span><span·class="p">;</span><span·class="w"> |
| 195 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">ret</span><span·class="p"·data-group-id=" | 195 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">ret</span><span·class="p"·data-group-id="8986214300-6">(</span><span·class="p"·data-group-id="8986214300-6">)</span><span·class="p">;</span></code></pre><p>The·code·above·is·not·exactly·what·is·emitted,·but·close·enough.·The·thing·to·note |
| 196 | is·that·the·code·for·doing·the·context·switch·is·never·emitted.·Instead,·we·jump | 196 | is·that·the·code·for·doing·the·context·switch·is·never·emitted.·Instead,·we·jump |
| 197 | to·a·global·fragment·that·all·return·instructions·share.·This·greatly·reduces | 197 | to·a·global·fragment·that·all·return·instructions·share.·This·greatly·reduces |
| 198 | the·amount·of·code·that·has·to·be·emitted·for·each·module.</p><h2·id="running-erlang-code"·class="section-heading"> | 198 | the·amount·of·code·that·has·to·be·emitted·for·each·module.</p><h2·id="running-erlang-code"·class="section-heading"> |
| 199 | ··<a·href="#running-erlang-code"·class="hover-link"> | 199 | ··<a·href="#running-erlang-code"·class="hover-link"> |
| 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 201 | ··</a> | 201 | ··</a> |
| 202 | ··<span·class="text">Running·Erlang·code</span> | 202 | ··<span·class="text">Running·Erlang·code</span> |
| Offset 239, 43 lines modified | Offset 239, 43 lines modified | ||
| 239 | ··<a·href="#running-c-code"·class="hover-link"> | 239 | ··<a·href="#running-c-code"·class="hover-link"> |
| 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 241 | ··</a> | 241 | ··</a> |
| 242 | ··<span·class="text">Running·C·code</span> | 242 | ··<span·class="text">Running·C·code</span> |
| 243 | </h2> | 243 | </h2> |
| 244 | <p>As·Erlang·stacks·can·be·very·small,·we·have·to·switch·over·to·a·different·stack | 244 | <p>As·Erlang·stacks·can·be·very·small,·we·have·to·switch·over·to·a·different·stack |
| 245 | when·we·need·to·execute·C·code·(which·may·expect·a·much·larger·stack).·This·is | 245 | when·we·need·to·execute·C·code·(which·may·expect·a·much·larger·stack).·This·is |
| 246 | done·through·<code·class="inline">emit_enter_runtime</code>·and·<code·class="inline">emit_leave_runtime</code>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">mov_arg</span><span·class="p"·data-group-id=" | 246 | done·through·<code·class="inline">emit_enter_runtime</code>·and·<code·class="inline">emit_leave_runtime</code>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">mov_arg</span><span·class="p"·data-group-id="5144122316-1">(</span><span·class="n">ARG4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NumFree</span><span·class="p"·data-group-id="5144122316-1">)</span><span·class="p">;</span><span·class="w"> |
| 247 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Move</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">swap</span><span·class="w">·</span><span·class="ss">out</span><span·class="w">·</span><span·class="ss">our</span><span·class="w">·</span><span·class="ss">current</span><span·class="w">·</span><span·class="ss">reductions</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stack</span><span·class="o">-</span><span·class="p">,</span><span·class="w">·</span><span·class="ow">and</span><span·class="w"> | 247 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Move</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">swap</span><span·class="w">·</span><span·class="ss">out</span><span·class="w">·</span><span·class="ss">our</span><span·class="w">·</span><span·class="ss">current</span><span·class="w">·</span><span·class="ss">reductions</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stack</span><span·class="o">-</span><span·class="p">,</span><span·class="w">·</span><span·class="ow">and</span><span·class="w"> |
| 248 | ·</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">heap</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">process</span><span·class="w">·</span><span·class="ss">structure</span><span·class="p">.</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 248 | ·</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">heap</span><span·class="w">·</span><span·class="ss">pointer</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">process</span><span·class="w">·</span><span·class="ss">structure</span><span·class="p">.</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 249 | </span><span·class="ss">emit_enter_runtime</span><span·class="o"><</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eReductions</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eStack</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eHeap</span><span·class="o">></span><span·class="p"·data-group-id=" | 249 | </span><span·class="ss">emit_enter_runtime</span><span·class="o"><</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eReductions</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eStack</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eHeap</span><span·class="o">></span><span·class="p"·data-group-id="5144122316-2">(</span><span·class="p"·data-group-id="5144122316-2">)</span><span·class="p">;</span><span·class="w"> |
| 250 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">mov</span><span·class="p"·data-group-id=" | 250 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">mov</span><span·class="p"·data-group-id="5144122316-3">(</span><span·class="n">ARG1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c_p</span><span·class="p"·data-group-id="5144122316-3">)</span><span·class="p">;</span><span·class="w"> |
| 251 | </span><span·class="nf">load_x_reg_array</span><span·class="p"·data-group-id=" | 251 | </span><span·class="nf">load_x_reg_array</span><span·class="p"·data-group-id="5144122316-4">(</span><span·class="n">ARG2</span><span·class="p"·data-group-id="5144122316-4">)</span><span·class="p">;</span><span·class="w"> |
| 252 | </span><span·class="nf">make_move_patch</span><span·class="p"·data-group-id=" | 252 | </span><span·class="nf">make_move_patch</span><span·class="p"·data-group-id="5144122316-5">(</span><span·class="n">ARG3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">lambdas</span><span·class="p"·data-group-id="5144122316-6">[</span><span·class="n">Fun</span><span·class="p">.</span><span·class="nf">getValue[·...·truncated·by·diffoscope;·len:·262,·SHA:·8325f67aa402e56180c6ae49e4350934785ff64560b6bd1a199edfca7f4fa65b·...·]-5">)</span><span·class="p">;</span><span·class="w"> |
| 253 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Call</span><span·class="w">·</span><span·class="err">`</span><span·class="ss">new_fun</span><span·class="err">`</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">asserting</span><span·class="w">·</span><span·class="ss">that</span><span·class="w">·</span><span·class="ss">we</span><span·class="err">'</span><span·class="ss">re</span><span·class="w">·</span><span·class="ss">on</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="p">.</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 253 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Call</span><span·class="w">·</span><span·class="err">`</span><span·class="ss">new_fun</span><span·class="err">`</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">asserting</span><span·class="w">·</span><span·class="ss">that</span><span·class="w">·</span><span·class="ss">we</span><span·class="err">'</span><span·class="ss">re</span><span·class="w">·</span><span·class="ss">on</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="p">.</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 254 | </span><span·class="ss">runtime_call</span><span·class="o"><</span><span·class="mi">4</span><span·class="o">></span><span·class="p"·data-group-id=" | 254 | </span><span·class="ss">runtime_call</span><span·class="o"><</span><span·class="mi">4</span><span·class="o">></span><span·class="p"·data-group-id="5144122316-8">(</span><span·class="ss">new_fun</span><span·class="p"·data-group-id="5144122316-8">)</span><span·class="p">;</span><span·class="w"> |
| 255 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Move</span><span·class="w">·</span><span·class="ss">back</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="p">,</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">read</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">updated</span><span·class="w">·</span><span·class="ss">values</span><span·class="w">·</span><span·class="ss">from</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> | 255 | </span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Move</span><span·class="w">·</span><span·class="ss">back</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">C</span><span·class="w">·</span><span·class="ss">stack</span><span·class="p">,</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">read</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">updated</span><span·class="w">·</span><span·class="ss">values</span><span·class="w">·</span><span·class="ss">from</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> |
| 256 | ·</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">structure</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 256 | ·</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">structure</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 257 | </span><span·class="ss">emit_leave_runtime</span><span·class="o"><</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eReductions</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eStack</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eHeap</span><span·class="o">></span><span·class="p"·data-group-id=" | 257 | </span><span·class="ss">emit_leave_runtime</span><span·class="o"><</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eReductions</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eStack</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Update</span><span·class="p">:</span><span·class="p">:</span><span·class="ss">eHeap</span><span·class="o">></span><span·class="p"·data-group-id="5144122316-9">(</span><span·class="p"·data-group-id="5144122316-9">)</span><span·class="p">;</span><span·class="w"> |
| 258 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">mov</span><span·class="p"·data-group-id=" | 258 | </span><span·class="ss">a</span><span·class="p">.</span><span·class="nf">mov</span><span·class="p"·data-group-id="5144122316-10">(</span><span·class="nf">getXRef</span><span·class="p"·data-group-id="5144122316-11">(</span><span·class="mi">0</span><span·class="p"·data-group-id="5144122316-11">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RET</[·...·truncated·by·diffoscope;·len:·46,·SHA:·3ce75728d85954b9da705ee6531d88e2d2271e63c0da7e5928a7f86b66a4eb86·...·]-10">)</span><span·class="p">;</span></code></pre><p>All·combinations·of·the·<code·class="inline">Update</code>·constants·are·legal,·but·the·ones·given·to |
| 259 | <code·class="inline">emit_leave_runtime</code>·<em>must</em>·be·the·same·as·those·given·to·<code·class="inline">emit_enter_runtime</code>.</p><h2·id="tracing-and-nif-loading"·class="section-heading"> | 259 | <code·class="inline">emit_leave_runtime</code>·<em>must</em>·be·the·same·as·those·given·to·<code·class="inline">emit_enter_runtime</code>.</p><h2·id="tracing-and-nif-loading"·class="section-heading"> |
| 260 | ··<a·href="#tracing-and-nif-loading"·class="hover-link"> | 260 | ··<a·href="#tracing-and-nif-loading"·class="hover-link"> |
| 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 262 | ··</a> | 262 | ··</a> |
| 263 | ··<span·class="text">Tracing·and·NIF·Loading</span> | 263 | ··<span·class="text">Tracing·and·NIF·Loading</span> |
| 264 | </h2> | 264 | </h2> |
| 265 | <p>To·make·tracing·and·NIF·loading·work·there·needs·to·be·a·way·to·intercept | 265 | <p>To·make·tracing·and·NIF·loading·work·there·needs·to·be·a·way·to·intercept |
| 266 | any·function·call.·In·the·interpreter,·this·is·done·by·rewriting·the·loaded | 266 | any·function·call.·In·the·interpreter,·this·is·done·by·rewriting·the·loaded |
| 267 | BEAM·code,·but·this·is·more·complicated·in·BeamAsm·as·we·want·to·have·a·fast | 267 | BEAM·code,·but·this·is·more·complicated·in·BeamAsm·as·we·want·to·have·a·fast |
| 268 | and·compact·way·to·do·this.·This·is·solved·by·emitting·the·code·below·at·the | 268 | and·compact·way·to·do·this.·This·is·solved·by·emitting·the·code·below·at·the |
| 269 | start·of·each·function·(x86·variant·below):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">0</span><span·class="nc">x0</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">short</span><span·class="w">·</span><span·class="ss">jmp</span><span·class="w">·</span><span·class="mi">6</span><span·class="w">·</span><span·class="p"·data-group-id=" | 269 | start·of·each·function·(x86·variant·below):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">0</span><span·class="nc">x0</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">short</span><span·class="w">·</span><span·class="ss">jmp</span><span·class="w">·</span><span·class="mi">6</span><span·class="w">·</span><span·class="p"·data-group-id="4082919445-1">(</span><span·class="ss">address</span><span·class="w">·</span><span·class="mi">0</span><span·class="ss">x8</span><span·class="p"·data-group-id="4082919445-1">)</span><span·class="w"> |
| 270 | ··</span><span·class="mi">0</span><span·class="nc">x2</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nop</span><span·class="w"> | 270 | ··</span><span·class="mi">0</span><span·class="nc">x2</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nop</span><span·class="w"> |
| 271 | ··</span><span·class="mi">0</span><span·class="nc">x3</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">relative</span><span·class="w">·</span><span·class="ss">near</span><span·class="w">·</span><span·class="ss">call</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">shared</span><span·class="w">·</span><span·class="ss">breakpoint</span><span·class="w">·</span><span·class="ss">fragment</span><span·class="w"> | 271 | ··</span><span·class="mi">0</span><span·class="nc">x3</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">relative</span><span·class="w">·</span><span·class="ss">near</span><span·class="w">·</span><span·class="ss">call</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">shared</span><span·class="w">·</span><span·class="ss">breakpoint</span><span·class="w">·</span><span·class="ss">fragment</span><span·class="w"> |
| 272 | ··</span><span·class="mi">0</span><span·class="nc">x8</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">actual</span><span·class="w">·</span><span·class="ss">code</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span></code></pre><p>When·code·starts·to·execute·it·will·simply·see·the·<code·class="inline">short·jmp·6</code>·instruction | 272 | ··</span><span·class="mi">0</span><span·class="nc">x8</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">actual</span><span·class="w">·</span><span·class="ss">code</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span></code></pre><p>When·code·starts·to·execute·it·will·simply·see·the·<code·class="inline">short·jmp·6</code>·instruction |
| 273 | which·skips·the·prologue·and·starts·to·execute·the·code·directly.</p><p>When·we·want·to·enable·a·certain·breakpoint·we·set·the·jmp·target·to·be·1, | 273 | which·skips·the·prologue·and·starts·to·execute·the·code·directly.</p><p>When·we·want·to·enable·a·certain·breakpoint·we·set·the·jmp·target·to·be·1, |
| 274 | which·means·it·will·land·on·the·call·to·the·shared·breakpoint·fragment.·This | 274 | which·means·it·will·land·on·the·call·to·the·shared·breakpoint·fragment.·This |
| 275 | fragment·checks·the·current·<code·class="inline">breakpoint_flag</code>·stored·in·the·ErtsCodeInfo·of | 275 | fragment·checks·the·current·<code·class="inline">breakpoint_flag</code>·stored·in·the·ErtsCodeInfo·of |
| 276 | this·function,·and·then·calls·<code·class="inline">erts_call_nif_early</code>·and | 276 | this·function,·and·then·calls·<code·class="inline">erts_call_nif_early</code>·and |
| Offset 289, 31 lines modified | Offset 289, 31 lines modified | ||
| 289 | ··<span·class="text">Updating·code</span> | 289 | ··<span·class="text">Updating·code</span> |
| 290 | </h3> | 290 | </h3> |
| 291 | <p>Because·many·environments·enforce·<a·href="https://en.wikipedia.org/wiki/W%5EX"·title="">W^X</a>·it's·not·always·possible·to·write | 291 | <p>Because·many·environments·enforce·<a·href="https://en.wikipedia.org/wiki/W%5EX"·title="">W^X</a>·it's·not·always·possible·to·write |
| 292 | directly·to·the·code·pages.·Because·of·this·we·map·code·twice:·once·with·an | 292 | directly·to·the·code·pages.·Because·of·this·we·map·code·twice:·once·with·an |
| 293 | executable·page·and·once·with·a·writable·page.·Since·they're·backed·by·the | 293 | executable·page·and·once·with·a·writable·page.·Since·they're·backed·by·the |
| 294 | same·memory,·writes·to·the·writable·page·appear·magically·in·the·executable | 294 | same·memory,·writes·to·the·writable·page·appear·magically·in·the·executable |
| 295 | one.</p><p>The·<code·class="inline">erts_writable_code_ptr</code>·function·can·be·used·to·get·writable·pointers | 295 | one.</p><p>The·<code·class="inline">erts_writable_code_ptr</code>·function·can·be·used·to·get·writable·pointers |
| 296 | given·a·module·instance,·provided·that·it·has·been·unsealed·first:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">for</span><span·class="w">·</span><span·class="p"·data-group-id=" | 296 | given·a·module·instance,·provided·that·it·has·been·unsealed·first:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">for</span><span·class="w">·</span><span·class="p"·data-group-id="4269266063-1">(</span><span·class="ss">i</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">;</span><span·class="w">·</span><span·class="ss">i</span><span·class="w">·</span><span·class="o"[·...·truncated·by·diffoscope;·len:·277,·SHA:·233c0046b43f3d936714b624224b0398224de1747c08c280edbad706a9f2f754·...·]-2">{</span><span·class="w"> |
| 297 | ····</span><span·class="ss">const</span><span·class="w">·</span><span·class="n">ErtsCodeInfo</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">ci_exec</span><span·class="p">;</span><span·class="w"> | 297 | ····</span><span·class="ss">const</span><span·class="w">·</span><span·class="n">ErtsCodeInfo</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">ci_exec</span><span·class="p">;</span><span·class="w"> |
| 298 | ····</span><span·class="n">ErtsCodeInfo</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">ci_rw</span><span·class="p">;</span><span·class="w"> | 298 | ····</span><span·class="n">ErtsCodeInfo</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">ci_rw</span><span·class="p">;</span><span·class="w"> |
| 299 | ····</span><span·class="ss">void</span><span·class="w">·</span><span·class="o">*</span><span·class="ss">w_ptr</span><span·class="p">;</span><span·class="w"> | 299 | ····</span><span·class="ss">void</span><span·class="w">·</span><span·class="o">*</span><span·class="ss">w_ptr</span><span·class="p">;</span><span·class="w"> |
| 300 | ····</span><span·class="nf">erts_unseal_module</span><span·class="p"·data-group-id=" | 300 | ····</span><span·class="nf">erts_unseal_module</span><span·class="p"·data-group-id="4269266063-3">(</span><span·class="err">&</span><span·class="ss">modp</span><span·class="p">-></span><span·class="ss">curr</span><span·class="p"·data-group-id="4269266063-3">)</span><span·class="p">;</span><span·class="w"> |
| 301 | ····</span><span·class="ss">ci_exec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">code_hdr</span><span·class="p">-></span><span·class="ss">functions</span><span·class="p"·data-group-id=" | 301 | ····</span><span·class="ss">ci_exec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">code_hdr</span><span·class="p">-></span><span·class="ss">functions</span><span·class="p"·data-group-id="4269266063-4">[</span><span·class="ss">i</span><span·class="p"·data-group-id="4269266063-4">]</span><span·class="p">;</span><span·class="w"> |
| 302 | ····</span><span·class="ss">w_ptr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">erts_writable_code_ptr</span><span·class="p"·data-group-id=" | 302 | ····</span><span·class="ss">w_ptr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">erts_writable_code_ptr</span><span·class="p"·data-group-id="4269266063-5">(</span><span·class="err">&</span><span·class="ss">modp</span><span·class="p">-></span><span·class="ss">curr</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ci_exec</span><span·class="p"·data-group-id="4269266063-5">)</span><span·class="p">;</span><span·class="w"> |
| 303 | ····</span><span·class="ss">ci_rw</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 303 | ····</span><span·class="ss">ci_rw</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4269266063-6">(</span><span·class="n">ErtsCodeInfo</span><span·class="o">*</span><span·class="p"·data-group-id="4269266063-6">)</span><span·class="ss">w_ptr</span><span·class="p">;</span><span·class="w"> |
| 304 | ····</span><span·class="nf">uninstall_breakpoint</span><span·class="p"·data-group-id=" | 304 | ····</span><span·class="nf">uninstall_breakpoint</span><span·class="p"·data-group-id="4269266063-7">(</span><span·class="ss">ci_rw</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ci_exec</span><span·class="p"·data-group-id="4269266063-7">)</span><span·class="p">;</span><span·class="w"> |
| 305 | ····</span><span·class="nf">consolidate_bp_data</span><span·class="p"·data-group-id=" | 305 | ····</span><span·class="nf">consolidate_bp_data</span><span·class="p"·data-group-id="4269266063-8">(</span><span·class="ss">modp</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ci_rw</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="4269266063-8">)</span><span·class="p">;</span><span·class="w"> |
| 306 | ····</span><span·class="n">ASSERT</span><span·class="p"·data-group-id=" | 306 | ····</span><span·class="n">ASSERT</span><span·class="p"·data-group-id="4269266063-9">(</span><span·class="ss">ci_rw</span><span·class="p">-></span><span·class="ss">gen_bp</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">NULL</span><span·class="p"·data-group-id="4269266063-9">)</span><span·class="p">;</span><span·class="w"> |
| 307 | ····</span><span·class="nf">erts_seal_module</span><span·class="p"·data-group-id=" | 307 | ····</span><span·class="nf">erts_seal_module</span><span·class="p"·data-group-id="4269266063-10">(</span><span·class="err">&</span><span·class="ss">modp</span><span·class="p">-></span><span·class="ss">curr</span><span·class="p"·data-group-id="4269266063-10">)</span><span·class="p">;</span><span·class="w"> |
| 308 | </span><span·class="p"·data-group-id=" | 308 | </span><span·class="p"·data-group-id="4269266063-2">}</span></code></pre><p>Without·the·module·instance·there's·no·reliable·way·to·figure·out·the·writable |
| 309 | address·of·a·code·page,·and·we·rely·on·<em>address·space·layout·randomization</em> | 309 | address·of·a·code·page,·and·we·rely·on·<em>address·space·layout·randomization</em> |
| 310 | (ASLR)·to·make·it·difficult·to·guess.·On·some·platforms,·security·is·further | 310 | (ASLR)·to·make·it·difficult·to·guess.·On·some·platforms,·security·is·further |
| 311 | enhanced·by·protecting·the·writable·area·from·writes·until·the·module·has·been | 311 | enhanced·by·protecting·the·writable·area·from·writes·until·the·module·has·been |
| 312 | unsealed·by·<code·class="inline">erts_unseal_module</code>.</p><h3·id="export-tracing"·class="section-heading"> | 312 | unsealed·by·<code·class="inline">erts_unseal_module</code>.</p><h3·id="export-tracing"·class="section-heading"> |
| 313 | ··<a·href="#export-tracing"·class="hover-link"> | 313 | ··<a·href="#export-tracing"·class="hover-link"> |
| 314 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 314 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 315 | ··</a> | 315 | ··</a> |
| Offset 393, 15 lines modified | Offset 393, 15 lines modified | ||
| 393 | </span><span·class="ss">perf</span><span·class="w">·</span><span·class="ss">script</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="ss">out</span><span·class="p">.</span><span·class="ss">perf</span><span·class="w"> | 393 | </span><span·class="ss">perf</span><span·class="w">·</span><span·class="ss">script</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="ss">out</span><span·class="p">.</span><span·class="ss">perf</span><span·class="w"> |
| 394 | </span><span·class="p">#</span><span·class="p">#</span><span·class="w">·</span><span·class="ss">run</span><span·class="w">·</span><span·class="ss">stackcollapse</span><span·class="w"> | 394 | </span><span·class="p">#</span><span·class="p">#</span><span·class="w">·</span><span·class="ss">run</span><span·class="w">·</span><span·class="ss">stackcollapse</span><span·class="w"> |
| Max diff block lines reached; 5979/46118 bytes (12.96%) of diff not shown. | |||
| Offset 403, 15 lines modified | Offset 403, 15 lines modified | ||
| 403 | ······<p·class="built-using"> | 403 | ······<p·class="built-using"> |
| 404 | ········Built·using | 404 | ········Built·using |
| 405 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 405 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 406 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 406 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 407 | ······</p> | 407 | ······</p> |
| 408 | <p>Copyright·©·1996-202 | 408 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 409 | ····</footer> | 409 | ····</footer> |
| 410 | ··</div> | 410 | ··</div> |
| 411 | </main> | 411 | </main> |
| 412 | </div> | 412 | </div> |
| 413 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 413 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 414 | ··<script> | 414 | ··<script> |
| 415 | ··let·initialized·=·false; | 415 | ··let·initialized·=·false; |
| Offset 163, 16 lines modified | Offset 163, 16 lines modified | ||
| 163 | only·be·done·by·one·loader·process·at·a·time.·A·second·loader·process | 163 | only·be·done·by·one·loader·process·at·a·time.·A·second·loader·process |
| 164 | trying·to·enter·finishing·phase·will·be·suspended·until·the·first | 164 | trying·to·enter·finishing·phase·will·be·suspended·until·the·first |
| 165 | loader·is·done.·This·will·only·block·the·process,·the·scheduler·is | 165 | loader·is·done.·This·will·only·block·the·process,·the·scheduler·is |
| 166 | free·to·schedule·other·work·while·the·second·loader·is·waiting.·(See | 166 | free·to·schedule·other·work·while·the·second·loader·is·waiting.·(See |
| 167 | <code·class="inline">erts_try_seize_code_load_permission</code>·and | 167 | <code·class="inline">erts_try_seize_code_load_permission</code>·and |
| 168 | <code·class="inline">erts_release_code_load_permission</code>).</p><p>The·ability·to·prepare·several·modules·in·parallel·is·not·currently | 168 | <code·class="inline">erts_release_code_load_permission</code>).</p><p>The·ability·to·prepare·several·modules·in·parallel·is·not·currently |
| 169 | used·as·almost·all·code·loading·is·serialized·by·the·code_server | 169 | used·as·almost·all·code·loading·is·serialized·by·the·code_server |
| 170 | process.·The·BIF·interface·is·however·prepared·for·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">prepare_loading</span><span·class="p"·data-group-id=" | 170 | process.·The·BIF·interface·is·however·prepared·for·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">prepare_loading</span><span·class="p"·data-group-id="3982294190-1">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Code</span><span·class="p"·data-group-id="3982294190-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">LoaderState</span><span·class="w"> |
| 171 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">finish_loading</span><span·class="p"·data-group-id=" | 171 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">finish_loading</span><span·class="p"·data-group-id="3982294190-2">(</span><span·class="p"·data-group-id="3982294190-3">[</span><span·class="n">LoaderState</span><span·class="p"·data-group-id="3982294190-3">]</span><span·class="p"·data-group-id="3982294190-2">)</span></code></pre><p>The·idea·is·that·<code·class="inline">prepare_loading</code>·could·be·called·in·parallel·for |
| 172 | different·modules·and·returns·a·"magic·binary"·containing·the·internal | 172 | different·modules·and·returns·a·"magic·binary"·containing·the·internal |
| 173 | state·of·each·prepared·module.·Function·<code·class="inline">finish_loading</code>·could·take·a | 173 | state·of·each·prepared·module.·Function·<code·class="inline">finish_loading</code>·could·take·a |
| 174 | list·of·such·states·and·do·the·finishing·of·all·of·them·in·one·go.</p><p>Currently·we·use·the·legacy·BIF·<code·class="inline">erlang:load_module</code>·which·is·now | 174 | list·of·such·states·and·do·the·finishing·of·all·of·them·in·one·go.</p><p>Currently·we·use·the·legacy·BIF·<code·class="inline">erlang:load_module</code>·which·is·now |
| 175 | implemented·in·Erlang·by·calling·the·above·two·functions·in | 175 | implemented·in·Erlang·by·calling·the·above·two·functions·in |
| 176 | sequence.·Function·<code·class="inline">finish_loading</code>·is·limited·to·only·accepts·a·list | 176 | sequence.·Function·<code·class="inline">finish_loading</code>·is·limited·to·only·accepts·a·list |
| 177 | with·one·module·state·as·we·do·not·yet·use·the·multi·module·loading | 177 | with·one·module·state·as·we·do·not·yet·use·the·multi·module·loading |
| 178 | feature.</p><h2·id="the-finishing-sequence"·class="section-heading"> | 178 | feature.</p><h2·id="the-finishing-sequence"·class="section-heading"> |
| Offset 315, 15 lines modified | Offset 315, 15 lines modified | ||
| 315 | ······<p·class="built-using"> | 315 | ······<p·class="built-using"> |
| 316 | ········Built·using | 316 | ········Built·using |
| 317 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 317 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 318 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 318 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 319 | ······</p> | 319 | ······</p> |
| 320 | <p>Copyright·©·1996-202 | 320 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 321 | ····</footer> | 321 | ····</footer> |
| 322 | ··</div> | 322 | ··</div> |
| 323 | </main> | 323 | </main> |
| 324 | </div> | 324 | </div> |
| 325 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 325 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 326 | ··<script> | 326 | ··<script> |
| 327 | ··let·initialized·=·false; | 327 | ··let·initialized·=·false; |
| Offset 198, 15 lines modified | Offset 198, 15 lines modified | ||
| 198 | ······<p·class="built-using"> | 198 | ······<p·class="built-using"> |
| 199 | ········Built·using | 199 | ········Built·using |
| 200 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 200 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 201 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 201 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 202 | ······</p> | 202 | ······</p> |
| 203 | <p>Copyright·©·1996-202 | 203 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 204 | ····</footer> | 204 | ····</footer> |
| 205 | ··</div> | 205 | ··</div> |
| 206 | </main> | 206 | </main> |
| 207 | </div> | 207 | </div> |
| 208 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 208 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 209 | ··<script> | 209 | ··<script> |
| 210 | ··let·initialized·=·false; | 210 | ··let·initialized·=·false; |
| Offset 495, 15 lines modified | Offset 495, 15 lines modified | ||
| 495 | ······<p·class="built-using"> | 495 | ······<p·class="built-using"> |
| 496 | ········Built·using | 496 | ········Built·using |
| 497 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 497 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 498 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 498 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 499 | ······</p> | 499 | ······</p> |
| 500 | <p>Copyright·©·1996-202 | 500 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 501 | ····</footer> | 501 | ····</footer> |
| 502 | ··</div> | 502 | ··</div> |
| 503 | </main> | 503 | </main> |
| 504 | </div> | 504 | </div> |
| 505 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 505 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 506 | ··<script> | 506 | ··<script> |
| 507 | ··let·initialized·=·false; | 507 | ··let·initialized·=·false; |
| Offset 216, 15 lines modified | Offset 216, 15 lines modified | ||
| 216 | ······<p·class="built-using"> | 216 | ······<p·class="built-using"> |
| 217 | ········Built·using | 217 | ········Built·using |
| 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 220 | ······</p> | 220 | ······</p> |
| 221 | <p>Copyright·©·1996-202 | 221 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 222 | ····</footer> | 222 | ····</footer> |
| 223 | ··</div> | 223 | ··</div> |
| 224 | </main> | 224 | </main> |
| 225 | </div> | 225 | </div> |
| 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 227 | ··<script> | 227 | ··<script> |
| 228 | ··let·initialized·=·false; | 228 | ··let·initialized·=·false; |
| Offset 401, 21 lines modified | Offset 401, 21 lines modified | ||
| 401 | <a·href="erlang.html#put/2"><code·class="inline">put/2</code></a>·and·<a·href="erlang.html#get/1"><code·class="inline">get/1</code></a>·thing)·is·non-empty.</p><p>The·raw·memory·information·can·be·decoded·by·the·Crashdump·Viewer·tool.·You·can | 401 | <a·href="erlang.html#put/2"><code·class="inline">put/2</code></a>·and·<a·href="erlang.html#get/1"><code·class="inline">get/1</code></a>·thing)·is·non-empty.</p><p>The·raw·memory·information·can·be·decoded·by·the·Crashdump·Viewer·tool.·You·can |
| 402 | then·see·the·stack·dump,·the·message·queue·(if·any),·and·the·dictionary·(if | 402 | then·see·the·stack·dump,·the·message·queue·(if·any),·and·the·dictionary·(if |
| 403 | any).</p><p>The·stack·dump·is·a·dump·of·the·Erlang·process·stack.·Most·of·the·live·data | 403 | any).</p><p>The·stack·dump·is·a·dump·of·the·Erlang·process·stack.·Most·of·the·live·data |
| 404 | (that·is,·variables·currently·in·use)·are·placed·on·the·stack;·thus·this·can·be | 404 | (that·is,·variables·currently·in·use)·are·placed·on·the·stack;·thus·this·can·be |
| 405 | interesting.·One·has·to·"guess"·what·is·what,·but·as·the·information·is | 405 | interesting.·One·has·to·"guess"·what·is·what,·but·as·the·information·is |
| 406 | symbolic,·thorough·reading·of·this·information·can·be·useful.·As·an·example,·we | 406 | symbolic,·thorough·reading·of·this·information·can·be·useful.·As·an·example,·we |
| 407 | can·find·the·state·variable·of·the·Erlang·primitive·loader·online·<code·class="inline">(5)</code>·and | 407 | can·find·the·state·variable·of·the·Erlang·primitive·loader·online·<code·class="inline">(5)</code>·and |
| 408 | <code·class="inline">(6)</code>·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9392839076-1">(</span><span·class="mi">1</span><span·class="p"·data-group-id="9392839076-1">)</span><span·class="w">··</span><span·class="mi">3</span><span·class="ss">cac44</span><span·class="w">···</span><span·class="n">Return</span><span·class="w">·</span><span·class="ss">addr</span><span·class="w">·</span><span·class="mi">0</span><span·class="nf">x13BF58</span><span·class="w">·</span><span·class="p"·data-group-id="9392839076-2">(</span><span·class="o"><</span><span·class="ss">terminate</span><span·class="w">·</span><span·class="ss">process</span><span·class="w">·</span><span·class="ss">normally</span><span·class="o">></span><span·class="p"·data-group-id="9392839076-2">)</span><span·class="w"> | ||
| 409 | </span><span·class="p"·data-group-id="9392839076-3">(</span><span·class="mi">2</span><span·class="p"·data-group-id="9392839076-3">)</span><span·class="w">··</span><span·class="nf">y</span><span·class="p"·data-group-id="9392839076-4">(</span><span·class="mi">0</span><span·class="p"·data-group-id="9392839076-4">)</span><span·class="w">·····</span><span·class="p"·data-group-id="9392839076-5">[</span><span·class="s">"/view/siri_r10_dev/clearcase/otp/erts/lib/kernel/ebin"</span><span·class="p">,</span><span·class="w"> | ||
| 410 | < | 408 | <code·class="inline">(6)</code>·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3980921464-1">(</span><span·class="mi">1</span><span·class="p"·data-group-id="3980921464-1">)</span><span·class="w">·[·...·truncated·by·diffoscope;·len:·570,·SHA:·aa7eb16e4c29c6980e44e2854e6c23a3cbaac7adc87b305a839655b86381598a·...·]</span><span·class="w"> |
| 409 | </span><span·class="p"·data-group-id="3980921464-3">(</span><span·class="mi">2</span><span·class="p"·data-group-id="3980921464-3">)</span><span·class="w">··</span><span·class="nf">y</span><span·class="p"·data-group-id="3980921464-4">(</span><span·class="mi">0</span><span·class="p"·data-group-id="3980921464-4">)</span><span·class="w">·····</span><span·class="p"·data-group-id="3980921464-5">[</span><span·class="s">"/view/siri_r10_dev/clearcase/otp/erts/lib/kernel/ebin"</span><span·class="p">,</span><span·class="w"> | ||
| 410 | </span><span·class="p"·data-group-id="3980921464-6">(</span><span·class="mi">3</span><span·class="p"·data-group-id="3980921464-6">)</span><span·class="w">············</span><span·class="s">"/view/siri_r10_dev/clearcase/otp/erts/lib/stdlib/ebin"</span><span·class="p"·data-group-id="3980921464-5">]</span><span·class="w"> | ||
| 411 | </span><span·class="p"·data-group-id=" | 411 | </span><span·class="p"·data-group-id="3980921464-7">(</span><span·class="mi">4</span><span·class="p"·data-group-id="3980921464-7">)</span><span·class="w">··</span><span·class="nf">y</span><span·class="p"·data-group-id="3980921464-8">(</span><span·class="mi">1</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·aee4c99655ac78815a4760bfd0f6177c373110e9e65748cd333adf86e7499d4f·...·]-8">)</span><span·class="w">·····</span><span·class="o"><</span><span·class="mf">0.1</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> |
| 412 | </span><span·class="p"·data-group-id=" | 412 | </span><span·class="p"·data-group-id="3980921464-9">(</span><span·class="mi">5</span><span·class="p"·data-group-id="3980921464-9">)</span><span·class="w">··</span><span·class="nf">y</span><span·class="p"·data-group-id="3980921464-10">(</span><span·class="mi">2</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·257,·SHA:·9c16000a4281204f48674e20d5e9848a43f6dabc11556b43688dc3c8d464c9a7·...·]-12">]</span><span·class="p">,</span><span·class="ss">none</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_prim_loader</span><span·class="p">.</span><span·class="mf">6.7085890</span><span·class="o">></span><span·class="p">,</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_prim_loader</span><span·class="p">.</span><span·class="mf">7.9000327</span><span·class="o">></span><span·class="p">,</span><span·class="w"> |
| 413 | </span><span·class="p"·data-group-id=" | 413 | </span><span·class="p"·data-group-id="3980921464-13">(</span><span·class="mi">6</span><span·class="p"·data-group-id="3980921464-13">)</span><span·class="w">············</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_prim_loader</span><sp[·...·truncated·by·diffoscope;·len:·561,·SHA:·aa8a010b21752d6f8d2e5d80434b854e25ccb8325d128b399b744878670718ad·...·]-11">}</span><span·class="w"> |
| 414 | </span><span·class="p"·data-group-id=" | 414 | </span><span·class="p"·data-group-id="3980921464-14">(</span><span·class="mi">7</span><span·class="p"·data-group-id="3980921464-14">)</span><span·class="w">··</span><span·class="nf">y</span><span·class="p"·data-group-id="3980921464-15">(</span><span·class="mi">3</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·00858a7ba8a28a3a2731900b81871ca21f4c51a695d951a5462c42409ef2b44d·...·]-15">)</span><span·class="w">·····</span><span·class="ss">infinity</span></code></pre><p>When·interpreting·the·data·for·a·process,·it·is·helpful·to·know·that·anonymous |
| 415 | function·objects·(funs)·are·given·the·following:</p><ul><li>A·name·constructed·from·the·name·of·the·function·in·which·they·are·created</li><li>A·number·(starting·with·0)·indicating·the·number·of·that·fun·within·that | 415 | function·objects·(funs)·are·given·the·following:</p><ul><li>A·name·constructed·from·the·name·of·the·function·in·which·they·are·created</li><li>A·number·(starting·with·0)·indicating·the·number·of·that·fun·within·that |
| 416 | function</li></ul><h2·id="atoms"·class="section-heading"> | 416 | function</li></ul><h2·id="atoms"·class="section-heading"> |
| 417 | ··<a·href="#atoms"·class="hover-link"> | 417 | ··<a·href="#atoms"·class="hover-link"> |
| 418 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 418 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 419 | ··</a> | 419 | ··</a> |
| 420 | ··<span·class="text">Atoms</span> | 420 | ··<span·class="text">Atoms</span> |
| 421 | </h2> | 421 | </h2> |
| Offset 473, 15 lines modified | Offset 473, 15 lines modified | ||
| 473 | ······<p·class="built-using"> | 473 | ······<p·class="built-using"> |
| 474 | ········Built·using | 474 | ········Built·using |
| 475 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 475 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 476 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 476 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 477 | ······</p> | 477 | ······</p> |
| 478 | <p>Copyright·©·1996-202 | 478 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 479 | ····</footer> | 479 | ····</footer> |
| 480 | ··</div> | 480 | ··</div> |
| 481 | </main> | 481 | </main> |
| 482 | </div> | 482 | </div> |
| 483 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 483 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 484 | ··<script> | 484 | ··<script> |
| 485 | ··let·initialized·=·false; | 485 | ··let·initialized·=·false; |
| Offset 338, 15 lines modified | Offset 338, 15 lines modified | ||
| 338 | ······<p·class="built-using"> | 338 | ······<p·class="built-using"> |
| 339 | ········Built·using | 339 | ········Built·using |
| 340 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 340 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 341 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 341 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 342 | ······</p> | 342 | ······</p> |
| 343 | <p>Copyright·©·1996-202 | 343 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 344 | ····</footer> | 344 | ····</footer> |
| 345 | ··</div> | 345 | ··</div> |
| 346 | </main> | 346 | </main> |
| 347 | </div> | 347 | </div> |
| 348 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 348 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 349 | ··<script> | 349 | ··<script> |
| 350 | ··let·initialized·=·false; | 350 | ··let·initialized·=·false; |
| Offset 364, 41 lines modified | Offset 364, 41 lines modified | ||
| 364 | <p>Before·a·driver·can·be·called·from·Erlang,·it·must·be·loaded·and·opened.·Loading | 364 | <p>Before·a·driver·can·be·called·from·Erlang,·it·must·be·loaded·and·opened.·Loading |
| 365 | is·done·using·the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html"><code·class="inline">erl_ddll</code></a>·module·(the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html"><code·class="inline">erl_ddll</code></a>·driver·that·loads·dynamic | 365 | is·done·using·the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html"><code·class="inline">erl_ddll</code></a>·module·(the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html"><code·class="inline">erl_ddll</code></a>·driver·that·loads·dynamic |
| 366 | driver·is·actually·a·driver·itself).·If·loading·is·successful,·the·port·can·be | 366 | driver·is·actually·a·driver·itself).·If·loading·is·successful,·the·port·can·be |
| 367 | opened·with·<a·href="erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>.·The·port·name·must·match·the·name·of | 367 | opened·with·<a·href="erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>.·The·port·name·must·match·the·name·of |
| 368 | the·shared·library·and·the·name·in·the·driver·entry·structure.</p><p>When·the·port·has·been·opened,·the·driver·can·be·called.·In·the·<code·class="inline">pg_sync</code> | 368 | the·shared·library·and·the·name·in·the·driver·entry·structure.</p><p>When·the·port·has·been·opened,·the·driver·can·be·called.·In·the·<code·class="inline">pg_sync</code> |
| 369 | example,·we·do·not·have·any·data·from·the·port,·only·the·return·value·from·the | 369 | example,·we·do·not·have·any·data·from·the·port,·only·the·return·value·from·the |
| 370 | <a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>.</p><p>The·following·code·is·the·Erlang·part·of·the·synchronous·postgres·driver, | 370 | <a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>.</p><p>The·following·code·is·the·Erlang·part·of·the·synchronous·postgres·driver, |
| 371 | <code·class="inline">pg_sync.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 371 | <code·class="inline">pg_sync.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4906286160-1">(</span><span·class="ss">pg_sync</span><span·class="p"·data-group-id="4906286160-1">)</span><span·class="p">.</span><span·class="w"> |
| 372 | </span><span·class="w"> | 372 | </span><span·class="w"> |
| 373 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 373 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="4906286160-2">(</span><span·class="n">DRV_CONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="4906286160-2">)</span><span·class="p">.</span><span·class="w"> |
| 374 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 374 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="4906286160-3">(</span><span·class="n">DRV_DISCONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="4906286160-3">)</span><span·class="p">.</span><span·class="w"> |
| 375 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 375 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="4906286160-4">(</span><span·class="n">DRV_SELECT</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">3</span><span·class="p"·data-group-id="4906286160-4">)</span><span·class="p">.</span><span·class="w"> |
| 376 | </span><span·class="w"> | 376 | </span><span·class="w"> |
| 377 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 377 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4906286160-5">(</span><span·class="p"·data-group-id="4906286160-6">[</span><span·class="ss">connect</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disconnect</span><span·class="p">/</[·...·truncated·by·diffoscope;·len:·251,·SHA:·35d6b43bf88c0558f42f78a0baef94f10f46baabf66350875d2396b59c959b85·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 378 | </span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 378 | </span><span·class="nf">connect</span><span·class="p"·data-group-id="4906286160-7">(</span><span·class="n">ConnectStr</span><span·class="p"·data-group-id="4906286160-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 379 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id=" | 379 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="4906286160-8">(</span><span·class="s">"."</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"pg_sync"</span><span·class="p"·data-group-id="4906286160-8">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 380 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 380 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 381 | ········</span><span·class="p"·data-group-id=" | 381 | ········</span><span·class="p"·data-group-id="4906286160-9">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">already_loaded</span><span·class="p"·data-group-id="4906286160-9">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 382 | ········</span><span·class="n">E</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 382 | ········</span><span·class="n">E</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="4906286160-10">(</span><span·class="p"·data-group-id="4906286160-11">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="p"·data-group-id="4906286160-11">}</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·a375e67aa2f254d9076e7f87f14301c62ff66f66f298b473ad2320a03587ef22·...·]-10">)</span><span·class="w"> |
| 383 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 383 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 384 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="3874797261-12">(</span><span·class="p"·data-group-id="3874797261-13">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p"·data-group-id="3874797261-13">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3874797261-14">[</span><span·class="p"·data-group-id="3874797261-14">]</span><span·class="p"·data-group-id="3874797261-12">)</span><span·class="p">,</span><span·class="w"> | ||
| 385 | ····</span><span·class=" | 384 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="4906286160-12">(</span><span·class="p"·data-group-id="4906286160-13">{</span><span·class="nb">spawn</span>[·...·truncated·by·diffoscope;·len:·382,·SHA:·48333f68aa82381ca9ccd5bfc29a04848993e3100c69c3bd94ec6d865d98e499·...·]</span><span·class="w"> |
| 385 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="4906286160-15">(</span><span·class="nf">port_control</span><span·class="p"·data-group-id="4906286160-16">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_CONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ConnectStr</span><span·class="p"·data-group-id="4906286160-16">)</span><span·class="p"·data-group-id="4906286160-15">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | ||
| 386 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id=" | 386 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="4906286160-17">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="4906286160-17">}</span><span·class="p">;</span><span·class="w"> |
| 387 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Error</span><span·class="w"> | 387 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Error</span><span·class="w"> |
| 388 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 388 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 389 | </span><span·class="nf">disconnect</span><span·class="p"·data-group-id=" | 389 | </span><span·class="nf">disconnect</span><span·class="p"·data-group-id="4906286160-18">(</span><span·class="n">Port</span><span·class="p"·data-group-id="4906286160-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 390 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id=" | 390 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="4906286160-19">(</span><span·class="nf">port_control</span><span·class="p"·data-group-id="4906286160-20">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_DISCONNECT</span><span·c[·...·truncated·by·diffoscope;·len:·171,·SHA:·bd5477e5f3bbf30ac8cbeb459770ceb76ef77ec5fe42f52832b5e62557ec360a·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 391 | ····</span><span·class="nf">port_close</span><span·class="p"·data-group-id=" | 391 | ····</span><span·class="nf">port_close</span><span·class="p"·data-group-id="4906286160-21">(</span><span·class="n">Port</span><span·class="p"·data-group-id="4906286160-21">)</span><span·class="p">,</span><span·class="w"> |
| 392 | ····</span><span·class="n">R</span><span·class="p">.</span><span·class="w"> | 392 | ····</span><span·class="n">R</span><span·class="p">.</span><span·class="w"> |
| 393 | </span><span·class="nf">select</span><span·class="p"·data-group-id=" | 393 | </span><span·class="nf">select</span><span·class="p"·data-group-id="4906286160-22">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Query</span><span·class="p"·data-group-id="4906286160-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 394 | ····</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id=" | 394 | ····</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="4906286160-23">(</span><span·class="nf">port_control</span><span·class="p"·data-group-id="4906286160-24">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_SELECT</span><span·class[·...·truncated·by·diffoscope;·len:·160,·SHA:·673d6f04507f7f241dbb641b6be374eb2d100378454bff054ceeb8641a6d14ca·...·]-23">)</span><span·class="p">.</span></code></pre><p>The·API·is·simple:</p><ul><li><code·class="inline">connect/1</code>·loads·the·driver,·opens·it,·and·logs·on·to·the·database,·returning |
| 395 | the·Erlang·port·if·successful.</li><li><code·class="inline">select/2</code>·sends·a·query·to·the·driver·and·returns·the·result.</li><li><code·class="inline">disconnect/1</code>·closes·the·database·connection·and·the·driver.·(However,·it | 395 | the·Erlang·port·if·successful.</li><li><code·class="inline">select/2</code>·sends·a·query·to·the·driver·and·returns·the·result.</li><li><code·class="inline">disconnect/1</code>·closes·the·database·connection·and·the·driver.·(However,·it |
| 396 | does·not·unload·it.)</li></ul><p>The·connection·string·is·to·be·a·connection·string·for·postgres.</p><p>The·driver·is·loaded·with·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html#load_driver/2"><code·class="inline">erl_ddll:load_driver/2</code></a>.·If·this·is·successful,·or·if | 396 | does·not·unload·it.)</li></ul><p>The·connection·string·is·to·be·a·connection·string·for·postgres.</p><p>The·driver·is·loaded·with·<a·href="../../../lib/kernel-10.2.7.1/doc/html/erl_ddll.html#load_driver/2"><code·class="inline">erl_ddll:load_driver/2</code></a>.·If·this·is·successful,·or·if |
| 397 | it·is·already·loaded,·it·is·opened.·This·will·call·the·<code·class="inline">start</code>·function·in·the | 397 | it·is·already·loaded,·it·is·opened.·This·will·call·the·<code·class="inline">start</code>·function·in·the |
| 398 | driver.</p><p>We·use·the·<a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>·function·for·all·calls·into·the | 398 | driver.</p><p>We·use·the·<a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>·function·for·all·calls·into·the |
| 399 | driver.·The·result·from·the·driver·is·returned·immediately·and·converted·to | 399 | driver.·The·result·from·the·driver·is·returned·immediately·and·converted·to |
| 400 | terms·by·calling·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>.·(We·trust·that·the | 400 | terms·by·calling·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>.·(We·trust·that·the |
| 401 | terms·returned·from·the·driver·are·well-formed,·otherwise·the·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a> | 401 | terms·returned·from·the·driver·are·well-formed,·otherwise·the·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a> |
| Offset 536, 51 lines modified | Offset 536, 51 lines modified | ||
| 536 | successful,·or·error·if·it·is·not.·If·the·connection·is·not·yet·established,·we | 536 | successful,·or·error·if·it·is·not.·If·the·connection·is·not·yet·established,·we |
| 537 | simply·return;·<code·class="inline">ready_io</code>·is·called·again.</p><p>If·we·have·a·result·from·a·connect,·indicated·by·having·data·in·the·<code·class="inline">x</code>·buffer, | 537 | simply·return;·<code·class="inline">ready_io</code>·is·called·again.</p><p>If·we·have·a·result·from·a·connect,·indicated·by·having·data·in·the·<code·class="inline">x</code>·buffer, |
| 538 | we·no·longer·need·to·select·on·output·(<a·href="../../../erts-15.2.7/doc/html/driver_entry.html#ready_output"·title=""><code·class="inline">ready_output</code></a>),·so·we·remove·this·by | 538 | we·no·longer·need·to·select·on·output·(<a·href="../../../erts-15.2.7/doc/html/driver_entry.html#ready_output"·title=""><code·class="inline">ready_output</code></a>),·so·we·remove·this·by |
| 539 | calling·<a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_select"·title=""><code·class="inline">driver_select</code></a>.</p><p>If·we·are·not·connecting,·we·wait·for·results·from·a·<code·class="inline">PQsendQuery</code>,·so·we·get | 539 | calling·<a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_select"·title=""><code·class="inline">driver_select</code></a>.</p><p>If·we·are·not·connecting,·we·wait·for·results·from·a·<code·class="inline">PQsendQuery</code>,·so·we·get |
| 540 | the·result·and·return·it.·The·encoding·is·done·with·the·same·functions·as·in·the | 540 | the·result·and·return·it.·The·encoding·is·done·with·the·same·functions·as·in·the |
| 541 | earlier·example.</p><p>Error·handling·is·to·be·added·here,·for·example,·checking·that·the·socket·is | 541 | earlier·example.</p><p>Error·handling·is·to·be·added·here,·for·example,·checking·that·the·socket·is |
| 542 | still·open,·but·this·is·only·a·simple·example.</p><p>The·Erlang·part·of·the·asynchronous·driver·consists·of·the·sample·file | 542 | still·open,·but·this·is·only·a·simple·example.</p><p>The·Erlang·part·of·the·asynchronous·driver·consists·of·the·sample·file |
| 543 | <code·class="inline">pg_async.erl</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 543 | <code·class="inline">pg_async.erl</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7615061204-1">(</span><span·class="ss">pg_async</span><span·class="p"·data-group-id="7615061204-1">)</span><span·class="p">.</span><span·class="w"> |
| 544 | </span><span·class="w"> | 544 | </span><span·class="w"> |
| 545 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 545 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7615061204-2">(</span><span·class="n">DRV_CONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="sc">$C</span><span·class="p"·data-group-id="7615061204-2">)</span><span·class="p">.</span><span·class="w"> |
| 546 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 546 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7615061204-3">(</span><span·class="n">DRV_DISCONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="sc">$D</span><span·class="p"·data-group-id="7615061204-3">)</span><span·class="p">.</span><span·class="w"> |
| 547 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 547 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7615061204-4">(</span><span·class="n">DRV_SELECT</span><span·class="p">,</span><span·class="w">·</span><span·class="sc">$S</span><span·class="p"·data-group-id="7615061204-4">)</span><span·class="p">.</span><span·class="w"> |
| 548 | </span><span·class="w"> | 548 | </span><span·class="w"> |
| 549 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 549 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7615061204-5">(</span><span·class="p"·data-group-id="7615061204-6">[</span><span·class="ss">connect</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disconnect</span><span·class="p">/</[·...·truncated·by·diffoscope;·len:·250,·SHA:·d72559849b19044cfd816d581232c0c38d5386ce86bb2fc9754e1605664a483b·...·]4-5">)</span><span·class="p">.</span><span·class="w"> |
| 550 | </span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 550 | </span><span·class="nf">connect</span><span·class="p"·data-group-id="7615061204-7">(</span><span·class="n">ConnectStr</span><span·class="p"·data-group-id="7615061204-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 551 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id=" | 551 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="7615061204-8">(</span><span·class="s">"."</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"pg_async"</span><span·class="p"·data-group-id="7615061204-8">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 552 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 552 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 553 | ········</span><span·class="p"·data-group-id=" | 553 | ········</span><span·class="p"·data-group-id="7615061204-9">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">already_loaded</span><span·class="p"·data-group-id="7615061204-9">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 554 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 554 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="7615061204-10">(</span><span·class="p"·data-group-id="7615061204-11">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">could_not_load_driver</span><span·class="p"·data-group-id="7615061204-11">}</span><sp[·...·truncated·by·diffoscope;·len:·37,·SHA:·463363a38eaae6b853a46a8d3fcdb4a0c7adfff44910f03b7ce317e9fcdbdab7·...·]4-10">)</span><span·class="w"> |
| 555 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 555 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 556 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 556 | ····</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="7615061204-12">(</span><span·class="p"·data-group-id="7615061204-13">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p"·data-group-id="7615061204-13">}</[·...·truncated·by·diffoscope;·len:·231,·SHA:·d580e3d7c5764e96e8669385d61b2f67824b6e12cc028c1da84521d4d4e85db1·...·]4-12">)</span><span·class="p">,</span><span·class="w"> |
| 557 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id=" | 557 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id="7615061204-15">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_CONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ConnectStr</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·21,·SHA:·f4332223d2da2dc5728c53e8f9811aca7c30d3153703c26c8679224558fa295e·...·]4-15">)</span><span·class="p">,</span><span·class="w"> |
| 558 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id=" | 558 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id="7615061204-16">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-16">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 559 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 559 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 560 | ············</span><span·class="p"·data-group-id=" | 560 | ············</span><span·class="p"·data-group-id="7615061204-17">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-17">}</span><span·class="p">;</span><span·class="w"> |
| 561 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 561 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 562 | ············</span><span·class="n">Error</span><span·class="w"> | 562 | ············</span><span·class="n">Error</span><span·class="w"> |
| 563 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 563 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 564 | </span><span·class="nf">disconnect</span><span·class="p"·data-group-id=" | 564 | </span><span·class="nf">disconnect</span><span·class="p"·data-group-id="7615061204-18">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 565 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id=" | 565 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id="7615061204-19">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_DISCONNECT</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p[·...·truncated·by·diffoscope;·len:·26,·SHA:·897e770a436381285766621695b9dfd72961842482913e201d1cc8c4ca421b7c·...·]4-19">)</span><span·class="p">,</span><span·class="w"> |
| 566 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id=" | 566 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id="7615061204-20">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-20">)</span><span·class="p">,</span><span·class="w"> |
| 567 | ····</span><span·class="nf">port_close</span><span·class="p"·data-group-id=" | 567 | ····</span><span·class="nf">port_close</span><span·class="p"·data-group-id="7615061204-21">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-21">)</span><span·class="p">,</span><span·class="w"> |
| 568 | ····</span><span·class="n">R</span><span·class="p">.</span><span·class="w"> | 568 | ····</span><span·class="n">R</span><span·class="p">.</span><span·class="w"> |
| 569 | </span><span·class="nf">select</span><span·class="p"·data-group-id=" | 569 | </span><span·class="nf">select</span><span·class="p"·data-group-id="7615061204-22">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Query</span><span·class="p"·data-group-id="7615061204-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 570 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id=" | 570 | ····</span><span·class="nf">port_control</span><span·class="p"·data-group-id="7615061204-23">(</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">DRV_SELECT</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Query</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·15,·SHA:·0bb86f40374e5569f504f465f242b6a7b3d7629b88a7d48160adb8d669e3b41b·...·]4-23">)</span><span·class="p">,</span><span·class="w"> |
| 571 | ····</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id=" | 571 | ····</span><span·class="nf">return_port_data</span><span·class="p"·data-group-id="7615061204-24">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-24">)</span><span·class="p">.</span><span·class="w"> |
| 572 | </span><span·class="nf">return_port_data</span><span·class="p"·data-group-id=" | 572 | </span><span·class="nf">return_port_data</span><span·class="p"·data-group-id="7615061204-25">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7615061204-25">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 573 | ····</span><span·class="k">receive</span><span·class="w"> | 573 | ····</span><span·class="k">receive</span><span·class="w"> |
| 574 | ········</span><span·class="p"·data-group-id=" | 574 | ········</span><span·class="p"·data-group-id="7615061204-26">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7615061204-27">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><[·...·truncated·by·diffoscope;·len:·93,·SHA:·1081748c38061c05300a2f04e97dc3f5e5898e6d84e91fbaa3f840474390ceb8·...·]4-26">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 575 | ············</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id=" | 575 | ············</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="7615061204-28">(</span><span·class="n">Data</span><span·class="p"·data-group-id="7615061204-28">)</span><span·class="w"> |
| 576 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·Erlang·code·is·slightly·different,·as·we·do·not·return·the·result | 576 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·Erlang·code·is·slightly·different,·as·we·do·not·return·the·result |
| 577 | synchronously·from·<a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>,·instead·we·get·it·from·<a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_output"·title=""><code·class="inline">driver_output</code></a>·as | 577 | synchronously·from·<a·href="erlang.html#port_control/3"><code·class="inline">port_control/3</code></a>,·instead·we·get·it·from·<a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_output"·title=""><code·class="inline">driver_output</code></a>·as |
| 578 | data·in·the·message·queue.·The·function·<code·class="inline">return_port_data</code>·above·receives·data | 578 | data·in·the·message·queue.·The·function·<code·class="inline">return_port_data</code>·above·receives·data |
| 579 | from·the·port.·As·the·data·is·in·binary·format,·we·use | 579 | from·the·port.·As·the·data·is·in·binary·format,·we·use |
| 580 | <a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>·to·convert·it·to·an·Erlang·term.·Notice | 580 | <a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>·to·convert·it·to·an·Erlang·term.·Notice |
| 581 | that·the·driver·is·opened·in·binary·mode·(<a·href="erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>·is | 581 | that·the·driver·is·opened·in·binary·mode·(<a·href="erlang.html#open_port/2"><code·class="inline">open_port/2</code></a>·is |
| 582 | called·with·option·<code·class="inline">[binary]</code>).·This·means·that·data·sent·from·the·driver·to·the | 582 | called·with·option·<code·class="inline">[binary]</code>).·This·means·that·data·sent·from·the·driver·to·the |
| Offset 677, 59 lines modified | Offset 677, 59 lines modified | ||
| 677 | ····*rp++·=·ERL_DRV_LIST; | 677 | ····*rp++·=·ERL_DRV_LIST; |
| 678 | ····*rp++·=·n+1; | 678 | ····*rp++·=·n+1; |
| 679 | ····driver_output_term(port,·result,·result_n); | 679 | ····driver_output_term(port,·result,·result_n); |
| 680 | ····delete[]·result; | 680 | ····delete[]·result; |
| 681 | ····delete·d; | 681 | ····delete·d; |
| 682 | }</code></pre><p>This·driver·is·called·like·the·others·from·Erlang.·However,·as·we·use | 682 | }</code></pre><p>This·driver·is·called·like·the·others·from·Erlang.·However,·as·we·use |
| 683 | <a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_output_term"·title=""><code·class="inline">driver_output_term</code></a>,·there·is·no·need·to·call·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>.·The·Erlang·code | 683 | <a·href="../../../erts-15.2.7/doc/html/erl_driver.html#driver_output_term"·title=""><code·class="inline">driver_output_term</code></a>,·there·is·no·need·to·call·<a·href="erlang.html#binary_to_term/1"><code·class="inline">binary_to_term/1</code></a>.·The·Erlang·code |
| 684 | is·in·the·sample·file·<code·class="inline">next_perm.erl</code>.</p><p>The·input·is·changed·into·a·list·of·integers·and·sent·to·the·driver.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 684 | is·in·the·sample·file·<code·class="inline">next_perm.erl</code>.</p><p>The·input·is·changed·into·a·list·of·integers·and·sent·to·the·driver.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8204932866-1">(</span><span·class="ss">next_perm</span><span·class="p"·data-group-id="8204932866-1">)</span><span·class="p">.</span><span·class="w"> |
| 685 | </span><span·class="w"> | 685 | </span><span·class="w"> |
| 686 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 686 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8204932866-2">(</span><span·class="p"·data-group-id="8204932866-3">[</span><span·class="ss">next_perm</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">prev_perm</span><span·class="p">/<[·...·truncated·by·diffoscope;·len:·379,·SHA:·b864df3b48991c180ca7720f95af1b5ef0322f375a8d1a5fa563d374dc0056c3·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 687 | </span><span·class="nf">load</span><span·class="p"·data-group-id=" | 687 | </span><span·class="nf">load</span><span·class="p"·data-group-id="8204932866-4">(</span><span·class="p"·data-group-id="8204932866-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 688 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id=" | 688 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">whereis</span><span·class="p"·data-group-id="8204932866-5">(</span><span·class="ss">next_perm</span><span·class="p"·data-group-id="8204932866-5">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 689 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 689 | ········</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 690 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id=" | 690 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">erl_ddll</span><span·class="p">:</span><span·class="nf">load_driver</span><span·class="p"·data-group-id="8204932866-6">(</span><span·class="s">"."</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"next_perm"</span><span·class="p"·data-group-id="8204932866-6">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 691 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 691 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 692 | ················</span><span·class="p"·data-group-id=" | 692 | ················</span><span·class="p"·data-group-id="8204932866-7">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">already_loaded</span><span·class="p"·data-group-id="8204932866-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 693 | ················</span><span·class="n">E</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 693 | ················</span><span·class="n">E</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">exit</span><span·class="p"·data-group-id="8204932866-8">(</span><span·class="n">E</span><span·class="p"·data-group-id="8204932866-8">)</span><span·class="w"> |
| 694 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 694 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 695 | ············</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id=" | 695 | ············</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">open_port</span><span·class="p"·data-group-id="8204932866-9">(</span><span·class="p"·data-group-id="8204932866-10">{</span><span·class="nb">spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"next_perm"</span><span·class="p"·data-group-id="8204932866-10">}</span><span[·...·truncated·by·diffoscope;·len:·192,·SHA:·4aab657fb0685a1fcb89c47b32a68dcbdb26ce5e6674d57ecfee2cfd84082735·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 696 | ············</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 696 | ············</span><span·class="nf">register</span><span·class="p"·data-group-id="8204932866-12">(</span><span·class="ss">next_perm</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="8204932866-12">)</span><span·class="p">;</span><span·class="w"> |
| 697 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 697 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 698 | ············</span><span·class="ss">ok</span><span·class="w"> | 698 | ············</span><span·class="ss">ok</span><span·class="w"> |
| 699 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 699 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 700 | </span><span·class="nf">list_to_integer_binaries</span><span·class="p"·data-group-id=" | 700 | </span><span·class="nf">list_to_integer_binaries</span><span·class="p"·data-group-id="8204932866-13">(</span><span·class="n">L</span><span·class="p"·data-group-id="8204932866-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 701 | ····</span><span·class="p"·data-group-id=" | 701 | ····</span><span·class="p"·data-group-id="8204932866-14">[</span><span·class="p"·data-group-id="8204932866-15"><<</span><span·class="n">I</span><span·class="p">:</span><span·class="mi">32</span><span·class="o">/</span><span·class="ss">integer</span><span·class="o">-</span><span·class="ss">na[·...·truncated·by·diffoscope;·len:·310,·SHA:·550be6946c32200131862ec286399e0c9c29def99749d14242f76617e88929a8·...·]-14">]</span><span·class="p">.</span><span·class="w"> |
| 702 | </span><span·class="nf">next_perm</span><span·class="p"·data-group-id=" | 702 | </span><span·class="nf">next_perm</span><span·class="p"·data-group-id="8204932866-16">(</span><span·class="n">L</span><span·class="p"·data-group-id="8204932866-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 703 | ····</span><span·class="nf">next_perm</span><span·class="p"·data-group-id=" | 703 | ····</span><span·class="nf">next_perm</span><span·class="p"·data-group-id="8204932866-17">(</span><span·class="n">L</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="8204932866-17">)</span><span·class="p">.</span><span·class="w"> |
| 704 | </span><span·class="nf">prev_perm</span><span·class="p"·data-group-id=" | 704 | </span><span·class="nf">prev_perm</span><span·class="p"·data-group-id="8204932866-18">(</span><span·class="n">L</span><span·class="p"·data-group-id="8204932866-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 9109/58770 bytes (15.50%) of diff not shown. | |||
| Offset 417, 15 lines modified | Offset 417, 15 lines modified | ||
| 417 | ······<p·class="built-using"> | 417 | ······<p·class="built-using"> |
| 418 | ········Built·using | 418 | ········Built·using |
| 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 421 | ······</p> | 421 | ······</p> |
| 422 | <p>Copyright·©·1996-202 | 422 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 423 | ····</footer> | 423 | ····</footer> |
| 424 | ··</div> | 424 | ··</div> |
| 425 | </main> | 425 | </main> |
| 426 | </div> | 426 | </div> |
| 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 428 | ··<script> | 428 | ··<script> |
| 429 | ··let·initialized·=·false; | 429 | ··let·initialized·=·false; |
| Offset 301, 15 lines modified | Offset 301, 15 lines modified | ||
| 301 | ······<p·class="built-using"> | 301 | ······<p·class="built-using"> |
| 302 | ········Built·using | 302 | ········Built·using |
| 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 305 | ······</p> | 305 | ······</p> |
| 306 | <p>Copyright·©·1996-202 | 306 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 307 | ····</footer> | 307 | ····</footer> |
| 308 | ··</div> | 308 | ··</div> |
| 309 | </main> | 309 | </main> |
| 310 | </div> | 310 | </div> |
| 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 312 | ··<script> | 312 | ··<script> |
| 313 | ··let·initialized·=·false; | 313 | ··let·initialized·=·false; |
| Offset 149, 26 lines modified | Offset 149, 26 lines modified | ||
| 149 | runtime·system,·more·specifically·to·the·<code·class="inline">init</code>·system·process,·see·<a·href="init.html"><code·class="inline">init</code></a>.</p><p>The·<code·class="inline">init</code>·process·itself·interprets·some·of·these·flags,·the·<em>init·flags</em>.·It | 149 | runtime·system,·more·specifically·to·the·<code·class="inline">init</code>·system·process,·see·<a·href="init.html"><code·class="inline">init</code></a>.</p><p>The·<code·class="inline">init</code>·process·itself·interprets·some·of·these·flags,·the·<em>init·flags</em>.·It |
| 150 | also·stores·any·remaining·flags,·the·<em>user·flags</em>.·The·latter·can·be·retrieved | 150 | also·stores·any·remaining·flags,·the·<em>user·flags</em>.·The·latter·can·be·retrieved |
| 151 | by·calling·<a·href="init.html#get_argument/1"><code·class="inline">init:get_argument/1</code></a>.</p><p>A·small·number·of·"-"·flags·exist,·which·now·actually·are·emulator·flags,·see | 151 | by·calling·<a·href="init.html#get_argument/1"><code·class="inline">init:get_argument/1</code></a>.</p><p>A·small·number·of·"-"·flags·exist,·which·now·actually·are·emulator·flags,·see |
| 152 | the·description·below.</p></li><li><p>Plain·arguments·are·not·interpreted·in·any·way.·They·are·also·stored·by·the | 152 | the·description·below.</p></li><li><p>Plain·arguments·are·not·interpreted·in·any·way.·They·are·also·stored·by·the |
| 153 | <code·class="inline">init</code>·process·and·can·be·retrieved·by·calling·<a·href="init.html#get_plain_arguments/0"><code·class="inline">init:get_plain_arguments/0</code></a>. | 153 | <code·class="inline">init</code>·process·and·can·be·retrieved·by·calling·<a·href="init.html#get_plain_arguments/0"><code·class="inline">init:get_plain_arguments/0</code></a>. |
| 154 | Plain·arguments·can·occur·before·the·first·flag,·or·after·a·<code·class="inline">--</code>·flag.·Also, | 154 | Plain·arguments·can·occur·before·the·first·flag,·or·after·a·<code·class="inline">--</code>·flag.·Also, |
| 155 | the·<code·class="inline">-extra</code>·flag·causes·everything·that·follows·to·become·plain·arguments.</p></li></ul><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+W·w·-sname·arnie·+R·9·-s·my_init·-extra·+bertie</span><span·class="gp·unselectable"> | 155 | the·<code·class="inline">-extra</code>·flag·causes·everything·that·follows·to·become·plain·arguments.</p></li></ul><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+W·w·-sname·arnie·+R·9·-s·my_init·-extra·+bertie</span><span·class="gp·unselectable"> |
| 156 | (arnie@host)1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 156 | (arnie@host)1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="9190915731-1">(</span><span·class="ss">sname</span><span·class="p"·data-group-id="9190915731-1">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="9190915731-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9190915731-3">[</span><span·class="p"·data-group-id="9190915731-4">[</span><span·class="s">"arnie"</span><span·class="p"·data-group-id="9190915[·...·truncated·by·diffoscope;·len:·109,·SHA:·a2d816ebbf0737d6e9abce2056be74d230ac43fe9a73242d5679745453b06d57·...·]-2">}</span><span·class="gp·unselectable"> |
| 158 | (arnie@host)2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id=" | 158 | (arnie@host)2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id="9190915731-5">(</span><span·class="p"·data-group-id="9190915731-5">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="p"·data-group-id=" | 159 | </span><span·class="p"·data-group-id="9190915731-6">[</span><span·class="s">"+bertie"</span><span·class="p"·data-group-id="9190915731-6">]</span></code></pre><p>Here·<code·class="inline">+W·w</code>·and·<code·class="inline">+R·9</code>·are·emulator·flags.·<code·class="inline">-s·my_init</code>·is·an·init·flag, |
| 160 | interpreted·by·<code·class="inline">init</code>.·<code·class="inline">-sname·arnie</code>·is·a·user·flag,·stored·by·<code·class="inline">init</code>.·It·is | 160 | interpreted·by·<code·class="inline">init</code>.·<code·class="inline">-sname·arnie</code>·is·a·user·flag,·stored·by·<code·class="inline">init</code>.·It·is |
| 161 | read·by·Kernel·and·causes·the·Erlang·runtime·system·to·become·distributed. | 161 | read·by·Kernel·and·causes·the·Erlang·runtime·system·to·become·distributed. |
| 162 | Finally,·everything·after·<code·class="inline">-extra</code>·(that·is,·<code·class="inline">+bertie</code>)·is·considered·as·plain | 162 | Finally,·everything·after·<code·class="inline">-extra</code>·(that·is,·<code·class="inline">+bertie</code>)·is·considered·as·plain |
| 163 | arguments.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-myflag·1</span><span·class="gp·unselectable"> | 163 | arguments.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-myflag·1</span><span·class="gp·unselectable"> |
| 164 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 164 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="0305227587-1">(</span><span·class="ss">myflag</span><span·class="p"·data-group-id="0305227587-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p"·data-group-id=" | 165 | </span><span·class="p"·data-group-id="0305227587-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0305227587-3">[</span><span·class="p"·data-group-id="0305227587-4">[</span><span·class="s">"1"</span><span·class="p"·data-group-id="0305227587-[·...·truncated·by·diffoscope;·len:·105,·SHA:·d62f4e323829b20d4da648ac170fb01d8729d558672b6163bfb4b701af78ec47·...·]-2">}</span><span·class="gp·unselectable"> |
| 166 | 2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id=" | 166 | 2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id="0305227587-5">(</span><span·class="p"·data-group-id="0305227587-5">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="p"·data-group-id=" | 167 | </span><span·class="p"·data-group-id="0305227587-6">[</span><span·class="p"·data-group-id="0305227587-6">]</span></code></pre><p>Here·the·user·flag·<code·class="inline">-myflag·1</code>·is·passed·to·and·stored·by·the·<code·class="inline">init</code>·process.·It |
| 168 | is·a·user-defined·flag,·presumably·used·by·some·user-defined·application.</p><h2·id="flags"·class="section-heading"> | 168 | is·a·user-defined·flag,·presumably·used·by·some·user-defined·application.</p><h2·id="flags"·class="section-heading"> |
| 169 | ··<a·href="#flags"·class="hover-link"> | 169 | ··<a·href="#flags"·class="hover-link"> |
| 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 171 | ··</a> | 171 | ··</a> |
| 172 | ··<span·class="text">Flags</span> | 172 | ··<span·class="text">Flags</span> |
| 173 | </h2> | 173 | </h2> |
| 174 | <p>In·the·following·list,·init·flags·are·marked·"(init·flag)".·Unless·otherwise | 174 | <p>In·the·following·list,·init·flags·are·marked·"(init·flag)".·Unless·otherwise |
| Offset 700, 15 lines modified | Offset 700, 15 lines modified | ||
| 700 | processes)·into·a·smaller·set·of·schedulers·when·schedulers·frequently·run | 700 | processes)·into·a·smaller·set·of·schedulers·when·schedulers·frequently·run |
| 701 | out·of·work.·When·disabled,·the·frequency·with·which·schedulers·run·out·of | 701 | out·of·work.·When·disabled,·the·frequency·with·which·schedulers·run·out·of |
| 702 | work·is·not·taken·into·account·by·the·load·balancing·logic.</p><p><code·class="inline">+scl·false</code>·is·similar·to·<a·href="#%2Bsub"><code·class="inline">+sub·true</code></a>,·but·<code·class="inline">+sub·true</code> | 702 | work·is·not·taken·into·account·by·the·load·balancing·logic.</p><p><code·class="inline">+scl·false</code>·is·similar·to·<a·href="#%2Bsub"><code·class="inline">+sub·true</code></a>,·but·<code·class="inline">+sub·true</code> |
| 703 | also·balances·scheduler·utilization·between·schedulers.</p></li><li><p><strong><code·class="inline"·id="+sct">+sct·CpuTopology</code></strong>·-·Sets·a·user-defined·CPU·topology. | 703 | also·balances·scheduler·utilization·between·schedulers.</p></li><li><p><strong><code·class="inline"·id="+sct">+sct·CpuTopology</code></strong>·-·Sets·a·user-defined·CPU·topology. |
| 704 | The·user-defined·CPU·topology·overrides | 704 | The·user-defined·CPU·topology·overrides |
| 705 | any·automatically·detected·CPU·topology.·The·CPU·topology·is·used·when | 705 | any·automatically·detected·CPU·topology.·The·CPU·topology·is·used·when |
| 706 | <a·href="#%2Bsbt">binding·schedulers·to·logical·processors</a>.·This·option·must·be·before | 706 | <a·href="#%2Bsbt">binding·schedulers·to·logical·processors</a>.·This·option·must·be·before |
| 707 | <a·href="#%2Bsbt"><code·class="inline">+sbt</code></a>·on·the·command-line.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 707 | <a·href="#%2Bsbt"><code·class="inline">+sbt</code></a>·on·the·command-line.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4082816854-1">(</span><span·class="p"·data-group-id="4082816854-1">)</span><span·class="p">;</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="mi">65535</span><span·class="w"> |
| 708 | </span><span·class="o"><</span><span·class="n">IdRange</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="o">-</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w"> | 708 | </span><span·class="o"><</span><span·class="n">IdRange</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="o">-</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w"> |
| 709 | </span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdRange</span><span·class="o">></span><span·class="w"> | 709 | </span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">Id</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdRange</span><span·class="o">></span><span·class="w"> |
| 710 | </span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w"> | 710 | </span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="o"><</span><span·class="n">IdOrIdRange</span><span·class="o">></span><span·class="w"> |
| 711 | </span><span·class="o"><</span><span·class="n">LogicalIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> | 711 | </span><span·class="o"><</span><span·class="n">LogicalIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> |
| 712 | </span><span·class="o"><</span><span·class="n">ThreadIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">T</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">t</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> | 712 | </span><span·class="o"><</span><span·class="n">ThreadIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">T</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">t</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> |
| 713 | </span><span·class="o"><</span><span·class="n">CoreIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">C</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">c</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> | 713 | </span><span·class="o"><</span><span·class="n">CoreIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">C</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">c</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> |
| 714 | </span><span·class="o"><</span><span·class="n">ProcessorIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">p</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> | 714 | </span><span·class="o"><</span><span·class="n">ProcessorIds</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">p</span><span·class="o"><</span><span·class="n">IdList</span><span·class="o">></span><span·class="w"> |
| Offset 733, 30 lines modified | Offset 733, 30 lines modified | ||
| 733 | node.</li><li><code·class="inline"><LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds></code>,·that·is,·thread | 733 | node.</li><li><code·class="inline"><LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds></code>,·that·is,·thread |
| 734 | is·part·of·a·core·that·is·part·of·a·NUMA·node,·which·is·part·of·a | 734 | is·part·of·a·core·that·is·part·of·a·NUMA·node,·which·is·part·of·a |
| 735 | processor.</li></ul><p>A·CPU·topology·can·consist·of·both·processor·external,·and·processor | 735 | processor.</li></ul><p>A·CPU·topology·can·consist·of·both·processor·external,·and·processor |
| 736 | internal·NUMA·nodes·as·long·as·each·logical·processor·belongs·to·only·one | 736 | internal·NUMA·nodes·as·long·as·each·logical·processor·belongs·to·only·one |
| 737 | NUMA·node.·If·<code·class="inline"><ProcessorIds></code>·is·omitted,·its·default·position·is·before | 737 | NUMA·node.·If·<code·class="inline"><ProcessorIds></code>·is·omitted,·its·default·position·is·before |
| 738 | <code·class="inline"><NodeIds></code>.·That·is,·the·default·is·processor·external·NUMA·nodes.</p><p>If·a·list·of·identifiers·is·used·in·an·<code·class="inline"><IdDefs></code>:</p><ul><li><code·class="inline"><LogicalIds></code>·must·be·a·list·of·identifiers.</li><li>At·least·one·other·identifier·type·besides·<code·class="inline"><LogicalIds></code>·must·also·have·a | 738 | <code·class="inline"><NodeIds></code>.·That·is,·the·default·is·processor·external·NUMA·nodes.</p><p>If·a·list·of·identifiers·is·used·in·an·<code·class="inline"><IdDefs></code>:</p><ul><li><code·class="inline"><LogicalIds></code>·must·be·a·list·of·identifiers.</li><li>At·least·one·other·identifier·type·besides·<code·class="inline"><LogicalIds></code>·must·also·have·a |
| 739 | list·of·identifiers.</li><li>All·lists·of·identifiers·must·produce·the·same·number·of·identifiers.</li></ul><p>A·simple·example.·A·single·quad·core·processor·can·be·described·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+sct·L0-3c0-3</span><span·class="gp·unselectable"> | 739 | list·of·identifiers.</li><li>All·lists·of·identifiers·must·produce·the·same·number·of·identifiers.</li></ul><p>A·simple·example.·A·single·quad·core·processor·can·be·described·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+sct·L0-3c0-3</span><span·class="gp·unselectable"> |
| 740 | 1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="2 | 740 | 1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="4243055878-1">(</span><span·class="ss">cpu_topology</span><span·class="p"·data-group-id="4243055878-1">)</span><span·class="p">.</span><span·class="w"> |
| 741 | </span><span·class="p"·data-group-id="2 | 741 | </span><span·class="p"·data-group-id="4243055878-2">[</span><span·class="p"·data-group-id="4243055878-3">{</span><span·class="ss">processor</span><span·class="p">,</span><span·class="p"·data-group-id="4243055878-4">[</span><span·class="p"·data-group-id="4243055878-5">{</span><span·class="ss">c[·...·truncated·by·diffoscope;·len:·261,·SHA:·4e0abed83a49242745dfb8bdc7c4b5502e08f23e05e3da7e54d71630146a4d27·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 742 | ·············</span><span·class="p"·data-group-id="2 | 742 | ·············</span><span·class="p"·data-group-id="4243055878-7">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="4243055878-8">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4243055878-8">}</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·eafc7067f377f1397cf7cffc0d9637d50a3919064fa7e4f6d7549ad3e202333a·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 743 | ·············</span><span·class="p"·data-group-id="2 | 743 | ·············</span><span·class="p"·data-group-id="4243055878-9">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="4243055878-10">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4243055878-10">}<[·...·truncated·by·diffoscope;·len:·47,·SHA:·679a4b715bfa9d30489bac6dba5c625d13afe38d812a7b83438c9d9c3f0d3c6a·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 744 | ·············</span><span·class="p"·data-group-id="2 | 744 | ·············</span><span·class="p"·data-group-id="4243055878-11">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="4243055878-12">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4243055878-12">}[·...·truncated·by·diffoscope;·len:·208,·SHA:·ec9eedcd8a784c22a6ffc7835b2bb93c7384a5c2d1a974d40ab0114ab942172c·...·]-2">]</span></code></pre><p>A·more·complicated·example·with·two·quad·core·processors,·each·processor·in |
| 745 | its·own·NUMA·node.·The·ordering·of·logical·processors·is·a·bit·weird.·This | 745 | its·own·NUMA·node.·The·ordering·of·logical·processors·is·a·bit·weird.·This |
| 746 | to·give·a·better·example·of·identifier·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+sct·L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1</span><span·class="gp·unselectable"> | 746 | to·give·a·better·example·of·identifier·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·+sct·L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1</span><span·class="gp·unselectable"> |
| 747 | 1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id=" | 747 | 1>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="9959414355-1">(</span><span·class="ss">cpu_topology</span><span·class="p"·data-group-id="9959414355-1">)</span><span·class="p">.</span><span·class="w"> |
| 748 | </span><span·class="p"·data-group-id=" | 748 | </span><span·class="p"·data-group-id="9959414355-2">[</span><span·class="p"·data-group-id="9959414355-3">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-4">[</span><span·class="p"·data-group-id="9959414355-5">{</span><span·class="ss">proces[·...·truncated·by·diffoscope;·len:·419,·SHA:·9a9c665e04d3d4a19f1737ccfff0c362def2fc4dcd09b93daf4b3e22ee090f65·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 749 | ····················</span><span·class="p"·data-group-id=" | 749 | ····················</span><span·class="p"·data-group-id="9959414355-9">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-10">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="9959414355-10">}<[·...·truncated·by·diffoscope;·len:·47,·SHA:·7ffd3ba9679aa5c0f54adbbe0efe96c9e277c7a1120c88d45d423bd49b60ae72·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 750 | ····················</span><span·class="p"·data-group-id=" | 750 | ····················</span><span·class="p"·data-group-id="9959414355-11">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-12">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="9959414355-12">}[·...·truncated·by·diffoscope;·len:·48,·SHA:·95b5ed88592105a922701949a9372ac00e26c317f8d8226624da9a0733579a2d·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 751 | ····················</span><span·class="p"·data-group-id="4589314106-13">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="4589314106-14">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4589314106-14">}</span><span·class="p"·data-group-id="4589314106-13">}</span><span·class="p"·data-group-id="4589314106-6">]</span><span·class="p"·data-group-id="4589314106-5">}</span><span·class="p"·data-group-id="4589314106-4">]</span><span·class="p"·data-group-id="4589314106-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 752 | ·</span><span·class="p"·data-group-id=" | 751 | ····················</span><span·class="p"·data-group-id="9959414355-13">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-14">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi[·...·truncated·by·diffoscope;·len:·320,·SHA:·b10d6557cbb6a5f1f6b0739f7e59388b321f668933800f766673609c38505faf·...·]">}</span><span·class="p">,</span><span·class="w"> |
| 752 | ·</span><span·class="p"·data-group-id="9959414355-15">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-16">[</span><span·class="p"·data-group-id="9959414355-17">{</span><span·class="ss">processor</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-18">[</span><span·class="p"·data-group-id="9959414355-19">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-20">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="9959414355-20">}</span><span·class="p"·data-group-id="9959414355-19">}</span><span·class="p">,</span><span·class="w"> | ||
| 753 | ····················</span><span·class="p"·data-group-id=" | 753 | ····················</span><span·class="p"·data-group-id="9959414355-21">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-22">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="9959414355-22">}[·...·truncated·by·diffoscope;·len:·48,·SHA:·95b5ed88592105a922701949a9372ac00e26c317f8d8226624da9a0733579a2d·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 754 | ····················</span><span·class="p"·data-group-id=" | 754 | ····················</span><span·class="p"·data-group-id="9959414355-23">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-24">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="9959414355-24">}[·...·truncated·by·diffoscope;·len:·48,·SHA:·95b5ed88592105a922701949a9372ac00e26c317f8d8226624da9a0733579a2d·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 755 | ····················</span><span·class="p"·data-group-id=" | 755 | ····················</span><span·class="p"·data-group-id="9959414355-25">{</span><span·class="ss">core</span><span·class="p">,</span><span·class="p"·data-group-id="9959414355-26">{</span><span·class="ss">logical</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="9959414355-26">}[·...·truncated·by·diffoscope;·len:·318,·SHA:·d718238234c0d36c8523efb8ca9ef6bc1e9ed6585defcbcf3eaf160d79aa3bb1·...·]-2">]</span></code></pre><p>As·long·as·real·identifiers·are·correct,·it·is·OK·to·pass·a·CPU·topology |
| 756 | that·is·not·a·correct·description·of·the·CPU·topology.·When·used·with·care | 756 | that·is·not·a·correct·description·of·the·CPU·topology.·When·used·with·care |
| 757 | this·can·be·very·useful.·This·to·trick·the·emulator·to·bind·its·schedulers | 757 | this·can·be·very·useful.·This·to·trick·the·emulator·to·bind·its·schedulers |
| 758 | as·you·want.·For·example,·if·you·want·to·run·multiple·Erlang·runtime·systems | 758 | as·you·want.·For·example,·if·you·want·to·run·multiple·Erlang·runtime·systems |
| 759 | on·the·same·machine,·you·want·to·reduce·the·number·of·schedulers·used·and | 759 | on·the·same·machine,·you·want·to·reduce·the·number·of·schedulers·used·and |
| 760 | manipulate·the·CPU·topology·so·that·they·bind·to·different·logical·CPUs.·An | 760 | manipulate·the·CPU·topology·so·that·they·bind·to·different·logical·CPUs.·An |
| 761 | example,·with·two·Erlang·runtime·systems·on·a·quad·core·machine:</p><pre><code·class="text">%·erl·+sct·L0-3c0-3·+sbt·db·+S3:2·-detached·-noinput·-noshell·-sname·one | 761 | example,·with·two·Erlang·runtime·systems·on·a·quad·core·machine:</p><pre><code·class="text">%·erl·+sct·L0-3c0-3·+sbt·db·+S3:2·-detached·-noinput·-noshell·-sname·one |
| 762 | %·erl·+sct·L3-0c0-3·+sbt·db·+S3:2·-detached·-noinput·-noshell·-sname·two</code></pre><p>In·this·example,·each·runtime·system·have·two·schedulers·each·online,·and | 762 | %·erl·+sct·L3-0c0-3·+sbt·db·+S3:2·-detached·-noinput·-noshell·-sname·two</code></pre><p>In·this·example,·each·runtime·system·have·two·schedulers·each·online,·and |
| Offset 923, 18 lines modified | Offset 923, 18 lines modified | ||
| 923 | </h2> | 923 | </h2> |
| 924 | <p>The·standard·Erlang/OTP·system·can·be·reconfigured·to·change·the·default | 924 | <p>The·standard·Erlang/OTP·system·can·be·reconfigured·to·change·the·default |
| 925 | behavior·on·startup.</p><ul><li><p><strong>The·<code·class="inline">.erlang</code>·startup·file</strong>·-·When·Erlang/OTP·is·started,·the·system | 925 | behavior·on·startup.</p><ul><li><p><strong>The·<code·class="inline">.erlang</code>·startup·file</strong>·-·When·Erlang/OTP·is·started,·the·system |
| 926 | searches·for·a·file·named·<code·class="inline">.erlang</code>·in·the | 926 | searches·for·a·file·named·<code·class="inline">.erlang</code>·in·the |
| 927 | <a·href="init.html#home">user's·home·directory</a>·and·then | 927 | <a·href="init.html#home">user's·home·directory</a>·and·then |
| 928 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/filename.html#user_config"><code·class="inline">filename:basedir(user_config,·"erlang")</code></a>.</p><p>If·an·<code·class="inline">.erlang</code>·file·is·found,·it·is·assumed·to·contain·valid·Erlang | 928 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/filename.html#user_config"><code·class="inline">filename:basedir(user_config,·"erlang")</code></a>.</p><p>If·an·<code·class="inline">.erlang</code>·file·is·found,·it·is·assumed·to·contain·valid·Erlang |
| 929 | expressions.·These·expressions·are·evaluated·as·if·they·were·input·to·the | 929 | expressions.·These·expressions·are·evaluated·as·if·they·were·input·to·the |
| 930 | shell.</p><p>A·typical·<code·class="inline">.erlang</code>·file·contains·a·set·of·search·paths,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7 | 930 | shell.</p><p>A·typical·<code·class="inline">.erlang</code>·file·contains·a·set·of·search·paths,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7365007617-1">(</span><span·class="s">"executing·user·profile·in·$HOME/.erlang\n"</span><span·class="p">,</span><span·class="p"·data-group-id="7365007617-2">[</span><span·class="p"·data-group-id="7365007617-2">]</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·c91cf25c8d12050147ee3afce6c15ebb050834f4d77c629523c5476183fe1e43·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 931 | </span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">add_path</span><span·class="p"·data-group-id="7 | 931 | </span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">add_path</span><span·class="p"·data-group-id="7365007617-3">(</span><span·class="s">"/home/calvin/test/ebin"</span><span·class="p"·data-group-id="7365007617-3">)</span><span·class="p">.</span><span·class="w"> |
| 932 | </span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">add_path</span><span·class="p"·data-group-id="7 | 932 | </span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">add_path</span><span·class="p"·data-group-id="7365007617-4">(</span><span·class="s">"/home/hobbes/bigappl-1.2/ebin"</span><span·class="p"·data-group-id="7365007617-4">)</span><span·class="p">.</span><span·class="w"> |
| 933 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7 | 933 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7365007617-5">(</span><span·class="s">".erlang·rc·finished\n"</span><span·class="p">,</span><span·class="p"·data-group-id="7365007617-6">[</span><span·class="p"·data-group-id="7365007617-6">]</span><span·class="p"·data-group-id="7365007617-5">)</span><span·class="p">.</span></code></pre></li><li><p><strong>user_default</strong>·and·<strong>shell_default</strong>·-·Functions·in·the·shell·that·are·not |
| 934 | prefixed·by·a·module·name·are·assumed·to·be·functional·objects·(funs), | 934 | prefixed·by·a·module·name·are·assumed·to·be·functional·objects·(funs), |
| 935 | built-in·functions·(BIFs),·or·belong·to·the·module·<code·class="inline">user_default</code>·or | 935 | built-in·functions·(BIFs),·or·belong·to·the·module·<code·class="inline">user_default</code>·or |
| 936 | <code·class="inline">shell_default</code>.</p><p>To·include·private·shell·commands,·define·them·in·a·module·<code·class="inline">user_default</code>·and | 936 | <code·class="inline">shell_default</code>.</p><p>To·include·private·shell·commands,·define·them·in·a·module·<code·class="inline">user_default</code>·and |
| 937 | add·the·following·argument·as·the·first·line·in·the·<code·class="inline">.erlang</code>·file:</p><pre><code·class="text">code:load_abs("..../user_default").</code></pre></li><li><p><strong>erl</strong>·-·If·the·contents·of·<code·class="inline">.erlang</code>·are·changed·and·a·private·version·of | 937 | add·the·following·argument·as·the·first·line·in·the·<code·class="inline">.erlang</code>·file:</p><pre><code·class="text">code:load_abs("..../user_default").</code></pre></li><li><p><strong>erl</strong>·-·If·the·contents·of·<code·class="inline">.erlang</code>·are·changed·and·a·private·version·of |
| 938 | <code·class="inline">user_default</code>·is·defined,·the·Erlang/OTP·environment·can·be·customized.·More | 938 | <code·class="inline">user_default</code>·is·defined,·the·Erlang/OTP·environment·can·be·customized.·More |
| 939 | powerful·changes·can·be·made·by·supplying·command-line·arguments·in·the | 939 | powerful·changes·can·be·made·by·supplying·command-line·arguments·in·the |
| 940 | startup·script·<code·class="inline">erl</code>.·For·more·information,·see·<a·href="init.html"><code·class="inline">init</code></a>.</p></li></ul><h2·id="see-also"·class="section-heading"> | 940 | startup·script·<code·class="inline">erl</code>.·For·more·information,·see·<a·href="init.html"><code·class="inline">init</code></a>.</p></li></ul><h2·id="see-also"·class="section-heading"> |
| Offset 988, 15 lines modified | Offset 988, 15 lines modified | ||
| 988 | ······<p·class="built-using"> | 988 | ······<p·class="built-using"> |
| 989 | ········Built·using | 989 | ········Built·using |
| 990 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 990 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 991 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 991 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 992 | ······</p> | 992 | ······</p> |
| 993 | <p>Copyright·©·1996-202 | 993 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 994 | ····</footer> | 994 | ····</footer> |
| 995 | ··</div> | 995 | ··</div> |
| 996 | </main> | 996 | </main> |
| 997 | </div> | 997 | </div> |
| 998 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 998 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 999 | ··<script> | 999 | ··<script> |
| 1000 | ··let·initialized·=·false; | 1000 | ··let·initialized·=·false; |
| Offset 252, 32 lines modified | Offset 252, 32 lines modified | ||
| 252 | --- | 252 | --- |
| 253 | sequenceDiagram | 253 | sequenceDiagram |
| 254 | ····participant·client·as·Client·(or·Node) | 254 | ····participant·client·as·Client·(or·Node) |
| 255 | ····participant·EPMD | 255 | ····participant·EPMD |
| 256 | ···· | 256 | ···· |
| 257 | ····client·->>·EPMD:·NAMES_REQ | 257 | ····client·->>·EPMD:·NAMES_REQ |
| 258 | ····EPMD·-->>·client:·NAMES_RESP</code></pre><table><thead><tr><th·style="text-align:·left;">1</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">110</code></td></tr></tbody></table><p><em>Table:·NAMES_REQ·(110)</em></p><p>The·response·for·a·<code·class="inline">NAMES_REQ</code>·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">4</th><th·style="text-align:·left;"></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">EPMDPortNo</code></td><td·style="text-align:·left;"><code·class="inline">NodeInfo*</code></td></tr></tbody></table><p><em>Table:·NAMES_RESP</em></p><p><code·class="inline">NodeInfo</code>·is·a·string·written·for·each·active·node.·When·all·<code·class="inline">NodeInfo</code>·has | 258 | ····EPMD·-->>·client:·NAMES_RESP</code></pre><table><thead><tr><th·style="text-align:·left;">1</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">110</code></td></tr></tbody></table><p><em>Table:·NAMES_REQ·(110)</em></p><p>The·response·for·a·<code·class="inline">NAMES_REQ</code>·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">4</th><th·style="text-align:·left;"></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">EPMDPortNo</code></td><td·style="text-align:·left;"><code·class="inline">NodeInfo*</code></td></tr></tbody></table><p><em>Table:·NAMES_RESP</em></p><p><code·class="inline">NodeInfo</code>·is·a·string·written·for·each·active·node.·When·all·<code·class="inline">NodeInfo</code>·has |
| 259 | been·written·the·connection·is·closed·by·the·EPMD.</p><p><code·class="inline">NodeInfo</code>·is,·as·expressed·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 259 | been·written·the·connection·is·closed·by·the·EPMD.</p><p><code·class="inline">NodeInfo</code>·is,·as·expressed·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0406818158-1">(</span><span·class="s">"name·~ts·at·port·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0406818158-2">[</span><span·[·...·truncated·by·diffoscope;·len:·194,·SHA:·b5410e15a84569d32fd7199ab6b56f93cb5256034691326e26daa653294ec103·...·]-1">)</span><span·class="p">.</span></code></pre><h3·id="dump-all-data-from-epmd"·class="section-heading"> |
| 260 | ··<a·href="#dump-all-data-from-epmd"·class="hover-link"> | 260 | ··<a·href="#dump-all-data-from-epmd"·class="hover-link"> |
| 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 262 | ··</a> | 262 | ··</a> |
| 263 | ··<span·class="text">Dump·All·Data·from·EPMD</span> | 263 | ··<span·class="text">Dump·All·Data·from·EPMD</span> |
| 264 | </h3> | 264 | </h3> |
| 265 | <p>This·request·is·not·really·used,·it·is·to·be·regarded·as·a·debug·feature.</p><pre><code·class="mermaid">--- | 265 | <p>This·request·is·not·really·used,·it·is·to·be·regarded·as·a·debug·feature.</p><pre><code·class="mermaid">--- |
| 266 | title:·Dump·All·Data·from·EPMD | 266 | title:·Dump·All·Data·from·EPMD |
| 267 | --- | 267 | --- |
| 268 | sequenceDiagram | 268 | sequenceDiagram |
| 269 | ····participant·client·as·Client·(or·Node) | 269 | ····participant·client·as·Client·(or·Node) |
| 270 | ····participant·EPMD | 270 | ····participant·EPMD |
| 271 | ···· | 271 | ···· |
| 272 | ····client·->>·EPMD:·DUMP_REQ | 272 | ····client·->>·EPMD:·DUMP_REQ |
| 273 | ····EPMD·-->>·client:·DUMP_RESP</code></pre><table><thead><tr><th·style="text-align:·left;">1</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">100</code></td></tr></tbody></table><p><em>Table:·DUMP_REQ</em></p><p>The·response·for·a·<code·class="inline">DUMP_REQ</code>·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">4</th><th·style="text-align:·left;"></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">EPMDPortNo</code></td><td·style="text-align:·left;"><code·class="inline">NodeInfo*</code></td></tr></tbody></table><p><em>Table:·DUMP_RESP</em></p><p><code·class="inline">NodeInfo</code>·is·a·string·written·for·each·node·kept·in·the·EPMD.·When·all | 273 | ····EPMD·-->>·client:·DUMP_RESP</code></pre><table><thead><tr><th·style="text-align:·left;">1</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">100</code></td></tr></tbody></table><p><em>Table:·DUMP_REQ</em></p><p>The·response·for·a·<code·class="inline">DUMP_REQ</code>·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">4</th><th·style="text-align:·left;"></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">EPMDPortNo</code></td><td·style="text-align:·left;"><code·class="inline">NodeInfo*</code></td></tr></tbody></table><p><em>Table:·DUMP_RESP</em></p><p><code·class="inline">NodeInfo</code>·is·a·string·written·for·each·node·kept·in·the·EPMD.·When·all |
| 274 | <code·class="inline">NodeInfo</code>·has·been·written·the·connection·is·closed·by·the·EPMD.</p><p><code·class="inline">NodeInfo</code>·is,·as·expressed·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0 | 274 | <code·class="inline">NodeInfo</code>·has·been·written·the·connection·is·closed·by·the·EPMD.</p><p><code·class="inline">NodeInfo</code>·is,·as·expressed·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8099508127-1">(</span><span·class="s">"active·name·····~ts·at·port·</span><span·class="si">~p</span><span·class="s">,·fd·=·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 275 | ··········</span><span·class="p"·data-group-id="0 | 275 | ··········</span><span·class="p"·data-group-id="8099508127-2">[</span><span·class="n">NodeName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="8099508127-2">]</span><s[·...·truncated·by·diffoscope;·len:·266,·SHA:·8558c9ccca73cc2aaf12e852e2944cafeea0ec36f8edea9e36da58a3bc0a2b1e·...·]-1">(</span><span·class="s">"old/unused·name·~ts·at·port·</span><span·class="si">~p</span><span·class="s">,·fd·=·</span><span·class="si">~p</span><span·class="s">·</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 276 | ··········</span><span·class="p"·data-group-id=" | 276 | ··········</span><span·class="p"·data-group-id="0321965238-2">[</span><span·class="n">NodeName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="0321965238-2">]</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·6ec4c68dfc12eeacd685e00fdd8aef52f8c9aae3d38f4c013e70855d8644217a·...·]-1">)</span><span·class="p">.</span></code></pre><h3·id="kill-epmd"·class="section-heading"> |
| 277 | ··<a·href="#kill-epmd"·class="hover-link"> | 277 | ··<a·href="#kill-epmd"·class="hover-link"> |
| 278 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 278 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 279 | ··</a> | 279 | ··</a> |
| 280 | ··<span·class="text">Kill·EPMD</span> | 280 | ··<span·class="text">Kill·EPMD</span> |
| 281 | </h3> | 281 | </h3> |
| 282 | <p>This·request·kills·the·running·EPMD.·It·is·almost·never·used.</p><pre><code·class="mermaid">--- | 282 | <p>This·request·kills·the·running·EPMD.·It·is·almost·never·used.</p><pre><code·class="mermaid">--- |
| 283 | title:·Kill·EPMD | 283 | title:·Kill·EPMD |
| Offset 407, 54 lines modified | Offset 407, 54 lines modified | ||
| 407 | received·from·<code·class="inline">A</code>·is·correct·and·generates·a·digest·from·the·challenge | 407 | received·from·<code·class="inline">A</code>·is·correct·and·generates·a·digest·from·the·challenge |
| 408 | received·from·<code·class="inline">A</code>.·The·digest·is·then·sent·to·<code·class="inline">A</code>.·The·message·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">16</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">'a'</code></td><td·style="text-align:·left;"><code·class="inline">Digest</code></td></tr></tbody></table><p><em>Table:·The·challenge_ack·message</em></p><p><code·class="inline">Digest</code>·is·the·digest·calculated·by·<code·class="inline">B</code>·for·<code·class="inline">A</code>'s·challenge.</p></li><li><p><strong>7)·check</strong>·-·<code·class="inline">A</code>·checks·the·digest·from·<code·class="inline">B</code>·and·the·connection·is·up.</p></li></ul><h3·id="semigraphic-view"·class="section-heading"> | 408 | received·from·<code·class="inline">A</code>.·The·digest·is·then·sent·to·<code·class="inline">A</code>.·The·message·is·as·follows:</p><table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">16</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">'a'</code></td><td·style="text-align:·left;"><code·class="inline">Digest</code></td></tr></tbody></table><p><em>Table:·The·challenge_ack·message</em></p><p><code·class="inline">Digest</code>·is·the·digest·calculated·by·<code·class="inline">B</code>·for·<code·class="inline">A</code>'s·challenge.</p></li><li><p><strong>7)·check</strong>·-·<code·class="inline">A</code>·checks·the·digest·from·<code·class="inline">B</code>·and·the·connection·is·up.</p></li></ul><h3·id="semigraphic-view"·class="section-heading"> |
| 409 | ··<a·href="#semigraphic-view"·class="hover-link"> | 409 | ··<a·href="#semigraphic-view"·class="hover-link"> |
| 410 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 410 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 411 | ··</a> | 411 | ··</a> |
| 412 | ··<span·class="text">Semigraphic·View</span> | 412 | ··<span·class="text">Semigraphic·View</span> |
| 413 | </h3> | 413 | </h3> |
| 414 | <pre><code·class="makeup·erlang"·translate="no"><span·class="n">A</span><span·class="w">·</span><span·class="p"·data-group-id=" | 414 | <pre><code·class="makeup·erlang"·translate="no"><span·class="n">A</span><span·class="w">·</span><span·class="p"·data-group-id="6139000435-1">(</span><span·class="ss">initiator</span><span·class="p"·data-group-id="6139000435-1">)</span><span·class="w">······································</span><span·class="n">B</span><span·class="w">·</span><span·class="p"·data-group-id="61390004[·...·truncated·by·diffoscope;·len:·87,·SHA:·34658fb41d07945987a3aaaa8b33fe9ec01a13f178a37f8c5dc6edb42191217f·...·]-2">)</span><span·class="w"> |
| 415 | </span><span·class="n">TCP</span><span·class="w">·</span><span·class="ss">connect</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">></span><span·class="w"> | 415 | </span><span·class="n">TCP</span><span·class="w">·</span><span·class="ss">connect</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">></span><span·class="w"> |
| 416 | ···················································</span><span·class="n">TCP</span><span·class="w">·</span><span·class="ss">accept</span><span·class="w"> | 416 | ···················································</span><span·class="n">TCP</span><span·class="w">·</span><span·class="ss">accept</span><span·class="w"> |
| 417 | </span><span·class="ss">send_name</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">></span><span·class="w"> | 417 | </span><span·class="ss">send_name</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">></span><span·class="w"> |
| 418 | ···················································</span><span·class="ss">recv_name</span><span·class="w"> | 418 | ···················································</span><span·class="ss">recv_name</span><span·class="w"> |
| 419 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">send_status</span><span·class="w"> | 419 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">send_status</span><span·class="w"> |
| 420 | </span><span·class="nf">recv_status</span><span·class="w"> | 420 | </span><span·class="nf">recv_status</span><span·class="w"> |
| 421 | </span><span·class="p"·data-group-id=" | 421 | </span><span·class="p"·data-group-id="6139000435-3">(</span><span·class="k">if</span><span·class="w">·</span><span·class="ss">status</span><span·class="w">·</span><span·class="ss">was</span><span·class="w">·</span><span·class="ss">'alive'</span><span·class="w"> |
| 422 | ·</span><span·class="ss">send_status</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 422 | ·</span><span·class="ss">send_status</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 423 | ···················································</span><span·class="ss">recv_status</span><span·class="p"·data-group-id=" | 423 | ···················································</span><span·class="ss">recv_status</span><span·class="p"·data-group-id="6139000435-3">)</span><span·class="w"> |
| 424 | ··························</span><span·class="p"·data-group-id=" | 424 | ··························</span><span·class="p"·data-group-id="6139000435-4">(</span><span·class="n">ChB</span><span·class="p"·data-group-id="6139000435-4">)</span><span·class="w">······················</span><span·class="n">ChB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·119,·SHA:·43f780443e0172b83631b21739be4c06e02c6840b19550753976e685f08875f8·...·]-5">)</span><span·class="w"> |
| 425 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">send_challenge</span><span·class="w"> | 425 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">send_challenge</span><span·class="w"> |
| 426 | </span><span·class="nf">recv_challenge</span><span·class="w"> | 426 | </span><span·class="nf">recv_challenge</span><span·class="w"> |
| 427 | </span><span·class="p"·data-group-id=" | 427 | </span><span·class="p"·data-group-id="6139000435-6">(</span><span·class="k">if</span><span·class="w">·</span><span·class="ss">old</span><span·class="w">·</span><span·class="ss">send_name</span><span·class="w"> |
| 428 | ·</span><span·class="ss">send_complement</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 428 | ·</span><span·class="ss">send_complement</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 429 | ···················································</span><span·class="ss">recv_complement</span><span·class="p"·data-group-id=" | 429 | ···················································</span><span·class="ss">recv_complement</span><span·class="p"·data-group-id="6139000435-6">)</span><span·class="w"> |
| 430 | </span><span·class="n">ChA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_challenge</span><span·class="p"·data-group-id=" | 430 | </span><span·class="n">ChA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_challenge</span><span·class="p"·data-group-id="6139000435-7">(</span><span·class="p"·data-group-id="6139000435-7">)</span><span·class="p">,</span><span·class="w"> |
| 431 | </span><span·class="n">OCA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">out_cookie</span><span·class="p"·data-group-id=" | 431 | </span><span·class="n">OCA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">out_cookie</span><span·class="p"·data-group-id="6139000435-8">(</span><span·class="n">B</span><span·class="p"·data-group-id="6139000435-8">)</span><span·class="p">,</span><span·class="w"> |
| 432 | </span><span·class="n">DiA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="p"·data-group-id=" | 432 | </span><span·class="n">DiA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="p"·data-group-id="6139000435-9">(</span><span·class="n">ChB</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OCA</span><span·class="p"·data-group-id="6139000435-9">)</span><span·class="w"> |
| 433 | ··························</span><span·class="p"·data-group-id=" | 433 | ··························</span><span·class="p"·data-group-id="6139000435-10">(</span><span·class="n">ChA</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DiA</span><span·class="p"·data-group-id="6139000435-10">)</span><span·class="w"> |
| 434 | </span><span·class="ss">send_challenge_reply</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w"> | 434 | </span><span·class="ss">send_challenge_reply</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w"> |
| 435 | ···················································</span><span·class="ss">recv_challenge_reply</span><span·class="w"> | 435 | ···················································</span><span·class="ss">recv_challenge_reply</span><span·class="w"> |
| 436 | ···················································</span><span·class="n">ICB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">in_cookie</span><span·class="p"·data-group-id=" | 436 | ···················································</span><span·class="n">ICB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">in_cookie</span><span·class="p"·data-group-id="6139000435-11">(</span><span·class="n">A</span><span·class="p"·data-group-id="6139000435-11">)</span><span·class="p">,</span><span·class="w"> |
| 437 | ···················································</span><span·class="nc">check</span><span·class="p">:</span><span·class="w"> | 437 | ···················································</span><span·class="nc">check</span><span·class="p">:</span><span·class="w"> |
| 438 | ···················································</span><span·class="n">DiA</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="w">·</span><span·class="p"·data-group-id=" | 438 | ···················································</span><span·class="n">DiA</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="w">·</span><span·class="p"·data-group-id="6139000435-12">(</span><span·class="n">ChB</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ICB</span><span·class="p"·data-group-id="6139000435-12">)</span><span·class="o">?</span><span·class="w"> |
| 439 | </span><span·class="w">···················································</span><span·class="p">-</span><span·class="w">·</span><span·class="na">if</span><span·class="w">·</span><span·class="n">OK</span><span·class="p">:</span><span·class="w"> | 439 | </span><span·class="w">···················································</span><span·class="p">-</span><span·class="w">·</span><span·class="na">if</span><span·class="w">·</span><span·class="n">OK</span><span·class="p">:</span><span·class="w"> |
| 440 | ····················································</span><span·class="n">OCB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">out_cookie</span><span·class="p"·data-group-id=" | 440 | ····················································</span><span·class="n">OCB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">out_cookie</span><span·class="p"·data-group-id="6139000435-13">(</span><span·class="n">A</span><span·class="p"·data-group-id="6139000435-13">)</span><span·class="p">,</span><span·class="w"> |
| 441 | ····················································</span><span·class="n">DiB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="w">·</span><span·class="p"·data-group-id=" | 441 | ····················································</span><span·class="n">DiB</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="w">·</span><span·class="p"·data-group-id="6139000435-14">(</span><span·class="n">ChA</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OCB</span><span·class="p"·data-group-id="6139000435-14">)</span><span·class="w"> |
| 442 | ··························</span><span·class="p"·data-group-id=" | 442 | ··························</span><span·class="p"·data-group-id="6139000435-15">(</span><span·class="n">DiB</span><span·class="p"·data-group-id="6139000435-15">)</span><span·class="w"> |
| 443 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="w">·</span><span·class="ss">send_challenge_ack</span><span·class="w"> | 443 | ··</span><span·class="o"><-</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="w">·</span><span·class="ss">send_challenge_ack</span><span·class="w"> |
| 444 | </span><span·class="ss">recv_challenge_ack</span><span·class="w">··································</span><span·class="n">DONE</span><span·class="w"> | 444 | </span><span·class="ss">recv_challenge_ack</span><span·class="w">··································</span><span·class="n">DONE</span><span·class="w"> |
| 445 | </span><span·class="n">ICA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">in_cookie</span><span·class="p"·data-group-id=" | 445 | </span><span·class="n">ICA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">in_cookie</span><span·class="p"·data-group-id="6139000435-16">(</span><span·class="n">B</span><span·class="p"·data-group-id="6139000435-16">)</span><span·class="p">,</span><span·class="w">································</span><span·class="o">-</span><span·class="w">·</span><span·class="nc">else</span><span·class="p">:</span><span·class="w"> |
| 446 | </span><span·class="nc">check</span><span·class="p">:</span><span·class="w">··············································</span><span·class="n">CLOSE</span><span·class="w"> | 446 | </span><span·class="nc">check</span><span·class="p">:</span><span·class="w">··············································</span><span·class="n">CLOSE</span><span·class="w"> |
| 447 | </span><span·class="n">DiB</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="p"·data-group-id=" | 447 | </span><span·class="n">DiB</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="nf">gen_digest</span><span·class="p"·data-group-id="6139000435-17">(</span><span·class="n">ChA</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ICA</span><span·class="p"·data-group-id="6139000435-17">)</span><span·class="o">?</span><span·class="w"> |
| 448 | </span><span·class="p">-</span><span·class="w">·</span><span·class="na">if</span><span·class="w">·</span><span·class="n">OK</span><span·class="p">:</span><span·class="w"> | 448 | </span><span·class="p">-</span><span·class="w">·</span><span·class="na">if</span><span·class="w">·</span><span·class="n">OK</span><span·class="p">:</span><span·class="w"> |
| 449 | ·</span><span·class="n">DONE</span><span·class="w"> | 449 | ·</span><span·class="n">DONE</span><span·class="w"> |
| 450 | </span><span·class="p">-</span><span·class="w">·</span><span·class="na">else</span><span·class="p">:</span><span·class="w"> | 450 | </span><span·class="p">-</span><span·class="w">·</span><span·class="na">else</span><span·class="p">:</span><span·class="w"> |
| 451 | ·</span><span·class="n">CLOSE</span></code></pre><p><a·href=""·id="dflags"></a></p><h3·id="distribution-flags"·class="section-heading"> | 451 | ·</span><span·class="n">CLOSE</span></code></pre><p><a·href=""·id="dflags"></a></p><h3·id="distribution-flags"·class="section-heading"> |
| 452 | ··<a·href="#distribution-flags"·class="hover-link"> | 452 | ··<a·href="#distribution-flags"·class="hover-link"> |
| 453 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 453 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 454 | ··</a> | 454 | ··</a> |
| Offset 762, 15 lines modified | Offset 762, 15 lines modified | ||
| 762 | ······<p·class="built-using"> | 762 | ······<p·class="built-using"> |
| 763 | ········Built·using | 763 | ········Built·using |
| 764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 766 | ······</p> | 766 | ······</p> |
| 767 | <p>Copyright·©·1996-202 | 767 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 768 | ····</footer> | 768 | ····</footer> |
| 769 | ··</div> | 769 | ··</div> |
| 770 | </main> | 770 | </main> |
| 771 | </div> | 771 | </div> |
| 772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 773 | ··<script> | 773 | ··<script> |
| 774 | ··let·initialized·=·false; | 774 | ··let·initialized·=·false; |
| Offset 1773, 15 lines modified | Offset 1773, 15 lines modified | ||
| 1773 | ······<p·class="built-using"> | 1773 | ······<p·class="built-using"> |
| 1774 | ········Built·using | 1774 | ········Built·using |
| 1775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1777 | ······</p> | 1777 | ······</p> |
| 1778 | <p>Copyright·©·1996-202 | 1778 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1779 | ····</footer> | 1779 | ····</footer> |
| 1780 | ··</div> | 1780 | ··</div> |
| 1781 | </main> | 1781 | </main> |
| 1782 | </div> | 1782 | </div> |
| 1783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1784 | ··<script> | 1784 | ··<script> |
| 1785 | ··let·initialized·=·false; | 1785 | ··let·initialized·=·false; |
| Offset 436, 15 lines modified | Offset 436, 15 lines modified | ||
| 436 | ··</a> | 436 | ··</a> |
| 437 | ··<span·class="text">SMALL_BIG_EXT</span> | 437 | ··<span·class="text">SMALL_BIG_EXT</span> |
| 438 | </h2> | 438 | </h2> |
| 439 | <table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">n</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">110</code></td><td·style="text-align:·left;"><code·class="inline">n</code></td><td·style="text-align:·left;"><code·class="inline">Sign</code></td><td·style="text-align:·left;"><code·class="inline">d(0)</code>·...·<code·class="inline">d(n-1)</code></td></tr></tbody></table><p>Bignums·are·stored·in·unary·form·with·a·<code·class="inline">Sign</code>·byte,·that·is,·0·if·the·bignum·is | 439 | <table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">n</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">110</code></td><td·style="text-align:·left;"><code·class="inline">n</code></td><td·style="text-align:·left;"><code·class="inline">Sign</code></td><td·style="text-align:·left;"><code·class="inline">d(0)</code>·...·<code·class="inline">d(n-1)</code></td></tr></tbody></table><p>Bignums·are·stored·in·unary·form·with·a·<code·class="inline">Sign</code>·byte,·that·is,·0·if·the·bignum·is |
| 440 | positive·and·1·if·it·is·negative.·The·digits·are·stored·with·the·least | 440 | positive·and·1·if·it·is·negative.·The·digits·are·stored·with·the·least |
| 441 | significant·byte·stored·first.·To·calculate·the·integer,·the·following·formula | 441 | significant·byte·stored·first.·To·calculate·the·integer,·the·following·formula |
| 442 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">256</span><span·class="w"> | 442 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">256</span><span·class="w"> |
| 443 | </span><span·class="p"·data-group-id=" | 443 | </span><span·class="p"·data-group-id="6561621262-1">(</span><span·class="ss">d0</span><span·class="o">*</span><span·class="n">B</span><span·class="err">^</span><span·class="mi">0</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="ss">d1</span><span·class[·...·truncated·by·diffoscope;·len:·952,·SHA:·17296aa212fcfdddce7368b3e993345d354d3e46b4e15d40773e7b7a15f4dd45·...·]-1">)</span></code></pre><h2·id="large_big_ext"·class="section-heading"> |
| 444 | ··<a·href="#large_big_ext"·class="hover-link"> | 444 | ··<a·href="#large_big_ext"·class="hover-link"> |
| 445 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 445 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 446 | ··</a> | 446 | ··</a> |
| 447 | ··<span·class="text">LARGE_BIG_EXT</span> | 447 | ··<span·class="text">LARGE_BIG_EXT</span> |
| 448 | </h2> | 448 | </h2> |
| 449 | <table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">4</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">n</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">111</code></td><td·style="text-align:·left;"><code·class="inline">n</code></td><td·style="text-align:·left;"><code·class="inline">Sign</code></td><td·style="text-align:·left;"><code·class="inline">d(0)</code>·...·<code·class="inline">d(n-1)</code></td></tr></tbody></table><p>Same·as·<a·href="erl_ext_dist.html#small_big_ext"><code·class="inline">SMALL_BIG_EXT</code></a>·except·that·the·length | 449 | <table><thead><tr><th·style="text-align:·left;">1</th><th·style="text-align:·left;">4</th><th·style="text-align:·left;">1</th><th·style="text-align:·left;">n</th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">111</code></td><td·style="text-align:·left;"><code·class="inline">n</code></td><td·style="text-align:·left;"><code·class="inline">Sign</code></td><td·style="text-align:·left;"><code·class="inline">d(0)</code>·...·<code·class="inline">d(n-1)</code></td></tr></tbody></table><p>Same·as·<a·href="erl_ext_dist.html#small_big_ext"><code·class="inline">SMALL_BIG_EXT</code></a>·except·that·the·length |
| 450 | field·is·an·unsigned·4·byte·integer.</p><h2·id="reference_ext-deprecated"·class="section-heading"> | 450 | field·is·an·unsigned·4·byte·integer.</p><h2·id="reference_ext-deprecated"·class="section-heading"> |
| Offset 621, 15 lines modified | Offset 621, 15 lines modified | ||
| 621 | ······<p·class="built-using"> | 621 | ······<p·class="built-using"> |
| 622 | ········Built·using | 622 | ········Built·using |
| 623 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 623 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 624 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 624 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 625 | ······</p> | 625 | ······</p> |
| 626 | <p>Copyright·©·1996-202 | 626 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 627 | ····</footer> | 627 | ····</footer> |
| 628 | ··</div> | 628 | ··</div> |
| 629 | </main> | 629 | </main> |
| 630 | </div> | 630 | </div> |
| 631 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 631 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 632 | ··<script> | 632 | ··<script> |
| 633 | ··let·initialized·=·false; | 633 | ··let·initialized·=·false; |
| Offset 161, 27 lines modified | Offset 161, 27 lines modified | ||
| 161 | } | 161 | } |
| 162 | static·ErlNifFunc·nif_funcs[]·= | 162 | static·ErlNifFunc·nif_funcs[]·= |
| 163 | { | 163 | { |
| 164 | ····{"hello",·0,·hello} | 164 | ····{"hello",·0,·hello} |
| 165 | }; | 165 | }; |
| 166 | ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)</code></pre><p>The·Erlang·module·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 166 | ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)</code></pre><p>The·Erlang·module·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5690992640-1">(</span><span·class="ss">niftest</span><span·class="p"·data-group-id="5690992640-1">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="w"> | 167 | </span><span·class="w"> |
| 168 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 168 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5690992640-2">(</span><span·class="p"·data-group-id="5690992640-3">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">hello</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·a023e26a544bb99ac705f0006e1ec37e66c6347bd34da3256cee3c4f5a8165b5·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 169 | </span><span·class="w"> | 169 | </span><span·class="w"> |
| 170 | </span><span·class="p">-</span><span·class="na">nifs</span><span·class="p"·data-group-id=" | 170 | </span><span·class="p">-</span><span·class="na">nifs</span><span·class="p"·data-group-id="5690992640-4">(</span><span·class="p"·data-group-id="5690992640-5">[</span><span·class="ss">hello</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="5690992640-5">]</span><span·class="p"·data-group-id="5690992640-4">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="w"> | 171 | </span><span·class="w"> |
| 172 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id=" | 172 | </span><span·class="p">-</span><span·class="na">on_load</span><span·class="p"·data-group-id="5690992640-6">(</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="5690992640-6">)</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5690992640-7">(</span><span·class="p"·data-group-id="5690992640-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id=" | 174 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id="5690992640-8">(</span><span·class="s">"./niftest"</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="5690992640-8">)</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">hello</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nf">hello</span><span·class="p"·data-group-id="5690992640-9">(</span><span·class="p"·data-group-id="5690992640-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id=" | 176 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">nif_error</span><span·class="p"·data-group-id="5690992640-10">(</span><span·class="s">"NIF·library·not·loaded"</span><span·class="p"·data-group-id="5690992640-10">)</span><span·class="p">.</span></code></pre><p>Compile·and·test·can·look·as·follows·(on·Linux):</p><pre><code·class="text">$>·gcc·-fPIC·-shared·-o·niftest.so·niftest.c·-I·$ERL_ROOT/usr/include/ |
| 177 | $>·erl | 177 | $>·erl |
| 178 | 1>·c(niftest). | 178 | 1>·c(niftest). |
| 179 | {ok,niftest} | 179 | {ok,niftest} |
| 180 | 2>·niftest:hello(). | 180 | 2>·niftest:hello(). |
| 181 | "Hello·world!"</code></pre><p>In·the·example·above·the·<a·href="../../../doc/system/code_loading.html#on_load"><em><code·class="inline">on_load</code></em></a> | 181 | "Hello·world!"</code></pre><p>In·the·example·above·the·<a·href="../../../doc/system/code_loading.html#on_load"><em><code·class="inline">on_load</code></em></a> |
| 182 | directive·is·used·get·function·<code·class="inline">init</code>·called·automatically·when·the·module·is | 182 | directive·is·used·get·function·<code·class="inline">init</code>·called·automatically·when·the·module·is |
| Offset 2873, 15 lines modified | Offset 2873, 15 lines modified | ||
| 2873 | ······<p·class="built-using"> | 2873 | ······<p·class="built-using"> |
| 2874 | ········Built·using | 2874 | ········Built·using |
| 2875 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2875 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2876 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2876 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2877 | ······</p> | 2877 | ······</p> |
| 2878 | <p>Copyright·©·1996-202 | 2878 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2879 | ····</footer> | 2879 | ····</footer> |
| 2880 | ··</div> | 2880 | ··</div> |
| 2881 | </main> | 2881 | </main> |
| 2882 | </div> | 2882 | </div> |
| 2883 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2883 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2884 | ··<script> | 2884 | ··<script> |
| 2885 | ··let·initialized·=·false; | 2885 | ··let·initialized·=·false; |
| Offset 398, 15 lines modified | Offset 398, 15 lines modified | ||
| 398 | ························when·Filename·::·<a·href="erlang.html#t:string/0">string</a>(),·FileInfo·::·<a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#t:file_info/0">file:file_info</a>().</pre> | 398 | ························when·Filename·::·<a·href="erlang.html#t:string/0">string</a>(),·FileInfo·::·<a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#t:file_info/0">file:file_info</a>().</pre> |
| 399 | ······</div> | 399 | ······</div> |
| 400 | <p>Retrieves·information·about·a·file.</p><p>Returns·<code·class="inline">{ok,·FileInfo}</code>·if·successful,·otherwise·<code·class="inline">error</code>.·<code·class="inline">FileInfo</code>·is·a | 400 | <p>Retrieves·information·about·a·file.</p><p>Returns·<code·class="inline">{ok,·FileInfo}</code>·if·successful,·otherwise·<code·class="inline">error</code>.·<code·class="inline">FileInfo</code>·is·a |
| 401 | record·<a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#t:file_info/0"><code·class="inline">file_info</code></a>,·defined·in·the·Kernel·include·file | 401 | record·<a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#t:file_info/0"><code·class="inline">file_info</code></a>,·defined·in·the·Kernel·include·file |
| 402 | ·<code·class="inline">file.hrl</code>.·Include·the·following·directive·in·the·module·from·which·the | 402 | ·<code·class="inline">file.hrl</code>.·Include·the·following·directive·in·the·module·from·which·the |
| 403 | function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 403 | function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="3322466721-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="3322466721-1">)</span><span·class="p">.</span></code></pre><p>For·more·information·about·the·record·see·<a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#read_file_info/2"><code·class="inline">file:read_file_info/2</code></a>.</p><p><code·class="inline">Filename</code>·can·also·be·a·file·in·an·archive,·for·example, |
| 404 | <code·class="inline">$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin/mnesia</code>.·For·information | 404 | <code·class="inline">$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin/mnesia</code>.·For·information |
| 405 | about·archive·files,·see·<a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html"><code·class="inline">code</code></a>.</p> | 405 | about·archive·files,·see·<a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html"><code·class="inline">code</code></a>.</p> |
| 406 | ··</section> | 406 | ··</section> |
| 407 | </section> | 407 | </section> |
| 408 | <section·class="detail"·id="read_link_info/1"> | 408 | <section·class="detail"·id="read_link_info/1"> |
| 409 | ··<div·class="detail-header"> | 409 | ··<div·class="detail-header"> |
| Offset 486, 15 lines modified | Offset 486, 15 lines modified | ||
| 486 | ······<p·class="built-using"> | 486 | ······<p·class="built-using"> |
| 487 | ········Built·using | 487 | ········Built·using |
| 488 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 488 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 489 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 489 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 490 | ······</p> | 490 | ······</p> |
| 491 | <p>Copyright·©·1996-202 | 491 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 492 | ····</footer> | 492 | ····</footer> |
| 493 | ··</div> | 493 | ··</div> |
| 494 | </main> | 494 | </main> |
| 495 | </div> | 495 | </div> |
| 496 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 496 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 497 | ··<script> | 497 | ··<script> |
| 498 | ··let·initialized·=·false; | 498 | ··let·initialized·=·false; |
| Offset 145, 44 lines modified | Offset 145, 44 lines modified | ||
| 145 | ··<span·class="text">Erl·Tracer·Module·Example</span> | 145 | ··<span·class="text">Erl·Tracer·Module·Example</span> |
| 146 | </h2> | 146 | </h2> |
| 147 | <p>In·this·example,·a·tracer·module·with·a·NIF·back·end·sends·a·message·for·each | 147 | <p>In·this·example,·a·tracer·module·with·a·NIF·back·end·sends·a·message·for·each |
| 148 | <code·class="inline">send</code>·trace·tag·containing·only·the·sender·and·receiver.·Using·this·tracer | 148 | <code·class="inline">send</code>·trace·tag·containing·only·the·sender·and·receiver.·Using·this·tracer |
| 149 | module,·a·much·more·lightweight·message·tracer·is·used,·which·only·records·who | 149 | module,·a·much·more·lightweight·message·tracer·is·used,·which·only·records·who |
| 150 | sent·messages·to·who.</p><p>The·following·is·an·example·session·using·it·on·Linux:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">gcc</span><span·class="w">·</span><span·class="o">-</span><span·class="n">I</span><span·class="w">·</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">8.0</span><span·class="o">/</span><span·class="ss">include</span><span·class="o">/</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">fPIC</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">shared</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">o</span><span·class="w">·</span><span·class="ss">erl_msg_tracer</span><span·class="p">.</span><span·class="ss">so</span><span·class="w">·</span><span·class="ss">erl_msg_tracer</span><span·class="p">.</span><span·class="ss">c</span><span·class="w"> | 150 | sent·messages·to·who.</p><p>The·following·is·an·example·session·using·it·on·Linux:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">gcc</span><span·class="w">·</span><span·class="o">-</span><span·class="n">I</span><span·class="w">·</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">8.0</span><span·class="o">/</span><span·class="ss">include</span><span·class="o">/</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">fPIC</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">shared</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">o</span><span·class="w">·</span><span·class="ss">erl_msg_tracer</span><span·class="p">.</span><span·class="ss">so</span><span·class="w">·</span><span·class="ss">erl_msg_tracer</span><span·class="p">.</span><span·class="ss">c</span><span·class="w"> |
| 151 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> | 151 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w"> |
| 152 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">19</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 152 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">19</span><span·class="w">·</span><span·class="p"·data-group-id="3735355026-1">[</span><span·class="n">DEVELOPMENT</span><span·class="p"·data-group-id="3735355026-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="3735355026-2">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">8[·...·truncated·by·diffoscope;·len:·1414,·SHA:·4067d700fed281a93f2e425da41d5857adc71fcece5c1c15f22376afcf7eea41·...·]-8">]</span><span·class="w"> |
| 153 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V8</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id="7 | 153 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V8</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id="3735355026-9">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="3735355026-9">)</span><span·class="gp·unselectable"> |
| 154 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="7 | 154 | 1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="3735355026-10">(</span><span·class="ss">erl_msg_tracer</span><span·class="p"·data-group-id="3735355026-10">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">erl_msg_tracer</span><span·class="p">:</span><span·class="nf">load</span><sp[·...·truncated·by·diffoscope;·len:·92,·SHA:·bc4c71ea1be0594fa846700ad2e98b544f73ef49acd8c440f3b6f539d63ae379·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 155 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 156 | 2>·</span><span·class="n">Tracer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="7 | 156 | 2>·</span><span·class="n">Tracer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="3735355026-12">(</span><span·class="k">fun</span><span·class="w">·</span><span·class="n">F</span><span·class="p"·data-group-id="3735355026-13">(</span><span·class="p"·data-group-id="3735355026-13">)</span><span·class="w">·</span><span·class="p">-></span[·...·truncated·by·diffoscope;·len:·954,·SHA:·ea1052571157f573145a95118d88a2dc105ae1f952dcd6d7a6a50a01fd728a2f·...·]-12">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="o"><</span><span·class="mf">0.37</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 157 | </span><span·class="o"><</span><span·class="mf">0.37</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 158 | 3>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id="7 | 158 | 3>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id="3735355026-17">(</span><span·class="ss">new</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3735355026-18">[</span><span·class="nb">send</span>[·...·truncated·by·diffoscope;·len:·420,·SHA:·6bf6605e4a3f02024b9c6e4ca5dfa22cce54574611b8b97a5d23adb6d1f57b77·...·]-17">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="mi">0</span><span·class="w"> | 159 | </span><span·class="mi">0</span><span·class="w"> |
| 160 | </span><span·class="p"·data-group-id="7 | 160 | </span><span·class="p"·data-group-id="3735355026-20">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.39</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</spa[·...·truncated·by·diffoscope;·len:·147,·SHA:·ab3f2f46ff5645a24cf88ae89cecb9a8897fc9027258b3fceb2e77a2e75a2171·...·]-20">}</span><span·class="gp·unselectable"> |
| 161 | 4>·</span><span·class="p"·data-group-id="7 | 161 | 4>·</span><span·class="p"·data-group-id="3735355026-21">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D</span><span·class="p"·data-group-id="3735355026-21">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·375,·SHA:·62aa1a0beeb77b3b6582e1581d6f3f8ab1d16aa74f64e83e38965633d6bb7c2b·...·]-22">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p"·data-group-id="7 | 162 | </span><span·class="p"·data-group-id="3735355026-24">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Port</span><span·class="o"><</span><span·class="mf">0.486</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</[·...·truncated·by·diffoscope;·len:·150,·SHA:·0ca72fd199f10542f96ace57b3bc020a2e56b0364bbd3bc9e04ddaf095661496·...·]-24">}</span><span·class="w"> |
| 163 | </span><span·class="p"·data-group-id="7 | 163 | </span><span·class="p"·data-group-id="3735355026-25">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.40</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</spa[·...·truncated·by·diffoscope;·len:·147,·SHA:·ca7e4420394631ae4f1b004b6ac16bb5ec8fddcdc46ca9c582cf7b3818d8c8f2·...·]-25">}</span><span·class="w"> |
| 164 | </span><span·class="p"·data-group-id="7 | 164 | </span><span·class="p"·data-group-id="3735355026-26">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Port</span><span·class="o"><</span><span·class="mf">0.487</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</[·...·truncated·by·diffoscope;·len:·149,·SHA:·19e3dedae47811c05cdeeff6e92e16642733a3a942831a96e2e47dbd6c3b676a·...·]-26">}</span><span·class="w"> |
| 165 | </span><span·class="p"·data-group-id="7 | 165 | </span><span·class="p"·data-group-id="3735355026-27">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Port</span><span·class="o"><</span><span·class="mf">0.488</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</[·...·truncated·by·diffoscope;·len:·149,·SHA:·19e3dedae47811c05cdeeff6e92e16642733a3a942831a96e2e47dbd6c3b676a·...·]-27">}</span><span·class="w"> |
| 166 | </span><span·class="p"·data-group-id="7 | 166 | </span><span·class="p"·data-group-id="3735355026-28">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Port</span><span·class="o"><</span><span·class="mf">0.489</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</[·...·truncated·by·diffoscope;·len:·149,·SHA:·19e3dedae47811c05cdeeff6e92e16642733a3a942831a96e2e47dbd6c3b676a·...·]-28">}</span><span·class="w"> |
| 167 | </span><span·class="p"·data-group-id="7 | 167 | </span><span·class="p"·data-group-id="3735355026-29">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Port</span><span·class="o"><</span><span·class="mf">0.490</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</[·...·truncated·by·diffoscope;·len:·149,·SHA:·19e3dedae47811c05cdeeff6e92e16642733a3a942831a96e2e47dbd6c3b676a·...·]-29">}</span><span·class="w"> |
| 168 | </span><span·class="p"·data-group-id="7 | 168 | </span><span·class="p"·data-group-id="3735355026-30">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.40</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="3735355026-30">}</span><span·class="w"> |
| 169 | </span><span·class="p"·data-group-id="7 | 169 | </span><span·class="p"·data-group-id="3735355026-31">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.41</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</spa[·...·truncated·by·diffoscope;·len:·147,·SHA:·ab3f2f46ff5645a24cf88ae89cecb9a8897fc9027258b3fceb2e77a2e75a2171·...·]-31">}</span><span·class="w"> |
| 170 | </span><span·class="mi">5</span><span·class="o">></span></code></pre><p><code·class="inline">erl_msg_tracer.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 170 | </span><span·class="mi">5</span><span·class="o">></span></code></pre><p><code·class="inline">erl_msg_tracer.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9973097818-1">(</span><span·class="ss">erl_msg_tracer</span><span·class="p"·data-group-id="9973097818-1">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="w"> | 171 | </span><span·class="w"> |
| 172 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 172 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9973097818-2">(</span><span·class="p"·data-group-id="9973097818-3">[</span><span·class="ss">enabled</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="nb">trace</span><span·class="p">/</span>[·...·truncated·by·diffoscope;·len:·244,·SHA:·7fce5cad8f3fac7b51cfcf911f128ea88a508edbb7e325d1f3339a3a00639938·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">load</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nf">load</span><span·class="p"·data-group-id="9973097818-4">(</span><span·class="p"·data-group-id="9973097818-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id=" | 174 | ····</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">load_nif</span><span·class="p"·data-group-id="9973097818-5">(</span><span·class="s">"erl_msg_tracer"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9973097818-6">[</span><span·class="p"·data-group-id="9973097818-6">]</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·d134eebb3c26ae19d030c50b0575fb1fff694de27db72a67a4f207aedf0d35ad·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">enabled</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nf">enabled</span><span·class="p"·data-group-id="9973097818-7">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="9973097818-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ····</span><span·class="ss">error</span><span·class="p">.</span><span·class="w"> | 176 | ····</span><span·class="ss">error</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="nf">trace</span><span·class="p"·data-group-id=" | 177 | </span><span·class="nf">trace</span><span·class="p"·data-group-id="9973097818-8">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_<[·...·truncated·by·diffoscope;·len:·119,·SHA:·a5b981ffda6f206e1bfffc89b2e917971f43de0bdee170c5a9fbe99244f5ed8d·...·]-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 178 | ····</span><span·class="ss">error</span><span·class="p">.</span></code></pre><p><code·class="inline">erl_msg_tracer.c</code>:</p><pre><code·class="c">#include·<erl_nif.h> | 178 | ····</span><span·class="ss">error</span><span·class="p">.</span></code></pre><p><code·class="inline">erl_msg_tracer.c</code>:</p><pre><code·class="c">#include·<erl_nif.h> |
| 179 | /*·NIF·interface·declarations·*/ | 179 | /*·NIF·interface·declarations·*/ |
| 180 | static·int·load(ErlNifEnv*·env,·void**·priv_data,·ERL_NIF_TERM·load_info); | 180 | static·int·load(ErlNifEnv*·env,·void**·priv_data,·ERL_NIF_TERM·load_info); |
| 181 | static·int·upgrade(ErlNifEnv*·env,·void**·priv_data,·void**·old_priv_data,·ERL_NIF_TERM·load_info); | 181 | static·int·upgrade(ErlNifEnv*·env,·void**·priv_data,·void**·old_priv_data,·ERL_NIF_TERM·load_info); |
| 182 | static·void·unload(ErlNifEnv*·env,·void*·priv_data); | 182 | static·void·unload(ErlNifEnv*·env,·void*·priv_data); |
| Offset 1657, 15 lines modified | Offset 1657, 15 lines modified | ||
| 1657 | ······<p·class="built-using"> | 1657 | ······<p·class="built-using"> |
| 1658 | ········Built·using | 1658 | ········Built·using |
| 1659 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1659 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1660 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1660 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1661 | ······</p> | 1661 | ······</p> |
| 1662 | <p>Copyright·©·1996-202 | 1662 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1663 | ····</footer> | 1663 | ····</footer> |
| 1664 | ··</div> | 1664 | ··</div> |
| 1665 | </main> | 1665 | </main> |
| 1666 | </div> | 1666 | </div> |
| 1667 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1667 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1668 | ··<script> | 1668 | ··<script> |
| 1669 | ··let·initialized·=·false; | 1669 | ··let·initialized·=·false; |
| Offset 295, 15 lines modified | Offset 295, 15 lines modified | ||
| 295 | ······<p·class="built-using"> | 295 | ······<p·class="built-using"> |
| 296 | ········Built·using | 296 | ········Built·using |
| 297 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 297 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 298 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 298 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 299 | ······</p> | 299 | ······</p> |
| 300 | <p>Copyright·©·1996-202 | 300 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 301 | ····</footer> | 301 | ····</footer> |
| 302 | ··</div> | 302 | ··</div> |
| 303 | </main> | 303 | </main> |
| 304 | </div> | 304 | </div> |
| 305 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 305 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 306 | ··<script> | 306 | ··<script> |
| 307 | ··let·initialized·=·false; | 307 | ··let·initialized·=·false; |
| Offset 401, 15 lines modified | Offset 401, 15 lines modified | ||
| 401 | ······<p·class="built-using"> | 401 | ······<p·class="built-using"> |
| 402 | ········Built·using | 402 | ········Built·using |
| 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 405 | ······</p> | 405 | ······</p> |
| 406 | <p>Copyright·©·1996-202 | 406 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 407 | ····</footer> | 407 | ····</footer> |
| 408 | ··</div> | 408 | ··</div> |
| 409 | </main> | 409 | </main> |
| 410 | </div> | 410 | </div> |
| 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 412 | ··<script> | 412 | ··<script> |
| 413 | ··let·initialized·=·false; | 413 | ··let·initialized·=·false; |
| Offset 534, 15 lines modified | Offset 534, 15 lines modified | ||
| 534 | ······<p·class="built-using"> | 534 | ······<p·class="built-using"> |
| 535 | ········Built·using | 535 | ········Built·using |
| 536 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 536 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 537 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 537 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 538 | ······</p> | 538 | ······</p> |
| 539 | <p>Copyright·©·1996-202 | 539 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 540 | ····</footer> | 540 | ····</footer> |
| 541 | ··</div> | 541 | ··</div> |
| 542 | </main> | 542 | </main> |
| 543 | </div> | 543 | </div> |
| 544 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 544 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 545 | ··<script> | 545 | ··<script> |
| 546 | ··let·initialized·=·false; | 546 | ··let·initialized·=·false; |
| Offset 127, 57 lines modified | Offset 127, 57 lines modified | ||
| 127 | <p>Run·a·script·written·in·Erlang.</p><h2·id="synopsis"·class="section-heading"> | 127 | <p>Run·a·script·written·in·Erlang.</p><h2·id="synopsis"·class="section-heading"> |
| 128 | ··<a·href="#synopsis"·class="hover-link"> | 128 | ··<a·href="#synopsis"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">Synopsis</span> | 131 | ··<span·class="text">Synopsis</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">script</span><span·class="o">-</span><span·class="ss">name</span><span·class="w">·</span><span·class="p"·data-group-id=" | 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">script</span><span·class="o">-</span><span·class="ss">name</span><span·class="w">·</span><span·class="p"·data-group-id="1514529182-1">[</span><span·class="ss">arg1</span><span·class="w">·</span><span·class="ss">arg2</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="1514529182-1">]</span></code></pre><h2·id="description"·class="section-heading"> |
| 134 | ··<a·href="#description"·class="hover-link"> | 134 | ··<a·href="#description"·class="hover-link"> |
| 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 136 | ··</a> | 136 | ··</a> |
| 137 | ··<span·class="text">Description</span> | 137 | ··<span·class="text">Description</span> |
| 138 | </h2> | 138 | </h2> |
| 139 | <p><code·class="inline">escript</code>·provides·support·for·running·short·Erlang·programs·without·having·to | 139 | <p><code·class="inline">escript</code>·provides·support·for·running·short·Erlang·programs·without·having·to |
| 140 | compile·them·first,·and·an·easy·way·to·retrieve·the·command-line·arguments. | 140 | compile·them·first,·and·an·easy·way·to·retrieve·the·command-line·arguments. |
| 141 | <code·class="inline">escript</code>s·are·created·by·either·writing·them·by·hand·or·using·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/escript.html#create/2"><code·class="inline">escript:create/2</code></a>.</p><p>escripts·are·run·by·directly·invoking·them·(does·not·work·on·Windows):</p><pre><code·class="text">script-name·[arg1·arg2...]</code></pre><p>or·by·calling·the·<code·class="inline">escript</code>·program·(works·on·all·platforms):</p><pre><code·class="text">escript·[escript-flags]·script-name.escript·[arg1·arg2...]</code></pre><p>For·example:</p><pre><code·class="text">$·chmod·u+x·factorial | 141 | <code·class="inline">escript</code>s·are·created·by·either·writing·them·by·hand·or·using·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/escript.html#create/2"><code·class="inline">escript:create/2</code></a>.</p><p>escripts·are·run·by·directly·invoking·them·(does·not·work·on·Windows):</p><pre><code·class="text">script-name·[arg1·arg2...]</code></pre><p>or·by·calling·the·<code·class="inline">escript</code>·program·(works·on·all·platforms):</p><pre><code·class="text">escript·[escript-flags]·script-name.escript·[arg1·arg2...]</code></pre><p>For·example:</p><pre><code·class="text">$·chmod·u+x·factorial |
| 142 | $·cat·factorial</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="ch">#!/usr/bin/env·escript | 142 | $·cat·factorial</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="ch">#!/usr/bin/env·escript |
| 143 | </span><span·class="c1">%%·-*-·erlang·-*-</span><span·class="w"> | 143 | </span><span·class="c1">%%·-*-·erlang·-*-</span><span·class="w"> |
| 144 | </span><span·class="c1">%%!·-sname·factorial·-mnesia·debug·verbose</span><span·class="w"> | 144 | </span><span·class="c1">%%!·-sname·factorial·-mnesia·debug·verbose</span><span·class="w"> |
| 145 | </span><span·class="nf">main</span><span·class="p"·data-group-id=" | 145 | </span><span·class="nf">main</span><span·class="p"·data-group-id="2649331544-1">(</span><span·class="p"·data-group-id="2649331544-2">[</span><span·class="n">String</span><span·class="p"·data-group-id="2649331544-2">]</span><span·class="p"·data-group-id="2649331544-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 146 | ····</span><span·class="k">try</span><span·class="w"> | 146 | ····</span><span·class="k">try</span><span·class="w"> |
| 147 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list_to_integer</span><span·class="p"·data-group-id=" | 147 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list_to_integer</span><span·class="p"·data-group-id="2649331544-3">(</span><span·class="n">String</span><span·class="p"·data-group-id="2649331544-3">)</span><span·class="p">,</span><span·class="w"> |
| 148 | ········</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id=" | 148 | ········</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id="2649331544-4">(</span><span·class="n">N</span><span·class="p"·data-group-id="2649331544-4">)</span><span·class="p">,</span><span·class="w"> |
| 149 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 149 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2649331544-5">(</span><span·class="s">"factorial·</span><span·class="si">~w</span><span·class="s">·=·</span><span·class="si">~w</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2649331[·...·truncated·by·diffoscope;·len:·181,·SHA:·f4932d9d862b01ec599f62f0b5f29cd3d73cd562d8ed56dc209d0755d0fdb1de·...·]-5">)</span><span·class="w"> |
| 150 | ····</span><span·class="k">catch</span><span·class="w"> | 150 | ····</span><span·class="k">catch</span><span·class="w"> |
| 151 | ········</span><span·class="p">_</span><span·class="p">:</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 151 | ········</span><span·class="p">_</span><span·class="p">:</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 152 | ············</span><span·class="nf">usage</span><span·class="p"·data-group-id=" | 152 | ············</span><span·class="nf">usage</span><span·class="p"·data-group-id="2649331544-7">(</span><span·class="p"·data-group-id="2649331544-7">)</span><span·class="w"> |
| 153 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 153 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 154 | </span><span·class="nf">main</span><span·class="p"·data-group-id=" | 154 | </span><span·class="nf">main</span><span·class="p"·data-group-id="2649331544-8">(</span><span·class="p">_</span><span·class="p"·data-group-id="2649331544-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 155 | ····</span><span·class="nf">usage</span><span·class="p"·data-group-id=" | 155 | ····</span><span·class="nf">usage</span><span·class="p"·data-group-id="2649331544-9">(</span><span·class="p"·data-group-id="2649331544-9">)</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="nf">usage</span><span·class="p"·data-group-id=" | 156 | </span><span·class="nf">usage</span><span·class="p"·data-group-id="2649331544-10">(</span><span·class="p"·data-group-id="2649331544-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2649331544-11">(</span><span·class="s">"usage:·factorial·integer\n"</span><span·class="p"·data-group-id="2649331544-11">)</span><span·class="p">,</span><span·class="w"> |
| 158 | ····</span><span·class="nf">halt</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="nf">halt</span><span·class="p"·data-group-id="2649331544-12">(</span><span·class="mi">1</span><span·class="p"·data-group-id="2649331544-12">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="nf">fac</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">fac</span><span·class="p"·data-group-id="2649331544-13">(</span><span·class="mi">0</span><span·class="p"·data-group-id="2649331544-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 160 | </span><span·class="nf">fac</span><span·class="p"·data-group-id=" | 160 | </span><span·class="nf">fac</span><span·class="p"·data-group-id="2649331544-14">(</span><span·class="n">N</span><span·class="p"·data-group-id="2649331544-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">*</span><span·c[·...·truncated·by·diffoscope;·len:·212,·SHA:·4c83334f85a7c39317f6f65c9750e9a6d1fe7917dc75d1a768756f549aa2fd05·...·]-15">)</span><span·class="p">.</span></code></pre><pre><code·class="text">$·./factorial·5 |
| 161 | factorial·5·=·120 | 161 | factorial·5·=·120 |
| 162 | $·./factorial | 162 | $·./factorial |
| 163 | usage:·factorial·integer | 163 | usage:·factorial·integer |
| 164 | $·./factorial·five | 164 | $·./factorial·five |
| 165 | usage:·factorial·integer</code></pre><p>The·header·of·the·Erlang·script·in·the·example·differs·from·a·normal·Erlang | 165 | usage:·factorial·integer</code></pre><p>The·header·of·the·Erlang·script·in·the·example·differs·from·a·normal·Erlang |
| 166 | module.·The·first·line·is·intended·to·be·the·interpreter·line,·which·invokes | 166 | module.·The·first·line·is·intended·to·be·the·interpreter·line,·which·invokes |
| 167 | <code·class="inline">escript</code>.</p><p>However,·if·you·invoke·the·<code·class="inline">escript</code>·as·follows,·the·contents·of·the·first·line | 167 | <code·class="inline">escript</code>.</p><p>However,·if·you·invoke·the·<code·class="inline">escript</code>·as·follows,·the·contents·of·the·first·line |
| 168 | do·not·matter,·but·it·cannot·contain·Erlang·code·as·it·will·be·ignored:</p><pre><code·class="text">$·escript·factorial·5</code></pre><p>The·second·line·in·the·example·contains·an·optional·directive·to·the·<code·class="inline">Emacs</code> | 168 | do·not·matter,·but·it·cannot·contain·Erlang·code·as·it·will·be·ignored:</p><pre><code·class="text">$·escript·factorial·5</code></pre><p>The·second·line·in·the·example·contains·an·optional·directive·to·the·<code·class="inline">Emacs</code> |
| 169 | editor,·which·causes·it·to·enter·the·major·mode·for·editing·Erlang·source·files. | 169 | editor,·which·causes·it·to·enter·the·major·mode·for·editing·Erlang·source·files. |
| 170 | If·the·directive·is·present,·it·must·be·located·on·the·second·line.</p><p>If·a·comment·selecting·the·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/epp.html#encoding">encoding</a>·exists,·it·can·be | 170 | If·the·directive·is·present,·it·must·be·located·on·the·second·line.</p><p>If·a·comment·selecting·the·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/epp.html#encoding">encoding</a>·exists,·it·can·be |
| 171 | located·on·the·second·line.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·encoding·specified·by·the·above·mentioned·comment·applies·to·the·script | 171 | located·on·the·second·line.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·encoding·specified·by·the·above·mentioned·comment·applies·to·the·script |
| 172 | itself.·The·encoding·of·the·I/O-server,·however,·must·be·set·explicitly·as | 172 | itself.·The·encoding·of·the·I/O-server,·however,·must·be·set·explicitly·as |
| 173 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">setopts</span><span·class="p"·data-group-id=" | 173 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">setopts</span><span·class="p"·data-group-id="7771789675-1">(</span><span·class="p"·data-group-id="7771789675-2">[</span><span·class="p"·data-group-id="7771789675-3">{</span><span·class="ss">encoding</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·129,·SHA:·f59254a3a4f819f753dba506429870869fe1c4fd945b7107f6356a76a529b0d7·...·]-1">)</span></code></pre><p>The·default·encoding·of·the·I/O-server·for |
| 174 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>·is·<code·class="inline">unicode</code>·if·its·supported.·(see | 174 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>·is·<code·class="inline">unicode</code>·if·its·supported.·(see |
| 175 | section | 175 | section |
| 176 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/unicode_usage.html#unicode_options_summary">Summary·of·Options</a>)·in | 176 | <a·href="../../../lib/stdlib-6.2.2.1/doc/html/unicode_usage.html#unicode_options_summary">Summary·of·Options</a>)·in |
| 177 | the·STDLIB·User's·Guide.</p></section><p>On·the·third·line·(or·second·line·depending·on·the·presence·of·the·Emacs | 177 | the·STDLIB·User's·Guide.</p></section><p>On·the·third·line·(or·second·line·depending·on·the·presence·of·the·Emacs |
| 178 | directive),·arguments·can·be·specified·to·the·emulator,·for·example:</p><pre><code·class="text">%%!·-sname·factorial·-mnesia·debug·verbose</code></pre><p>Such·an·argument·line·must·start·with·<code·class="inline">%%!</code>·and·the·remaining·line·is | 178 | directive),·arguments·can·be·specified·to·the·emulator,·for·example:</p><pre><code·class="text">%%!·-sname·factorial·-mnesia·debug·verbose</code></pre><p>Such·an·argument·line·must·start·with·<code·class="inline">%%!</code>·and·the·remaining·line·is |
| 179 | interpreted·as·arguments·to·the·emulator.</p><p>If·you·know·the·location·of·the·<code·class="inline">escript</code>·executable,·the·first·line·can | 179 | interpreted·as·arguments·to·the·emulator.</p><p>If·you·know·the·location·of·the·<code·class="inline">escript</code>·executable,·the·first·line·can |
| 180 | directly·give·the·path·to·<code·class="inline">escript</code>,·for·example:</p><pre><code·class="text">#!/usr/local/bin/escript</code></pre><p>As·any·other·type·of·scripts,·Erlang·scripts·do·not·work·on·Unix·platforms·if | 180 | directly·give·the·path·to·<code·class="inline">escript</code>,·for·example:</p><pre><code·class="text">#!/usr/local/bin/escript</code></pre><p>As·any·other·type·of·scripts,·Erlang·scripts·do·not·work·on·Unix·platforms·if |
| Offset 188, 23 lines modified | Offset 188, 23 lines modified | ||
| 188 | arguments·specified·to·the·script·(not·changed·or·interpreted·in·any·way).</p><p>If·the·<code·class="inline">main/1</code>·function·in·the·script·returns·successfully,·the·exit·status·for | 188 | arguments·specified·to·the·script·(not·changed·or·interpreted·in·any·way).</p><p>If·the·<code·class="inline">main/1</code>·function·in·the·script·returns·successfully,·the·exit·status·for |
| 189 | the·script·is·<code·class="inline">0</code>.·If·an·exception·is·generated·during·execution,·a·short | 189 | the·script·is·<code·class="inline">0</code>.·If·an·exception·is·generated·during·execution,·a·short |
| 190 | message·is·printed·and·the·script·terminates·with·exit·status·<code·class="inline">127</code>.</p><p>To·return·your·own·non-zero·exit·code,·call·<a·href="erlang.html#halt/1"><code·class="inline">halt(ExitCode)</code></a>,·for | 190 | message·is·printed·and·the·script·terminates·with·exit·status·<code·class="inline">127</code>.</p><p>To·return·your·own·non-zero·exit·code,·call·<a·href="erlang.html#halt/1"><code·class="inline">halt(ExitCode)</code></a>,·for |
| 191 | example:</p><pre><code·class="text">halt(1).</code></pre><p>To·retrieve·the·pathname·of·the·script,·call·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/escript.html#script_name/0"><code·class="inline">escript:script_name/0</code></a>·from·your | 191 | example:</p><pre><code·class="text">halt(1).</code></pre><p>To·retrieve·the·pathname·of·the·script,·call·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/escript.html#script_name/0"><code·class="inline">escript:script_name/0</code></a>·from·your |
| 192 | script·(the·pathname·is·usually,·but·not·always,·absolute).</p><p>If·the·file·contains·source·code·(as·in·the·example·above),·it·is·processed·by | 192 | script·(the·pathname·is·usually,·but·not·always,·absolute).</p><p>If·the·file·contains·source·code·(as·in·the·example·above),·it·is·processed·by |
| 193 | the·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/epp.html"><code·class="inline">epp</code></a>·preprocessor.·This·means·that·you,·for·example,·can·use·predefined | 193 | the·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/epp.html"><code·class="inline">epp</code></a>·preprocessor.·This·means·that·you,·for·example,·can·use·predefined |
| 194 | macros·(such·as·<code·class="inline">?MODULE</code>)·and·include·directives·like·the·<code·class="inline">-include_lib</code> | 194 | macros·(such·as·<code·class="inline">?MODULE</code>)·and·include·directives·like·the·<code·class="inline">-include_lib</code> |
| 195 | directive.·For·example,·use</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 195 | directive.·For·example,·use</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="4115578018-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="4115578018-1">)</span><span·class="p">.</span></code></pre><p>to·include·the·record·definitions·for·the·records·used·by·function |
| 196 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#read_link_info/1"><code·class="inline">file:read_link_info/1</code></a>.·You·can·also·select·encoding·by·including·an·encoding | 196 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/file.html#read_link_info/1"><code·class="inline">file:read_link_info/1</code></a>.·You·can·also·select·encoding·by·including·an·encoding |
| 197 | comment·here,·but·if·a·valid·encoding·comment·exists·on·the·second·line,·it | 197 | comment·here,·but·if·a·valid·encoding·comment·exists·on·the·second·line,·it |
| 198 | takes·precedence.</p><p>The·script·is·checked·for·syntactic·and·semantic·correctness·before·it·is·run. | 198 | takes·precedence.</p><p>The·script·is·checked·for·syntactic·and·semantic·correctness·before·it·is·run. |
| 199 | If·there·are·warnings·(such·as·unused·variables),·they·are·printed·and·the | 199 | If·there·are·warnings·(such·as·unused·variables),·they·are·printed·and·the |
| 200 | script·will·still·be·run.·If·there·are·errors,·they·are·printed·and·the·script | 200 | script·will·still·be·run.·If·there·are·errors,·they·are·printed·and·the·script |
| 201 | will·not·be·run·and·its·exit·status·is·<code·class="inline">127</code>.</p><p>Both·the·module·declaration·and·the·export·declaration·of·the·<code·class="inline">main/1</code>·function | 201 | will·not·be·run·and·its·exit·status·is·<code·class="inline">127</code>.</p><p>Both·the·module·declaration·and·the·export·declaration·of·the·<code·class="inline">main/1</code>·function |
| 202 | are·optional.</p><p>By·default,·the·script·will·be·compiled·by·the·Erlang·compiler.</p><p>It·is·possible·to·force·it·to·be·interpreted·by·including·the·following·line | 202 | are·optional.</p><p>By·default,·the·script·will·be·compiled·by·the·Erlang·compiler.</p><p>It·is·possible·to·force·it·to·be·interpreted·by·including·the·following·line |
| 203 | somewhere·in·the·script·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">mode</span><span·class="p"·data-group-id=" | 203 | somewhere·in·the·script·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">mode</span><span·class="p"·data-group-id="9292108557-1">(</span><span·class="ss">interpret</span><span·class="p"·data-group-id="9292108557-1">)</span><span·class="p">.</span></code></pre><p>Execution·of·interpreted·code·is·slower·than·compiled·code,·and·some·language |
| 204 | constructs·will·not·work,·but·there·is·no·requirement·for·the·Erlang·compiler | 204 | constructs·will·not·work,·but·there·is·no·requirement·for·the·Erlang·compiler |
| 205 | application·to·be·available.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·27·the·script·would·be·interpreted·by·default.</p></section><h2·id="precompiled-escripts"·class="section-heading"> | 205 | application·to·be·available.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>Before·Erlang/OTP·27·the·script·would·be·interpreted·by·default.</p></section><h2·id="precompiled-escripts"·class="section-heading"> |
| 206 | ··<a·href="#precompiled-escripts"·class="hover-link"> | 206 | ··<a·href="#precompiled-escripts"·class="hover-link"> |
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Precompiled·escripts</span> | 209 | ··<span·class="text">Precompiled·escripts</span> |
| 210 | </h2> | 210 | </h2> |
| Offset 309, 15 lines modified | Offset 309, 15 lines modified | ||
| 309 | ······<p·class="built-using"> | 309 | ······<p·class="built-using"> |
| 310 | ········Built·using | 310 | ········Built·using |
| 311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 313 | ······</p> | 313 | ······</p> |
| 314 | <p>Copyright·©·1996-202 | 314 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 315 | ····</footer> | 315 | ····</footer> |
| 316 | ··</div> | 316 | ··</div> |
| 317 | </main> | 317 | </main> |
| 318 | </div> | 318 | </div> |
| 319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 320 | ··<script> | 320 | ··<script> |
| 321 | ··let·initialized·=·false; | 321 | ··let·initialized·=·false; |
| Offset 133, 33 lines modified | Offset 133, 33 lines modified | ||
| 133 | </h2> | 133 | </h2> |
| 134 | <p>Each·Erlang·process·has·its·own·stack·and·heap·which·are·allocated·in·the·same·memory·block·and·grow·towards·each·other.·When·the·stack·and·the·heap·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/beam_emu.c#L387">meet</a>,·the·garbage·collector·is·triggered·and·memory·is·reclaimed.·If·not·enough·memory·was·reclaimed,·the·heap·will·grow.</p><h3·id="creating-data"·class="section-heading"> | 134 | <p>Each·Erlang·process·has·its·own·stack·and·heap·which·are·allocated·in·the·same·memory·block·and·grow·towards·each·other.·When·the·stack·and·the·heap·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/beam_emu.c#L387">meet</a>,·the·garbage·collector·is·triggered·and·memory·is·reclaimed.·If·not·enough·memory·was·reclaimed,·the·heap·will·grow.</p><h3·id="creating-data"·class="section-heading"> |
| 135 | ··<a·href="#creating-data"·class="hover-link"> | 135 | ··<a·href="#creating-data"·class="hover-link"> |
| 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 137 | ··</a> | 137 | ··</a> |
| 138 | ··<span·class="text">Creating·Data</span> | 138 | ··<span·class="text">Creating·Data</span> |
| 139 | </h3> | 139 | </h3> |
| 140 | <p>Terms·are·created·on·the·heap·by·evaluating·expressions.·There·are·two·major·types·of·terms:·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_term.h#L88-L97">immediate·terms</a>·which·require·no·heap·space·(small·integers,·atoms,·pids,·port·ids·etc)·and·cons·or·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_term.h#L106-L120">boxed·terms</a>·(tuple,·big·num,·binaries·etc)·that·do·require·heap·space.·Immediate·terms·do·not·need·any·heap·space·because·they·are·embedded·into·the·containing·structure.</p><p>Let's·look·at·an·example·that·returns·a·tuple·with·the·newly·created·data.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">data</span><span·class="p"·data-group-id=" | 140 | <p>Terms·are·created·on·the·heap·by·evaluating·expressions.·There·are·two·major·types·of·terms:·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_term.h#L88-L97">immediate·terms</a>·which·require·no·heap·space·(small·integers,·atoms,·pids,·port·ids·etc)·and·cons·or·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_term.h#L106-L120">boxed·terms</a>·(tuple,·big·num,·binaries·etc)·that·do·require·heap·space.·Immediate·terms·do·not·need·any·heap·space·because·they·are·embedded·into·the·containing·structure.</p><p>Let's·look·at·an·example·that·returns·a·tuple·with·the·newly·created·data.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">data</span><span·class="p"·data-group-id="7683171294-1">(</span><span·class="n">Foo</span><span·class="p"·data-group-id="7683171294-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 141 | ···</span><span·class="n">Cons</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 141 | ···</span><span·class="n">Cons</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7683171294-2">[</span><span·class="mi">42</span><span·class="p">|</span><span·class="n">Foo</span><span·class="p"·data-group-id="7683171294-2">]</span><span·class="p">,</span><span·class="w"> |
| 142 | ···</span><span·class="n">Literal</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 142 | ···</span><span·class="n">Literal</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7683171294-3">{</span><span·class="ss">text</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"hello·world!"</span><span·class="p"·data-group-id="7683171294-3">}</span><span·class="p">,</span><span·class="w"> |
| 143 | ···</span><span·class="p"·data-group-id=" | 143 | ···</span><span·class="p"·data-group-id="7683171294-4">{</span><span·class="ss">tag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cons</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Literal</span><span·class="p"·data-group-id="7683171294-4">}</span><span·class="p">.</span></code></pre><p>In·this·example·we·first·create·a·new·cons·cell·with·an·integer·and·a·tuple·with·some·text.·Then·a·tuple·of·size·three·wrapping·the·other·values·with·an·atom·tag·is·created·and·returned.</p><p>On·the·heap·tuples·require·a·word·size·for·each·of·its·elements·as·well·as·for·the·header.·Cons·cells·always·require·two·words.·Adding·these·things·together,·we·get·seven·words·for·the·tuples·and·26·words·for·the·cons·cells.·The·string·<code·class="inline">"hello·world!"</code>·is·a·list·of·cons·cells·and·thus·requires·24·words.·The·atom·<code·class="inline">tag</code>·and·the·integer·<code·class="inline">42</code>·do·not·require·any·additional·heap·memory·since·it·is·an·<em>immediate</em>.·Adding·all·the·terms·together,·the·heap·space·required·in·this·example·should·be·33·words.</p><p>Compiling·this·code·to·beam·assembly·(<code·class="inline">erlc·-S</code>)·shows·exactly·what·is·happening.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="p"·data-group-id=" | 144 | </span><span·class="p"·data-group-id="2958409896-1">{</span><span·class="ss">test_heap</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="2958409896-1">}</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="p"·data-group-id=" | 145 | </span><span·class="p"·data-group-id="2958409896-2">{</span><span·class="ss">put_list</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-3">{</span><span·class="ss">integer</span><span·class="p">,</span><span·class="mi">42</span><span·class="p"·data-group-id="2958409896-3"[·...·truncated·by·diffoscope;·len:·458,·SHA:·8859488eb571f4b69ea1b2840c2478f9ecf76964a0f36477d355a6b5510f52b1·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="p"·data-group-id=" | 146 | </span><span·class="p"·data-group-id="2958409896-6">{</span><span·class="ss">put_tuple</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-7">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="mi">0</span><[·...·truncated·by·diffoscope;·len:·93,·SHA:·0d77c8deb55e19a52e8606de0691764ab90b500a315e0f053a383e0b1e5d7d14·...·]-6">}</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="p"·data-group-id=" | 147 | </span><span·class="p"·data-group-id="2958409896-8">{</span><span·class="nb">put</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-9">{</span><span·class="ss">atom</span><span·class="p">,</span><span·class="ss">tag</span><span·class="p"·data-group-id="2958409896-9">}</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·9175e95d7358a747643e21cd116c879cb6ebc3c37fdb3c3a287ff967ab1cc7f5·...·]-8">}</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="p"·data-group-id=" | 148 | </span><span·class="p"·data-group-id="2958409896-10">{</span><span·class="nb">put</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-11">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="2958409896-11">}</span>[·...·truncated·by·diffoscope;·len:·41,·SHA:·97bad6afb0dfd5753844a07f4fcdcb4e7a350d24faa3c293c232df1e67ccf7e1·...·]-10">}</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="p"·data-group-id=" | 149 | </span><span·class="p"·data-group-id="2958409896-12">{</span><span·class="nb">put</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-13">{</span><span·class="ss">literal</span><span·class="p">,</span><span·class="p"·data-group-id="2958409896-14">{</span><span·class="ss">te[·...·truncated·by·diffoscope;·len:·229,·SHA:·c53b27b2b567e4b41e2f68a29d62bc3f9f7c1cacc6d1f17d7ec00496e7bd1f77·...·]-12">}</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="ss">return</span><span·class="p">.</span></code></pre><p>Looking·at·the·assembler·code·we·can·see·three·things:·The·heap·requirement·in·this·function·turns·out·to·be·only·six·words,·as·seen·by·the·<code·class="inline">{test_heap,6,1}</code>·instruction.·All·the·allocations·are·combined·to·a·single·instruction.·The·bulk·of·the·data·<code·class="inline">{text,·"hello·world!"}</code>·is·a·<em>literal</em>.·Literals,·sometimes·referred·to·as·constants,·are·not·allocated·in·the·function·since·they·are·a·part·of·the·module·and·allocated·at·load·time.</p><p>If·there·is·not·enough·space·available·on·the·heap·to·satisfy·the·<code·class="inline">test_heap</code>·instructions·request·for·memory,·then·a·garbage·collection·is·initiated.·It·may·happen·immediately·in·the·<code·class="inline">test_heap</code>·instruction,·or·it·can·be·delayed·until·a·later·time·depending·on·what·state·the·process·is·in.·If·the·garbage·collection·is·delayed,·any·memory·needed·will·be·allocated·in·heap·fragments.·Heap·fragments·are·extra·memory·blocks·that·are·a·part·of·the·young·heap,·but·are·not·allocated·in·the·contiguous·area·where·terms·normally·reside.·See·<a·href="#the-young-heap">The·young·heap</a>·for·more·details.</p><h3·id="the-collector"·class="section-heading"> | 150 | </span><span·class="ss">return</span><span·class="p">.</span></code></pre><p>Looking·at·the·assembler·code·we·can·see·three·things:·The·heap·requirement·in·this·function·turns·out·to·be·only·six·words,·as·seen·by·the·<code·class="inline">{test_heap,6,1}</code>·instruction.·All·the·allocations·are·combined·to·a·single·instruction.·The·bulk·of·the·data·<code·class="inline">{text,·"hello·world!"}</code>·is·a·<em>literal</em>.·Literals,·sometimes·referred·to·as·constants,·are·not·allocated·in·the·function·since·they·are·a·part·of·the·module·and·allocated·at·load·time.</p><p>If·there·is·not·enough·space·available·on·the·heap·to·satisfy·the·<code·class="inline">test_heap</code>·instructions·request·for·memory,·then·a·garbage·collection·is·initiated.·It·may·happen·immediately·in·the·<code·class="inline">test_heap</code>·instruction,·or·it·can·be·delayed·until·a·later·time·depending·on·what·state·the·process·is·in.·If·the·garbage·collection·is·delayed,·any·memory·needed·will·be·allocated·in·heap·fragments.·Heap·fragments·are·extra·memory·blocks·that·are·a·part·of·the·young·heap,·but·are·not·allocated·in·the·contiguous·area·where·terms·normally·reside.·See·<a·href="#the-young-heap">The·young·heap</a>·for·more·details.</p><h3·id="the-collector"·class="section-heading"> |
| 151 | ··<a·href="#the-collector"·class="hover-link"> | 151 | ··<a·href="#the-collector"·class="hover-link"> |
| 152 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 152 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 153 | ··</a> | 153 | ··</a> |
| 154 | ··<span·class="text">The·collector</span> | 154 | ··<span·class="text">The·collector</span> |
| 155 | </h3> | 155 | </h3> |
| 156 | <p>Erlang·has·a·copying·semi-space·garbage·collector.·This·means·that·when·doing·a·garbage·collection,·the·terms·are·copied·from·one·distinct·area,·called·the·<em>from·space</em>,·to·a·new·clean·area,·called·the·<em>to·space</em>.·The·collector·starts·by·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1980">scanning·the·root-set</a>·(stack,·registers,·etc).</p><p><img·src="assets/gc-start.png"·alt="Garbage·collection:·initial·values"/></p><p>It·follows·all·the·pointers·from·the·root-set·to·the·heap·and·copies·each·term·word·by·word·to·the·<em>to·space</em>.</p><p>After·the·header·word·has·been·copied·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.h#L45-L46"><em>move·marker</em></a>·is·destructively·placed·in·it·pointing·to·the·term·in·the·<em>to·space</em>.·Any·other·term·that·points·to·the·already·moved·term·will·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1125">see·this·move·marker</a>·and·copy·the·referring·pointer·instead.·For·example,·if·the·have·the·following·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 156 | <p>Erlang·has·a·copying·semi-space·garbage·collector.·This·means·that·when·doing·a·garbage·collection,·the·terms·are·copied·from·one·distinct·area,·called·the·<em>from·space</em>,·to·a·new·clean·area,·called·the·<em>to·space</em>.·The·collector·starts·by·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1980">scanning·the·root-set</a>·(stack,·registers,·etc).</p><p><img·src="assets/gc-start.png"·alt="Garbage·collection:·initial·values"/></p><p>It·follows·all·the·pointers·from·the·root-set·to·the·heap·and·copies·each·term·word·by·word·to·the·<em>to·space</em>.</p><p>After·the·header·word·has·been·copied·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.h#L45-L46"><em>move·marker</em></a>·is·destructively·placed·in·it·pointing·to·the·term·in·the·<em>to·space</em>.·Any·other·term·that·points·to·the·already·moved·term·will·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1125">see·this·move·marker</a>·and·copy·the·referring·pointer·instead.·For·example,·if·the·have·the·following·Erlang·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="7646692980-1">(</span><span·class="n">Arg</span><span·class="p"·data-group-id="7646692980-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ····</span><span·class="n">T</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="n">T</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7646692980-2">{</span><span·class="ss">test</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Arg</span><span·class="p"·data-group-id="7646692980-2">}</span><span·class="p">,</span><span·class="w"> |
| 158 | ····</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="p"·data-group-id="7646692980-3">{</span><span·class="ss">wrapper</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·54,·SHA:·6d8695ba2767e7a1a068f869a9692415fd457519fac395e0f982dc5aa2b03379·...·]-3">}</span><span·class="p">.</span></code></pre><p>Only·one·copy·of·T·exists·on·the·heap·and·during·the·garbage·collection·only·the·first·time·T·is·encountered·will·it·be·copied.</p><p><img·src="assets/gc-rootset-scan.png"·alt="Garbage·collection:·root·set·scan"/></p><p>After·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1089">all·terms</a>·referenced·by·the·root-set·have·been·copied,·the·collector·scans·the·<em>to·space</em>·and·copies·all·terms·that·these·terms·reference.·When·scanning,·the·collector·steps·through·each·term·on·the·<em>to·space</em>·and·any·term·still·referencing·the·<em>from·space</em>·is·copied·over·to·the·<em>to·space</em>.·Some·terms·contain·non-term·data·(the·payload·of·a·on·heap·binary·for·instance).·When·encountered·by·the·collector,·these·values·are·simply·skipped.</p><p><img·src="assets/gc-heap-scan1.png"·alt="Garbage·collection:·heap·scan"/></p><p>Every·term·object·we·can·reach·is·copied·to·the·<em>to·space</em>·and·stored·on·top·off·the·<em>scan·stop</em>·line,·and·then·the·scan·stop·is·moved·to·the·end·of·the·last·object.</p><p><img·src="assets/gc-heap-stop.png"·alt="Garbage·collection:·heap·scan"/></p><p>When·<em>scan·stop</em>·marker·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1103">catches·up</a>·to·the·<em>scan·start</em>·marker,·the·garbage·collection·is·done.·At·this·point·we·can·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1206">deallocate</a>·the·entire·<em>from·space</em>·and·therefore·reclaim·the·entire·young·heap.</p><h2·id="generational-garbage-collection"·class="section-heading"> |
| 159 | ··<a·href="#generational-garbage-collection"·class="hover-link"> | 159 | ··<a·href="#generational-garbage-collection"·class="hover-link"> |
| 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 161 | ··</a> | 161 | ··</a> |
| 162 | ··<span·class="text">Generational·Garbage·Collection</span> | 162 | ··<span·class="text">Generational·Garbage·Collection</span> |
| 163 | </h2> | 163 | </h2> |
| 164 | <p>In·addition·to·the·collection·algorithm·described·above,·the·Erlang·garbage·collector·also·provides·generational·garbage·collection.·An·additional·heap,·called·the·old·heap,·is·used·where·the·long·lived·data·is·stored.·The·original·heap·is·called·the·young·heap,·or·sometimes·the·allocation·heap.</p><p>With·this·in·mind·we·can·look·at·the·Erlang's·garbage·collection·again.·During·the·copy·stage·anything·that·should·be·copied·to·the·young·<em>to·space</em>·is·instead·copied·to·the·old·<em>to·space</em>·<em>if</em>·it·is·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1127">below·the·<em>high-watermark</em></a>.</p><p><img·src="assets/gc-watermark.png"·alt="Garbage·collection:·heap·scan"/></p><p>The·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_process.h#L1021"><em>high-watermark</em></a>·is·placed·where·the·previous·garbage·collection·(described·in·<a·href="#overview">Overview</a>)·ended·and·we·have·introduced·a·new·area·called·the·old·heap.·When·doing·the·normal·garbage·collection·pass,·any·term·that·is·located·below·the·high-watermark·is·copied·to·the·old·<em>to·space</em>·instead·of·the·young.</p><p><img·src="assets/gc-watermark-2.png"·alt="Garbage·collection:·heap·scan"/></p><p>In·the·next·garbage·collection,·any·pointers·to·the·old·heap·will·be·ignored·and·not·scanned.·This·way·the·garbage·collector·does·not·have·to·scan·the·long-lived·terms.</p><p>Generational·garbage·collection·aims·to·increase·performance·at·the·expense·of·memory.·This·is·achieved·because·only·the·young,·smaller,·heap·is·considered·in·most·garbage·collections.</p><p>The·generational·hypothesis·predicts·that·most·terms·tend·to·die·young·(see·D.·Ungar·in·<a·href="#references">References</a>),·and·for·an·immutable·language·such·as·Erlang,·young·terms·die·even·faster·than·in·other·languages.·So·for·most·usage·patterns·the·data·in·the·new·heap·will·die·very·soon·after·it·is·allocated.·This·is·good·because·it·limits·the·amount·of·data·copied·to·the·old·heap·and·also·because·the·garbage·collection·algorithm·used·is·proportional·to·the·amount·of·live·data·on·the·heap.</p><p>One·critical·issue·to·note·here·is·that·any·term·on·the·young·heap·can·reference·terms·on·the·old·heap·but·<em>no</em>·term·on·the·old·heap·may·refer·to·a·term·on·the·young·heap.·This·is·due·to·the·nature·of·the·copy·algorithm.·Anything·referenced·by·an·old·heap·term·is·not·included·in·the·reference·tree,·root-set·and·its·followers,·and·hence·is·not·copied.·If·it·was,·the·data·would·be·lost,·fire·and·brimstone·would·rise·to·cover·the·earth.·Fortunately,·this·comes·naturally·for·Erlang·because·the·terms·are·immutable·and·thus·there·can·be·no·pointers·modified·on·the·old·heap·to·point·to·the·young·heap.</p><p>To·reclaim·data·from·the·old·heap,·both·young·and·old·heaps·are·included·during·the·collection·and·copied·to·a·common·<em>to·space</em>.·Both·the·<em>from·space</em>·of·the·young·and·old·heap·are·then·deallocated·and·the·procedure·will·start·over·from·the·beginning.·This·type·of·garbage·collection·is·called·a·full·sweep·and·is·triggered·when·the·size·of·the·area·under·the·high-watermark·is·larger·than·the·size·of·the·free·area·of·the·old·heap.·It·can·also·be·triggered·by·doing·a·manual·call·to·<a·href="http://erlang.org/doc/man/erlang.html#garbage_collect-0">erlang:garbage_collect()</a>,·or·by·running·into·the·young·garbage·collection·limit·set·by·[spawn_opt(fun(),<a·href="http://erlang.org/doc/man/erlang.html#spawn_opt-4">{fullsweep_after,·N}])</a>·where·N·is·the·number·of·young·garbage·collections·to·do·before·forcing·a·garbage·collection·of·both·young·and·old·heap.</p><h2·id="the-young-heap"·class="section-heading"> | 164 | <p>In·addition·to·the·collection·algorithm·described·above,·the·Erlang·garbage·collector·also·provides·generational·garbage·collection.·An·additional·heap,·called·the·old·heap,·is·used·where·the·long·lived·data·is·stored.·The·original·heap·is·called·the·young·heap,·or·sometimes·the·allocation·heap.</p><p>With·this·in·mind·we·can·look·at·the·Erlang's·garbage·collection·again.·During·the·copy·stage·anything·that·should·be·copied·to·the·young·<em>to·space</em>·is·instead·copied·to·the·old·<em>to·space</em>·<em>if</em>·it·is·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L1127">below·the·<em>high-watermark</em></a>.</p><p><img·src="assets/gc-watermark.png"·alt="Garbage·collection:·heap·scan"/></p><p>The·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_process.h#L1021"><em>high-watermark</em></a>·is·placed·where·the·previous·garbage·collection·(described·in·<a·href="#overview">Overview</a>)·ended·and·we·have·introduced·a·new·area·called·the·old·heap.·When·doing·the·normal·garbage·collection·pass,·any·term·that·is·located·below·the·high-watermark·is·copied·to·the·old·<em>to·space</em>·instead·of·the·young.</p><p><img·src="assets/gc-watermark-2.png"·alt="Garbage·collection:·heap·scan"/></p><p>In·the·next·garbage·collection,·any·pointers·to·the·old·heap·will·be·ignored·and·not·scanned.·This·way·the·garbage·collector·does·not·have·to·scan·the·long-lived·terms.</p><p>Generational·garbage·collection·aims·to·increase·performance·at·the·expense·of·memory.·This·is·achieved·because·only·the·young,·smaller,·heap·is·considered·in·most·garbage·collections.</p><p>The·generational·hypothesis·predicts·that·most·terms·tend·to·die·young·(see·D.·Ungar·in·<a·href="#references">References</a>),·and·for·an·immutable·language·such·as·Erlang,·young·terms·die·even·faster·than·in·other·languages.·So·for·most·usage·patterns·the·data·in·the·new·heap·will·die·very·soon·after·it·is·allocated.·This·is·good·because·it·limits·the·amount·of·data·copied·to·the·old·heap·and·also·because·the·garbage·collection·algorithm·used·is·proportional·to·the·amount·of·live·data·on·the·heap.</p><p>One·critical·issue·to·note·here·is·that·any·term·on·the·young·heap·can·reference·terms·on·the·old·heap·but·<em>no</em>·term·on·the·old·heap·may·refer·to·a·term·on·the·young·heap.·This·is·due·to·the·nature·of·the·copy·algorithm.·Anything·referenced·by·an·old·heap·term·is·not·included·in·the·reference·tree,·root-set·and·its·followers,·and·hence·is·not·copied.·If·it·was,·the·data·would·be·lost,·fire·and·brimstone·would·rise·to·cover·the·earth.·Fortunately,·this·comes·naturally·for·Erlang·because·the·terms·are·immutable·and·thus·there·can·be·no·pointers·modified·on·the·old·heap·to·point·to·the·young·heap.</p><p>To·reclaim·data·from·the·old·heap,·both·young·and·old·heaps·are·included·during·the·collection·and·copied·to·a·common·<em>to·space</em>.·Both·the·<em>from·space</em>·of·the·young·and·old·heap·are·then·deallocated·and·the·procedure·will·start·over·from·the·beginning.·This·type·of·garbage·collection·is·called·a·full·sweep·and·is·triggered·when·the·size·of·the·area·under·the·high-watermark·is·larger·than·the·size·of·the·free·area·of·the·old·heap.·It·can·also·be·triggered·by·doing·a·manual·call·to·<a·href="http://erlang.org/doc/man/erlang.html#garbage_collect-0">erlang:garbage_collect()</a>,·or·by·running·into·the·young·garbage·collection·limit·set·by·[spawn_opt(fun(),<a·href="http://erlang.org/doc/man/erlang.html#spawn_opt-4">{fullsweep_after,·N}])</a>·where·N·is·the·number·of·young·garbage·collections·to·do·before·forcing·a·garbage·collection·of·both·young·and·old·heap.</p><h2·id="the-young-heap"·class="section-heading"> |
| 165 | ··<a·href="#the-young-heap"·class="hover-link"> | 165 | ··<a·href="#the-young-heap"·class="hover-link"> |
| Offset 175, 19 lines modified | Offset 175, 19 lines modified | ||
| 175 | </h2> | 175 | </h2> |
| 176 | <p>As·mentioned·in·the·Overview·the·size·of·the·heap·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L247">grows</a>·to·accommodate·more·data.·Heaps·grow·in·two·stages,·first·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L199-L208">variation·of·the·Fibonacci·sequence</a>·is·used·starting·at·233·words.·Then·at·about·1·mega·words·the·heap·only·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L215-L227">grows·in·20%·increments</a>.</p><p>There·are·two·occasions·when·the·young·heap·grows:</p><ul><li>if·the·total·size·of·the·heap·+·message·and·heap·fragments·exceeds·the·current·heap·size.</li><li>if·after·a·fullsweep,·the·total·amount·of·live·objects·is·greater·than·75%.</li></ul><p>There·are·two·occasions·when·the·young·heap·is·shrunk:</p><ul><li>if·after·a·young·collection,·the·total·amount·of·live·objects·is·less·than·25%·of·the·heap·and·the·young·heap·is·"big"</li><li>if·after·a·fullsweep,·the·total·amount·of·live·objects·is·less·than·25%·of·the·heap.</li></ul><p>The·old·heap·is·always·one·step·ahead·in·the·heap·growth·stages·than·the·young·heap.</p><h2·id="literals"·class="section-heading"> | 176 | <p>As·mentioned·in·the·Overview·the·size·of·the·heap·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L247">grows</a>·to·accommodate·more·data.·Heaps·grow·in·two·stages,·first·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L199-L208">variation·of·the·Fibonacci·sequence</a>·is·used·starting·at·233·words.·Then·at·about·1·mega·words·the·heap·only·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L215-L227">grows·in·20%·increments</a>.</p><p>There·are·two·occasions·when·the·young·heap·grows:</p><ul><li>if·the·total·size·of·the·heap·+·message·and·heap·fragments·exceeds·the·current·heap·size.</li><li>if·after·a·fullsweep,·the·total·amount·of·live·objects·is·greater·than·75%.</li></ul><p>There·are·two·occasions·when·the·young·heap·is·shrunk:</p><ul><li>if·after·a·young·collection,·the·total·amount·of·live·objects·is·less·than·25%·of·the·heap·and·the·young·heap·is·"big"</li><li>if·after·a·fullsweep,·the·total·amount·of·live·objects·is·less·than·25%·of·the·heap.</li></ul><p>The·old·heap·is·always·one·step·ahead·in·the·heap·growth·stages·than·the·young·heap.</p><h2·id="literals"·class="section-heading"> |
| 177 | ··<a·href="#literals"·class="hover-link"> | 177 | ··<a·href="#literals"·class="hover-link"> |
| 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 179 | ··</a> | 179 | ··</a> |
| 180 | ··<span·class="text">Literals</span> | 180 | ··<span·class="text">Literals</span> |
| 181 | </h2> | 181 | </h2> |
| 182 | <p>When·garbage·collecting·a·heap·(young·or·old)·all·literals·are·left·in·place·and·not·copied.·To·figure·out·if·a·term·should·be·copied·or·not·when·doing·a·garbage·collection·the·following·pseudo·code·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">if</span><span·class="w">·</span><span·class="p"·data-group-id=" | 182 | <p>When·garbage·collecting·a·heap·(young·or·old)·all·literals·are·left·in·place·and·not·copied.·To·figure·out·if·a·term·should·be·copied·or·not·when·doing·a·garbage·collection·the·following·pseudo·code·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">if</span><span·class="w">·</span><span·class="p"·data-group-id="8809288914-1">(</span><span·class="nf">erts_is_literal</span><span·class="p"·data-group-id="8809288914-2">(</span><span·class="ss">ptr</span><span·class="p"·data-group-id="8809288914-2">)</span><span·class="w">·</span><span·class="p">||</span><span·class="[·...·truncated·by·diffoscope;·len:·541,·SHA:·0e5ccdaededf127e67905c1570ab8288200f40843f1d15c9ade415d3ab91dd4f·...·]-5">{</span><span·class="w"> |
| 183 | ··</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">literal</span><span·class="w">·</span><span·class="ow">or</span><span·class="w">·</span><span·class="ss">non</span><span·class="w">·</span><span·class="ss">fullsweep</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">copy</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 183 | ··</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">literal</span><span·class="w">·</span><span·class="ow">or</span><span·class="w">·</span><span·class="ss">non</span><span·class="w">·</span><span·class="ss">fullsweep</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">copy</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 184 | </span><span·class="p"·data-group-id=" | 184 | </span><span·class="p"·data-group-id="8809288914-5">}</span><span·class="w">·</span><span·class="k">else</span><span·class="w">·</span><span·class="p"·data-group-id="8809288914-6">{</span><span·class="w"> |
| 185 | ··</span><span·class="nf">copy</span><span·class="p"·data-group-id=" | 185 | ··</span><span·class="nf">copy</span><span·class="p"·data-group-id="8809288914-7">(</span><span·class="ss">ptr</span><span·class="p"·data-group-id="8809288914-7">)</span><span·class="p">;</span><span·class="w"> |
| 186 | </span><span·class="p"·data-group-id=" | 186 | </span><span·class="p"·data-group-id="8809288914-6">}</span></code></pre><p>The·<a·href="https://github.com/erlang/otp/blob/OTP-19.0/erts/emulator/beam/global.h#L1452-L1465"><code·class="inline">erts_is_literal</code></a>·check·works·differently·on·different·architectures·and·operating·systems.</p><p>On·64·bit·systems·that·allow·mapping·of·unreserved·virtual·memory·areas·(most·operating·systems·except·Windows),·an·area·of·size·1·GB·(by·default)·is·mapped·and·then·all·literals·are·placed·within·that·area.·Then·all·that·has·to·be·done·to·determine·if·something·is·a·literal·or·not·is·<a·href="https://github.com/erlang/otp/blob/OTP-19.0/erts/emulator/beam/erl_alloc.h#L322-L324">two·quick·pointer·checks</a>.·This·system·relies·on·the·fact·that·a·memory·page·that·has·not·been·touched·yet·does·not·take·any·actual·space.·So·even·if·1·GB·of·virtual·memory·is·mapped,·only·the·memory·which·is·actually·needed·for·literals·is·allocated·in·ram.·The·size·of·the·literal·area·is·configurable·through·the·+MIscs·erts_alloc·option.</p><p>On·32·bit·systems,·there·is·not·enough·virtual·memory·space·to·allocate·1·GB·for·just·literals,·so·instead·small·256·KB·sized·literal·regions·are·created·on·demand·and·a·card·mark·bit-array·of·the·entire·32·bit·memory·space·is·then·used·to·determine·if·a·term·is·a·literal·or·not.·Since·the·total·memory·space·is·only·32·bits,·the·card·mark·bit-array·is·only·256·words·large.·On·a·64·bit·system·the·same·bit-array·would·have·to·be·1·tera·words·large,·so·this·technique·is·only·viable·on·32·bit·systems.·Doing·<a·href="https://github.com/erlang/otp/blob/OTP-19.0/erts/emulator/beam/erl_alloc.h#L316-L319">lookups·in·the·array</a>·is·a·little·more·expensive·then·just·doing·the·pointer·checks·that·can·be·done·in·64·bit·systems,·but·not·extremely·so.</p><p>On·64·bit·windows,·on·which·erts_alloc·cannot·do·unreserved·virtual·memory·mappings,·a·<a·href="https://github.com/erlang/otp/blob/OTP-19.0/erts/emulator/beam/erl_term.h#L59">special·tag</a>·within·the·Erlang·term·object·is·used·to·determine·if·something·<a·href="https://github.com/erlang/otp/blob/OTP-19.0/erts/emulator/beam/erl_term.h#L248-L252">is·a·literal·or·not</a>.·This·is·very·cheap,·however,·the·tag·is·only·available·on·64·bit·machines,·and·it·is·possible·to·do·a·great·deal·of·other·nice·optimizations·with·this·tag·in·the·future·(like·for·instance·a·more·compact·list·implementation)·so·it·is·not·used·on·operating·systems·where·it·is·not·needed.</p><p>This·behaviour·is·different·from·how·it·worked·prior·to·Erlang/OTP·19.0.·Before·19.0·the·literal·check·was·done·by·checking·if·the·pointer·pointed·to·the·young·or·old·heap·block.·If·it·did·not,·then·it·was·considered·a·literal.·This·lead·to·considerable·overhead·and·strange·memory·usage·scenarios,·so·it·was·removed·in·19.0.</p><h2·id="binary-heap"·class="section-heading"> |
| 187 | ··<a·href="#binary-heap"·class="hover-link"> | 187 | ··<a·href="#binary-heap"·class="hover-link"> |
| 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 189 | ··</a> | 189 | ··</a> |
| 190 | ··<span·class="text">Binary·heap</span> | 190 | ··<span·class="text">Binary·heap</span> |
| 191 | </h2> | 191 | </h2> |
| 192 | <p>The·binary·heap·works·as·a·large·object·space·for·binary·terms·that·are·greater·than·64·bytes·(from·now·on·called·off-heap·binaries).·The·binary·heap·is·<a·href="https://en.wikipedia.org/wiki/Reference_counting">reference·counted</a>·and·a·pointer·to·the·off-heap·binary·is·stored·on·the·process·heap.·To·keep·track·of·when·to·decrement·the·reference·counter·of·the·off-heap·binary,·a·linked·list·(the·MSO·-·mark·and·sweep·object·list)·containing·funs·and·externals·as·well·as·off-heap·binaries·is·woven·through·the·heap.·After·a·garbage·collection·is·done,·the·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2299">MSO·list·is·swept</a>·and·any·off-heap·binary·that·does·not·have·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2325">move·marker</a>·written·into·the·header·words·has·its·reference·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2344-L2367">decremented·and·is·potentially·freed</a>.</p><p>All·items·in·the·MSO·list·are·ordered·by·the·time·they·were·added·to·the·process·heap,·so·when·doing·a·minor·garbage·collection,·the·MSO·sweeper·only·has·to·sweep·until·it·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2369">encounters·an·off-heap·binary·that·is·on·the·old·heap</a>.</p><h3·id="virtual-binary-heap"·class="section-heading"> | 192 | <p>The·binary·heap·works·as·a·large·object·space·for·binary·terms·that·are·greater·than·64·bytes·(from·now·on·called·off-heap·binaries).·The·binary·heap·is·<a·href="https://en.wikipedia.org/wiki/Reference_counting">reference·counted</a>·and·a·pointer·to·the·off-heap·binary·is·stored·on·the·process·heap.·To·keep·track·of·when·to·decrement·the·reference·counter·of·the·off-heap·binary,·a·linked·list·(the·MSO·-·mark·and·sweep·object·list)·containing·funs·and·externals·as·well·as·off-heap·binaries·is·woven·through·the·heap.·After·a·garbage·collection·is·done,·the·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2299">MSO·list·is·swept</a>·and·any·off-heap·binary·that·does·not·have·a·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2325">move·marker</a>·written·into·the·header·words·has·its·reference·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2344-L2367">decremented·and·is·potentially·freed</a>.</p><p>All·items·in·the·MSO·list·are·ordered·by·the·time·they·were·added·to·the·process·heap,·so·when·doing·a·minor·garbage·collection,·the·MSO·sweeper·only·has·to·sweep·until·it·<a·href="https://github.com/erlang/otp/blob/OTP-18.0/erts/emulator/beam/erl_gc.c#L2369">encounters·an·off-heap·binary·that·is·on·the·old·heap</a>.</p><h3·id="virtual-binary-heap"·class="section-heading"> |
| 193 | ··<a·href="#virtual-binary-heap"·class="hover-link"> | 193 | ··<a·href="#virtual-binary-heap"·class="hover-link"> |
| Offset 262, 15 lines modified | Offset 262, 15 lines modified | ||
| 262 | ······<p·class="built-using"> | 262 | ······<p·class="built-using"> |
| 263 | ········Built·using | 263 | ········Built·using |
| 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 266 | ······</p> | 266 | ······</p> |
| 267 | <p>Copyright·©·1996-202 | 267 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 268 | ····</footer> | 268 | ····</footer> |
| 269 | ··</div> | 269 | ··</div> |
| 270 | </main> | 270 | </main> |
| 271 | </div> | 271 | </div> |
| 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 273 | ··<script> | 273 | ··<script> |
| 274 | ··let·initialized·=·false; | 274 | ··let·initialized·=·false; |
| Offset 161, 108 lines modified | Offset 161, 108 lines modified | ||
| 161 | configuration·files·(or·system·registry):</p><ul><li>Hostnames·and·host·addresses</li><li>Domain·name</li><li>Nameservers</li><li>Search·domains</li><li>Lookup·method</li></ul><p>This·data·can·also·be·specified·explicitly·in·the·user·configuration·file.·This | 161 | configuration·files·(or·system·registry):</p><ul><li>Hostnames·and·host·addresses</li><li>Domain·name</li><li>Nameservers</li><li>Search·domains</li><li>Lookup·method</li></ul><p>This·data·can·also·be·specified·explicitly·in·the·user·configuration·file.·This |
| 162 | file·is·to·contain·lines·of·configuration·parameters·(each·terminated·with·a | 162 | file·is·to·contain·lines·of·configuration·parameters·(each·terminated·with·a |
| 163 | full·stop).·Some·parameters·add·data·to·the·configuration·(such·as·host·and | 163 | full·stop).·Some·parameters·add·data·to·the·configuration·(such·as·host·and |
| 164 | nameserver),·others·overwrite·any·previous·settings·(such·as·domain·and·lookup). | 164 | nameserver),·others·overwrite·any·previous·settings·(such·as·domain·and·lookup). |
| 165 | The·user·configuration·file·is·always·examined·last·in·the·configuration | 165 | The·user·configuration·file·is·always·examined·last·in·the·configuration |
| 166 | process,·making·it·possible·for·the·user·to·override·any·default·values·or | 166 | process,·making·it·possible·for·the·user·to·override·any·default·values·or |
| 167 | previously·made·settings.·Call·<code·class="inline">inet:get_rc()</code>·to·view·the·state·of·the·<code·class="inline">inet</code> | 167 | previously·made·settings.·Call·<code·class="inline">inet:get_rc()</code>·to·view·the·state·of·the·<code·class="inline">inet</code> |
| 168 | configuration·database.</p><p>The·valid·configuration·parameters·are·as·follows:</p><ul><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1 | 168 | configuration·database.</p><p>The·valid·configuration·parameters·are·as·follows:</p><ul><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1541778259-1">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Format</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="1541778259-1">}</span><span·class="p">.</span><span·class="w"> |
| 169 | ··</span><span·class="n">Format</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1 | 169 | ··</span><span·class="n">Format</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1541778259-2">(</span><span·class="p"·data-group-id="1541778259-2">)</span><span·class="w"> |
| 170 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="1 | 170 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="1541778259-3">(</span><span·class="p"·data-group-id="1541778259-3">)</span></code></pre><p>Specify·a·system·file·that·Erlang·is·to·read·configuration·data·from.·<code·class="inline">Format</code> |
| 171 | tells·the·parser·how·the·file·is·to·be·interpreted:</p><ul><li><code·class="inline">resolv</code>·(Unix·resolv.conf)</li><li><code·class="inline">host_conf_freebsd</code>·(FreeBSD·host.conf)</li><li><code·class="inline">host_conf_bsdos</code>·(BSDOS·host.conf)</li><li><code·class="inline">host_conf_linux</code>·(Linux·host.conf)</li><li><code·class="inline">nsswitch_conf</code>·(Unix·nsswitch.conf)</li><li><code·class="inline">hosts</code>·(Unix·hosts)</li></ul><p><code·class="inline">File</code>·is·to·specify·the·filename·with·full·path.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6 | 171 | tells·the·parser·how·the·file·is·to·be·interpreted:</p><ul><li><code·class="inline">resolv</code>·(Unix·resolv.conf)</li><li><code·class="inline">host_conf_freebsd</code>·(FreeBSD·host.conf)</li><li><code·class="inline">host_conf_bsdos</code>·(BSDOS·host.conf)</li><li><code·class="inline">host_conf_linux</code>·(Linux·host.conf)</li><li><code·class="inline">nsswitch_conf</code>·(Unix·nsswitch.conf)</li><li><code·class="inline">hosts</code>·(Unix·hosts)</li></ul><p><code·class="inline">File</code>·is·to·specify·the·filename·with·full·path.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6449771847-1">{</span><span·class="ss">resolv_conf</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="6449771847-1">}</span><span·class="p">.</span><span·class="w"> |
| 172 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="6 | 172 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="6449771847-2">(</span><span·class="p"·data-group-id="6449771847-2">)</span></code></pre><p>Specify·a·system·file·that·Erlang·is·to·read·resolver·configuration·from·for |
| 173 | the·internal·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>,·and·monitor·for·changes,·even·if·it·does | 173 | the·internal·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>,·and·monitor·for·changes,·even·if·it·does |
| 174 | not·exist.·The·path·must·be·absolute.</p><p>This·can·override·the·configuration·parameters·<code·class="inline">nameserver</code>·and·<code·class="inline">search</code> | 174 | not·exist.·The·path·must·be·absolute.</p><p>This·can·override·the·configuration·parameters·<code·class="inline">nameserver</code>·and·<code·class="inline">search</code> |
| 175 | depending·on·the·contents·of·the·specified·file.·They·can·also·change·any·time | 175 | depending·on·the·contents·of·the·specified·file.·They·can·also·change·any·time |
| 176 | in·the·future·reflecting·the·file·contents.</p><p>If·the·file·is·specified·as·an·empty·string·<code·class="inline">""</code>,·no·file·is·read·or·monitored | 176 | in·the·future·reflecting·the·file·contents.</p><p>If·the·file·is·specified·as·an·empty·string·<code·class="inline">""</code>,·no·file·is·read·or·monitored |
| 177 | in·the·future.·This·emulates·the·old·behavior·of·not·configuring·the·DNS | 177 | in·the·future.·This·emulates·the·old·behavior·of·not·configuring·the·DNS |
| 178 | client·when·the·node·is·started·in·short·name·distributed·mode.</p><p>If·this·parameter·is·not·specified,·it·defaults·to·<code·class="inline">/etc/resolv.conf</code>·unless | 178 | client·when·the·node·is·started·in·short·name·distributed·mode.</p><p>If·this·parameter·is·not·specified,·it·defaults·to·<code·class="inline">/etc/resolv.conf</code>·unless |
| 179 | environment·variable·<code·class="inline">ERL_INET_ETC_DIR</code>·is·set,·which·defines·the·directory | 179 | environment·variable·<code·class="inline">ERL_INET_ETC_DIR</code>·is·set,·which·defines·the·directory |
| 180 | for·this·file·to·some·maybe·other·than·<code·class="inline">/etc</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 180 | for·this·file·to·some·maybe·other·than·<code·class="inline">/etc</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0015503618-1">{</span><span·class="ss">hosts_file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="0015503618-1">}</span><span·class="p">.</span><span·class="w"> |
| 181 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 181 | ··</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="0015503618-2">(</span><span·class="p"·data-group-id="0015503618-2">)</span></code></pre><p>Specify·a·system·file·that·Erlang·is·to·read·resolver·configuration·from·for |
| 182 | the·internal·hosts·file·resolver,·and·monitor·for·changes,·even·if·it·does·not | 182 | the·internal·hosts·file·resolver,·and·monitor·for·changes,·even·if·it·does·not |
| 183 | exist.·The·path·must·be·absolute.</p><p>These·host·entries·are·searched·after·all·added·with·<code·class="inline">{file,·hosts,·File}</code> | 183 | exist.·The·path·must·be·absolute.</p><p>These·host·entries·are·searched·after·all·added·with·<code·class="inline">{file,·hosts,·File}</code> |
| 184 | above·or·<code·class="inline">{host,·IP,·Aliases}</code>·below·when·lookup·option·<code·class="inline">file</code>·is·used.</p><p>If·the·file·is·specified·as·an·empty·string·<code·class="inline">""</code>,·no·file·is·read·or·monitored | 184 | above·or·<code·class="inline">{host,·IP,·Aliases}</code>·below·when·lookup·option·<code·class="inline">file</code>·is·used.</p><p>If·the·file·is·specified·as·an·empty·string·<code·class="inline">""</code>,·no·file·is·read·or·monitored |
| 185 | in·the·future.·This·emulates·the·old·behavior·of·not·configuring·the·DNS | 185 | in·the·future.·This·emulates·the·old·behavior·of·not·configuring·the·DNS |
| 186 | client·when·the·node·is·started·in·short·name·distributed·mode.</p><p>If·this·parameter·is·not·specified,·it·defaults·to·<code·class="inline">/etc/hosts</code>·unless | 186 | client·when·the·node·is·started·in·short·name·distributed·mode.</p><p>If·this·parameter·is·not·specified,·it·defaults·to·<code·class="inline">/etc/hosts</code>·unless |
| 187 | environment·variable·<code·class="inline">ERL_INET_ETC_DIR</code>·is·set,·which·defines·the·directory | 187 | environment·variable·<code·class="inline">ERL_INET_ETC_DIR</code>·is·set,·which·defines·the·directory |
| 188 | for·this·file·to·some·maybe·other·than·<code·class="inline">/etc</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 188 | for·this·file·to·some·maybe·other·than·<code·class="inline">/etc</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9690177483-1">{</span><span·class="ss">registry</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p"·data-group-id="9690177483-1">}</span><span·class="p">.</span><span·class="w"> |
| 189 | ··</span><span·class="n">Type</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 189 | ··</span><span·class="n">Type</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="9690177483-2">(</span><span·class="p"·data-group-id="9690177483-2">)</span></code></pre><p>Specify·a·system·registry·that·Erlang·is·to·read·configuration·data·from. |
| 190 | <code·class="inline">win32</code>·is·the·only·valid·option.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 190 | <code·class="inline">win32</code>·is·the·only·valid·option.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1975392629-1">{</span><span·class="ss">host</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IP</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Aliases</span><span·class="p"·data-group-id="1975392629-1">}</span><span·class="p">.</span><span·class="w"> |
| 191 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id="3943209336-2">(</span><span·class="p"·data-group-id="3943209336-2">)</span></code></pre><p><code·class="inline">Aliases·=·[string()]</code></p><p>Add·host·entry·to·the·hosts·table.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7180106316-1">{</span><span·class="ss">domain</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Domain</span><span·class="p"·data-group-id="7180106316-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 192 | ··</span><span·class="n"> | 191 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id="1975392629-2">(</span><span·class="p"·data-group-id="1975392629-2">)</span></code></pre><p><code·class="inline">Ali[·...·truncated·by·diffoscope;·len:·327,·SHA:·e8c93011b36a5cd67d1c04fde25d5205039aff144ecad0e81d89d64dc91147cd·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 192 | ··</span><span·class="n">Domain</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="2713817140-2">(</span><span·class="p"·data-group-id="2713817140-2">)</span></code></pre><p>Set·domain·name.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1640253328-1">{</span><span·class="ss">nameserver</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IP</span><span·class="w">·</span><span·class="p"·data-group-id="1640253328-2">[</span><span·class="p">,</span><span·class="n">Port</span><span·class="p"·data-group-id="1640253328-2">]</span><span·class="p"·data-group-id="1640253328-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 193 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id=" | 193 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id="1640253328-3">(</span><span·class="p"·data-group-id="1640253328-3">)</span><span·class="w"> |
| 194 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 194 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="1640253328-4">(</span><span·class="p"·data-group-id="1640253328-4">)</span></code></pre><p>Add·address·(and·port,·if·other·than·default)·of·the·primary·nameserver·to·use |
| 195 | for·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 195 | for·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3251011463-1">{</span><span·class="ss">alt_nameserver</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IP</span><span·class="w">·</span><span·class="p"·data-group-id="3251011463-2">[</span><span·class="p">,</span><span·class="n">Port</[·...·truncated·by·diffoscope;·len:·99,·SHA:·15ec005f524fa57c9c025db1245cc018b166efa91b848da390d711dbd680e897·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 196 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id=" | 196 | ··</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tuple</span><span·class="p"·data-group-id="3251011463-3">(</span><span·class="p"·data-group-id="3251011463-3">)</span><span·class="w"> |
| 197 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="0922492734-4">(</span><span·class="p"·data-group-id="0922492734-4">)</span></code></pre><p>Add·address·(and·port,·if·other·than·default)·of·the·secondary·nameserver·for | ||
| 198 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8931362311-1">{</span><span·class="ss">search</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Domains</span><span·class="p"·data-group-id="8931362311-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 199 | ··</span><span·class="n"> | 197 | ··</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3251011463-4">(</span><span·class="p"·data-group-id="3251011463-4">)</span></code></pre><p>Add·address·(and·por[·...·truncated·by·diffoscope;·len:·57,·SHA:·af70c18a4da73b5263800f91a52412b5f3b0d70dd3b285bf2ea75ed9d37c8919·...·] |
| 198 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0386385505-1">{</span><span·class="ss">search</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Domains</span><span·class="p"·data-group-id="0386385505-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 199 | ··</span><span·class="n">Domains</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0386385505-2">[</span><span·class="nf">string</span><span·class="p"·data-group-id="0386385505-3">(</span><span·class="p"·data-group-id="0386385505-3">)</span><span·class="p"·data-group-id="0386385505-2">]</span></code></pre><p>Add·search·domains·for·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2701371373-1">{</span><span·class="ss">lookup</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Methods</span><span·class="p"·data-group-id="2701371373-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 200 | ··</span><span·class="n">Methods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 200 | ··</span><span·class="n">Methods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2701371373-2">[</span><span·class="nf">atom</span><span·class="p"·data-group-id="2701371373-3">(</span><span·class="p"·data-group-id="2701371373-3">)</span><span·class="p"·data-group-id="2701371373-2">]</span></code></pre><p>Specify·lookup·methods·and·in·which·order·to·try·them.·The·valid·methods·are |
| 201 | as·follows:</p><ul><li><code·class="inline">native</code>·(use·system·calls)</li><li><code·class="inline">file</code>·(use·host·data·retrieved·from·system·configuration·files·and/or·the | 201 | as·follows:</p><ul><li><code·class="inline">native</code>·(use·system·calls)</li><li><code·class="inline">file</code>·(use·host·data·retrieved·from·system·configuration·files·and/or·the |
| 202 | user·configuration·file)</li><li><code·class="inline">dns</code>·(use·the·Erlang·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·for·nameserver·queries)</li></ul><p>The·lookup·method·<code·class="inline">string</code>·tries·to·parse·the·hostname·as·an·IPv4·or·IPv6 | 202 | user·configuration·file)</li><li><code·class="inline">dns</code>·(use·the·Erlang·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·for·nameserver·queries)</li></ul><p>The·lookup·method·<code·class="inline">string</code>·tries·to·parse·the·hostname·as·an·IPv4·or·IPv6 |
| 203 | string·and·return·the·resulting·IP·address.·It·is·automatically·tried·first | 203 | string·and·return·the·resulting·IP·address.·It·is·automatically·tried·first |
| 204 | when·<code·class="inline">native</code>·is·<em>not</em>·in·the·<code·class="inline">Methods</code>·list.·To·skip·it·in·this·case,·the | 204 | when·<code·class="inline">native</code>·is·<em>not</em>·in·the·<code·class="inline">Methods</code>·list.·To·skip·it·in·this·case,·the |
| 205 | pseudo·lookup·method·<code·class="inline">nostring</code>·can·be·inserted·anywhere·in·the·<code·class="inline">Methods</code> | 205 | pseudo·lookup·method·<code·class="inline">nostring</code>·can·be·inserted·anywhere·in·the·<code·class="inline">Methods</code> |
| 206 | list.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 206 | list.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6931464573-1">{</span><span·class="ss">cache_size</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Size</span><span·class="p"·data-group-id="6931464573-1">}</span><span·class="p">.</span><span·class="w"> |
| 207 | ··</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 207 | ··</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="6931464573-2">(</span><span·class="p"·data-group-id="6931464573-2">)</span></code></pre><p>Set·the·resolver·cache·size·for·<code·class="inline">dns</code>·lookups.·<code·class="inline">native</code>·lookups·are·not |
| 208 | cached.·Defaults·to·100·DNS·records.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 208 | cached.·Defaults·to·100·DNS·records.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9068412646-1">{</span><span·class="ss">cache_refresh</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Time</span><span·class="p"·data-group-id="9068412646-1">}</span><span·class="p">.</span><span·class="w"> |
| 209 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 209 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9068412646-2">(</span><span·class="p"·data-group-id="9068412646-2">)</span></code></pre><p>Set·how·often·(in·milliseconds)·the·resolver·cache·for·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·is |
| 210 | refreshed·(that·is,·expired·DNS·records·are·deleted).·Defaults·to·1·hour.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 210 | refreshed·(that·is,·expired·DNS·records·are·deleted).·Defaults·to·1·hour.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7572915174-1">{</span><span·class="ss">timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Time</span><span·class="p"·data-group-id="7572915174-1">}</span><span·class="p">.</span><span·class="w"> |
| 211 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 211 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7572915174-2">(</span><span·class="p"·data-group-id="7572915174-2">)</span></code></pre><p>Set·the·time·to·wait·until·retry·(in·milliseconds)·for·DNS·queries·made·by |
| 212 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.·Defaults·to·2·seconds.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 212 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>.·Defaults·to·2·seconds.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6730122536-1">{</span><span·class="ss">retry</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="6730122536-1">}</span><span·class="p">.</span><span·class="w"> |
| 213 | ··</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 213 | ··</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="6730122536-2">(</span><span·class="p"·data-group-id="6730122536-2">)</span></code></pre><p>Set·the·number·of·DNS·queries·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·will·try·before·giving·up.·Defaults |
| 214 | to·3.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 214 | to·3.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4820116919-1">{</span><span·class="ss">servfail_retry_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Time</span><span·class="p"·data-group-id="4820116919-1">}</span><span·class="p">.</span><span·class="w"> |
| 215 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id=" | 215 | ··</span><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id="4820116919-2">(</span><span·class="p"·data-group-id="4820116919-2">)</span></code></pre><p>After·all·name·servers·have·been·tried,·there·is·a·timeout·before·the·name |
| 216 | servers·are·tried·again.·This·is·to·prevent·the·server·from·answering·the | 216 | servers·are·tried·again.·This·is·to·prevent·the·server·from·answering·the |
| 217 | query·with·what's·in·the·servfail·cache, | 217 | query·with·what's·in·the·servfail·cache, |
| 218 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html#servfail_retry_timeout"><code·class="inline">inet_res</code></a>.·Defaults·to·1500·milli | 218 | <a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html#servfail_retry_timeout"><code·class="inline">inet_res</code></a>.·Defaults·to·1500·milli |
| 219 | seconds·.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 219 | seconds·.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0226459408-1">{</span><span·class="ss">inet6</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bool</span><span·class="p"·data-group-id="0226459408-1">}</span><span·class="p">.</span><span·class="w"> |
| 220 | ··</span><span·class="n">Bool</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span></code></pre><p>Tells·the·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·to·look·up·IPv6·addresses.·Defaults·to | 220 | ··</span><span·class="n">Bool</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span></code></pre><p>Tells·the·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·to·look·up·IPv6·addresses.·Defaults·to |
| 221 | <code·class="inline">false</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5 | 221 | <code·class="inline">false</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5018098312-1">{</span><span·class="ss">usevc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bool</span><span·class="p"·data-group-id="5018098312-1">}</span><span·class="p">.</span><span·class="w"> |
| 222 | ··</span><span·class="n">Bool</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span></code></pre><p>Tells·the·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·to·use·TCP·(Virtual·Circuit)·instead·of·UDP. | 222 | ··</span><span·class="n">Bool</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span></code></pre><p>Tells·the·DNS·client·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·to·use·TCP·(Virtual·Circuit)·instead·of·UDP. |
| 223 | Defaults·to·<code·class="inline">false</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 223 | Defaults·to·<code·class="inline">false</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9157583333-1">{</span><span·class="ss">edns</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Version</span><span·class="p"·data-group-id="9157583333-1">}</span><span·class="p">.</span><span·class="w"> |
| 224 | ··</span><span·class="n">Version</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="mi">0</span></code></pre><p>Sets·the·EDNS·version·that·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·will·use.·The·only·allowed·version·is | 224 | ··</span><span·class="n">Version</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="mi">0</span></code></pre><p>Sets·the·EDNS·version·that·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·will·use.·The·only·allowed·version·is |
| 225 | zero.·Defaults·to·<code·class="inline">false</code>,·which·means·not·to·use·EDNS.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 225 | zero.·Defaults·to·<code·class="inline">false</code>,·which·means·not·to·use·EDNS.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2529713528-1">{</span><span·class="ss">udp_payload_size</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Size</span><span·class="p"·data-group-id="2529713528-1">}</span><span·class="p">.</span><span·class="w"> |
| 226 | ··</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 226 | ··</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="2529713528-2">(</span><span·class="p"·data-group-id="2529713528-2">)</span></code></pre><p>Sets·the·allowed·UDP·payload·size·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet_res.html"><code·class="inline">inet_res</code></a>·will·advertise·in·EDNS·queries. |
| 227 | Also·sets·the·limit·when·the·DNS·query·will·be·deemed·too·large·for·UDP | 227 | Also·sets·the·limit·when·the·DNS·query·will·be·deemed·too·large·for·UDP |
| 228 | forcing·a·TCP·query·instead;·this·is·not·entirely·correct,·as·the·advertised | 228 | forcing·a·TCP·query·instead;·this·is·not·entirely·correct,·as·the·advertised |
| 229 | UDP·payload·size·of·the·individual·nameserver·is·what·is·to·be·used,·but·this | 229 | UDP·payload·size·of·the·individual·nameserver·is·what·is·to·be·used,·but·this |
| 230 | simple·strategy·will·do·until·a·more·intelligent·(probing,·caching)·algorithm | 230 | simple·strategy·will·do·until·a·more·intelligent·(probing,·caching)·algorithm |
| 231 | needs·to·be·implemented.·Default·to·1280,·which·stems·from·the·standard | 231 | needs·to·be·implemented.·Default·to·1280,·which·stems·from·the·standard |
| 232 | Ethernet·MTU·size.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9666790615-1">{</span><span·class="ss">udp</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p"·data-group-id="9666790615-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 233 | 232 | Ethernet·MTU·size.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5995203535-1">{</span><span·class="ss">udp</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·104415ad46ae7c7d6256a4f2145a468bbb22625d69ab6a12a10f2d5b698a4e89·...·]-1">}</span><span·class="p">.</span><span·class="w"> | |
| 233 | ··</span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="5995203535-2">(</span><span·class="p"·data-group-id="5995203535-2">)</span></code></pre><p>Tell·Erlang·to·use·another·primitive·UDP·module·than·<code·class="inline">inet_udp</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8976549737-1">{</span><span·class="ss">tcp</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p"·data-group-id="8976549737-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 234 | ··</span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 234 | ··</span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="8976549737-2">(</span><span·class="p"·data-group-id="8976549737-2">)</span></code></pre><p>Tell·Erlang·to·use·another·primitive·TCP·module·than·<code·class="inline">inet_tcp</code>.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">clear_hosts</span><span·class="p">.</span></code></pre><p>Clear·the·hosts·table.</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">clear_ns</span><span·class="p">.</span></code></pre><p>Clear·the·list·of·recorded·nameservers·(primary·and·secondary).</p></li><li><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">clear_search</span><span·class="p">.</span></code></pre><p>Clear·the·list·of·search·domains.</p></li></ul><h2·id="user-configuration-example"·class="section-heading"> |
| 235 | ··<a·href="#user-configuration-example"·class="hover-link"> | 235 | ··<a·href="#user-configuration-example"·class="hover-link"> |
| 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 237 | ··</a> | 237 | ··</a> |
| 238 | ··<span·class="text">User·Configuration·Example</span> | 238 | ··<span·class="text">User·Configuration·Example</span> |
| 239 | </h2> | 239 | </h2> |
| 240 | <p>Assume·that·a·user·does·not·want·Erlang·to·use·the·native·lookup·method,·but | 240 | <p>Assume·that·a·user·does·not·want·Erlang·to·use·the·native·lookup·method,·but |
| 241 | wants·Erlang·to·read·all·information·necessary·from·start·and·use·that·for | 241 | wants·Erlang·to·read·all·information·necessary·from·start·and·use·that·for |
| 242 | resolving·names·and·addresses.·If·lookup·fails,·Erlang·is·to·request·the·data | 242 | resolving·names·and·addresses.·If·lookup·fails,·Erlang·is·to·request·the·data |
| 243 | from·a·nameserver·(using·the·Erlang·DNS·client,·set·to·use·EDNS·allowing·larger | 243 | from·a·nameserver·(using·the·Erlang·DNS·client,·set·to·use·EDNS·allowing·larger |
| 244 | responses).·The·resolver·configuration·is·updated·when·its·configuration·file | 244 | responses).·The·resolver·configuration·is·updated·when·its·configuration·file |
| 245 | changes.·Also,·DNS·records·are·never·to·be·cached.·The·user·configuration·file | 245 | changes.·Also,·DNS·records·are·never·to·be·cached.·The·user·configuration·file |
| 246 | (in·this·example·named·<code·class="inline">erl_inetrc</code>,·stored·in·directory·<code·class="inline">./cfg_files</code>)·can·then | 246 | (in·this·example·named·<code·class="inline">erl_inetrc</code>,·stored·in·directory·<code·class="inline">./cfg_files</code>)·can·then |
| 247 | look·as·follows·(Unix):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·--·ERLANG·INET·CONFIGURATION·FILE·--</span><span·class="w"> | 247 | look·as·follows·(Unix):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·--·ERLANG·INET·CONFIGURATION·FILE·--</span><span·class="w"> |
| 248 | </span><span·class="c1">%%·read·the·hosts·file</span><span·class="w"> | 248 | </span><span·class="c1">%%·read·the·hosts·file</span><span·class="w"> |
| 249 | </span><span·class="p"·data-group-id=" | 249 | </span><span·class="p"·data-group-id="0046472132-1">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/etc/hosts"</span><span·class="p"·data-group-id="00464[·...·truncated·by·diffoscope;·len:·3,·SHA:·74de057f768beb42de17ffc4b8a56100f0bed85947ecacaef111e3d3ec997950·...·]32-1">}</span><span·class="p">.</span><span·class="w"> |
| 250 | </span><span·class="c1">%%·add·a·particular·host</span><span·class="w"> | 250 | </span><span·class="c1">%%·add·a·particular·host</span><span·class="w"> |
| 251 | </span><span·class="p"·data-group-id=" | 251 | </span><span·class="p"·data-group-id="0046472132-2">{</span><span·class="ss">host</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0046472132-3">{</span><span·class="mi">134</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·361,·SHA:·4dc93bf29ef6eae2893e2b16ceb45674d137122d145bc2a0188cb71ded7c44c0·...·]32-2">}</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="c1">%%·do·not·monitor·the·hosts·file</span><span·class="w"> | 252 | </span><span·class="c1">%%·do·not·monitor·the·hosts·file</span><span·class="w"> |
| 253 | </span><span·class="p"·data-group-id=" | 253 | </span><span·class="p"·data-group-id="0046472132-5">{</span><span·class="ss">hosts_file</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p"·data-group-id="0046472132-5">}</span><span·class="p">.</span><span·class="w"> |
| 254 | </span><span·class="c1">%%·read·and·monitor·nameserver·config·from·here</span><span·class="w"> | 254 | </span><span·class="c1">%%·read·and·monitor·nameserver·config·from·here</span><span·class="w"> |
| 255 | </span><span·class="p"·data-group-id=" | 255 | </span><span·class="p"·data-group-id="0046472132-6">{</span><span·class="ss">resolv_conf</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/usr/local/etc/resolv.conf"</span><span·class="p"·data-group-id="0046472132-6">}</span><span·class="p">.</span><span·class="w"> |
| 256 | </span><span·class="c1">%%·enable·EDNS</span><span·class="w"> | 256 | </span><span·class="c1">%%·enable·EDNS</span><span·class="w"> |
| 257 | </span><span·class="p"·data-group-id=" | 257 | </span><span·class="p"·data-group-id="0046472132-7">{</span><span·class="ss">edns</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="0046472132-7">}</span><span·class="p">.</span><span·class="w"> |
| 258 | </span><span·class="c1">%%·disable·caching</span><span·class="w"> | 258 | </span><span·class="c1">%%·disable·caching</span><span·class="w"> |
| 259 | </span><span·class="p"·data-group-id=" | 259 | </span><span·class="p"·data-group-id="0046472132-8">{</span><span·class="ss">cache_size</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="0046472132-8">}</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="c1">%%·specify·lookup·method</span><span·class="w"> | 260 | </span><span·class="c1">%%·specify·lookup·method</span><span·class="w"> |
| 261 | </span><span·class="p"·data-group-id=" | 261 | </span><span·class="p"·data-group-id="0046472132-9">{</span><span·class="ss">lookup</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0046472132-10">[</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">dns</span[·...·truncated·by·diffoscope;·len:·94,·SHA:·c4f11034dc995f4c4932e478c68814198b8cfbb161eb63645cda2b8c5286cd81·...·]32-9">}</span><span·class="p">.</span></code></pre><p>And·Erlang·can,·for·example,·be·started·as·follows:</p><pre><code·class="text">%·erl·-sname·my_node·-kernel·inetrc·'"./cfg_files/erl_inetrc"'</code></pre> |
| 262 | </div> | 262 | </div> |
| 263 | <div·class="bottom-actions"·id="bottom-actions"> | 263 | <div·class="bottom-actions"·id="bottom-actions"> |
| 264 | ··<div·class="bottom-actions-item"> | 264 | ··<div·class="bottom-actions-item"> |
| 265 | ······<a·href="driver.html"·class="bottom-actions-button"·rel="prev"> | 265 | ······<a·href="driver.html"·class="bottom-actions-button"·rel="prev"> |
| 266 | ········<span·class="subheader"> | 266 | ········<span·class="subheader"> |
| Offset 301, 15 lines modified | Offset 301, 15 lines modified | ||
| 301 | ······<p·class="built-using"> | 301 | ······<p·class="built-using"> |
| 302 | ········Built·using | 302 | ········Built·using |
| 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 305 | ······</p> | 305 | ······</p> |
| 306 | <p>Copyright·©·1996-202 | 306 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 307 | ····</footer> | 307 | ····</footer> |
| 308 | ··</div> | 308 | ··</div> |
| 309 | </main> | 309 | </main> |
| 310 | </div> | 310 | </div> |
| 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 312 | ··<script> | 312 | ··<script> |
| Max diff block lines reached; 0/46530 bytes (0.00%) of diff not shown. | |||
| Offset 157, 16 lines modified | Offset 157, 16 lines modified | ||
| 157 | BF</code></pre><p>If·multiple·<code·class="inline">-eval</code>·expressions·are·specified,·they·are·evaluated·sequentially | 157 | BF</code></pre><p>If·multiple·<code·class="inline">-eval</code>·expressions·are·specified,·they·are·evaluated·sequentially |
| 158 | in·the·order·specified.·<code·class="inline">-eval</code>·expressions·are·evaluated·sequentially·with | 158 | in·the·order·specified.·<code·class="inline">-eval</code>·expressions·are·evaluated·sequentially·with |
| 159 | <code·class="inline">-s</code>·and·<code·class="inline">-run</code>·function·calls·(this·also·in·the·order·specified).·As·with | 159 | <code·class="inline">-s</code>·and·<code·class="inline">-run</code>·function·calls·(this·also·in·the·order·specified).·As·with |
| 160 | <code·class="inline">-s</code>·and·<code·class="inline">-run</code>,·an·evaluation·that·does·not·terminate·blocks·the·system | 160 | <code·class="inline">-s</code>·and·<code·class="inline">-run</code>,·an·evaluation·that·does·not·terminate·blocks·the·system |
| 161 | initialization·process.</p></li><li><p><strong><code·class="inline">-extra</code></strong>·-·Everything·following·<code·class="inline">-extra</code>·is·considered·plain·arguments·and | 161 | initialization·process.</p></li><li><p><strong><code·class="inline">-extra</code></strong>·-·Everything·following·<code·class="inline">-extra</code>·is·considered·plain·arguments·and |
| 162 | can·be·retrieved·using·<a·href="#get_plain_arguments/0"><code·class="inline">get_plain_arguments/0</code></a>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-extra·+A·1·--</span><span·class="w"> | 162 | can·be·retrieved·using·<a·href="#get_plain_arguments/0"><code·class="inline">get_plain_arguments/0</code></a>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-extra·+A·1·--</span><span·class="w"> |
| 163 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 163 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 164 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id=" | 164 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id="5734070300-1">(</span><span·class="p"·data-group-id="5734070300-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p"·data-group-id=" | 165 | </span><span·class="p"·data-group-id="5734070300-2">[</span><span·class="s">"+A"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p">,</span><span·class="s">"--"</span><span·class="p"·data-group-id="5734070300-2">]</span></code></pre><p>The·<code·class="inline">-extra</code>·flag·can·be·passed·on·the·command·line,·through·<code·class="inline">ERL_*FLAGS</code>·or |
| 166 | <code·class="inline">-args_file</code>.·It·only·effects·the·remaining·command-line·flags·in·the·entity | 166 | <code·class="inline">-args_file</code>.·It·only·effects·the·remaining·command-line·flags·in·the·entity |
| 167 | in·which·it·is·passed.·If·multiple·<code·class="inline">-extra</code>·flags·are·passed·they·are | 167 | in·which·it·is·passed.·If·multiple·<code·class="inline">-extra</code>·flags·are·passed·they·are |
| 168 | concatenated·using·the·same·order·rules·as·<code·class="inline">ERL_*FLAGS</code>·or·<code·class="inline">-args_file</code>·in | 168 | concatenated·using·the·same·order·rules·as·<code·class="inline">ERL_*FLAGS</code>·or·<code·class="inline">-args_file</code>·in |
| 169 | which·they·are·given.</p><p>Example:</p><pre><code·class="text">%·ERL_AFLAGS="-extra·a"·ERL_ZFLAGS="-extra·d"·erl·-extra·b·-extra·c | 169 | which·they·are·given.</p><p>Example:</p><pre><code·class="text">%·ERL_AFLAGS="-extra·a"·ERL_ZFLAGS="-extra·d"·erl·-extra·b·-extra·c |
| 170 | ... | 170 | ... |
| 171 | 1>·init:get_plain_arguments(). | 171 | 1>·init:get_plain_arguments(). |
| 172 | ["a","b","-extra","c","d"]</code></pre></li><li><p><strong><code·class="inline">-S·Mod·[Func·[Arg1,·Arg2,·...]]</code></strong>·-·Evaluates·the·specified·function·call | 172 | ["a","b","-extra","c","d"]</code></pre></li><li><p><strong><code·class="inline">-S·Mod·[Func·[Arg1,·Arg2,·...]]</code></strong>·-·Evaluates·the·specified·function·call |
| Offset 212, 21 lines modified | Offset 212, 21 lines modified | ||
| 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 213 | ··</a> | 213 | ··</a> |
| 214 | ··<span·class="text">Example</span> | 214 | ··<span·class="text">Example</span> |
| 215 | </h2> | 215 | </h2> |
| 216 | <pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·--·a·b·-children·thomas·claire·-ages·7·3·--·x·y</span><span·class="w"> | 216 | <pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·--·a·b·-children·thomas·claire·-ages·7·3·--·x·y</span><span·class="w"> |
| 217 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 217 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id=" | 218 | </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_plain_arguments</span><span·class="p"·data-group-id="0276593194-1">(</span><span·class="p"·data-group-id="0276593194-1">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="p"·data-group-id=" | 219 | </span><span·class="p"·data-group-id="0276593194-2">[</span><span·class="s">"a"</span><span·class="p">,</span><span·class="s">"b"</span><span·class="p">,</span><span·class="s">"x"</span><span·class="p">,</span><span·class="s">"y"</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·4f805ecd57bcbd350b46f2803f294c941989e07a5068060b19d07c03f1567c07·...·]-2">]</span><span·class="gp·unselectable"> |
| 220 | 2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 220 | 2>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="0276593194-3">(</span><span·class="ss">children</span><span·class="p"·data-group-id="0276593194-3">)</span><span·class="p">.</span><span·class="w"> |
| 221 | </span><span·class="p"·data-group-id=" | 221 | </span><span·class="p"·data-group-id="0276593194-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0276593194-5">[</span><span·class="p"·data-group-id="0276593194-6">[</span><span·class="s">"thomas"</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·175,·SHA:·8d1241e4d86918d9bfaec151b5dbd7a774de85ab2ad6030a5a2b29b016a3853b·...·]-4">}</span><span·class="gp·unselectable"> |
| 222 | 3>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 222 | 3>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="0276593194-7">(</span><span·class="ss">ages</span><span·class="p"·data-group-id="0276593194-7">)</span><span·class="p">.</span><span·class="w"> |
| 223 | </span><span·class="p"·data-group-id=" | 223 | </span><span·class="p"·data-group-id="0276593194-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0276593194-9">[</span><span·class="p"·data-group-id="0276593194-10">[</span><span·class="s">"7"</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·191,·SHA:·ad4bc32f0b76cb05e4586e639d9589d4e4d57dfb339656fe3e8e0270d93e72b2·...·]-8">}</span><span·class="gp·unselectable"> |
| 224 | 4>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 224 | 4>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="0276593194-11">(</span><span·class="ss">silly</span><span·class="p"·data-group-id="0276593194-11">)</span><span·class="p">.</span><span·class="w"> |
| 225 | </span><span·class="ss">error</span></code></pre><h2·id="module-see-also"·class="section-heading"> | 225 | </span><span·class="ss">error</span></code></pre><h2·id="module-see-also"·class="section-heading"> |
| 226 | ··<a·href="#module-see-also"·class="hover-link"> | 226 | ··<a·href="#module-see-also"·class="hover-link"> |
| 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 228 | ··</a> | 228 | ··</a> |
| 229 | ··<span·class="text">See·Also</span> | 229 | ··<span·class="text">See·Also</span> |
| 230 | </h2> | 230 | </h2> |
| 231 | <p><a·href="erl_prim_loader.html"><code·class="inline">erl_prim_loader</code></a>,·<a·href="../../../lib/kernel-10.2.7.1/doc/html/heart.html"><code·class="inline">heart</code></a></p> | 231 | <p><a·href="erl_prim_loader.html"><code·class="inline">erl_prim_loader</code></a>,·<a·href="../../../lib/kernel-10.2.7.1/doc/html/heart.html"><code·class="inline">heart</code></a></p> |
| Offset 512, 20 lines modified | Offset 512, 20 lines modified | ||
| 512 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_argument(Flag)·->·{ok,·Arg}·|·error·when·Flag·::·<a·href="erlang.html#t:atom/0">atom</a>(),·Arg·::·[Values·::·[<a·href="erlang.html#t:string/0">string</a>()]].</pre> | 512 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_argument(Flag)·->·{ok,·Arg}·|·error·when·Flag·::·<a·href="erlang.html#t:atom/0">atom</a>(),·Arg·::·[Values·::·[<a·href="erlang.html#t:string/0">string</a>()]].</pre> |
| 513 | ······</div> | 513 | ······</div> |
| 514 | <p>Returns·all·values·associated·with·the·command-line·user·flag·<code·class="inline">Flag</code>.</p><p>If·<code·class="inline">Flag</code>·is·provided·several·times,·each·<code·class="inline">Values</code>·is·returned·in·preserved·order. | 514 | <p>Returns·all·values·associated·with·the·command-line·user·flag·<code·class="inline">Flag</code>.</p><p>If·<code·class="inline">Flag</code>·is·provided·several·times,·each·<code·class="inline">Values</code>·is·returned·in·preserved·order. |
| 515 | Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-a·b·c·-a·d</span><span·class="w"> | 515 | Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-a·b·c·-a·d</span><span·class="w"> |
| 516 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 516 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 517 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id=" | 517 | 1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="5522579195-1">(</span><span·class="ss">a</span><span·class="p"·data-group-id="5522579195-1">)</span><span·class="p">.</span><span·class="w"> |
| 518 | </span><span·class="p"·data-group-id=" | 518 | </span><span·class="p"·data-group-id="5522579195-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="5522579195-3">[</span><span·class="p"·data-group-id="5522579195-4">[</span><span·class="s">"b"</span><span·class="p">,</span><span·class="s">&q[·...·truncated·by·diffoscope;·len:·331,·SHA:·2f825aedb9b3b3efa86a9dab10f83f5e7d993c4f0dc10613a1ad9f258bd5fd6a·...·]-2">}</span></code></pre><p>The·following·flags·are·defined·automatically·and·can·be·retrieved·using·this |
| 519 | function:</p><ul><li><p><strong><code·class="inline">root</code></strong>·-·The·installation·directory·of·Erlang/OTP,·<code·class="inline">$ROOT</code>:</p><pre><code·class="text">2>·init:get_argument(root). | 519 | function:</p><ul><li><p><strong><code·class="inline">root</code></strong>·-·The·installation·directory·of·Erlang/OTP,·<code·class="inline">$ROOT</code>:</p><pre><code·class="text">2>·init:get_argument(root). |
| 520 | {ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}</code></pre></li><li><p><strong><code·class="inline">progname</code></strong>·-·The·name·of·the·program·which·started·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="9 | 520 | {ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}</code></pre></li><li><p><strong><code·class="inline">progname</code></strong>·-·The·name·of·the·program·which·started·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_argument</span><span·class="p"·data-group-id="9614266849-1">(</span><span·class="ss">progname</span><span·class="p"·data-group-id="9614266849-1">)</span><span·class="p">.</span><span·class="w"> |
| 521 | </span><span·class="p"·data-group-id="9 | 521 | </span><span·class="p"·data-group-id="9614266849-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9614266849-3">[</span><span·class="p"·data-group-id="9614266849-4">[</span><span·class="s">"erl"</span><span·class="p"·data-group-id="9614266849[·...·truncated·by·diffoscope;·len:·559,·SHA:·6f1ac06a583c04564211578c65b7acf09d76f9c2d161393999cc258a088121a8·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 522 | </span><span·class="p"·data-group-id=" | 522 | </span><span·class="p"·data-group-id="1307725304-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="1307725304-3">[</span><span·class="p"·data-group-id="1307725304-4">[</span><span·class="s">"/home/harry"</span><span·class="p"·data-group-id="1[·...·truncated·by·diffoscope;·len:·115,·SHA:·643e18761f8c7b10b38486453e80dca98d01ee30b33ea56afe6106efeae02d3e·...·]-2">}</span></code></pre></li></ul><p>Returns·<code·class="inline">error</code>·if·no·value·is·associated·with·<code·class="inline">Flag</code>.</p> |
| 523 | ··</section> | 523 | ··</section> |
| 524 | </section> | 524 | </section> |
| 525 | <section·class="detail"·id="get_arguments/0"> | 525 | <section·class="detail"·id="get_arguments/0"> |
| 526 | ··<div·class="detail-header"> | 526 | ··<div·class="detail-header"> |
| 527 | ····<a·href="#get_arguments/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 527 | ····<a·href="#get_arguments/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 528 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 528 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 797, 15 lines modified | Offset 797, 15 lines modified | ||
| 797 | ······<p·class="built-using"> | 797 | ······<p·class="built-using"> |
| 798 | ········Built·using | 798 | ········Built·using |
| 799 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 799 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 800 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 800 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 801 | ······</p> | 801 | ······</p> |
| 802 | <p>Copyright·©·1996-202 | 802 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 803 | ····</footer> | 803 | ····</footer> |
| 804 | ··</div> | 804 | ··</div> |
| 805 | </main> | 805 | </main> |
| 806 | </div> | 806 | </div> |
| 807 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 807 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 808 | ··<script> | 808 | ··<script> |
| 809 | ··let·initialized·=·false; | 809 | ··let·initialized·=·false; |
| Offset 184, 15 lines modified | Offset 184, 15 lines modified | ||
| 184 | ······<p·class="built-using"> | 184 | ······<p·class="built-using"> |
| 185 | ········Built·using | 185 | ········Built·using |
| 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 188 | ······</p> | 188 | ······</p> |
| 189 | <p>Copyright·©·1996-202 | 189 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 190 | ····</footer> | 190 | ····</footer> |
| 191 | ··</div> | 191 | ··</div> |
| 192 | </main> | 192 | </main> |
| 193 | </div> | 193 | </div> |
| 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 195 | ··<script> | 195 | ··<script> |
| 196 | ··let·initialized·=·false; | 196 | ··let·initialized·=·false; |
| Offset 367, 78 lines modified | Offset 367, 78 lines modified | ||
| 367 | language,·that·is,·for·their·side·effects.·Functions·with·side·effects·are·also | 367 | language,·that·is,·for·their·side·effects.·Functions·with·side·effects·are·also |
| 368 | allowed·when·tracing.</p><h2·id="tracing-examples"·class="section-heading"> | 368 | allowed·when·tracing.</p><h2·id="tracing-examples"·class="section-heading"> |
| 369 | ··<a·href="#tracing-examples"·class="hover-link"> | 369 | ··<a·href="#tracing-examples"·class="hover-link"> |
| 370 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 370 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 371 | ··</a> | 371 | ··</a> |
| 372 | ··<span·class="text">Tracing·Examples</span> | 372 | ··<span·class="text">Tracing·Examples</span> |
| 373 | </h2> | 373 | </h2> |
| 374 | <p>Match·an·argument·list·of·three,·where·the·first·and·third·arguments·are·equal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 374 | <p>Match·an·argument·list·of·three,·where·the·first·and·third·arguments·are·equal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1994865161-1">[</span><span·class="p"·data-group-id="1994865161-2">{</span><span·class="p"·data-group-id="1994865161-3">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·cla[·...·truncated·by·diffoscope;·len:·116,·SHA:·eb6f0a0665089a583237c90f5005a458aa6f67b13f8936cdb41998cb9dfb98e2·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 375 | ··</span><span·class="p"·data-group-id=" | 375 | ··</span><span·class="p"·data-group-id="1994865161-4">[</span><span·class="p"·data-group-id="1994865161-4">]</span><span·class="p">,</span><span·class="w"> |
| 376 | ··</span><span·class="p"·data-group-id=" | 376 | ··</span><span·class="p"·data-group-id="1994865161-5">[</span><span·class="p"·data-group-id="1994865161-5">]</span><span·class="p"·data-group-id="1994865161-2">}</span><span·class="p"·data-group-id="1994865161-1">]</span></code></pre><p>Match·an·argument·list·of·three,·where·the·second·argument·[·...·truncated·by·diffoscope;·len:·473,·SHA:·ad1dbfcbdb85806a2cc26afe3f8fde8a66de152e35a1986784985ea040eb3687·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 377 | ··</span><span·class="p"·data-group-id=" | 377 | ··</span><span·class="p"·data-group-id="8286408504-4">[</span><span·class="p"·data-group-id="8286408504-5">{</span><span·class="w">·</span><span·class="ss">'>'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·132,·SHA:·71040b16f688d64af0a261501076f127cad55f5a05e39d2b1c7659e09c593e4b·...·]-4">]</span><span·class="p">,</span><span·class="w"> |
| 378 | ··</span><span·class="p"·data-group-id=" | 378 | ··</span><span·class="p"·data-group-id="8286408504-6">[</span><span·class="p"·data-group-id="8286408504-6">]</span><span·class="p"·data-group-id="8286408504-2">}</span><span·class="p"·data-group-id="8286408504-1">]</span></code></pre><p>Match·an·argument·list·of·three,·where·the·third·argument·is·either·a·tuple |
| 379 | containing·argument·one·and·two,·<em>or</em>·a·list·beginning·with·argument·one·and·two | 379 | containing·argument·one·and·two,·<em>or</em>·a·list·beginning·with·argument·one·and·two |
| 380 | (that·is,·<code·class="inline">[a,b,[a,b,c]]</code>·or·<code·class="inline">[a,b,{a,b}]</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 380 | (that·is,·<code·class="inline">[a,b,[a,b,c]]</code>·or·<code·class="inline">[a,b,{a,b}]</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8262877487-1">[</span><span·class="p"·data-group-id="8262877487-2">{</span><span·class="p"·data-group-id="8262877487-3">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·cl[·...·truncated·by·diffoscope;·len:·117,·SHA:·52ebac50e414296a32234fe9bf6138425e1f32d51cc1c300d2771b00d462c38c·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 381 | ··</span><span·class="p"·data-group-id=" | 381 | ··</span><span·class="p"·data-group-id="8262877487-4">[</span><span·class="p"·data-group-id="8262877487-5">{</span><span·class="ss">'orelse'</span><span·class="p">,</span><span·class="w"> |
| 382 | ······</span><span·class="p"·data-group-id=" | 382 | ······</span><span·class="p"·data-group-id="8262877487-6">{</span><span·class="ss">'=:='</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$3'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8262877487-7">{</span><span·class=[·...·truncated·by·diffoscope;·len:·284,·SHA:·e1ee6bf7c31023124976ac219f30d4e929a4b7ddc8d0ed3e24e325c981ae414c·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 383 | ······</span><span·class="p"·data-group-id=" | 383 | ······</span><span·class="p"·data-group-id="8262877487-9">{</span><span·class="ss">'and'</span><span·class="p">,</span><span·class="w"> |
| 384 | ········</span><span·class="p"·data-group-id=" | 384 | ········</span><span·class="p"·data-group-id="8262877487-10">{</span><span·class="ss">'=:='</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8262877487-11">{</span><span·clas[·...·truncated·by·diffoscope;·len:·195,·SHA:·be142155f58bf2f8bbe3c77ebfa3d67c22c79164cac715e8d1bfbfb506bc9718·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 385 | ········</span><span·class="p"·data-group-id=" | 385 | ········</span><span·class="p"·data-group-id="8262877487-12">{</span><span·class="ss">'=:='</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8262877487-13">{</span><span·clas[·...·truncated·by·diffoscope;·len:·537,·SHA:·3cccb88bb2b5a90baa28ae33a8d9be8d0c8ffd11ca9a6093ca0b2962e193fb2e·...·]-4">]</span><span·class="p">,</span><span·class="w"> |
| 386 | ··</span><span·class="p"·data-group-id=" | 386 | ··</span><span·class="p"·data-group-id="8262877487-15">[</span><span·class="p"·data-group-id="8262877487-15">]</span><span·class="p"·data-group-id="8262877487-2">}</span><span·class="p"·data-group-id="8262877487-1">]</span></code></pre><p>The·above·problem·can·also·be·solved·as·follows:</p><pre>[·...·truncated·by·diffoscope;·len:·411,·SHA:·df84082c4276aab72bccbc90cd33ddd16c7afe69b4932a46dcea61fbdfced461·...·]-4">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2}],·[],·[]}, |
| 387 | ·{['</span><span·class="sc">$1</span><span·class="ss">',·'</span><span·class="sc">$2</span><span·class="ss">',·['</span><span·class="sc">$1</span><span·class="ss">',·'</span><span·class="sc">$2</span><span·class="ss">'·|·'</span><span·class="p">_</span><span·class="err">'</span><span·class="p">]</span><span·class="p">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 387 | ·{['</span><span·class="sc">$1</span><span·class="ss">',·'</span><span·class="sc">$2</span><span·class="ss">',·['</span><span·class="sc">$1</span><span·class="ss">',·'</span><span·class="sc">$2</span><span·class="ss">'·|·'</span><span·class="p">_</span><span·class="err">'</span><span·class="p">]</span><span·class="p">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8666459863-5">[</span><span·class="p"·data-group-id="8666459863-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8666459863-6">[</span><span·class="p"·data-group-id="8666459863-6">]</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·67,·SHA:·05eaec55f84bf11ef2c42ea3a6a6bcabab14da96da5123aa56116ff3e50279e9·...·]-3">]</span></code></pre><p>Match·two·arguments,·where·the·first·is·a·tuple·beginning·with·a·list·that·in |
| 388 | turn·begins·with·the·second·argument·times·two·(that·is,·<code·class="inline">[{[4,x],y},2]</code>·or | 388 | turn·begins·with·the·second·argument·times·two·(that·is,·<code·class="inline">[{[4,x],y},2]</code>·or |
| 389 | <code·class="inline">[{[8],·y,·z},4])</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 389 | <code·class="inline">[{[8],·y,·z},4])</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6840494220-1">[</span><span·class="p"·data-group-id="6840494220-2">{</span><span·class="p"·data-group-id="6840494220-3">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·cl[·...·truncated·by·diffoscope;·len:·1174,·SHA:·d378fea610cb5ab54983ff4023554935fa34650181f036d42603d5b87b914b43·...·]-4">]</span><span·class="p">,</span><span·class="w"> |
| 390 | ··</span><span·class="p"·data-group-id=" | 390 | ··</span><span·class="p"·data-group-id="6840494220-9">[</span><span·class="p"·data-group-id="6840494220-9">]</span><span·class="p"·data-group-id="6840494220-2">}</span><span·class="p"·data-group-id="6840494220-1">]</span></code></pre><p>Match·three·arguments.·When·all·three·are·equal·and·are·numbers,·append·the |
| 391 | process·dump·to·the·trace·message,·otherwise·let·the·trace·message·be·"as·is", | 391 | process·dump·to·the·trace·message,·otherwise·let·the·trace·message·be·"as·is", |
| 392 | but·set·the·sequential·trace·token·label·to·4711:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 392 | but·set·the·sequential·trace·token·label·to·4711:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8276871952-1">[</span><span·class="p"·data-group-id="8276871952-2">{</span><span·class="p"·data-group-id="8276871952-3">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$1'</span><span·cl[·...·truncated·by·diffoscope;·len:·117,·SHA:·da0dc6c4b60afc15b1764f1a05aed054ce107d76bea8a51649bfc7faea121e65·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 393 | ··</span><span·class="p"·data-group-id=" | 393 | ··</span><span·class="p"·data-group-id="8276871952-4">[</span><span·class="p"·data-group-id="8276871952-5">{</span><span·class="nb">is_number</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8276871952-5">}</span><span·class[·...·truncated·by·diffoscope;·len:·30,·SHA:·7c7486fbe18ec30bbfe1bea326058d33c57ecba02ae510bc2d6dc33e0a2706c3·...·]-4">]</span><span·class="p">,</span><span·class="w"> |
| 394 | ··</span><span·class="p"·data-group-id=" | 394 | ··</span><span·class="p"·data-group-id="8276871952-6">[</span><span·class="p"·data-group-id="8276871952-7">{</span><span·class="ss">message</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8276871952-8">{</span><span·class="ss">process_dump</span><span·class="[·...·truncated·by·diffoscope;·len:·187,·SHA:·d1a40dae11a8e015deb3f1c0f0ca5cd81cb5a8b557835a611d1f9fe5a9f9d707·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 395 | ·</span><span·class="p"·data-group-id=" | 395 | ·</span><span·class="p"·data-group-id="8276871952-9">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8276871952-10">[</span><span·class="p"·data-group-id="8276871952-10">]</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·505,·SHA:·cb2b05cc8c8bdfb3b2c8efb472e9ab462e894af894b559e4140e704ba5f1989e·...·]-1">]</span></code></pre><p>As·can·be·noted·above,·the·parameter·list·can·be·matched·against·a·single |
| 396 | <code·class="inline">MatchVariable</code>·or·an·<code·class="inline">'_'</code>.·To·replace·the·whole·parameter·list·with·a·single | 396 | <code·class="inline">MatchVariable</code>·or·an·<code·class="inline">'_'</code>.·To·replace·the·whole·parameter·list·with·a·single |
| 397 | variable·is·a·special·case.·In·all·other·cases·the·<code·class="inline">MatchHead</code>·must·be·a | 397 | variable·is·a·special·case.·In·all·other·cases·the·<code·class="inline">MatchHead</code>·must·be·a |
| 398 | <em>proper</em>·list.</p><p>Generate·a·trace·message·only·if·the·trace·control·word·is·set·to·1:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6 | 398 | <em>proper</em>·list.</p><p>Generate·a·trace·message·only·if·the·trace·control·word·is·set·to·1:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8644281594-1">[</span><span·class="p"·data-group-id="8644281594-2">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> |
| 399 | ··</span><span·class="p"·data-group-id="6321605650-3">[</span><span·class="p"·data-group-id="6321605650-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="6321605650-5">{</span><span·class="ss">get_tcw</span><span·class="p"·data-group-id="6321605650-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="6321605650-6">{</span><span·class="ss">const</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="6321605650-6">}</span><span·class="p"·data-group-id="6321605650-4">}</span><span·class="p"·data-group-id="6321605650-3">]</span><span·class="p">,</span><span·class="w"> | ||
| 400 | ··</span><span·class="p"·data-group-id="6321605650-7">[</span><span·class="p"·data-group-id="6321605650-7">]</span><span·class="p"·data-group-id="6321605650-2">}</span><span·class="p"·data-group-id="6321605650-1">]</span></code></pre><p>Generate·a·trace·message·only·if·there·is·a·<code·class="inline">seq_trace</code>·token:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2165984430-1">[</span><span·class="p"·data-group-id="2165984430-2">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> | ||
| 401 | ··</span><span·class="p"·data-group-id="2165984430-3">[</span><span·class="p"·data-group-id="2165984430-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="2165984430-5">{</span><span·class="ss">is_seq_trace</span><span·class="p"·data-group-id="2165984430-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="2165984430-6">{</span><span·class="ss">const</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="2165984430-6">}</span><span·class="p"·data-group-id="2165984430-4">}</span><span·class="p"·data-group-id="2165984430-3">]</span><span·class="p">,</span><span·class="w"> | ||
| 402 | ··</span><span·class="p"·data-group-id=" | 399 | ··</span><span·class="p"·data-group-id="8644281594-3">[</span><span·class="p"·data-group-id="8644281594-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="8644281594-5">{</span><span·class="ss">get_tcw</span><span·class="p"·data-group-id="864428[·...·truncated·by·diffoscope;·len:·394,·SHA:·41054a75ccc7cc2ea7a996cccbd6a9332f403e7ad215d060281998d147248555·...·] |
| 400 | ··</span><span·class="p"·data-group-id="8644281594-7">[</span><span·class="p"·data-group-id="8644281594-7">]</span><span·class="p"·data-group-id="8644281594-2">}</span><span·class="p"·data-group-id="8644281594-1">]</span></code></pre><p>Generate·a·trace·message·only·if·there·is·a·<code·class="inline">seq_trace</code>·token:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9720535515-1">[</span><span·class="p"·data-group-id="9720535515-2">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w"> | ||
| 401 | ··</span><span·class="p"·data-group-id="9720535515-3">[</span><span·class="p"·data-group-id="9720535515-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="9720535515-5">{</span><span·class="ss">is_seq_trace</span><span·class="p"·data-group-id="9720535515-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="9720535515-6">{</span><span·class="ss">const</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="9720535515-6">}</span><span·class="p"·data-group-id="9720535515-4">}</span><span·class="p"·data-group-id="9720535515-3">]</span><span·class="p">,</span><span·class="w"> | ||
| 402 | ··</span><span·class="p"·data-group-id="9720535515-7">[</span><span·class="p"·data-group-id="9720535515-7">]</span><span·class="p"·data-group-id="9720535515-2">}</span><span·class="p"·data-group-id="9720535515-1">]</span></code></pre><p>Remove·the·<code·class="inline">'silent'</code>·trace·flag·when·the·first·argument·is·<code·class="inline">'verbose'</code>,·and·add | ||
| 403 | it·when·it·is·<code·class="inline">'silent':</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 403 | it·when·it·is·<code·class="inline">'silent':</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8427955332-1">[</span><span·class="p"·data-group-id="8427955332-2">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 404 | ··</span><span·class="p"·data-group-id=" | 404 | ··</span><span·class="p"·data-group-id="8427955332-3">[</span><span·class="p"·data-group-id="8427955332-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="8427955332-5">{</span><span·class="nb">hd</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·244,·SHA:·23c4c83825ce11a841d792c055a3f1393a5ffda6fad9e74bad931047a0ee557d·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 405 | ··</span><span·class="p"·data-group-id=" | 405 | ··</span><span·class="p"·data-group-id="8427955332-6">[</span><span·class="p"·data-group-id="8427955332-7">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8427955332-8">[</span><span·class="ss">silent</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·309,·SHA:·acedd60b1d434d946005ae44624d0856d975601974252de57cb12448a5b3b6b2·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 406 | ·</span><span·class="p"·data-group-id=" | 406 | ·</span><span·class="p"·data-group-id="8427955332-10">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 407 | ··</span><span·class="p"·data-group-id=" | 407 | ··</span><span·class="p"·data-group-id="8427955332-11">[</span><span·class="p"·data-group-id="8427955332-12">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="8427955332-13">{</span><span·class="nb">hd</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·248,·SHA:·b303d403e4de84983a8150515642819ea6eb214476c1cbc4d2682155f8bf4bbc·...·]-11">]</span><span·class="p">,</span><span·class="w"> |
| 408 | ··</span><span·class="p"·data-group-id=" | 408 | ··</span><span·class="p"·data-group-id="8427955332-14">[</span><span·class="p"·data-group-id="8427955332-15">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8427955332-16">[</span><span·class="p"·data-group-id="8427955332-16">]<[·...·truncated·by·diffoscope;·len:·630,·SHA:·b8e787f664d751e149fbd8bf0075073e17b114a7e4969218db19df3f706ac731·...·]-2">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 409 | ··</span><span·class="p"·data-group-id=" | 409 | ··</span><span·class="p"·data-group-id="6039554292-3">[</span><span·class="p"·data-group-id="6039554292-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="p"·data-group-id="6039554292-5">{</span><span·class="nb">length</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·242,·SHA:·650e57fccf24b691a3ee5e76ef1ae04fb34a7a3cdd0fbc6205ea4ee4d1985304·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 410 | ··</span><span·class="p"·data-group-id="9367863318-6">[</span><span·class="p"·data-group-id="9367863318-7">{</span><span·class="ss">return_trace</span><span·class="p"·data-group-id="9367863318-7">}</span><span·class="p"·data-group-id="9367863318-6">]</span><span·class="p"·data-group-id="9367863318-2">}</span><span·class="p">,</span><span·class="w"> | ||
| 411 | ·</span><span·class="p"·data-group-id=" | 410 | ··</span><span·class="p"·data-group-id="6039554292-6">[</span><span·class="p"·data-group-id="6039554292-7">{</span><span·class="ss">return_trace</span><span·class="p"·data-group-id="6039554292-7">}</span><span·class="p"·data-group-id="6039554292-6">]</span>[·...·truncated·by·diffoscope;·len:·93,·SHA:·ad8788cce9e58786318dd251cc7940436fc22f736112017d0b163859f9449773·...·] |
| 411 | ·</span><span·class="p"·data-group-id="6039554292-8">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="p"·data-group-id="6039554292-9">[</span><span·class="p"·data-group-id="6039554292-9">]</span><span·class="p">,</span><span·class="p"·data-group-id="6039554292-10">[</span><span·class="p"·data-group-id="6039554292-10">]</span><span·class="p"·data-group-id="6039554292-8">}</span><span·class="p"·data-group-id="6039554292-1">]</span></code></pre><p>Generate·a·trace·message·only·if·the·function·is·of·arity·3·and·the·first | ||
| 412 | argument·is·<code·class="inline">'trace'</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 412 | argument·is·<code·class="inline">'trace'</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9028305555-1">[</span><span·class="p"·data-group-id="9028305555-2">{</span><span·class="p"·data-group-id="9028305555-3">[</span><span·class="ss">'trace'</span><span·class="p">,</span><span·class="ss">'$2'</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·72,·SHA:·5ce9070890f0d6b6723681f52c8e0df11a8029e45bc495b8707d1ffad676efa7·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 413 | ··</span><span·class="p"·data-group-id=" | 413 | ··</span><span·class="p"·data-group-id="9028305555-4">[</span><span·class="p"·data-group-id="9028305555-4">]</span><span·class="p">,</span><span·class="w"> |
| 414 | ··</span><span·class="p"·data-group-id=" | 414 | ··</span><span·class="p"·data-group-id="9028305555-5">[</span><span·class="p"·data-group-id="9028305555-5">]</span><span·class="p"·data-group-id="9028305555-2">}</span><span·class="p">,</span><span·class="w"> |
| 415 | ·</span><span·class="p"·data-group-id=" | 415 | ·</span><span·class="p"·data-group-id="9028305555-6">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="p"·data-group-id="9028305555-7">[</span><span·class="p"·data-group-id="9028305555-7">]</span><span·class="p">,</span><span·class="p"·data-group-id="9028305555-8">[·...·truncated·by·diffoscope;·len:·155,·SHA:·2dae96206e45c12b50568a9bfaa1592e21beb6fca93fd8aad04de9bfc58a8d9e·...·]-1">]</span></code></pre><h2·id="ets-examples"·class="section-heading"> |
| 416 | ··<a·href="#ets-examples"·class="hover-link"> | 416 | ··<a·href="#ets-examples"·class="hover-link"> |
| 417 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 417 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 418 | ··</a> | 418 | ··</a> |
| 419 | ··<span·class="text">ETS·Examples</span> | 419 | ··<span·class="text">ETS·Examples</span> |
| 420 | </h2> | 420 | </h2> |
| 421 | <p>Match·all·objects·in·an·ETS·table,·where·the·first·element·is·the·atom | 421 | <p>Match·all·objects·in·an·ETS·table,·where·the·first·element·is·the·atom |
| 422 | <code·class="inline">'strider'</code>·and·the·tuple·arity·is·3,·and·return·the·whole·object:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2 | 422 | <code·class="inline">'strider'</code>·and·the·tuple·arity·is·3,·and·return·the·whole·object:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9213519546-1">[</span><span·class="p"·data-group-id="9213519546-2">{</span><span·class="p"·data-group-id="9213519546-3">{</span><span·class="ss">strider</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="s[·...·truncated·by·diffoscope;·len:·62,·SHA:·716d49e0c01899d549dacb7b1703feddde01b325d5d0d7b458b142288d5df122·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 423 | ··</span><span·class="p"·data-group-id="2 | 423 | ··</span><span·class="p"·data-group-id="9213519546-4">[</span><span·class="p"·data-group-id="9213519546-4">]</span><span·class="p">,</span><span·class="w"> |
| 424 | ··</span><span·class="p"·data-group-id="2 | 424 | ··</span><span·class="p"·data-group-id="9213519546-5">[</span><span·class="ss">'$_'</span><span·class="p"·data-group-id="9213519546-5">]</span><span·class="p"·data-group-id="9213519546-2">}</span><span·class="p"·data-group-id="9213519546-1">]</span></code></pre><p>Match·all·objects·in·an·ETS·table·with·arity·>·1·and·the·first·element·is |
| 425 | 'gandalf',·and·return·element·2:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 425 | 'gandalf',·and·return·element·2:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2588047941-1">[</span><span·class="p"·data-group-id="2588047941-2">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 426 | ··</span><span·class="p"·data-group-id=" | 426 | ··</span><span·class="p"·data-group-id="2588047941-3">[</span><span·class="p"·data-group-id="2588047941-4">{</span><span·class="ss">'=='</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">gandalf</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·830,·SHA:·90862d0e61a306acb883ce642f3070e0ae9515752c02fddefda08422bcd21238·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 427 | ··</span><span·class="p"·data-group-id=" | 427 | ··</span><span·class="p"·data-group-id="2588047941-8">[</span><span·class="p"·data-group-id="2588047941-9">{</span><span·class="nb">element</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="2588047941[·...·truncated·by·diffoscope;·len:·159,·SHA:·db74f2aaf558b96f17dc9350d08c3ddf912811a668b1ae710a97133fdcfa3248·...·]-1">]</span></code></pre><p>In·this·example,·if·the·first·element·had·been·the·key,·it·is·much·more |
| 428 | efficient·to·match·that·key·in·the·<code·class="inline">MatchHead</code>·part·than·in·the | 428 | efficient·to·match·that·key·in·the·<code·class="inline">MatchHead</code>·part·than·in·the |
| 429 | <code·class="inline">MatchConditions</code>·part.·The·search·space·of·the·tables·is·restricted·with | 429 | <code·class="inline">MatchConditions</code>·part.·The·search·space·of·the·tables·is·restricted·with |
| 430 | regards·to·the·<code·class="inline">MatchHead</code>·so·that·only·objects·with·the·matching·key·are | 430 | regards·to·the·<code·class="inline">MatchHead</code>·so·that·only·objects·with·the·matching·key·are |
| 431 | searched.</p><p>Match·tuples·of·three·elements,·where·the·second·element·is·either·<code·class="inline">'merry'</code>·or | 431 | searched.</p><p>Match·tuples·of·three·elements,·where·the·second·element·is·either·<code·class="inline">'merry'</code>·or |
| 432 | <code·class="inline">'pippin'</code>,·and·return·the·whole·objects:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 432 | <code·class="inline">'pippin'</code>,·and·return·the·whole·objects:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2714591151-1">[</span><span·class="p"·data-group-id="2714591151-2">{</span><span·class="p"·data-group-id="2714591151-3">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="ss">merry</span><span·class="p">,</span><span·class="ss"[·...·truncated·by·diffoscope;·len:·60,·SHA:·1b32fb80d299ef36e7fefb9944f57c53440d276e03b528f4467f680483469dee·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 433 | ··</span><span·class="p"·data-group-id=" | 433 | ··</span><span·class="p"·data-group-id="2714591151-4">[</span><span·class="p"·data-group-id="2714591151-4">]</span><span·class="p">,</span><span·class="w"> |
| 434 | ··</span><span·class="p"·data-group-id=" | 434 | ··</span><span·class="p"·data-group-id="2714591151-5">[</span><span·class="ss">'$_'</span><span·class="p"·data-group-id="2714591151-5">]</span><span·class="p"·data-group-id="2714591151-2">}</span><span·class="p">,</span><span·class="w"> |
| 435 | ·</span><span·class="p"·data-group-id=" | 435 | ·</span><span·class="p"·data-group-id="2714591151-6">{</span><span·class="p"·data-group-id="2714591151-7">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="ss">pippin</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p"·data-group-id="27[·...·truncated·by·diffoscope;·len:·8,·SHA:·097b53259d5006d47ab4b03e8f36d02bb9599d6c96f45f104a62d23f3f7e1c04·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 436 | ··</span><span·class="p"·data-group-id=" | 436 | ··</span><span·class="p"·data-group-id="2714591151-8">[</span><span·class="p"·data-group-id="2714591151-8">]</span><span·class="p">,</span><span·class="w"> |
| 437 | ··</span><span·class="p"·data-group-id=" | 437 | ··</span><span·class="p"·data-group-id="2714591151-9">[</span><span·class="ss">'$_'</span><span·class="p"·data-group-id="2714591151-9">]</span><span·class="p"·data-group-id="2714591151-6">}</span><span·class="p"·data-group-id="2714591151-1">]</span></code></pre><p>Function·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/ets.html#test_ms/2"><code·class="inline">ets:test_ms/2</code></a>·can·be·useful·for·testing·complicated·ETS·matches.</p> |
| 438 | </div> | 438 | </div> |
| 439 | <div·class="bottom-actions"·id="bottom-actions"> | 439 | <div·class="bottom-actions"·id="bottom-actions"> |
| 440 | ··<div·class="bottom-actions-item"> | 440 | ··<div·class="bottom-actions-item"> |
| 441 | ······<a·href="time_correction.html"·class="bottom-actions-button"·rel="prev"> | 441 | ······<a·href="time_correction.html"·class="bottom-actions-button"·rel="prev"> |
| 442 | ········<span·class="subheader"> | 442 | ········<span·class="subheader"> |
| Offset 477, 15 lines modified | Offset 477, 15 lines modified | ||
| 477 | ······<p·class="built-using"> | 477 | ······<p·class="built-using"> |
| 478 | ········Built·using | 478 | ········Built·using |
| 479 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 479 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 480 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 480 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 481 | ······</p> | 481 | ······</p> |
| 482 | <p>Copyright·©·1996-202 | 482 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 483 | ····</footer> | 483 | ····</footer> |
| 484 | ··</div> | 484 | ··</div> |
| 485 | </main> | 485 | </main> |
| 486 | </div> | 486 | </div> |
| 487 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 487 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 488 | ··<script> | 488 | ··<script> |
| 489 | ··let·initialized·=·false; | 489 | ··let·initialized·=·false; |
| Offset 224, 15 lines modified | Offset 224, 15 lines modified | ||
| 224 | <ul><li><p><a·href="../../../lib/kernel-10.2.7.1/doc/html/gen_sctp.html#peeloff/2"><code·class="inline">gen_sctp:peeloff/2</code></a>·has·been·fixed·to·inherit·socket·options·to·the·peeled·off·socket·more·like·<a·href="../../../lib/kernel-10.2.7.1/doc/html/gen_tcp.html#accept/1"><code·class="inline">gen_tcp:accept/1</code></a>,·for·example·the·options·<code·class="inline">tos</code>·or·<code·class="inline">tclass</code>.</p><p>When·setting·SCTP·options·that·are·unsupported·on·the·platform,·some·should·be·silently·ignored,·but·a·bug·caused·the·option·parsing·to·derail·so·the·options·after·could·bail·out·and·cause·an·error·instead.··This·has·been·fixed.</p><p>Own·Id:·OTP-19225·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8789"·title="">PR-8789</a></p></li><li><p>Fixed·a·bug·where·Erlang·would·corrupt·the·terminal·settings·if·stdin·was·a·TTY·but·stdout·was·not.</p><p>Own·Id:·OTP-19232·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8794"·title="">PR-8794</a>,·<a·href="https://github.com/erlang/otp/issues/8487"·title="">GH-8487</a></p></li><li><p>Fixed·a·bug·in·the·non-JIT·VM·when·loading·a·NIF·over·a·function·that·is·already·traced·by·more·than·one·session.·This·caused·a·VM·crash.·This·bug·has·existed·since·OTP-27.0,·where·multiple·trace·sessions·were·introduced.</p><p>Own·Id:·OTP-19248·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8856"·title="">PR-8856</a></p></li><li><p>Fixed·a·bug·where·the·loading·of·modules·with·extremely·large·binary·construction·instructions·crashed·the·emulator·on·AArch64.</p><p>Own·Id:·OTP-19261·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8815"·title="">GH-8815</a>,·<a·href="https://github.com/erlang/otp/pull/8816"·title="">PR-8816</a></p></li><li><p><a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html#getifaddrs/1"><code·class="inline">inet:getifaddrs/0,1</code></a>·is·improved·when·using | 224 | <ul><li><p><a·href="../../../lib/kernel-10.2.7.1/doc/html/gen_sctp.html#peeloff/2"><code·class="inline">gen_sctp:peeloff/2</code></a>·has·been·fixed·to·inherit·socket·options·to·the·peeled·off·socket·more·like·<a·href="../../../lib/kernel-10.2.7.1/doc/html/gen_tcp.html#accept/1"><code·class="inline">gen_tcp:accept/1</code></a>,·for·example·the·options·<code·class="inline">tos</code>·or·<code·class="inline">tclass</code>.</p><p>When·setting·SCTP·options·that·are·unsupported·on·the·platform,·some·should·be·silently·ignored,·but·a·bug·caused·the·option·parsing·to·derail·so·the·options·after·could·bail·out·and·cause·an·error·instead.··This·has·been·fixed.</p><p>Own·Id:·OTP-19225·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8789"·title="">PR-8789</a></p></li><li><p>Fixed·a·bug·where·Erlang·would·corrupt·the·terminal·settings·if·stdin·was·a·TTY·but·stdout·was·not.</p><p>Own·Id:·OTP-19232·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8794"·title="">PR-8794</a>,·<a·href="https://github.com/erlang/otp/issues/8487"·title="">GH-8487</a></p></li><li><p>Fixed·a·bug·in·the·non-JIT·VM·when·loading·a·NIF·over·a·function·that·is·already·traced·by·more·than·one·session.·This·caused·a·VM·crash.·This·bug·has·existed·since·OTP-27.0,·where·multiple·trace·sessions·were·introduced.</p><p>Own·Id:·OTP-19248·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8856"·title="">PR-8856</a></p></li><li><p>Fixed·a·bug·where·the·loading·of·modules·with·extremely·large·binary·construction·instructions·crashed·the·emulator·on·AArch64.</p><p>Own·Id:·OTP-19261·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8815"·title="">GH-8815</a>,·<a·href="https://github.com/erlang/otp/pull/8816"·title="">PR-8816</a></p></li><li><p><a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html#getifaddrs/1"><code·class="inline">inet:getifaddrs/0,1</code></a>·is·improved·when·using |
| 225 | inet_backend·=·socket.</p><p>Own·Id:·OTP-19264</p></li><li><p><a·href="../../../lib/stdlib-6.2.2.1/doc/html/win32reg.html#value/2"><code·class="inline">win32reg:value/2</code></a>·will·no·longer·crash·the·emulator·when·the·value·is·an·unterminated·REG_SZ·of·size·0.</p><p>Own·Id:·OTP-19283·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8903"·title="">GH-8903</a>,·<a·href="https://github.com/erlang/otp/pull/8912"·title="">PR-8912</a></p></li><li><p><code·class="inline">Makefile</code>·dependency·generation·on·Windows·in·WSL·2·has·been·corrected.</p><p>Own·Id:·OTP-19300·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8955"·title="">PR-8955</a></p></li><li><p>Fix·lock·order·violation·if·a·NIF·monitor·<code·class="inline">down</code>·callback·calls·<code·class="inline">enif_whereis_pid</code>.·Would·cause·debug·emulator·to·crash·but·could·potentially·lead·to·deadlocks·in·optimized·emulator.</p><p>Own·Id:·OTP-19330·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8983"·title="">GH-8983</a>,·<a·href="https://github.com/erlang/otp/pull/9008"·title="">PR-9008</a></p></li><li><p>Fixed·compilation·faults·when·compiling·using·<code·class="inline">--enable-vm-probes</code>.</p><p>Own·Id:·OTP-19333</p></li><li><p>Fixed·<code·class="inline">erl_nif.h</code>·on·Windows·to·compile·when·gcc·or·clang·is·used.</p><p>Own·Id:·OTP-19341·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9016"·title="">PR-9016</a></p></li><li><p>Fixed·a·minor·issue·in·the·JIT·debug·information·that·confused·tools·like·GDB·and·perf.</p><p>Own·Id:·OTP-19362·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9003"·title="">PR-9003</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> | 225 | inet_backend·=·socket.</p><p>Own·Id:·OTP-19264</p></li><li><p><a·href="../../../lib/stdlib-6.2.2.1/doc/html/win32reg.html#value/2"><code·class="inline">win32reg:value/2</code></a>·will·no·longer·crash·the·emulator·when·the·value·is·an·unterminated·REG_SZ·of·size·0.</p><p>Own·Id:·OTP-19283·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8903"·title="">GH-8903</a>,·<a·href="https://github.com/erlang/otp/pull/8912"·title="">PR-8912</a></p></li><li><p><code·class="inline">Makefile</code>·dependency·generation·on·Windows·in·WSL·2·has·been·corrected.</p><p>Own·Id:·OTP-19300·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8955"·title="">PR-8955</a></p></li><li><p>Fix·lock·order·violation·if·a·NIF·monitor·<code·class="inline">down</code>·callback·calls·<code·class="inline">enif_whereis_pid</code>.·Would·cause·debug·emulator·to·crash·but·could·potentially·lead·to·deadlocks·in·optimized·emulator.</p><p>Own·Id:·OTP-19330·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8983"·title="">GH-8983</a>,·<a·href="https://github.com/erlang/otp/pull/9008"·title="">PR-9008</a></p></li><li><p>Fixed·compilation·faults·when·compiling·using·<code·class="inline">--enable-vm-probes</code>.</p><p>Own·Id:·OTP-19333</p></li><li><p>Fixed·<code·class="inline">erl_nif.h</code>·on·Windows·to·compile·when·gcc·or·clang·is·used.</p><p>Own·Id:·OTP-19341·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9016"·title="">PR-9016</a></p></li><li><p>Fixed·a·minor·issue·in·the·JIT·debug·information·that·confused·tools·like·GDB·and·perf.</p><p>Own·Id:·OTP-19362·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9003"·title="">PR-9003</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> |
| 226 | ··<a·href="#improvements-and-new-features"·class="hover-link"> | 226 | ··<a·href="#improvements-and-new-features"·class="hover-link"> |
| 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 228 | ··</a> | 228 | ··</a> |
| 229 | ··<span·class="text">Improvements·and·New·Features</span> | 229 | ··<span·class="text">Improvements·and·New·Features</span> |
| 230 | </h3> | 230 | </h3> |
| 231 | <ul><li><p>Improved·documentation·of·<a·href="time_correction.html#timers">timers</a>.</p><p>Own·Id:·OTP-19360·Aux·Id:·ERIERL-1149,·<a·href="https://github.com/erlang/otp/pull/9062"·title="">PR-9062</a></p></li><li><p>The·label·for·a·process·can·now·be·retrieved·also·using·<code·class="inline">process_info(Pid,·label)</code>·in·addition·to·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/proc_lib.html#get_label/1"><code·class="inline">proc_lib:get_label/1</code></a>.</p><p>This·new·option·is·useful·when·one·wants·to·retrieve·more·than·one·process·info·item.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">process_info</span><span·class="p"·data-group-id=" | 231 | <ul><li><p>Improved·documentation·of·<a·href="time_correction.html#timers">timers</a>.</p><p>Own·Id:·OTP-19360·Aux·Id:·ERIERL-1149,·<a·href="https://github.com/erlang/otp/pull/9062"·title="">PR-9062</a></p></li><li><p>The·label·for·a·process·can·now·be·retrieved·also·using·<code·class="inline">process_info(Pid,·label)</code>·in·addition·to·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/proc_lib.html#get_label/1"><code·class="inline">proc_lib:get_label/1</code></a>.</p><p>This·new·option·is·useful·when·one·wants·to·retrieve·more·than·one·process·info·item.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">process_info</span><span·class="p"·data-group-id="2694755512-1">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2694755512-2">[</span><span·class="ss">label</span><span·class="p">,</span><span·class="ss">registered_name</span><span·class="p"[·...·truncated·by·diffoscope;·len:·79,·SHA:·a91b017c902487b97a90d88da0f665e039a12a421f2cf0d065f64af39f3e92fe·...·]-1">)</span></code></pre><p>Own·Id:·OTP-19373·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9108"·title="">PR-9108</a></p></li></ul><h2·id="erts-15-1-3"·class="section-heading"> |
| 232 | ··<a·href="#erts-15-1-3"·class="hover-link"> | 232 | ··<a·href="#erts-15-1-3"·class="hover-link"> |
| 233 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 233 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 234 | ··</a> | 234 | ··</a> |
| 235 | ··<span·class="text">Erts·15.1.3</span> | 235 | ··<span·class="text">Erts·15.1.3</span> |
| 236 | </h2> | 236 | </h2> |
| 237 | <h3·id="fixed-bugs-and-malfunctions-8"·class="section-heading"> | 237 | <h3·id="fixed-bugs-and-malfunctions-8"·class="section-heading"> |
| 238 | ··<a·href="#fixed-bugs-and-malfunctions-8"·class="hover-link"> | 238 | ··<a·href="#fixed-bugs-and-malfunctions-8"·class="hover-link"> |
| Offset 272, 16 lines modified | Offset 272, 16 lines modified | ||
| 272 | </h2> | 272 | </h2> |
| 273 | <h3·id="fixed-bugs-and-malfunctions-11"·class="section-heading"> | 273 | <h3·id="fixed-bugs-and-malfunctions-11"·class="section-heading"> |
| 274 | ··<a·href="#fixed-bugs-and-malfunctions-11"·class="hover-link"> | 274 | ··<a·href="#fixed-bugs-and-malfunctions-11"·class="hover-link"> |
| 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 275 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 276 | ··</a> | 276 | ··</a> |
| 277 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 277 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 278 | </h3> | 278 | </h3> |
| 279 | <ul><li><p>The·<code·class="inline">erl·-man·example</code>·has·been·corrected·to·not·consider·values·set·in·<code·class="inline">ERL_ZFLAGS</code>·and·stop·parsing·arguments·when·a·<code·class="inline">--</code>·is·encountered.</p><p>Own·Id:·OTP-19098·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8478"·title="">PR-8478</a>,·<a·href="https://github.com/erlang/otp/issues/8477"·title="">GH-8477</a></p></li><li><p>Compiler·warnings·for··Windows·I/O·back-end·have·been·silenced.</p><p>Own·Id:·OTP-19113</p></li><li><p>Bugs·related·to·<code·class="inline">return_to</code>·trace·have·been·fixed.·It·did·not·work·for·more·than·once·trace·session·and·it·did·sometimes·not·trigger·for·exceptions.</p><p>Own·Id:·OTP-19122</p></li><li><p>Potential·deadlocks·while·writing·a·crash·dump·have·been·eliminated.</p><p>Own·Id:·OTP-19133·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8521"·title="">PR-8521</a>,·<a·href="https://github.com/erlang/otp/issues/8498"·title="">GH-8498</a></p></li><li><p>When·loading·a·damaged·or·too·old·BEAM·file,·the·runtime·system·could·crash.</p><p>Own·Id:·OTP-19153·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8623"·title="">PR-8623</a></p></li><li><p>A·scheduler·thread·could·get·stuck·when·deleting·a·memory·allocator·carrier·when·adjacent·carriers·were·deleted·and/or·inserted·simultaneously·by·other·schedulers.·This·in·turn·could·cause·the·other·schedulers·to·get·stuck·as·well.</p><p>Own·Id:·OTP-19154·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8613"·title="">GH-8613</a>,·<a·href="https://github.com/erlang/otp/pull/8627"·title="">PR-8627</a></p></li><li><p>Statistics·for·number·of·carriers·in·a·shared·pool·after·calling·<code·class="inline">instrument:allocations</code>·or·<code·class="inline">instrument:carriers</code>·are·now·correct.·Also,·a·potential·bug·in·carrier·block·scanning·was·eliminated.</p><p>Own·Id:·OTP-19166·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8636"·title="">PR-8636</a></p></li><li><p>A·race·in·the·kTLS·flavour·of·SSL·distribution·has·been·fixed·so·that·<code·class="inline">inet_drv.c</code>·doesn't·read·ahead·too·much·data,·which·could·cause·the·kTLS·encryption·to·be·activated·too·late·when·some·encrypted·data·had·already·been·read·into·the·<code·class="inline">inet_drv.c</code>·buffer·as·unencrypted.</p><p>Own·Id:·OTP-19175·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8561"·title="">GH-8561</a>,·<a·href="https://github.com/erlang/otp/pull/8690"·title="">PR-8690</a></p></li><li><p>Fixed·an·emulator·crash·relating·to·compressed·ETS·tables.</p><p>Own·Id:·OTP-19176·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8683"·title="">PR-8683</a></p></li><li><p>A·function·(encode_sockaddr)·was·called·with·superfluous·argument,·on·Windows,·in·the·net·nif.</p><p>Own·Id:·OTP-19181</p></li><li><p>Fixed·a·crash·that·could·happen·on·reallocation·failure.</p><p>Own·Id:·OTP-19192</p></li><li><p>Man·pages·are·now·available·for·<code·class="inline">erl</code>,·<code·class="inline">erlc</code>,·<code·class="inline">dialyzer</code>,·and·all·other·programs·that·are·included·in·Erlang/OTP.</p><p>Own·Id:·OTP-19201·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8740"·title="">PR-8740</a></p></li><li><p>A·previous·correction·in·the·Erlang/OTP·27.0.1·emergency·patch·had·the·unfortunate·side·effect·of·sometimes·causing·an·unnecessary·fullsweep·(major)·garbage·collection·instead·of·a··generation·(minor)·garbage·collection.·This·has·been·corrected.</p><p>Own·Id:·OTP-19209·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8751"·title="">PR-8751</a>,·<a·href="https://github.com/erlang/otp/pull/8539"·title="">PR-8539</a></p></li><li><p>Fixed·trace·matchspec·functions·<code·class="inline">trace</code>·and·<code·class="inline">enable_trace</code>·to·use·the·session·tracer·when·enabling·trace·flags·on·untraced·processes.</p><p>Own·Id:·OTP-19211·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8657"·title="">GH-8657</a></p></li><li><p>Fixed·a·typo·in·the·type·spec·for·<a·href="erlang.html#t:garbage_collection_defaults/0"><code·class="inline">erlang:garbage_collection_defaults/0</code></a>.</p><p>Own·Id:·OTP-19215·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8757"·title="">PR-8757</a></p></li><li><p>Corrected·socket:ioctl·for·genaddr·(SIOCGENADDR).</p><p>Own·Id:·OTP-19216</p></li><li><p>The·support·for·Transparent·Huge·Pages·has·been·disabled·on·non-amd64·Linux·systems.</p><p>Own·Id:·OTP-19219·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8702"·title="">PR-8702</a></p></li><li><p>Fixed·a·race·condition·on·Windows·when·upgrading·from·<code·class="inline">-noshell</code>·to·a·shell·that·would·cause·Erlang·to·crash·with·the·error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 279 | <ul><li><p>The·<code·class="inline">erl·-man·example</code>·has·been·corrected·to·not·consider·values·set·in·<code·class="inline">ERL_ZFLAGS</code>·and·stop·parsing·arguments·when·a·<code·class="inline">--</code>·is·encountered.</p><p>Own·Id:·OTP-19098·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8478"·title="">PR-8478</a>,·<a·href="https://github.com/erlang/otp/issues/8477"·title="">GH-8477</a></p></li><li><p>Compiler·warnings·for··Windows·I/O·back-end·have·been·silenced.</p><p>Own·Id:·OTP-19113</p></li><li><p>Bugs·related·to·<code·class="inline">return_to</code>·trace·have·been·fixed.·It·did·not·work·for·more·than·once·trace·session·and·it·did·sometimes·not·trigger·for·exceptions.</p><p>Own·Id:·OTP-19122</p></li><li><p>Potential·deadlocks·while·writing·a·crash·dump·have·been·eliminated.</p><p>Own·Id:·OTP-19133·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8521"·title="">PR-8521</a>,·<a·href="https://github.com/erlang/otp/issues/8498"·title="">GH-8498</a></p></li><li><p>When·loading·a·damaged·or·too·old·BEAM·file,·the·runtime·system·could·crash.</p><p>Own·Id:·OTP-19153·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8623"·title="">PR-8623</a></p></li><li><p>A·scheduler·thread·could·get·stuck·when·deleting·a·memory·allocator·carrier·when·adjacent·carriers·were·deleted·and/or·inserted·simultaneously·by·other·schedulers.·This·in·turn·could·cause·the·other·schedulers·to·get·stuck·as·well.</p><p>Own·Id:·OTP-19154·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8613"·title="">GH-8613</a>,·<a·href="https://github.com/erlang/otp/pull/8627"·title="">PR-8627</a></p></li><li><p>Statistics·for·number·of·carriers·in·a·shared·pool·after·calling·<code·class="inline">instrument:allocations</code>·or·<code·class="inline">instrument:carriers</code>·are·now·correct.·Also,·a·potential·bug·in·carrier·block·scanning·was·eliminated.</p><p>Own·Id:·OTP-19166·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8636"·title="">PR-8636</a></p></li><li><p>A·race·in·the·kTLS·flavour·of·SSL·distribution·has·been·fixed·so·that·<code·class="inline">inet_drv.c</code>·doesn't·read·ahead·too·much·data,·which·could·cause·the·kTLS·encryption·to·be·activated·too·late·when·some·encrypted·data·had·already·been·read·into·the·<code·class="inline">inet_drv.c</code>·buffer·as·unencrypted.</p><p>Own·Id:·OTP-19175·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8561"·title="">GH-8561</a>,·<a·href="https://github.com/erlang/otp/pull/8690"·title="">PR-8690</a></p></li><li><p>Fixed·an·emulator·crash·relating·to·compressed·ETS·tables.</p><p>Own·Id:·OTP-19176·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8683"·title="">PR-8683</a></p></li><li><p>A·function·(encode_sockaddr)·was·called·with·superfluous·argument,·on·Windows,·in·the·net·nif.</p><p>Own·Id:·OTP-19181</p></li><li><p>Fixed·a·crash·that·could·happen·on·reallocation·failure.</p><p>Own·Id:·OTP-19192</p></li><li><p>Man·pages·are·now·available·for·<code·class="inline">erl</code>,·<code·class="inline">erlc</code>,·<code·class="inline">dialyzer</code>,·and·all·other·programs·that·are·included·in·Erlang/OTP.</p><p>Own·Id:·OTP-19201·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8740"·title="">PR-8740</a></p></li><li><p>A·previous·correction·in·the·Erlang/OTP·27.0.1·emergency·patch·had·the·unfortunate·side·effect·of·sometimes·causing·an·unnecessary·fullsweep·(major)·garbage·collection·instead·of·a··generation·(minor)·garbage·collection.·This·has·been·corrected.</p><p>Own·Id:·OTP-19209·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8751"·title="">PR-8751</a>,·<a·href="https://github.com/erlang/otp/pull/8539"·title="">PR-8539</a></p></li><li><p>Fixed·trace·matchspec·functions·<code·class="inline">trace</code>·and·<code·class="inline">enable_trace</code>·to·use·the·session·tracer·when·enabling·trace·flags·on·untraced·processes.</p><p>Own·Id:·OTP-19211·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8657"·title="">GH-8657</a></p></li><li><p>Fixed·a·typo·in·the·type·spec·for·<a·href="erlang.html#t:garbage_collection_defaults/0"><code·class="inline">erlang:garbage_collection_defaults/0</code></a>.</p><p>Own·Id:·OTP-19215·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8757"·title="">PR-8757</a></p></li><li><p>Corrected·socket:ioctl·for·genaddr·(SIOCGENADDR).</p><p>Own·Id:·OTP-19216</p></li><li><p>The·support·for·Transparent·Huge·Pages·has·been·disabled·on·non-amd64·Linux·systems.</p><p>Own·Id:·OTP-19219·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8702"·title="">PR-8702</a></p></li><li><p>Fixed·a·race·condition·on·Windows·when·upgrading·from·<code·class="inline">-noshell</code>·to·a·shell·that·would·cause·Erlang·to·crash·with·the·error:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4894030817-1">{</span><span·class="ss">'GetOverlappedResult'</span><span·class="p">,</span><span·class="w"> |
| 280 | ··</span><span·class="ss">'The·I/O·operation·has·been·aborted·because·of·either·a·thread·exit·or·an·application·request.'</span><span·class="p"·data-group-id=" | 280 | ··</span><span·class="ss">'The·I/O·operation·has·been·aborted·because·of·either·a·thread·exit·or·an·application·request.'</span><span·class="p"·data-group-id="4894030817-1">}</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-19220·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8774"·title="">PR-8774</a>,·<a·href="https://github.com/erlang/otp/issues/7621"·title="">GH-7621</a></p></li></ul><h3·id="improvements-and-new-features-1"·class="section-heading"> |
| 281 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> | 281 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> |
| 282 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 282 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 283 | ··</a> | 283 | ··</a> |
| 284 | ··<span·class="text">Improvements·and·New·Features</span> | 284 | ··<span·class="text">Improvements·and·New·Features</span> |
| 285 | </h3> | 285 | </h3> |
| 286 | <ul><li><p>Added·functions·<code·class="inline">getservbyname</code>·and·<code·class="inline">getservbyport</code>·to·the·<code·class="inline">net</code>·module.</p><p>Own·Id:·OTP-19101·Aux·Id:·OTP-18835</p></li><li><p>Introduced·enet·|·esock·variants·of·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html"><code·class="inline">inet</code></a>·functions,·either·when·called·with·sockets, | 286 | <ul><li><p>Added·functions·<code·class="inline">getservbyname</code>·and·<code·class="inline">getservbyport</code>·to·the·<code·class="inline">net</code>·module.</p><p>Own·Id:·OTP-19101·Aux·Id:·OTP-18835</p></li><li><p>Introduced·enet·|·esock·variants·of·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html"><code·class="inline">inet</code></a>·functions,·either·when·called·with·sockets, |
| 287 | with·explicit·inet_backend·config·or·with·the·e·inet_backend·kernel·config·option.</p><p>Own·Id:·OTP-19132·Aux·Id:·OTP-19101</p></li><li><p>Optimize·process·and·port·creation·when·such·tracing·is·not·enabled·by·any·trace·session.</p><p>Own·Id:·OTP-19167·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8655"·title="">PR-8655</a></p></li><li><p>Compiler·warnings·for·some·removed·functions·have·been·corrected·to·point·out·the·correct·replacement·functions.</p><p>Own·Id:·OTP-19186·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8709"·title="">PR-8709</a></p></li><li><p>A·boolean·option·<code·class="inline">read_ahead</code>·has·been·implemented·for·<code·class="inline">gen_tcp</code>,·default·<code·class="inline">true</code>,·to·facilitate·not·reading·past·(caching·data)·the·end·of·a·packet.··In·particular,·for·kTLS,·caching·data·could·read·in·data·that·was·supposed·to·be·decrypted·by·the·platform's·network·stack,·before·crypto·parameters·could·be·activated.</p><p>Own·Id:·OTP-19199·Aux·Id:·OTP-19175,·<a·href="https://github.com/erlang/otp/issues/8561"·title="">GH-8561</a>,·<a·href="https://github.com/erlang/otp/issues/8690"·title="">GH-8690</a>,·<a·href="https://github.com/erlang/otp/issues/8785"·title="">GH-8785</a></p></li><li><p>The·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/zip.html"><code·class="inline">zip</code></a>·module·has·been·updated·with·support·for:</p><ul><li>zip64·archives·-·Archives·larger·than·4GB·or·with·more·than·2^32·entries.</li><li>extended·timestamps·-·Higher·resolution·and·in·UTC.</li><li>UID/GID·-·Save·and·extract·the·original·UID/GID.</li><li>Fixes·so·that·permission·mode·attributes·are·correctly·read·and·set·for·files·in·archives.</li><li><a·href="../../../lib/stdlib-6.2.2.1/doc/html/zip.html#list_dir/2"><code·class="inline">zip:list_dir/2</code></a>·now·also·returns·directories,·not·only·files.·(You·can·disable·this·behaviour·by·using·the·option·<code·class="inline">skip_directories</code>).</li></ul><p>Various·bugs·in·the·original·implementation·have·also·been·fixed,·such·as:</p><ul><li>Correctly·encode·and·decode·the·DOS·timestamps·for·entries·within·an·archive·(that·is·the·non-extended·timestamp).</li><li>Fix·DOS·timestamps·to·be·set·to·localtime·instead·of·UTC·(use·extended·timestamps·for·UTC·timestamps).</li><li>Use·the·unix·file·attributes·read·from·disk·when·creating·archives·instead·of·setting·everything·to·644.</li></ul><p>Own·Id:·OTP-19214·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8765"·title="">PR-8765</a></p></li></ul><h2·id="erts-15-0-1"·class="section-heading"> | 287 | with·explicit·inet_backend·config·or·with·the·e·inet_backend·kernel·config·option.</p><p>Own·Id:·OTP-19132·Aux·Id:·OTP-19101</p></li><li><p>Optimize·process·and·port·creation·when·such·tracing·is·not·enabled·by·any·trace·session.</p><p>Own·Id:·OTP-19167·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8655"·title="">PR-8655</a></p></li><li><p>Compiler·warnings·for·some·removed·functions·have·been·corrected·to·point·out·the·correct·replacement·functions.</p><p>Own·Id:·OTP-19186·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8709"·title="">PR-8709</a></p></li><li><p>A·boolean·option·<code·class="inline">read_ahead</code>·has·been·implemented·for·<code·class="inline">gen_tcp</code>,·default·<code·class="inline">true</code>,·to·facilitate·not·reading·past·(caching·data)·the·end·of·a·packet.··In·particular,·for·kTLS,·caching·data·could·read·in·data·that·was·supposed·to·be·decrypted·by·the·platform's·network·stack,·before·crypto·parameters·could·be·activated.</p><p>Own·Id:·OTP-19199·Aux·Id:·OTP-19175,·<a·href="https://github.com/erlang/otp/issues/8561"·title="">GH-8561</a>,·<a·href="https://github.com/erlang/otp/issues/8690"·title="">GH-8690</a>,·<a·href="https://github.com/erlang/otp/issues/8785"·title="">GH-8785</a></p></li><li><p>The·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/zip.html"><code·class="inline">zip</code></a>·module·has·been·updated·with·support·for:</p><ul><li>zip64·archives·-·Archives·larger·than·4GB·or·with·more·than·2^32·entries.</li><li>extended·timestamps·-·Higher·resolution·and·in·UTC.</li><li>UID/GID·-·Save·and·extract·the·original·UID/GID.</li><li>Fixes·so·that·permission·mode·attributes·are·correctly·read·and·set·for·files·in·archives.</li><li><a·href="../../../lib/stdlib-6.2.2.1/doc/html/zip.html#list_dir/2"><code·class="inline">zip:list_dir/2</code></a>·now·also·returns·directories,·not·only·files.·(You·can·disable·this·behaviour·by·using·the·option·<code·class="inline">skip_directories</code>).</li></ul><p>Various·bugs·in·the·original·implementation·have·also·been·fixed,·such·as:</p><ul><li>Correctly·encode·and·decode·the·DOS·timestamps·for·entries·within·an·archive·(that·is·the·non-extended·timestamp).</li><li>Fix·DOS·timestamps·to·be·set·to·localtime·instead·of·UTC·(use·extended·timestamps·for·UTC·timestamps).</li><li>Use·the·unix·file·attributes·read·from·disk·when·creating·archives·instead·of·setting·everything·to·644.</li></ul><p>Own·Id:·OTP-19214·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8765"·title="">PR-8765</a></p></li></ul><h2·id="erts-15-0-1"·class="section-heading"> |
| Offset 310, 25 lines modified | Offset 310, 25 lines modified | ||
| 310 | </h3> | 310 | </h3> |
| 311 | <ul><li><p>Bugs·in·how·<code·class="inline">erl·-extra</code>·interacts·with·passing·flags·via·ERL_*FLAGS·or·<code·class="inline">-args_file</code>·have·been·fixed.</p><p>Own·Id:·OTP-18766·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7639"·title="">PR-7639</a></p></li><li><p>Fixed·a·bug·that·prevented·the·emulator·from·building·on·recent·versions·of·Yocto·Linux.</p><p>Own·Id:·OTP-18918·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7952"·title="">PR-7952</a></p></li><li><p>Fixed·spectre·mitigation·configure·test·to·work·with·GCC·patches·to·always·add·<code·class="inline">-fcf-protection=full</code>.</p><p>Own·Id:·OTP-18928·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8006"·title="">PR-8006</a></p></li><li><p>A··call·to·<code·class="inline">socket:[recv|recvfrom|recvmsg]/*</code>·with·Timeout·=·0·on·Windows·could·cause·a·(case·clause)·crash·if·data·is·immediately·available.</p><p>Own·Id:·OTP-19063·Aux·Id:·OTP-18835</p></li><li><p>Fix·bug·on·Windows·where·<code·class="inline">exit_status</code>·would·not·be·sent·when·a·port·exits·after·the·stdin/stdout·handles·have·been·closed.</p><p>Own·Id:·OTP-19077·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8324"·title="">PR-8324</a></p></li></ul><h3·id="improvements-and-new-features-2"·class="section-heading"> | 311 | <ul><li><p>Bugs·in·how·<code·class="inline">erl·-extra</code>·interacts·with·passing·flags·via·ERL_*FLAGS·or·<code·class="inline">-args_file</code>·have·been·fixed.</p><p>Own·Id:·OTP-18766·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7639"·title="">PR-7639</a></p></li><li><p>Fixed·a·bug·that·prevented·the·emulator·from·building·on·recent·versions·of·Yocto·Linux.</p><p>Own·Id:·OTP-18918·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7952"·title="">PR-7952</a></p></li><li><p>Fixed·spectre·mitigation·configure·test·to·work·with·GCC·patches·to·always·add·<code·class="inline">-fcf-protection=full</code>.</p><p>Own·Id:·OTP-18928·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8006"·title="">PR-8006</a></p></li><li><p>A··call·to·<code·class="inline">socket:[recv|recvfrom|recvmsg]/*</code>·with·Timeout·=·0·on·Windows·could·cause·a·(case·clause)·crash·if·data·is·immediately·available.</p><p>Own·Id:·OTP-19063·Aux·Id:·OTP-18835</p></li><li><p>Fix·bug·on·Windows·where·<code·class="inline">exit_status</code>·would·not·be·sent·when·a·port·exits·after·the·stdin/stdout·handles·have·been·closed.</p><p>Own·Id:·OTP-19077·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8324"·title="">PR-8324</a></p></li></ul><h3·id="improvements-and-new-features-2"·class="section-heading"> |
| 312 | ··<a·href="#improvements-and-new-features-2"·class="hover-link"> | 312 | ··<a·href="#improvements-and-new-features-2"·class="hover-link"> |
| 313 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 313 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 314 | ··</a> | 314 | ··</a> |
| 315 | ··<span·class="text">Improvements·and·New·Features</span> | 315 | ··<span·class="text">Improvements·and·New·Features</span> |
| 316 | </h3> | 316 | </h3> |
| 317 | <ul><li><p>Refactored·how·the·JIT·handles·POSIX·signals·and·how·they·affect·thread·stacks,·allowing·us·to·use·the·native·stack·register·for·Erlang·stacks·on·more·platforms.</p><p>Notably,·containers·built·on·64-bit·x86·Alpine·Linux·images·will·now·perform·much·better·in·sequential·code.·As·an·example,·running·<code·class="inline">dialyzer</code>·over·the·OTP·code·base·finishes·about·15%·quicker.</p><p>Own·Id:·OTP-18568·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7174"·title="">PR-7174</a></p></li><li><p>The·<a·href="../../../lib/runtime_tools-2.1.1/doc/html/instrument.html"><code·class="inline">instrument</code></a>·module·can·now·track·allocations·on·a·per-process·or·per-port·basis.</p><p>Own·Id:·OTP-18577·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7236"·title="">PR-7236</a></p></li><li><p>The·<code·class="inline">pid</code>·field·returned·from·<a·href="erlang.html#fun_info/2"><code·class="inline">erlang:fun_info/1,2</code></a>·is·now·always·the·pid·for·the·<code·class="inline">init</code>·process·of·the·local·node,·not·the·pid·for·the·actual·process·that·created·the·fun.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18594·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7274"·title="">PR-7274</a></p></li><li><p>By·default,·escripts·will·now·be·compiled·instead·of·interpreted.·That·means·that·the·<code·class="inline">compiler</code>·application·must·be·installed.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18639·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7348"·title="">PR-7348</a></p></li><li><p>A·binary·returned·from·the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html"><code·class="inline">socket</code></a>·receive·functions·is·no·longer·created·as·a·sub·binary·of·an·often·large·receive·buffer·binary·(socket·option·<code·class="inline">{otp,rcvbuf}</code>).··This·avoids·space·waste,·trusting·the·allocators·to·implement·reallocation·efficiently.</p><p>Own·Id:·OTP-18642·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/6152"·title="">GH-6152</a>,·<a·href="https://github.com/erlang/otp/pull/7465"·title="">PR-7465</a></p></li><li><p>The·default·process·limit·has·been·raised·to·<code·class="inline">1048576</code>·processes.</p><p>Own·Id:·OTP-18699·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7388"·title="">PR-7388</a></p></li><li><p>The·<a·href="erlang.html#system_monitor/2"><code·class="inline">erlang:system_monitor/2</code></a>·functionality·is·now·able·to·monitor·long·message·queues·in·the·system.</p><p>Own·Id:·OTP-18709·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7651"·title="">PR-7651</a></p></li><li><p>The·<code·class="inline">erl</code>·command·now·supports·the·<code·class="inline">-S</code>·flag,·which·is·similar·to·the·<code·class="inline">-run</code>·flag,·except·that·it·will·pass·all·arguments·up·to·end·of·the·command·line·to·the·called·function.·(The·<code·class="inline">-run</code>·flag·will·not·pass·arguments·beginning·with·a·hyphen.)·Another·difference·is·that·<code·class="inline">-S</code>·will·always·call·a·function·with·one·argument,·passing·an·empty·list·if·no·arguments·were·given.</p><p>Own·Id:·OTP-18744·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7470"·title="">PR-7470</a></p></li><li><p>When·implementing·an·alternative·carrier·for·the·Erlang·distribution,·a·separate·input·handler·process·may·now·be·registered,·using·<a·href="erlang.html#dist_ctrl_input_handler/2"><code·class="inline">erlang:dist_ctrl_input_handler/2</code></a>,·also·in·the·case·when·the·distribution·controller·is·a·port.</p><p>Own·Id:·OTP-18774·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7110"·title="">PR-7110</a></p></li><li><p>The·call·stack·trace·has·now·been·added·to·the·error·reported·by·<a·href="erlang.html#process_flag/2"><code·class="inline">erlang:process_flag/2</code></a>·when·<code·class="inline">max_heap_size</code>·limit·has·been·exceeded.</p><p>Own·Id:·OTP-18779·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7592"·title="">PR-7592</a></p></li><li><p><code·class="inline">-callback</code>·attributes·have·been·added·to·<a·href="erl_tracer.html"><code·class="inline">erl_tracer</code></a>.</p><p>Own·Id:·OTP-18794·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7703"·title="">PR-7703</a></p></li><li><p>For·<code·class="inline">inet_backend·=·socket</code>,·setting·the·<code·class="inline">active</code>·socket·option·alone,·to·<code·class="inline">once</code>,·<code·class="inline">true</code>·or·<code·class="inline">N</code>·has·been·optimized,·as·well·as·the·corresponding·data·delivery.</p><p>Own·Id:·OTP-18835</p></li><li><p>New·functions·<code·class="inline">socket:sendv/*</code>·for·sending·I/O·vectors·have·been·added.</p><p>Own·Id:·OTP-18845</p></li><li><p>Socket·options·that·take·string·now·also·accept·binaries.</p><p>Own·Id:·OTP-18849·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6510"·title="">PR-6510</a></p></li><li><p>Native·coverage·support·has·been·implemented·in·the·JIT.·It·will··automatically·be·used·by·the·<a·href="../../../lib/tools-4.1.1/doc/html/cover.html"><code·class="inline">cover</code></a>·tool·to·reduce·the·execution·overhead·when·running·cover-compiled·code.</p><p>There·are·also·new·APIs·to·support·native·coverage·without·using·the·<code·class="inline">cover</code>·tool.</p><p>To·instrument·code·for·native·coverage·it·must·be·compiled·with·the·<a·href="../../../lib/compiler-8.6.1/doc/html/compile.html#line_coverage"><code·class="inline">line_coverage</code></a>·option.</p><p>To·enable·native·coverage·in·the·runtime·system,·start·it·like·so:</p><pre><code·class="text">$·erl·+JPcover·true</code></pre><p>There·are·also·the·following·new·functions·for·supporting·native·coverage:</p><ul><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#coverage_support/0"><code·class="inline">code:coverage_support/0</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage/2"><code·class="inline">code:get_coverage/2</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#reset_coverage/1"><code·class="inline">code:reset_coverage/1</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/0"><code·class="inline">code:get_coverage_mode/0</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/1"><code·class="inline">code:get_coverage_mode/1</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#set_coverage_mode/1"><code·class="inline">code:set_coverage_mode/1</code></a></li></ul><p>Own·Id:·OTP-18856·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7856"·title="">PR-7856</a></p></li><li><p>Changed·the·default·value·of·the·command·line·flag·<code·class="inline">-code_path_choice</code>·to·<code·class="inline">strict</code>.·</p><p>Note·that·for·application·systems·using·archives,·it·is·necessary·to·add·the·<code·class="inline">code_path_choice·relaxed</code>·to·the·command·line·that·invokes·<code·class="inline">erl</code>.</p><p>Own·Id:·OTP-18894·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7243"·title="">PR-7243</a></p></li><li><p>Added·module·loading·to·<code·class="inline">erl·-init_debug</code>·printouts.</p><p>Own·Id:·OTP-18929·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8004"·title="">PR-8004</a></p></li><li><p>When·the·runtime·system·halts,·it·performs·various·flush·operations·before·terminating.·By·default·there·is·no·limit·on·how·much·time·the·flush·operations·are·allowed·to·take.·A·new·<em>halt·flush·timeout</em>·functionality·has·been·introduced·which·can·be·used·for·limiting·the·amount·of·time·that·the·flushing·operations·are·allowed·to·take.·For·more·information·see·the·documentation·of·the·<a·href="erlang.html#halt_flush_timeout"><code·class="inline">flush_timeout</code></a>·option·of·the·<a·href="erlang.html#halt/2"><code·class="inline">erlang:halt/2</code></a>·BIF·and·the·documentation·of·the·<code·class="inline">erl</code>·<a·href="erl_cmd.html#+zhft"><code·class="inline">+zhft·<Timeout></code></a>·command·line·flag.</p><p>Own·Id:·OTP-18938·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8035"·title="">PR-8035</a>,·<a·href="https://github.com/erlang/otp/issues/7438"·title="">GH-7438</a></p></li><li><p>Optimized·code·loading·by·moving·certain·operations·from·the·code·server·to·the·caller.</p><p>Own·Id:·OTP-18941·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7981"·title="">PR-7981</a></p></li><li><p>Updated·asmjit·to·version·a465fe71ab3d0e224b2b4bd0fac69ae68ab9239d</p><p>Own·Id:·OTP-18942</p></li><li><p>The·deprecated·functions·in·<a·href="zlib.html"><code·class="inline">zlib</code></a>·have·been·removed.·That·includes·<code·class="inline">inflateChunk/{1,2}</code>,·<code·class="inline">getBufSize/1</code>,·<code·class="inline">setBufSize/2</code>,·the·CRC32·functions,·and·the·Adler·checksum·functions.</p><p>Own·Id:·OTP-18950</p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Safe·destructive·update·of·tuples·has·been·implemented·in·the·compiler·and·runtime·system.·This·allows·the·VM·to·update·tuples·in-place·when·it·is·safe·to·do·so,·thus·improving·performance·by·doing·less·copying·but·also·by·producing·less·garbage.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 317 | <ul><li><p>Refactored·how·the·JIT·handles·POSIX·signals·and·how·they·affect·thread·stacks,·allowing·us·to·use·the·native·stack·register·for·Erlang·stacks·on·more·platforms.</p><p>Notably,·containers·built·on·64-bit·x86·Alpine·Linux·images·will·now·perform·much·better·in·sequential·code.·As·an·example,·running·<code·class="inline">dialyzer</code>·over·the·OTP·code·base·finishes·about·15%·quicker.</p><p>Own·Id:·OTP-18568·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7174"·title="">PR-7174</a></p></li><li><p>The·<a·href="../../../lib/runtime_tools-2.1.1/doc/html/instrument.html"><code·class="inline">instrument</code></a>·module·can·now·track·allocations·on·a·per-process·or·per-port·basis.</p><p>Own·Id:·OTP-18577·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7236"·title="">PR-7236</a></p></li><li><p>The·<code·class="inline">pid</code>·field·returned·from·<a·href="erlang.html#fun_info/2"><code·class="inline">erlang:fun_info/1,2</code></a>·is·now·always·the·pid·for·the·<code·class="inline">init</code>·process·of·the·local·node,·not·the·pid·for·the·actual·process·that·created·the·fun.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18594·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7274"·title="">PR-7274</a></p></li><li><p>By·default,·escripts·will·now·be·compiled·instead·of·interpreted.·That·means·that·the·<code·class="inline">compiler</code>·application·must·be·installed.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18639·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7348"·title="">PR-7348</a></p></li><li><p>A·binary·returned·from·the·<a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html"><code·class="inline">socket</code></a>·receive·functions·is·no·longer·created·as·a·sub·binary·of·an·often·large·receive·buffer·binary·(socket·option·<code·class="inline">{otp,rcvbuf}</code>).··This·avoids·space·waste,·trusting·the·allocators·to·implement·reallocation·efficiently.</p><p>Own·Id:·OTP-18642·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/6152"·title="">GH-6152</a>,·<a·href="https://github.com/erlang/otp/pull/7465"·title="">PR-7465</a></p></li><li><p>The·default·process·limit·has·been·raised·to·<code·class="inline">1048576</code>·processes.</p><p>Own·Id:·OTP-18699·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7388"·title="">PR-7388</a></p></li><li><p>The·<a·href="erlang.html#system_monitor/2"><code·class="inline">erlang:system_monitor/2</code></a>·functionality·is·now·able·to·monitor·long·message·queues·in·the·system.</p><p>Own·Id:·OTP-18709·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7651"·title="">PR-7651</a></p></li><li><p>The·<code·class="inline">erl</code>·command·now·supports·the·<code·class="inline">-S</code>·flag,·which·is·similar·to·the·<code·class="inline">-run</code>·flag,·except·that·it·will·pass·all·arguments·up·to·end·of·the·command·line·to·the·called·function.·(The·<code·class="inline">-run</code>·flag·will·not·pass·arguments·beginning·with·a·hyphen.)·Another·difference·is·that·<code·class="inline">-S</code>·will·always·call·a·function·with·one·argument,·passing·an·empty·list·if·no·arguments·were·given.</p><p>Own·Id:·OTP-18744·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7470"·title="">PR-7470</a></p></li><li><p>When·implementing·an·alternative·carrier·for·the·Erlang·distribution,·a·separate·input·handler·process·may·now·be·registered,·using·<a·href="erlang.html#dist_ctrl_input_handler/2"><code·class="inline">erlang:dist_ctrl_input_handler/2</code></a>,·also·in·the·case·when·the·distribution·controller·is·a·port.</p><p>Own·Id:·OTP-18774·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7110"·title="">PR-7110</a></p></li><li><p>The·call·stack·trace·has·now·been·added·to·the·error·reported·by·<a·href="erlang.html#process_flag/2"><code·class="inline">erlang:process_flag/2</code></a>·when·<code·class="inline">max_heap_size</code>·limit·has·been·exceeded.</p><p>Own·Id:·OTP-18779·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7592"·title="">PR-7592</a></p></li><li><p><code·class="inline">-callback</code>·attributes·have·been·added·to·<a·href="erl_tracer.html"><code·class="inline">erl_tracer</code></a>.</p><p>Own·Id:·OTP-18794·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7703"·title="">PR-7703</a></p></li><li><p>For·<code·class="inline">inet_backend·=·socket</code>,·setting·the·<code·class="inline">active</code>·socket·option·alone,·to·<code·class="inline">once</code>,·<code·class="inline">true</code>·or·<code·class="inline">N</code>·has·been·optimized,·as·well·as·the·corresponding·data·delivery.</p><p>Own·Id:·OTP-18835</p></li><li><p>New·functions·<code·class="inline">socket:sendv/*</code>·for·sending·I/O·vectors·have·been·added.</p><p>Own·Id:·OTP-18845</p></li><li><p>Socket·options·that·take·string·now·also·accept·binaries.</p><p>Own·Id:·OTP-18849·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6510"·title="">PR-6510</a></p></li><li><p>Native·coverage·support·has·been·implemented·in·the·JIT.·It·will··automatically·be·used·by·the·<a·href="../../../lib/tools-4.1.1/doc/html/cover.html"><code·class="inline">cover</code></a>·tool·to·reduce·the·execution·overhead·when·running·cover-compiled·code.</p><p>There·are·also·new·APIs·to·support·native·coverage·without·using·the·<code·class="inline">cover</code>·tool.</p><p>To·instrument·code·for·native·coverage·it·must·be·compiled·with·the·<a·href="../../../lib/compiler-8.6.1/doc/html/compile.html#line_coverage"><code·class="inline">line_coverage</code></a>·option.</p><p>To·enable·native·coverage·in·the·runtime·system,·start·it·like·so:</p><pre><code·class="text">$·erl·+JPcover·true</code></pre><p>There·are·also·the·following·new·functions·for·supporting·native·coverage:</p><ul><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#coverage_support/0"><code·class="inline">code:coverage_support/0</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage/2"><code·class="inline">code:get_coverage/2</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#reset_coverage/1"><code·class="inline">code:reset_coverage/1</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/0"><code·class="inline">code:get_coverage_mode/0</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/1"><code·class="inline">code:get_coverage_mode/1</code></a></li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/code.html#set_coverage_mode/1"><code·class="inline">code:set_coverage_mode/1</code></a></li></ul><p>Own·Id:·OTP-18856·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7856"·title="">PR-7856</a></p></li><li><p>Changed·the·default·value·of·the·command·line·flag·<code·class="inline">-code_path_choice</code>·to·<code·class="inline">strict</code>.·</p><p>Note·that·for·application·systems·using·archives,·it·is·necessary·to·add·the·<code·class="inline">code_path_choice·relaxed</code>·to·the·command·line·that·invokes·<code·class="inline">erl</code>.</p><p>Own·Id:·OTP-18894·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7243"·title="">PR-7243</a></p></li><li><p>Added·module·loading·to·<code·class="inline">erl·-init_debug</code>·printouts.</p><p>Own·Id:·OTP-18929·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8004"·title="">PR-8004</a></p></li><li><p>When·the·runtime·system·halts,·it·performs·various·flush·operations·before·terminating.·By·default·there·is·no·limit·on·how·much·time·the·flush·operations·are·allowed·to·take.·A·new·<em>halt·flush·timeout</em>·functionality·has·been·introduced·which·can·be·used·for·limiting·the·amount·of·time·that·the·flushing·operations·are·allowed·to·take.·For·more·information·see·the·documentation·of·the·<a·href="erlang.html#halt_flush_timeout"><code·class="inline">flush_timeout</code></a>·option·of·the·<a·href="erlang.html#halt/2"><code·class="inline">erlang:halt/2</code></a>·BIF·and·the·documentation·of·the·<code·class="inline">erl</code>·<a·href="erl_cmd.html#+zhft"><code·class="inline">+zhft·<Timeout></code></a>·command·line·flag.</p><p>Own·Id:·OTP-18938·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8035"·title="">PR-8035</a>,·<a·href="https://github.com/erlang/otp/issues/7438"·title="">GH-7438</a></p></li><li><p>Optimized·code·loading·by·moving·certain·operations·from·the·code·server·to·the·caller.</p><p>Own·Id:·OTP-18941·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7981"·title="">PR-7981</a></p></li><li><p>Updated·asmjit·to·version·a465fe71ab3d0e224b2b4bd0fac69ae68ab9239d</p><p>Own·Id:·OTP-18942</p></li><li><p>The·deprecated·functions·in·<a·href="zlib.html"><code·class="inline">zlib</code></a>·have·been·removed.·That·includes·<code·class="inline">inflateChunk/{1,2}</code>,·<code·class="inline">getBufSize/1</code>,·<code·class="inline">setBufSize/2</code>,·the·CRC32·functions,·and·the·Adler·checksum·functions.</p><p>Own·Id:·OTP-18950</p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Safe·destructive·update·of·tuples·has·been·implemented·in·the·compiler·and·runtime·system.·This·allows·the·VM·to·update·tuples·in-place·when·it·is·safe·to·do·so,·thus·improving·performance·by·doing·less·copying·but·also·by·producing·less·garbage.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="9830593053-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9830593053-2">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·111,·SHA:·e605302bcaae1993b5a960b3b3e4a70d71976ede8a61eacb58cf836f785f7c80·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 318 | </span><span·class="nf">update</span><span·class="p"·data-group-id=" | 318 | </span><span·class="nf">update</span><span·class="p"·data-group-id="9830593053-3">(</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9830593053-4">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="ss">needs_update</span><span·class="p">,</span><span·class="ss">b</s[·...·truncated·by·diffoscope;·len:·195,·SHA:·c55103e2a711f0eb7cb93d2cf0bde10a980a588bb885070c8581d076d530a169·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 319 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 319 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9830593053-5">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="ss">up_to_date</span><span·class="p"·data-group-id="9830593053-5">}</span><span·class="p">,</span><span·class="w"> |
| 320 | ····</span><span·class="k">if</span><span·class="w"> | 320 | ····</span><span·class="k">if</span><span·class="w"> |
| 321 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 321 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 322 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 322 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9830593053-6">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">negative</span><span·class="p"·data-group-id="9830593053-6">}</span><span·class="p">;</span><span·class="w"> |
| 323 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 323 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 324 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 324 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9830593053-7">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">zero</span><span·class="p"·data-group-id="9830593053-7">}</span><span·class="p">;</span><span·class="w"> |
| 325 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 325 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 326 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 326 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9830593053-8">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">positive</span><span·class="p"·data-group-id="9830593053-8">}</span><span·class="w"> |
| 327 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·record·updates·in·each·of·the·three·clauses·of·the·<code·class="inline">if</code>·can·safely·be·done·in-place,·because·variable·<code·class="inline">R</code>·is·not·used·again.</p><p>Own·Id:·OTP-18972·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8090"·title="">PR-8090</a></p></li><li><p>The·obsolete·and·undocumented·support·for·opening·a·port·to·an·external | 327 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·record·updates·in·each·of·the·three·clauses·of·the·<code·class="inline">if</code>·can·safely·be·done·in-place,·because·variable·<code·class="inline">R</code>·is·not·used·again.</p><p>Own·Id:·OTP-18972·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8090"·title="">PR-8090</a></p></li><li><p>The·obsolete·and·undocumented·support·for·opening·a·port·to·an·external |
| 328 | resource·by·passing·an·atom·(or·a·string)·as·first·argument·to | 328 | resource·by·passing·an·atom·(or·a·string)·as·first·argument·to |
| 329 | <a·href="erlang.html#open_port/2"><code·class="inline">open_port()</code></a>,·implemented·by·the·vanilla·driver, | 329 | <a·href="erlang.html#open_port/2"><code·class="inline">open_port()</code></a>,·implemented·by·the·vanilla·driver, |
| 330 | has·been·removed.·This·feature·has·been·scheduled·for·removal·in·OTP·27 | 330 | has·been·removed.·This·feature·has·been·scheduled·for·removal·in·OTP·27 |
| 331 | since·the·release·of·OTP·26.</p><p>Own·Id:·OTP-18976·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7125"·title="">PR-7125</a></p></li><li><p>An·optional·NIF·callback·<code·class="inline">ERL_NIF_OPT_ON_UNLOAD_THREAD</code>·to·be·called·by·all·scheduler·threads·when·a·NIF·library·is·unloaded.·Used·for·releasing·thread·specific·data.·Can·be·set·with·function·<code·class="inline">enif_set_option</code>.</p><p>Own·Id:·OTP-18977·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7809"·title="">PR-7809</a></p></li><li><p>There·is·a·new·module·<a·href="../../../lib/kernel-10.2.7.1/doc/html/trace.html"><code·class="inline">trace</code></a>·in·Kernel·providing·the·same·trace·functionality·as·<a·href="erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·and·<a·href="erlang.html#trace_pattern/3"><code·class="inline">erlang:trace_pattern/3</code></a>,·but·with·the·addition·of·<strong>dynamic·isolated·trace·sessions</strong>.</p><p>Own·Id:·OTP-18980</p></li><li><p>Added·the·<code·class="inline">+MMlp·on|off</code>·emulator·option·to·let·the·<code·class="inline">mseg</code>·allocator·use·"large·pages"·(sometimes·known·as·"huge·pages"·or·"super·pages").·This·currently·only·affects·super-carrier·allocations,·but·may·be·extended·in·the·future.</p><p>Own·Id:·OTP-18984·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7977"·title="">PR-7977</a></p></li><li><p><code·class="inline">inet_backend·=·socket</code>·has·been·optimized·and·reworked·to·be·more·compatible·with·the·original·<code·class="inline">inet_backend·=·inet</code>.</p><p>Own·Id:·OTP-19004·Aux·Id:·OTP-18835</p></li><li><p>The·<code·class="inline">socket</code>·documentation·has·been·reworked,·and·due·to | 331 | since·the·release·of·OTP·26.</p><p>Own·Id:·OTP-18976·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7125"·title="">PR-7125</a></p></li><li><p>An·optional·NIF·callback·<code·class="inline">ERL_NIF_OPT_ON_UNLOAD_THREAD</code>·to·be·called·by·all·scheduler·threads·when·a·NIF·library·is·unloaded.·Used·for·releasing·thread·specific·data.·Can·be·set·with·function·<code·class="inline">enif_set_option</code>.</p><p>Own·Id:·OTP-18977·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7809"·title="">PR-7809</a></p></li><li><p>There·is·a·new·module·<a·href="../../../lib/kernel-10.2.7.1/doc/html/trace.html"><code·class="inline">trace</code></a>·in·Kernel·providing·the·same·trace·functionality·as·<a·href="erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·and·<a·href="erlang.html#trace_pattern/3"><code·class="inline">erlang:trace_pattern/3</code></a>,·but·with·the·addition·of·<strong>dynamic·isolated·trace·sessions</strong>.</p><p>Own·Id:·OTP-18980</p></li><li><p>Added·the·<code·class="inline">+MMlp·on|off</code>·emulator·option·to·let·the·<code·class="inline">mseg</code>·allocator·use·"large·pages"·(sometimes·known·as·"huge·pages"·or·"super·pages").·This·currently·only·affects·super-carrier·allocations,·but·may·be·extended·in·the·future.</p><p>Own·Id:·OTP-18984·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7977"·title="">PR-7977</a></p></li><li><p><code·class="inline">inet_backend·=·socket</code>·has·been·optimized·and·reworked·to·be·more·compatible·with·the·original·<code·class="inline">inet_backend·=·inet</code>.</p><p>Own·Id:·OTP-19004·Aux·Id:·OTP-18835</p></li><li><p>The·<code·class="inline">socket</code>·documentation·has·been·reworked,·and·due·to |
| 332 | that·a·few·details·were·fixed:</p><ul><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html#is_supported/1"><code·class="inline">socket:is_supported/1</code></a>·now·returns·<code·class="inline">true</code>·for·example·for·<code·class="inline">protocols</code> | 332 | that·a·few·details·were·fixed:</p><ul><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html#is_supported/1"><code·class="inline">socket:is_supported/1</code></a>·now·returns·<code·class="inline">true</code>·for·example·for·<code·class="inline">protocols</code> |
| 333 | that·is·a·"category",·not·an·item.</li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html#cancel_monitor/1"><code·class="inline">socket:cancel_monitor/1</code></a>·no·longer·badargs·for·a·monitor·that·was·set·by | 333 | that·is·a·"category",·not·an·item.</li><li><a·href="../../../lib/kernel-10.2.7.1/doc/html/socket.html#cancel_monitor/1"><code·class="inline">socket:cancel_monitor/1</code></a>·no·longer·badargs·for·a·monitor·that·was·set·by |
| Offset 3266, 17 lines modified | Offset 3266, 17 lines modified | ||
| 3266 | markedly·so·when·the·maximum·number·of·file·descriptors·has·been·tuned·to·a | 3266 | markedly·so·when·the·maximum·number·of·file·descriptors·has·been·tuned·to·a |
| 3267 | large·number.</p><p>Instead,·in·erl_child_setup,·walk·the·open·descriptors·under·<code·class="inline">/dev/fd</code>·and | 3267 | large·number.</p><p>Instead,·in·erl_child_setup,·walk·the·open·descriptors·under·<code·class="inline">/dev/fd</code>·and |
| 3268 | close·only·those·which·are·open.</p><p>This·optimization·affects·the·CPU·usage·of·starting·a·new·Erlang·instance.</p><p>Own·Id:·OTP-16270</p></li><li><p>Optimized·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/maps.html#merge/2"><code·class="inline">maps:merge/2</code></a>·for·trivial·cases·of·an·empty·map(s)·or·same·map.</p><p>Own·Id:·OTP-16283·Aux·Id:·PR-2441</p></li><li><p>The·new·experimental·<code·class="inline">socket</code>·module·has·been·moved·to·the·Kernel·application.</p><p>Own·Id:·OTP-16312</p></li><li><p>Improved·the·presentation·of·allocations·and·carriers·in·the·<code·class="inline">instrument</code> | 3268 | close·only·those·which·are·open.</p><p>This·optimization·affects·the·CPU·usage·of·starting·a·new·Erlang·instance.</p><p>Own·Id:·OTP-16270</p></li><li><p>Optimized·<a·href="../../../lib/stdlib-6.2.2.1/doc/html/maps.html#merge/2"><code·class="inline">maps:merge/2</code></a>·for·trivial·cases·of·an·empty·map(s)·or·same·map.</p><p>Own·Id:·OTP-16283·Aux·Id:·PR-2441</p></li><li><p>The·new·experimental·<code·class="inline">socket</code>·module·has·been·moved·to·the·Kernel·application.</p><p>Own·Id:·OTP-16312</p></li><li><p>Improved·the·presentation·of·allocations·and·carriers·in·the·<code·class="inline">instrument</code> |
| 3269 | module.</p><p>Own·Id:·OTP-16327</p></li><li><p>As·announced·in·OTP·22.0,·the·previously·existing·limited·support·for·VxWorks | 3269 | module.</p><p>Own·Id:·OTP-16327</p></li><li><p>As·announced·in·OTP·22.0,·the·previously·existing·limited·support·for·VxWorks |
| 3270 | has·now·been·removed.</p><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-16329·Aux·Id:·OTP-15621</p></li><li><p>The·return·value·when·using·the·<code·class="inline">httph</code>·and·<code·class="inline">httph_bin</code>·option·to | 3270 | has·now·been·removed.</p><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-16329·Aux·Id:·OTP-15621</p></li><li><p>The·return·value·when·using·the·<code·class="inline">httph</code>·and·<code·class="inline">httph_bin</code>·option·to |
| 3271 | <a·href="erlang.html#decode_packet/3"><code·class="inline">erlang:decode_packet/3</code></a>·and·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>·has·been·changed·to·also·include | 3271 | <a·href="erlang.html#decode_packet/3"><code·class="inline">erlang:decode_packet/3</code></a>·and·<a·href="../../../lib/kernel-10.2.7.1/doc/html/inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>·has·been·changed·to·also·include |
| 3272 | the·original·header·unmodified.·See·<a·href="erlang.html#decode_packet/3"><code·class="inline">erlang:decode_packet/3</code></a>.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="o">></span><span·class="w"> | 3272 | the·original·header·unmodified.·See·<a·href="erlang.html#decode_packet/3"><code·class="inline">erlang:decode_packet/3</code></a>.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="o">></span><span·class="w"> |
| 3273 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">decode_packet</span><span·class="p"·data-group-id="8 | 3273 | ······</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">decode_packet</span><span·class="p"·data-group-id="7283371036-1">(</span><span·class="ss">httph_bin</span><span·class="p">,</span><span·class="p"·data-group-id="7283371036-2"><<</span><span·class="s">"HELLO: |
| 3274 | ······hi\r\n\r\n"</span><span·class="p"·data-group-id="8 | 3274 | ······hi\r\n\r\n"</span><span·class="p"·data-group-id="7283371036-2">>></span><span·class="p">,</span><span·class="p"·data-group-id="7283371036-3">[</span><span·class="p"·data-group-id="7283371036-3">]</span><span·class="p"·data-group-id="7283371036-1">)</span><span·class="p">.</span><span·class="w"> |
| 3275 | ······</span><span·class="p"·data-group-id="8 | 3275 | ······</span><span·class="p"·data-group-id="7283371036-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7283371036-5">{</span><span·class="ss">http_header</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·779,·SHA:·20b928812b03e46ce2658e3b6a34ceb248a75c73d0957622242c479a17c01d77·...·]-4">}</span></code></pre><p>Own·Id:·OTP-16347·Aux·Id:·PR-2466</p></li><li><p>Ensure·<a·href="../../../lib/kernel-10.2.7.1/doc/html/net_kernel.html#monitor_nodes/1"><code·class="inline">net_kernel:monitor_nodes/1</code></a>·sends·<code·class="inline">nodedown</code>·messages·of·a·failed |
| 3276 | connection·before·<code·class="inline">nodeup</code>·messages·of·a·reestablished·connection·toward·the | 3276 | connection·before·<code·class="inline">nodeup</code>·messages·of·a·reestablished·connection·toward·the |
| 3277 | same·node.</p><p>Own·Id:·OTP-16362</p></li><li><p>Update·of·<a·href="../../../lib/kernel-10.2.7.1/doc/html/seq_trace.html#whatis">sequential·tracing</a>·to·also·support·other | 3277 | same·node.</p><p>Own·Id:·OTP-16362</p></li><li><p>Update·of·<a·href="../../../lib/kernel-10.2.7.1/doc/html/seq_trace.html#whatis">sequential·tracing</a>·to·also·support·other |
| 3278 | information·transfers·than·message·passing.</p><p>Own·Id:·OTP-16370·Aux·Id:·OTP-15251,·OTP-15232</p></li><li><p>socket:·It·is·now·possible·to·create·a·socket·from·an·already·existing·file | 3278 | information·transfers·than·message·passing.</p><p>Own·Id:·OTP-16370·Aux·Id:·OTP-15251,·OTP-15232</p></li><li><p>socket:·It·is·now·possible·to·create·a·socket·from·an·already·existing·file |
| 3279 | descriptor.</p><p>Own·Id:·OTP-16398·Aux·Id:·ERL-1154</p></li><li><p>socket:·The·socket:supports/1·function·now·also·report·if·netns·is·supported | 3279 | descriptor.</p><p>Own·Id:·OTP-16398·Aux·Id:·ERL-1154</p></li><li><p>socket:·The·socket:supports/1·function·now·also·report·if·netns·is·supported |
| 3280 | or·not.</p><p>Own·Id:·OTP-16432</p></li><li><p><code·class="inline">=:=</code>·has·been·optimized·to·return·<code·class="inline">false</code>·immediately·when·comparing·two·maps | 3280 | or·not.</p><p>Own·Id:·OTP-16432</p></li><li><p><code·class="inline">=:=</code>·has·been·optimized·to·return·<code·class="inline">false</code>·immediately·when·comparing·two·maps |
| 3281 | of·different·sizes.</p><p>Own·Id:·OTP-16454</p></li><li><p>Changed·the·behaviour·of·passing·the·<code·class="inline">erl</code>·command·line·argument | 3281 | of·different·sizes.</p><p>Own·Id:·OTP-16454</p></li><li><p>Changed·the·behaviour·of·passing·the·<code·class="inline">erl</code>·command·line·argument |
| 3282 | <a·href="erl_cmd.html#async_thread_pool_size"><code·class="inline">+A·0</code></a>·to·silently·imply·<code·class="inline">+A·1</code>.·That·is, | 3282 | <a·href="erl_cmd.html#async_thread_pool_size"><code·class="inline">+A·0</code></a>·to·silently·imply·<code·class="inline">+A·1</code>.·That·is, |
| Offset 10983, 20 lines modified | Offset 10983, 20 lines modified | ||
| 10983 | <ul><li><p>Previously·<a·href="erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·behaved | 10983 | <ul><li><p>Previously·<a·href="erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·behaved |
| 10984 | completely·asynchronous.·This·had·one·undesirable·effect,·though.·You·could | 10984 | completely·asynchronous.·This·had·one·undesirable·effect,·though.·You·could |
| 10985 | never·know·when·you·were·guaranteed·<em>not</em>·to·be·affected·by·a·link·that·you | 10985 | never·know·when·you·were·guaranteed·<em>not</em>·to·be·affected·by·a·link·that·you |
| 10986 | had·unlinked·or·a·monitor·that·you·had·demonitored.</p><p>The·new·behavior·of·<a·href="erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·can·be | 10986 | had·unlinked·or·a·monitor·that·you·had·demonitored.</p><p>The·new·behavior·of·<a·href="erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·can·be |
| 10987 | viewed·as·two·operations·performed·atomically.·Asynchronously·send·an·unlink | 10987 | viewed·as·two·operations·performed·atomically.·Asynchronously·send·an·unlink |
| 10988 | signal·or·a·demonitor·signal,·and·ignore·any·future·results·of·the·link·or | 10988 | signal·or·a·demonitor·signal,·and·ignore·any·future·results·of·the·link·or |
| 10989 | monitor.</p><p><em>NOTE</em>:·This·change·can·cause·some·obscure·code·to·fail·which·previously·did | 10989 | monitor.</p><p><em>NOTE</em>:·This·change·can·cause·some·obscure·code·to·fail·which·previously·did |
| 10990 | not.·For·example,·the·following·code·might·hang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">············</span><span·class="n">Mon</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monitor</span><span·class="p"·data-group-id="1 | 10990 | not.·For·example,·the·following·code·might·hang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">············</span><span·class="n">Mon</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monitor</span><span·class="p"·data-group-id="1198979819-1">(</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="1198979819-1">)</span><span·class="p">,</span><span·class="w"> |
| 10991 | ············</span><span·class="c1">%%·...</span><span·class="w"> | 10991 | ············</span><span·class="c1">%%·...</span><span·class="w"> |
| 10992 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="1 | 10992 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="1198979819-2">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bang</span><span·class="p"·data-group-id="1198979819-2">)</span><span·class="p">,</span><span·class="w"> |
| 10993 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id="1 | 10993 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id="1198979819-3">(</span><span·class="n">Mon</span><span·class="p"·data-group-id="1198979819-3">)</span><span·class="p">,</span><span·class="w"> |
| 10994 | ············</span><span·class="k">receive</span><span·class="w"> | 10994 | ············</span><span·class="k">receive</span><span·class="w"> |
| 10995 | ················</span><span·class="p"·data-group-id="1 | 10995 | ················</span><span·class="p"·data-group-id="1198979819-4">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mon</span><span·class="w">·</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">process</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·165,·SHA:·51a66cd1ef7bc3188f48cf3ac157eec9a70ea8db987220bab1c19cd48f92fd1b·...·]19-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> |
| 10996 | ············</span><span·class="c1">%%·We·were·previously·guaranteed·to·get·a·down·message</span><span·class="w"> | 10996 | ············</span><span·class="c1">%%·We·were·previously·guaranteed·to·get·a·down·message</span><span·class="w"> |
| 10997 | ············</span><span·class="c1">%%·(since·we·exited·the·process·ourself),·so·we·could</span><span·class="w"> | 10997 | ············</span><span·class="c1">%%·(since·we·exited·the·process·ourself),·so·we·could</span><span·class="w"> |
| 10998 | ············</span><span·class="c1">%%·in·this·case·leave·out:</span><span·class="w"> | 10998 | ············</span><span·class="c1">%%·in·this·case·leave·out:</span><span·class="w"> |
| 10999 | ············</span><span·class="c1">%%·after·0·->·ok</span><span·class="w"> | 10999 | ············</span><span·class="c1">%%·after·0·->·ok</span><span·class="w"> |
| 11000 | ············</span><span·class="k">end</span><span·class="p">,</span></code></pre><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-5772</p></li><li><p>Two·bugs·fixed:·If·the·environment·variable·<code·class="inline">ERL_FLAGS</code>·was·set,·its·contents | 11000 | ············</span><span·class="k">end</span><span·class="p">,</span></code></pre><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-5772</p></li><li><p>Two·bugs·fixed:·If·the·environment·variable·<code·class="inline">ERL_FLAGS</code>·was·set,·its·contents |
| 11001 | would·be·appended·to·the·end·of·the·command·line·even·if·the·command·line·had | 11001 | would·be·appended·to·the·end·of·the·command·line·even·if·the·command·line·had |
| 11002 | an·<code·class="inline">-extra</code>·options.·Changed·to·place·the·options·from·<code·class="inline">ERL_FLAGS</code>·just·before | 11002 | an·<code·class="inline">-extra</code>·options.·Changed·to·place·the·options·from·<code·class="inline">ERL_FLAGS</code>·just·before |
| Offset 11542, 15 lines modified | Offset 11542, 15 lines modified | ||
| 11542 | ······<p·class="built-using"> | 11542 | ······<p·class="built-using"> |
| 11543 | ········Built·using | 11543 | ········Built·using |
| 11544 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 11544 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 11545 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 11545 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 11546 | ······</p> | 11546 | ······</p> |
| 11547 | <p>Copyright·©·1996-202 | 11547 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 11548 | ····</footer> | 11548 | ····</footer> |
| 11549 | ··</div> | 11549 | ··</div> |
| 11550 | </main> | 11550 | </main> |
| 11551 | </div> | 11551 | </div> |
| 11552 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 11552 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 11553 | ··<script> | 11553 | ··<script> |
| 11554 | ··let·initialized·=·false; | 11554 | ··let·initialized·=·false; |
| Offset 196, 17 lines modified | Offset 196, 17 lines modified | ||
| 196 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 196 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 197 | ··</a> | 197 | ··</a> |
| 198 | ··<span·class="text">Example</span> | 198 | ··<span·class="text">Example</span> |
| 199 | </h2> | 199 | </h2> |
| 200 | <p>The·following·example·shows·how·lock·contention·for·ETS·tables·can·be·minimized | 200 | <p>The·following·example·shows·how·lock·contention·for·ETS·tables·can·be·minimized |
| 201 | by·having·one·ETS·table·for·each·scheduler.·The·table·identifiers·for·the·ETS | 201 | by·having·one·ETS·table·for·each·scheduler.·The·table·identifiers·for·the·ETS |
| 202 | tables·are·stored·as·a·single·persistent·term:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="c1">%%·There·is·one·ETS·table·for·each·scheduler.</span><span·class="w"> | 202 | tables·are·stored·as·a·single·persistent·term:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="c1">%%·There·is·one·ETS·table·for·each·scheduler.</span><span·class="w"> |
| 203 | ····</span><span·class="n">Sid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id=" | 203 | ····</span><span·class="n">Sid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="6201508139-1">(</span><span·class="ss">scheduler_id</span><span·class="p"·data-group-id="6201508139-1">)</span><span·class="p">,</span><span·class="w"> |
| 204 | ····</span><span·class="n">Tid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="n">Tid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="6201508139-2">(</span><span·class="n">Sid</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">persistent_term</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="6201508139-3">(</span><span·class="o">?[·...·truncated·by·diffoscope;·len:·130,·SHA:·0bdc289d05f4d40fc9641213c9aa3e6f78654daa74b3dfa533074baa72a1382a·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">update_counter</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">update_counter</span><span·class="p"·data-group-id="6201508139-4">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="6201508139-4">)</span><span·class="p">.</span></code></pre> |
| 206 | ····</section> | 206 | ····</section> |
| 207 | </div> | 207 | </div> |
| 208 | ··<section·id="summary"·class="details-list"> | 208 | ··<section·id="summary"·class="details-list"> |
| 209 | ····<h1·class="section-heading"> | 209 | ····<h1·class="section-heading"> |
| 210 | ······<a·class="hover-link"·href="#summary"> | 210 | ······<a·class="hover-link"·href="#summary"> |
| Offset 593, 15 lines modified | Offset 593, 15 lines modified | ||
| 593 | ······<p·class="built-using"> | 593 | ······<p·class="built-using"> |
| 594 | ········Built·using | 594 | ········Built·using |
| 595 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 595 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 596 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 596 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 597 | ······</p> | 597 | ······</p> |
| 598 | <p>Copyright·©·1996-202 | 598 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 599 | ····</footer> | 599 | ····</footer> |
| 600 | ··</div> | 600 | ··</div> |
| 601 | </main> | 601 | </main> |
| 602 | </div> | 602 | </div> |
| 603 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 603 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 604 | ··<script> | 604 | ··<script> |
| 605 | ··let·initialized·=·false; | 605 | ··let·initialized·=·false; |
| Offset 399, 15 lines modified | Offset 399, 15 lines modified | ||
| 399 | ······<p·class="built-using"> | 399 | ······<p·class="built-using"> |
| 400 | ········Built·using | 400 | ········Built·using |
| 401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 403 | ······</p> | 403 | ······</p> |
| 404 | <p>Copyright·©·1996-202 | 404 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 405 | ····</footer> | 405 | ····</footer> |
| 406 | ··</div> | 406 | ··</div> |
| 407 | </main> | 407 | </main> |
| 408 | </div> | 408 | </div> |
| 409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 410 | ··<script> | 410 | ··<script> |
| 411 | ··let·initialized·=·false; | 411 | ··let·initialized·=·false; |
| Offset 320, 15 lines modified | Offset 320, 15 lines modified | ||
| 320 | ······<p·class="built-using"> | 320 | ······<p·class="built-using"> |
| 321 | ········Built·using | 321 | ········Built·using |
| 322 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 322 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 323 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 323 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 324 | ······</p> | 324 | ······</p> |
| 325 | <p>Copyright·©·1996-202 | 325 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 326 | ····</footer> | 326 | ····</footer> |
| 327 | ··</div> | 327 | ··</div> |
| 328 | </main> | 328 | </main> |
| 329 | </div> | 329 | </div> |
| 330 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 330 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 331 | ··<script> | 331 | ··<script> |
| 332 | ··let·initialized·=·false; | 332 | ··let·initialized·=·false; |
| Offset 456, 15 lines modified | Offset 456, 15 lines modified | ||
| 456 | ······<p·class="built-using"> | 456 | ······<p·class="built-using"> |
| 457 | ········Built·using | 457 | ········Built·using |
| 458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 460 | ······</p> | 460 | ······</p> |
| 461 | <p>Copyright·©·1996-202 | 461 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 462 | ····</footer> | 462 | ····</footer> |
| 463 | ··</div> | 463 | ··</div> |
| 464 | </main> | 464 | </main> |
| 465 | </div> | 465 | </div> |
| 466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 467 | ··<script> | 467 | ··<script> |
| 468 | ··let·initialized·=·false; | 468 | ··let·initialized·=·false; |
| Offset 247, 15 lines modified | Offset 247, 15 lines modified | ||
| 247 | ······<p·class="built-using"> | 247 | ······<p·class="built-using"> |
| 248 | ········Built·using | 248 | ········Built·using |
| 249 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 249 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 250 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 250 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 251 | ······</p> | 251 | ······</p> |
| 252 | <p>Copyright·©·1996-202 | 252 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 253 | ····</footer> | 253 | ····</footer> |
| 254 | ··</div> | 254 | ··</div> |
| 255 | </main> | 255 | </main> |
| 256 | </div> | 256 | </div> |
| 257 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 257 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 258 | ··<script> | 258 | ··<script> |
| 259 | ··let·initialized·=·false; | 259 | ··let·initialized·=·false; |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | ······<p·class="built-using"> | 137 | ······<p·class="built-using"> |
| 138 | ········Built·using | 138 | ········Built·using |
| 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 141 | ······</p> | 141 | ······</p> |
| 142 | <p>Copyright·©·1996-202 | 142 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 143 | ····</footer> | 143 | ····</footer> |
| 144 | ··</div> | 144 | ··</div> |
| 145 | </main> | 145 | </main> |
| 146 | </div> | 146 | </div> |
| 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 148 | ··<script> | 148 | ··<script> |
| 149 | ··let·initialized·=·false; | 149 | ··let·initialized·=·false; |
| Offset 184, 15 lines modified | Offset 184, 15 lines modified | ||
| 184 | ······<p·class="built-using"> | 184 | ······<p·class="built-using"> |
| 185 | ········Built·using | 185 | ········Built·using |
| 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 188 | ······</p> | 188 | ······</p> |
| 189 | <p>Copyright·©·1996-202 | 189 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 190 | ····</footer> | 190 | ····</footer> |
| 191 | ··</div> | 191 | ··</div> |
| 192 | </main> | 192 | </main> |
| 193 | </div> | 193 | </div> |
| 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 195 | ··<script> | 195 | ··<script> |
| 196 | ··let·initialized·=·false; | 196 | ··let·initialized·=·false; |
| Offset 230, 15 lines modified | Offset 230, 15 lines modified | ||
| 230 | ······<p·class="built-using"> | 230 | ······<p·class="built-using"> |
| 231 | ········Built·using | 231 | ········Built·using |
| 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 234 | ······</p> | 234 | ······</p> |
| 235 | <p>Copyright·©·1996-202 | 235 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 236 | ····</footer> | 236 | ····</footer> |
| 237 | ··</div> | 237 | ··</div> |
| 238 | </main> | 238 | </main> |
| 239 | </div> | 239 | </div> |
| 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 241 | ··<script> | 241 | ··<script> |
| 242 | ··let·initialized·=·false; | 242 | ··let·initialized·=·false; |
| Offset 225, 20 lines modified | Offset 225, 20 lines modified | ||
| 225 | (alloc_util·and·the·different·strategies).·However,·that·would·not·be | 225 | (alloc_util·and·the·different·strategies).·However,·that·would·not·be |
| 226 | as·straight·forward·as·one·can·think·and·can·also·waste·quite·a·lot·of | 226 | as·straight·forward·as·one·can·think·and·can·also·waste·quite·a·lot·of |
| 227 | memory·as·it·uses·prepended·block·headers.·The·granularity·of·the | 227 | memory·as·it·uses·prepended·block·headers.·The·granularity·of·the |
| 228 | super·carrier·is·one·memory·page·(usually·4kb).·We·want·to·allocate | 228 | super·carrier·is·one·memory·page·(usually·4kb).·We·want·to·allocate |
| 229 | and·free·entire·pages·and·we·don't·want·to·waste·an·entire·page·just | 229 | and·free·entire·pages·and·we·don't·want·to·waste·an·entire·page·just |
| 230 | to·hold·the·block·header·of·the·following·pages.</p><p>Instead·we·store·the·meta·information·about·all·the·free·segments·in·a | 230 | to·hold·the·block·header·of·the·following·pages.</p><p>Instead·we·store·the·meta·information·about·all·the·free·segments·in·a |
| 231 | dedicated·area·apart·from·the·<code·class="inline">sa</code>·and·<code·class="inline">sua</code>·areas.·Every·free·segment·is | 231 | dedicated·area·apart·from·the·<code·class="inline">sa</code>·and·<code·class="inline">sua</code>·areas.·Every·free·segment·is |
| 232 | represented·by·a·descriptor·struct·(<code·class="inline">ErtsFreeSegDesc</code>).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">typedef</span><span·class="w">·</span><span·class="ss">struct</span><span·class="w">·</span><span·class="p"·data-group-id=" | 232 | represented·by·a·descriptor·struct·(<code·class="inline">ErtsFreeSegDesc</code>).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">typedef</span><span·class="w">·</span><span·class="ss">struct</span><span·class="w">·</span><span·class="p"·data-group-id="7286677870-1">{</span><span·class="w"> |
| 233 | ····</span><span·class="n">RBTNode</span><span·class="w">·</span><span·class="ss">snode</span><span·class="p">;</span><span·class="w">······</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">'stree'</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 233 | ····</span><span·class="n">RBTNode</span><span·class="w">·</span><span·class="ss">snode</span><span·class="p">;</span><span·class="w">······</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">'stree'</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 234 | ····</span><span·class="n">RBTNode</span><span·class="w">·</span><span·class="ss">anode</span><span·class="p">;</span><span·class="w">······</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">'atree'</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> | 234 | ····</span><span·class="n">RBTNode</span><span·class="w">·</span><span·class="ss">anode</span><span·class="p">;</span><span·class="w">······</span><span·class="o">/</span><span·class="o">*</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">'atree'</span><span·class="w">·</span><span·class="o">*</span><span·class="o">/</span><span·class="w"> |
| 235 | ····</span><span·class="ss">char</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">start</span><span·class="p">;</span><span·class="w"> | 235 | ····</span><span·class="ss">char</span><span·class="o">*</span><span·class="w">·</span><span·class="ss">start</span><span·class="p">;</span><span·class="w"> |
| 236 | ····</span><span·class="ss">char</span><span·class="o">*</span><span·class="w">·</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 236 | ····</span><span·class="ss">char</span><span·class="o">*</span><span·class="w">·</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 237 | </span><span·class="p"·data-group-id=" | 237 | </span><span·class="p"·data-group-id="7286677870-1">}</span><span·class="n">ErtsFreeSegDesc</span><span·class="p">;</span></code></pre><p>To·find·the·smallest·free·segment·that·will·satisfy·a·carrier·allocation |
| 238 | (best·fit),·the·free·segments·are·organized·in·a·tree·sorted·by | 238 | (best·fit),·the·free·segments·are·organized·in·a·tree·sorted·by |
| 239 | size·(<code·class="inline">stree</code>).·We·search·in·this·tree·at·allocation.·If·no·free·segment·of | 239 | size·(<code·class="inline">stree</code>).·We·search·in·this·tree·at·allocation.·If·no·free·segment·of |
| 240 | sufficient·size·was·found,·the·area·(<code·class="inline">sa</code>·or·<code·class="inline">sua</code>)·is·instead·expanded. | 240 | sufficient·size·was·found,·the·area·(<code·class="inline">sa</code>·or·<code·class="inline">sua</code>)·is·instead·expanded. |
| 241 | If·two·or·more·free·segments·with·equal·size·exist,·the·one·at·lowest | 241 | If·two·or·more·free·segments·with·equal·size·exist,·the·one·at·lowest |
| 242 | address·is·chosen·for·<code·class="inline">sa</code>·and·highest·address·for·<code·class="inline">sua</code>.</p><p>At·carrier·deallocation,·we·want·to·coalesce·with·any·adjacent·free | 242 | address·is·chosen·for·<code·class="inline">sa</code>·and·highest·address·for·<code·class="inline">sua</code>.</p><p>At·carrier·deallocation,·we·want·to·coalesce·with·any·adjacent·free |
| 243 | segments,·to·form·one·large·free·segment.·To·do·that,·all·free | 243 | segments,·to·form·one·large·free·segment.·To·do·that,·all·free |
| 244 | segments·are·also·organized·in·a·tree·sorted·in·address·order·(<code·class="inline">atree</code>).</p><p>So,·in·total·we·keep·four·trees·of·free·descriptors·for·the·super | 244 | segments·are·also·organized·in·a·tree·sorted·in·address·order·(<code·class="inline">atree</code>).</p><p>So,·in·total·we·keep·four·trees·of·free·descriptors·for·the·super |
| Offset 317, 15 lines modified | Offset 317, 15 lines modified | ||
| 317 | ······<p·class="built-using"> | 317 | ······<p·class="built-using"> |
| 318 | ········Built·using | 318 | ········Built·using |
| 319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 321 | ······</p> | 321 | ······</p> |
| 322 | <p>Copyright·©·1996-202 | 322 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 323 | ····</footer> | 323 | ····</footer> |
| 324 | ··</div> | 324 | ··</div> |
| 325 | </main> | 325 | </main> |
| 326 | </div> | 326 | </div> |
| 327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 328 | ··<script> | 328 | ··<script> |
| 329 | ··let·initialized·=·false; | 329 | ··let·initialized·=·false; |
| Offset 422, 15 lines modified | Offset 422, 15 lines modified | ||
| 422 | ······<p·class="built-using"> | 422 | ······<p·class="built-using"> |
| 423 | ········Built·using | 423 | ········Built·using |
| 424 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 424 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 425 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 425 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 426 | ······</p> | 426 | ······</p> |
| 427 | <p>Copyright·©·1996-202 | 427 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 428 | ····</footer> | 428 | ····</footer> |
| 429 | ··</div> | 429 | ··</div> |
| 430 | </main> | 430 | </main> |
| 431 | </div> | 431 | </div> |
| 432 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 432 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 433 | ··<script> | 433 | ··<script> |
| 434 | ··let·initialized·=·false; | 434 | ··let·initialized·=·false; |
| Offset 560, 17 lines modified | Offset 560, 17 lines modified | ||
| 560 | the·event·occurs.</p></section><section·role="note"·class="admonition·tip"><h4·class="admonition-title·tip">Do</h4><p>Determine·the·order·of·events·by·saving·the·integer·returned·by | 560 | the·event·occurs.</p></section><section·role="note"·class="admonition·tip"><h4·class="admonition-title·tip">Do</h4><p>Determine·the·order·of·events·by·saving·the·integer·returned·by |
| 561 | <a·href="erlang.html#unique_integer/1"><code·class="inline">erlang:unique_integer([monotonic])</code></a>·when·the | 561 | <a·href="erlang.html#unique_integer/1"><code·class="inline">erlang:unique_integer([monotonic])</code></a>·when·the |
| 562 | event·occurs.·These·integers·are·strictly·monotonically·ordered·on·current | 562 | event·occurs.·These·integers·are·strictly·monotonically·ordered·on·current |
| 563 | runtime·system·instance·corresponding·to·creation·time.</p></section><h4>Determine·Order·of·Events·with·Time·of·the·Event</h4><section·role="note"·class="admonition·error"><h4·class="admonition-title·error">Dont</h4><p>Determine·the·order·of·events·by·saving·a·time·stamp·with·<a·href="erlang.html#now/0"><code·class="inline">erlang:now/0</code></a>·when | 563 | runtime·system·instance·corresponding·to·creation·time.</p></section><h4>Determine·Order·of·Events·with·Time·of·the·Event</h4><section·role="note"·class="admonition·error"><h4·class="admonition-title·error">Dont</h4><p>Determine·the·order·of·events·by·saving·a·time·stamp·with·<a·href="erlang.html#now/0"><code·class="inline">erlang:now/0</code></a>·when |
| 564 | the·event·occurs.</p></section><section·role="note"·class="admonition·tip"><h4·class="admonition-title·tip">Do</h4><p>Determine·the·order·of·events·by·saving·a·tuple·containing | 564 | the·event·occurs.</p></section><section·role="note"·class="admonition·tip"><h4·class="admonition-title·tip">Do</h4><p>Determine·the·order·of·events·by·saving·a·tuple·containing |
| 565 | <a·href="erlang.html#monotonic_time/0">monotonic·time</a>·and·a | 565 | <a·href="erlang.html#monotonic_time/0">monotonic·time</a>·and·a |
| 566 | <a·href="erlang.html#unique_integer/1">strictly·monotonically·increasing·integer</a>·as | 566 | <a·href="erlang.html#unique_integer/1">strictly·monotonically·increasing·integer</a>·as |
| 567 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id=" | 567 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Time</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id="4615353411-1">(</span><span·class="p"·data-group-id="4615353411-1">)</span><span·class="p">,</span><span·class="w"> |
| 568 | </span><span·class="n">UMI</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">unique_integer</span><span·class="p"·data-group-id=" | 568 | </span><span·class="n">UMI</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">unique_integer</span><span·class="p"·data-group-id="4615353411-2">(</span><span·class="p"·data-group-id="4615353411-3">[</span><span·class="ss">monotonic</span><span·class="p"·data-group-id="4615353411-3">]</span><span·class="p"·data-group-id="4615353411-2">)</span><span·class="p">,</span><span·class="w"> |
| 569 | </span><span·class="n">EventTag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 569 | </span><span·class="n">EventTag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4615353411-4">{</span><span·class="n">Time</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UMI</span><span·class="p"·data-group-id="4615353411-4">}</span></code></pre><p>These·tuples·are·strictly·monotonically·ordered·on·the·current·runtime·system |
| 570 | instance·according·to·creation·time.·It·is·important·that·the·monotonic·time | 570 | instance·according·to·creation·time.·It·is·important·that·the·monotonic·time |
| 571 | is·in·the·first·element·(the·most·significant·element·when·comparing | 571 | is·in·the·first·element·(the·most·significant·element·when·comparing |
| 572 | two-tuples).·Using·the·monotonic·time·in·the·tuples,·you·can·calculate·time | 572 | two-tuples).·Using·the·monotonic·time·in·the·tuples,·you·can·calculate·time |
| 573 | between·events.</p><p>If·you·are·interested·in·Erlang·system·time·at·the·time·when·the·event | 573 | between·events.</p><p>If·you·are·interested·in·Erlang·system·time·at·the·time·when·the·event |
| 574 | occurred,·you·can·also·save·the·time·offset·before·or·after·saving·the·events | 574 | occurred,·you·can·also·save·the·time·offset·before·or·after·saving·the·events |
| 575 | using·<a·href="erlang.html#time_offset/0"><code·class="inline">erlang:time_offset/0</code></a>.·Erlang·monotonic·time·added·with·the·time·offset | 575 | using·<a·href="erlang.html#time_offset/0"><code·class="inline">erlang:time_offset/0</code></a>.·Erlang·monotonic·time·added·with·the·time·offset |
| 576 | corresponds·to·Erlang·system·time.</p><p>If·you·are·executing·in·a·mode·where·time·offset·can·change,·and·you·want·to | 576 | corresponds·to·Erlang·system·time.</p><p>If·you·are·executing·in·a·mode·where·time·offset·can·change,·and·you·want·to |
| Offset 641, 15 lines modified | Offset 641, 15 lines modified | ||
| 641 | ······<p·class="built-using"> | 641 | ······<p·class="built-using"> |
| 642 | ········Built·using | 642 | ········Built·using |
| 643 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 643 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 644 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 644 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 645 | ······</p> | 645 | ······</p> |
| 646 | <p>Copyright·©·1996-202 | 646 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 647 | ····</footer> | 647 | ····</footer> |
| 648 | ··</div> | 648 | ··</div> |
| 649 | </main> | 649 | </main> |
| 650 | </div> | 650 | </div> |
| 651 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 651 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 652 | ··<script> | 652 | ··<script> |
| 653 | ··let·initialized·=·false; | 653 | ··let·initialized·=·false; |
| Offset 145, 31 lines modified | Offset 145, 31 lines modified | ||
| 145 | on·functions·that·never·return,·as·each·call·pushes·a·frame·that·will | 145 | on·functions·that·never·return,·as·each·call·pushes·a·frame·that·will |
| 146 | never·be·removed.</p><p>Another·limitation·is·that·since·the·breakpoint·is·in·the·<em>callee</em>·and·not | 146 | never·be·removed.</p><p>Another·limitation·is·that·since·the·breakpoint·is·in·the·<em>callee</em>·and·not |
| 147 | the·<em>caller</em>,·we're·limited·to·the·information·we·have·on·function·ingress. | 147 | the·<em>caller</em>,·we're·limited·to·the·information·we·have·on·function·ingress. |
| 148 | This·means·that·we·can't·actually·tell·who·called·us:·since·we're·limited | 148 | This·means·that·we·can't·actually·tell·who·called·us:·since·we're·limited |
| 149 | to·inspecting·the·stack·we·can·only·say·where·we're·<em>going·to·return·to</em>, | 149 | to·inspecting·the·stack·we·can·only·say·where·we're·<em>going·to·return·to</em>, |
| 150 | which·is·not·quite·the·same·thing.</p><p>As·an·illustration,·when·the·<code·class="inline">caller</code>·option·is·enabled·all·trace·messages | 150 | which·is·not·quite·the·same·thing.</p><p>As·an·illustration,·when·the·<code·class="inline">caller</code>·option·is·enabled·all·trace·messages |
| 151 | from·<code·class="inline">bar/1</code>··will·say·that·they·were·called·from·<code·class="inline">foo/0</code>,·even·though·it | 151 | from·<code·class="inline">bar/1</code>··will·say·that·they·were·called·from·<code·class="inline">foo/0</code>,·even·though·it |
| 152 | went·through·a·bunch·of·other·functions·on·the·way:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="6 | 152 | went·through·a·bunch·of·other·functions·on·the·way:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="5667984125-1">(</span><span·class="p"·data-group-id="5667984125-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ····</span><span·class="nf">lots</span><span·class="p"·data-group-id="6 | 153 | ····</span><span·class="nf">lots</span><span·class="p"·data-group-id="5667984125-2">(</span><span·class="p"·data-group-id="5667984125-2">)</span><span·class="p">,</span><span·class="w"> |
| 154 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 154 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="nf">lots</span><span·class="p"·data-group-id="6 | 155 | </span><span·class="nf">lots</span><span·class="p"·data-group-id="5667984125-3">(</span><span·class="p"·data-group-id="5667984125-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 156 | ····</span><span·class="nf">'of'</span><span·class="p"·data-group-id="6 | 156 | ····</span><span·class="nf">'of'</span><span·class="p"·data-group-id="5667984125-4">(</span><span·class="p"·data-group-id="5667984125-4">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">'of'</span><span·class="p"·data-group-id="6 | 157 | </span><span·class="nf">'of'</span><span·class="p"·data-group-id="5667984125-5">(</span><span·class="p"·data-group-id="5667984125-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="nf">indirections</span><span·class="p"·data-group-id="6 | 158 | ····</span><span·class="nf">indirections</span><span·class="p"·data-group-id="5667984125-6">(</span><span·class="p"·data-group-id="5667984125-6">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="nf">indirections</span><span·class="p"·data-group-id="6 | 159 | </span><span·class="nf">indirections</span><span·class="p"·data-group-id="5667984125-7">(</span><span·class="p"·data-group-id="5667984125-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ····</span><span·class="nf">bar</span><span·class="p"·data-group-id="6 | 160 | ····</span><span·class="nf">bar</span><span·class="p"·data-group-id="5667984125-8">(</span><span·class="mi">10</span><span·class="p"·data-group-id="5667984125-8">)</span><span·class="p">.</span><span·class="w"> |
| 161 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="6 | 161 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="5667984125-9">(</span><span·class="mi">0</span><span·class="p"·data-group-id="5667984125-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | ····</span><span·class="ss">done</span><span·class="p">;</span><span·class="w"> | 162 | ····</span><span·class="ss">done</span><span·class="p">;</span><span·class="w"> |
| 163 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="6 | 163 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="5667984125-10">(</span><span·class="n">N</span><span·class="p"·data-group-id="5667984125-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 164 | ····</span><span·class="nf">bar</span><span·class="p"·data-group-id="6 | 164 | ····</span><span·class="nf">bar</span><span·class="p"·data-group-id="5667984125-11">(</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="5667984125-11">)</span><span·class="p">.</span></code></pre><h3·id="export-tracing"·class="section-heading"> |
| 165 | ··<a·href="#export-tracing"·class="hover-link"> | 165 | ··<a·href="#export-tracing"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Export·tracing</span> | 168 | ··<span·class="text">Export·tracing</span> |
| 169 | </h3> | 169 | </h3> |
| 170 | <p>In·the·interpreter,·breakpoints·are·set·inside·the·code·trampoline·for | 170 | <p>In·the·interpreter,·breakpoints·are·set·inside·the·code·trampoline·for |
| 171 | export·entries,·and·their·address·vector·is·updated·to·point·to·them. | 171 | export·entries,·and·their·address·vector·is·updated·to·point·to·them. |
| Offset 386, 15 lines modified | Offset 386, 15 lines modified | ||
| 386 | ······<p·class="built-using"> | 386 | ······<p·class="built-using"> |
| 387 | ········Built·using | 387 | ········Built·using |
| 388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 390 | ······</p> | 390 | ······</p> |
| 391 | <p>Copyright·©·1996-202 | 391 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 392 | ····</footer> | 392 | ····</footer> |
| 393 | ··</div> | 393 | ··</div> |
| 394 | </main> | 394 | </main> |
| 395 | </div> | 395 | </div> |
| 396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 397 | ··<script> | 397 | ··<script> |
| 398 | ··let·initialized·=·false; | 398 | ··let·initialized·=·false; |
| Offset 191, 15 lines modified | Offset 191, 15 lines modified | ||
| 191 | ······<p·class="built-using"> | 191 | ······<p·class="built-using"> |
| 192 | ········Built·using | 192 | ········Built·using |
| 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 195 | ······</p> | 195 | ······</p> |
| 196 | <p>Copyright·©·1996-202 | 196 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 197 | ····</footer> | 197 | ····</footer> |
| 198 | ··</div> | 198 | ··</div> |
| 199 | </main> | 199 | </main> |
| 200 | </div> | 200 | </div> |
| 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 202 | ··<script> | 202 | ··<script> |
| 203 | ··let·initialized·=·false; | 203 | ··let·initialized·=·false; |
| Offset 196, 15 lines modified | Offset 196, 15 lines modified | ||
| 196 | ······<p·class="built-using"> | 196 | ······<p·class="built-using"> |
| 197 | ········Built·using | 197 | ········Built·using |
| 198 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 198 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 199 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 199 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 200 | ······</p> | 200 | ······</p> |
| 201 | <p>Copyright·©·1996-202 | 201 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 202 | ····</footer> | 202 | ····</footer> |
| 203 | ··</div> | 203 | ··</div> |
| 204 | </main> | 204 | </main> |
| 205 | </div> | 205 | </div> |
| 206 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 206 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 207 | ··<script> | 207 | ··<script> |
| 208 | ··let·initialized·=·false; | 208 | ··let·initialized·=·false; |
| Offset 129, 26 lines modified | Offset 129, 26 lines modified | ||
| 129 | ····<section·id="moduledoc"> | 129 | ····<section·id="moduledoc"> |
| 130 | <p>zlib·compression·interface.</p><p>This·module·provides·an·API·for·the·zlib·library | 130 | <p>zlib·compression·interface.</p><p>This·module·provides·an·API·for·the·zlib·library |
| 131 | (<a·href="http://www.zlib.net">www.zlib.net</a>).·It·is·used·to·compress·and·decompress | 131 | (<a·href="http://www.zlib.net">www.zlib.net</a>).·It·is·used·to·compress·and·decompress |
| 132 | data.·The·data·format·is·described·by | 132 | data.·The·data·format·is·described·by |
| 133 | <a·href="https://www.ietf.org/rfc/rfc1950.txt">RFC·1950</a>, | 133 | <a·href="https://www.ietf.org/rfc/rfc1950.txt">RFC·1950</a>, |
| 134 | <a·href="https://www.ietf.org/rfc/rfc1951.txt">RFC·1951</a>,·and | 134 | <a·href="https://www.ietf.org/rfc/rfc1951.txt">RFC·1951</a>,·and |
| 135 | <a·href="https://www.ietf.org/rfc/rfc1952.txt">RFC·1952</a>.</p><p>A·typical·(compress)·usage·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 135 | <a·href="https://www.ietf.org/rfc/rfc1952.txt">RFC·1952</a>.</p><p>A·typical·(compress)·usage·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="5015051565-1">(</span><span·class="p"·data-group-id="5015051565-1">)</span><span·class="p">,</span><span·class="w"> |
| 136 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateInit</span><span·class="p"·data-group-id=" | 136 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateInit</span><span·class="p"·data-group-id="5015051565-2">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="ss">default</span><span·class="p"·data-group-id="5015051565-2">)</span><span·class="p">,</span><span·class="w"> |
| 137 | </span><span·class="n">Compress</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 137 | </span><span·class="n">Compress</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5015051565-3">(</span><span·class="ss">end_of_data</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Cont</span><span·class="p"·data-group-id="5015051565-3">)</span><span·class="w">·</span><span·class="p">-></[·...·truncated·by·diffoscope;·len:·123,·SHA:·817a8e6dfd31e71450563c73b192bbd46e44082d7f5a4bce17af70bfd9910a86·...·]-4">]</span><span·class="p">;</span><span·class="w"> |
| 138 | ··············</span><span·class="p"·data-group-id=" | 138 | ··············</span><span·class="p"·data-group-id="5015051565-5">(</span><span·class="n">Data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cont</span><span·class="p"·data-group-id="5015051565-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ·················</span><span·class="p"·data-group-id=" | 139 | ·················</span><span·class="p"·data-group-id="5015051565-6">[</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id="5015051565-7">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span[·...·truncated·by·diffoscope;·len:·436,·SHA:·f0d7a34d4f3b305edd690ca5d07ab7583ff299731bd824126888b2bde766bd4b·...·]-6">]</span><span·class="w"> |
| 140 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 140 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 141 | </span><span·class="n">Compressed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Compress</span><span·class="p"·data-group-id=" | 141 | </span><span·class="n">Compressed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Compress</span><span·class="p"·data-group-id="5015051565-10">(</span><span·class="n">Read</span><span·class="p"·data-group-id="5015051565-11">(</span><span·class="p"·data-group-id="5015051565-11">)</span><span·class="p">,</span><span·class="n">Compress</span><span·class="p"·data-group-id="5015051565-10">)</span><span·class="p">,</span><span·class="w"> |
| 142 | </span><span·class="n">Last</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id=" | 142 | </span><span·class="n">Last</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id="5015051565-12">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5015051565-13">[</span><span·class="p"·data-group-id="5015051565-13">]</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·66,·SHA:·e9e05d2efedca1528face9190f96eb3d1addf9ea01f3e60b98fb8cea72d89a4b·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| 143 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateEnd</span><span·class="p"·data-group-id=" | 143 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateEnd</span><span·class="p"·data-group-id="5015051565-14">(</span><span·class="n">Z</span><span·class="p"·data-group-id="5015051565-14">)</span><span·class="p">,</span><span·class="w"> |
| 144 | </span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 144 | </span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="5015051565-15">(</span><span·class="n">Z</span><span·class="p"·data-group-id="5015051565-15">)</span><span·class="p">,</span><span·class="w"> |
| 145 | </span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id=" | 145 | </span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id="5015051565-16">(</span><span·class="p"·data-group-id="5015051565-17">[</span><span·class="n">Compressed</span><span·class="p">|</span><span·class="n">Last</span><span·class="p"·data-group-id="5015051565-17">]</span><span·class="p"·data-group-id="5015051565-16">)</span></code></pre><p>In·all·functions·errors,·<code·class="inline">{'EXIT',{Reason,Backtrace}}</code>,·can·be·thrown,·where |
| 146 | <code·class="inline">Reason</code>·describes·the·error.</p><p>Typical·<code·class="inline">Reason</code>s:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·Bad·argument.</p></li><li><p><strong><code·class="inline">not_initialized</code></strong>·-·The·stream·hasn't·been·initialized,·eg.·if | 146 | <code·class="inline">Reason</code>·describes·the·error.</p><p>Typical·<code·class="inline">Reason</code>s:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·Bad·argument.</p></li><li><p><strong><code·class="inline">not_initialized</code></strong>·-·The·stream·hasn't·been·initialized,·eg.·if |
| 147 | <a·href="#inflateInit/1"><code·class="inline">inflateInit/1</code></a>·wasn't·called·prior·to·a·call·to·<a·href="#inflate/2"><code·class="inline">inflate/2</code></a>.</p></li><li><p><strong><code·class="inline">not_on_controlling_process</code></strong>·-·The·stream·was·used·by·a·process·that | 147 | <a·href="#inflateInit/1"><code·class="inline">inflateInit/1</code></a>·wasn't·called·prior·to·a·call·to·<a·href="#inflate/2"><code·class="inline">inflate/2</code></a>.</p></li><li><p><strong><code·class="inline">not_on_controlling_process</code></strong>·-·The·stream·was·used·by·a·process·that |
| 148 | doesn't·control·it.·Use·<a·href="#set_controlling_process/2"><code·class="inline">set_controlling_process/2</code></a>·if·you·need·to·transfer·a | 148 | doesn't·control·it.·Use·<a·href="#set_controlling_process/2"><code·class="inline">set_controlling_process/2</code></a>·if·you·need·to·transfer·a |
| 149 | stream·to·a·different·process.</p></li><li><p><strong><code·class="inline">data_error</code></strong>·-·The·data·contains·errors.</p></li><li><p><strong><code·class="inline">stream_error</code></strong>·-·Inconsistent·stream·state.</p></li><li><p><strong><code·class="inline">{need_dictionary,Adler32}</code></strong>·-·See·<a·href="#inflate/2"><code·class="inline">inflate/2</code></a>.</p></li></ul> | 149 | stream·to·a·different·process.</p></li><li><p><strong><code·class="inline">data_error</code></strong>·-·The·data·contains·errors.</p></li><li><p><strong><code·class="inline">stream_error</code></strong>·-·Inconsistent·stream·state.</p></li><li><p><strong><code·class="inline">{need_dictionary,Adler32}</code></strong>·-·See·<a·href="#inflate/2"><code·class="inline">inflate/2</code></a>.</p></li></ul> |
| 150 | ····</section> | 150 | ····</section> |
| 151 | </div> | 151 | </div> |
| Offset 827, 19 lines modified | Offset 827, 19 lines modified | ||
| 827 | all·input·data·available·so·far.·Flushing·can·degrade·compression·for·some | 827 | all·input·data·available·so·far.·Flushing·can·degrade·compression·for·some |
| 828 | compression·algorithms;·thus,·use·it·only·when·necessary.</p><p>If·<code·class="inline">Flush</code>·is·set·to·<code·class="inline">full</code>,·all·output·is·flushed·as·with·<code·class="inline">sync</code>,·and·the | 828 | compression·algorithms;·thus,·use·it·only·when·necessary.</p><p>If·<code·class="inline">Flush</code>·is·set·to·<code·class="inline">full</code>,·all·output·is·flushed·as·with·<code·class="inline">sync</code>,·and·the |
| 829 | compression·state·is·reset·so·that·decompression·can·restart·from·this·point·if | 829 | compression·state·is·reset·so·that·decompression·can·restart·from·this·point·if |
| 830 | previous·compressed·data·has·been·damaged·or·if·random·access·is·desired.·Using | 830 | previous·compressed·data·has·been·damaged·or·if·random·access·is·desired.·Using |
| 831 | <code·class="inline">full</code>·too·often·can·seriously·degrade·the·compression.</p><p>If·<code·class="inline">Flush</code>·is·set·to·<code·class="inline">finish</code>,·pending·input·is·processed,·pending·output·is | 831 | <code·class="inline">full</code>·too·often·can·seriously·degrade·the·compression.</p><p>If·<code·class="inline">Flush</code>·is·set·to·<code·class="inline">finish</code>,·pending·input·is·processed,·pending·output·is |
| 832 | flushed,·and·<a·href="#deflate/3"><code·class="inline">deflate/3</code></a>·returns.·Afterwards·the·only·possible | 832 | flushed,·and·<a·href="#deflate/3"><code·class="inline">deflate/3</code></a>·returns.·Afterwards·the·only·possible |
| 833 | operations·on·the·stream·are·<a·href="#deflateReset/1"><code·class="inline">deflateReset/1</code></a>·or·<a·href="#deflateEnd/1"><code·class="inline">deflateEnd/1</code></a>.</p><p><code·class="inline">Flush</code>·can·be·set·to·<code·class="inline">finish</code>·immediately·after | 833 | operations·on·the·stream·are·<a·href="#deflateReset/1"><code·class="inline">deflateReset/1</code></a>·or·<a·href="#deflateEnd/1"><code·class="inline">deflateEnd/1</code></a>.</p><p><code·class="inline">Flush</code>·can·be·set·to·<code·class="inline">finish</code>·immediately·after |
| 834 | <a·href="#deflateInit/1"><code·class="inline">deflateInit</code></a>·if·all·compression·is·to·be·done·in·one·step.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateInit</span><span·class="p"·data-group-id=" | 834 | <a·href="#deflateInit/1"><code·class="inline">deflateInit</code></a>·if·all·compression·is·to·be·done·in·one·step.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateInit</span><span·class="p"·data-group-id="5259640016-1">(</span><span·class="n">Z</span><span·class="p"·data-group-id="5259640016-1">)</span><span·class="p">,</span><span·class="w"> |
| 835 | </span><span·class="n">B1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id=" | 835 | </span><span·class="n">B1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id="5259640016-2">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="5259640016-2">)</span><span·class="p">,</span><span·class="w"> |
| 836 | </span><span·class="n">B2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id=" | 836 | </span><span·class="n">B2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflate</span><span·class="p"·data-group-id="5259640016-3">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="p"·data-group-id="5259640016-4"><<</span><span·class="w">·</span><span·class="p"·data-group-id="5259640016-4">>></span><span·class="p">,</span><span·class="ss">f[·...·truncated·by·diffoscope;·len:·53,·SHA:·e32d880494fdfbee339bb582e32622725afabcf8aa586d46b61d58dd4418e833·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 837 | </span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateEnd</span><span·class="p"·data-group-id=" | 837 | </span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">deflateEnd</span><span·class="p"·data-group-id="5259640016-5">(</span><span·class="n">Z</span><span·class="p"·data-group-id="5259640016-5">)</span><span·class="p">,</span><span·class="w"> |
| 838 | </span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id=" | 838 | </span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id="5259640016-6">(</span><span·class="p"·data-group-id="5259640016-7">[</span><span·class="n">B1</span><span·class="p">,</span><span·class="n">B2</span><span·class="p"·data-group-id="5259640016-7">]</span><span·class="p"·data-group-id="5259640016-6">)</span></code></pre> |
| 839 | ··</section> | 839 | ··</section> |
| 840 | </section> | 840 | </section> |
| 841 | <section·class="detail"·id="deflateEnd/1"> | 841 | <section·class="detail"·id="deflateEnd/1"> |
| 842 | ··<div·class="detail-header"> | 842 | ··<div·class="detail-header"> |
| 843 | ····<a·href="#deflateEnd/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 843 | ····<a·href="#deflateEnd/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 844 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 844 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1349, 28 lines modified | Offset 1349, 28 lines modified | ||
| 1349 | <p>Initializes·the·decompression·dictionary·from·the·specified·uncompressed·byte | 1349 | <p>Initializes·the·decompression·dictionary·from·the·specified·uncompressed·byte |
| 1350 | sequence.</p><p>This·function·must·be·called·as·a·response·to·an·inflate·operation | 1350 | sequence.</p><p>This·function·must·be·called·as·a·response·to·an·inflate·operation |
| 1351 | (eg.·<a·href="#safeInflate/2"><code·class="inline">safeInflate/2</code></a>)·returning·<code·class="inline">{need_dictionary,Adler,Output}</code>·or·in·the·case | 1351 | (eg.·<a·href="#safeInflate/2"><code·class="inline">safeInflate/2</code></a>)·returning·<code·class="inline">{need_dictionary,Adler,Output}</code>·or·in·the·case |
| 1352 | of·deprecated·functions,·throwing·an | 1352 | of·deprecated·functions,·throwing·an |
| 1353 | <code·class="inline">{'EXIT',{{need_dictionary,Adler},_StackTrace}}</code>·exception.</p><p>The·dictionary·chosen·by·the·compressor·can·be·determined·from·the·Adler·value | 1353 | <code·class="inline">{'EXIT',{{need_dictionary,Adler},_StackTrace}}</code>·exception.</p><p>The·dictionary·chosen·by·the·compressor·can·be·determined·from·the·Adler·value |
| 1354 | returned·or·thrown·by·the·call·to·the·inflate·function.·The·compressor·and | 1354 | returned·or·thrown·by·the·call·to·the·inflate·function.·The·compressor·and |
| 1355 | decompressor·must·use·the·same·dictionary·(See·<a·href="#deflateSetDictionary/2"><code·class="inline">deflateSetDictionary/2</code></a>).</p><p>After·setting·the·dictionary·the·inflate·operation·should·be·retried·without·new | 1355 | decompressor·must·use·the·same·dictionary·(See·<a·href="#deflateSetDictionary/2"><code·class="inline">deflateSetDictionary/2</code></a>).</p><p>After·setting·the·dictionary·the·inflate·operation·should·be·retried·without·new |
| 1356 | input.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">deprecated_unpack</span><span·class="p"·data-group-id=" | 1356 | input.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">deprecated_unpack</span><span·class="p"·data-group-id="1747553126-1">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Compressed</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dict</span><span·class="p"·data-group-id="1747553126-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1357 | ·····</span><span·class="k">case</span><span·class="w">·</span><span·class="k">catch</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id=" | 1357 | ·····</span><span·class="k">case</span><span·class="w">·</span><span·class="k">catch</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id="1747553126-2">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Compressed</span><span·class="p"·data-group-id="1747553126-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1358 | ··········</span><span·class="p"·data-group-id=" | 1358 | ··········</span><span·class="p"·data-group-id="1747553126-3">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="p"·data-group-id="1747553126-4">{</span><span·class="p"·data-group-id="1747553126-5">{</span><span·class="ss">need_dictionary</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·245,·SHA:·5fc04867c09ffc45ded877c6f2155dc0176765d70825fb9e0ac8de864fa42faa·...·]-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1359 | ·················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateSetDictionary</span><span·class="p"·data-group-id=" | 1359 | ·················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateSetDictionary</span><span·class="p"·data-group-id="1747553126-6">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dict</span><span·class="p"·data-group-id="1747553126-6">)</span><span·class="p">,</span><span·class="w"> |
| 1360 | ·················</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id=" | 1360 | ·················</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id="1747553126-7">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1747553126-8">[</span><span·class="p"·data-group-id="1747553126-8">]</span><span·class="p"·data-group-id="1747553126-7">)</span><span·class="p">;</span><span·class="w"> |
| 1361 | ··········</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 1361 | ··········</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1362 | ·················</span><span·class="n">Uncompressed</span><span·class="w"> | 1362 | ·················</span><span·class="n">Uncompressed</span><span·class="w"> |
| 1363 | ·····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 1363 | ·····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 1364 | </span><span·class="nf">new_unpack</span><span·class="p"·data-group-id=" | 1364 | </span><span·class="nf">new_unpack</span><span·class="p"·data-group-id="1747553126-9">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Compressed</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dict</span><span·class="p"·data-group-id="1747553126-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1365 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id=" | 1365 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id="1747553126-10">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Compressed</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1747553126-11">[</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·300,·SHA:·4bb6e1d7ba053a04dd38ca5fcab81f1c4ec68a2c9a88c1b83eaecc121ffc2c2c·...·]-10">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1366 | ········</span><span·class="p"·data-group-id=" | 1366 | ········</span><span·class="p"·data-group-id="1747553126-13">{</span><span·class="ss">need_dictionary</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">DictId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Output</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·8fc53b80996d00e66842acd17940eb1e8be9c9730d18941bdfdc39a1b1b95e58·...·]-13">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1367 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateSetDictionary</span><span·class="p"·data-group-id=" | 1367 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateSetDictionary</span><span·class="p"·data-group-id="1747553126-14">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dict</span><span·class="p"·data-group-id="1747553126-14">)</span><span·class="p">,</span><span·class="w"> |
| 1368 | ············</span><span·class="p"·data-group-id=" | 1368 | ············</span><span·class="p"·data-group-id="1747553126-15">[</span><span·class="n">Output</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflate</span><span·class="p"·data-group-id="1747553126-16">(</[·...·truncated·by·diffoscope;·len:·280,·SHA:·127411a8e9627fc0e148ec4914eb18f38fc5b19d0ae552344f824e5bedcee568·...·]-15">]</span><span·class="p">;</span><span·class="w"> |
| 1369 | ········</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 1369 | ········</span><span·class="n">Uncompressed</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1370 | ············</span><span·class="n">Uncompressed</span><span·class="w"> | 1370 | ············</span><span·class="n">Uncompressed</span><span·class="w"> |
| 1371 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre> | 1371 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre> |
| 1372 | ··</section> | 1372 | ··</section> |
| 1373 | </section> | 1373 | </section> |
| 1374 | <section·class="detail"·id="open/0"> | 1374 | <section·class="detail"·id="open/0"> |
| Offset 1434, 26 lines modified | Offset 1434, 26 lines modified | ||
| 1434 | implementation-defined·threshold.·It's·useful·when·decompressing·untrusted·input | 1434 | implementation-defined·threshold.·It's·useful·when·decompressing·untrusted·input |
| 1435 | which·could·have·been·maliciously·crafted·to·expand·until·the·system·runs·out·of | 1435 | which·could·have·been·maliciously·crafted·to·expand·until·the·system·runs·out·of |
| 1436 | memory.</p><p>This·function·returns·<code·class="inline">{continue·|·finished,·Output}</code>,·where·Output·is·the·data | 1436 | memory.</p><p>This·function·returns·<code·class="inline">{continue·|·finished,·Output}</code>,·where·Output·is·the·data |
| 1437 | that·was·decompressed·in·this·call.·New·input·can·be·queued·up·on·each·call·if | 1437 | that·was·decompressed·in·this·call.·New·input·can·be·queued·up·on·each·call·if |
| 1438 | desired,·and·the·function·will·return·<code·class="inline">{finished,·Output}</code>·once·all·queued·data | 1438 | desired,·and·the·function·will·return·<code·class="inline">{finished,·Output}</code>·once·all·queued·data |
| 1439 | has·been·decompressed.</p><p>This·function·can·introduce·some·output·latency·(reading·input·without·producing | 1439 | has·been·decompressed.</p><p>This·function·can·introduce·some·output·latency·(reading·input·without·producing |
| 1440 | any·output).</p><p>If·a·preset·dictionary·is·required·for·further·decompression,·this·function | 1440 | any·output).</p><p>If·a·preset·dictionary·is·required·for·further·decompression,·this·function |
| 1441 | returns·a·<code·class="inline">need_dictionary</code>·tuple.·See·<a·href="#inflateSetDictionary/2"><code·class="inline">inflateSetDictionary/2</code></a>)·for·details.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">walk</span><span·class="p"·data-group-id=" | 1441 | returns·a·<code·class="inline">need_dictionary</code>·tuple.·See·<a·href="#inflateSetDictionary/2"><code·class="inline">inflateSetDictionary/2</code></a>)·for·details.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">walk</span><span·class="p"·data-group-id="7988082455-1">(</span><span·class="n">Compressed</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handler</span><span·class="p"·data-group-id="7988082455-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1442 | ····</span><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 1442 | ····</span><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="7988082455-2">(</span><span·class="p"·data-group-id="7988082455-2">)</span><span·class="p">,</span><span·class="w"> |
| 1443 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateInit</span><span·class="p"·data-group-id=" | 1443 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateInit</span><span·class="p"·data-group-id="7988082455-3">(</span><span·class="n">Z</span><span·class="p"·data-group-id="7988082455-3">)</span><span·class="p">,</span><span·class="w"> |
| 1444 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 1444 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="7988082455-4">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handler</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">safeInflate</sp[·...·truncated·by·diffoscope;·len:·255,·SHA:·e218d97996a5a31c4d0183bec1bff0171ce7afa12ba68fbf63038f1723b78f9b·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 1445 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateEnd</span><span·class="p"·data-group-id=" | 1445 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">inflateEnd</span><span·class="p"·data-group-id="7988082455-6">(</span><span·class="n">Z</span><span·class="p"·data-group-id="7988082455-6">)</span><span·class="p">,</span><span·class="w"> |
| 1446 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 1446 | ····</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="7988082455-7">(</span><span·class="n">Z</span><span·class="p"·data-group-id="7988082455-7">)</span><span·class="p">.</span><span·class="w"> |
| 1447 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 1447 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="7988082455-8">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handler</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7988082455-9">{</span><span·class="ss">continue</span[·...·truncated·by·diffoscope;·len:·172,·SHA:·9284125b9ef0cea2879a2aef48d991823327db77f336b970f051ea88577378b6·...·]-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1448 | ····</span><span·class="n">Handler</span><span·class="p"·data-group-id=" | 1448 | ····</span><span·class="n">Handler</span><span·class="p"·data-group-id="7988082455-10">(</span><span·class="n">Output</span><span·class="p"·data-group-id="7988082455-10">)</span><span·class="p">,</span><span·class="w"> |
| 1449 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 1449 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="7988082455-11">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handler</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">zlib</span><span·class="p">:</span><span·class="nf">safeInflate</s[·...·truncated·by·diffoscope;·len:·333,·SHA:·a982473b0fd84283b69ddeda34a2221d5986a51385601c954faf24bfc738d389·...·]-11">)</span><span·class="p">;</span><span·class="w"> |
| 1450 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 1450 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="7988082455-14">(</span><span·class="n">Z</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handler</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7988082455-15">{</span><span·class="ss">finished</sp[·...·truncated·by·diffoscope;·len:·175,·SHA:·cc31236f85b4550ad061528ffc69c9e0ff188ce219732edca2754148ac21c1fb·...·]-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1451 | ····</span><span·class="n">Handler</span><span·class="p"·data-group-id=" | 1451 | ····</span><span·class="n">Handler</span><span·class="p"·data-group-id="7988082455-16">(</span><span·class="n">Output</span><span·class="p"·data-group-id="7988082455-16">)</span><span·class="p">.</span></code></pre> |
| 1452 | ··</section> | 1452 | ··</section> |
| 1453 | </section> | 1453 | </section> |
| 1454 | <section·class="detail"·id="set_controlling_process/2"> | 1454 | <section·class="detail"·id="set_controlling_process/2"> |
| 1455 | ··<div·class="detail-header"> | 1455 | ··<div·class="detail-header"> |
| 1456 | ····<a·href="#set_controlling_process/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1456 | ····<a·href="#set_controlling_process/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1457 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1457 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1576, 15 lines modified | Offset 1576, 15 lines modified | ||
| 1576 | ······<p·class="built-using"> | 1576 | ······<p·class="built-using"> |
| 1577 | ········Built·using | 1577 | ········Built·using |
| 1578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1580 | ······</p> | 1580 | ······</p> |
| 1581 | <p>Copyright·©·1996-202 | 1581 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1582 | ····</footer> | 1582 | ····</footer> |
| 1583 | ··</div> | 1583 | ··</div> |
| 1584 | </main> | 1584 | </main> |
| 1585 | </div> | 1585 | </div> |
| 1586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1587 | ··<script> | 1587 | ··<script> |
| 1588 | ··let·initialized·=·false; | 1588 | ··let·initialized·=·false; |
| Offset 23, 12 lines modified | Offset 23, 12 lines modified | ||
| 23 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 23 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 24 | dist/lato-latin-400-normal-W7754I4D.woff2 | 24 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 25 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 25 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 26 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 26 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 27 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 27 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 28 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 28 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 29 | dist/remixicon-NKANDIL5.woff2 | 29 | dist/remixicon-NKANDIL5.woff2 |
| 30 | dist/search_data- | 30 | dist/search_data-79B97512.js |
| 31 | dist/sidebar_items-524E8C43.js | 31 | dist/sidebar_items-524E8C43.js |
| 32 | index.html | 32 | index.html |
| 33 | notes.html | 33 | notes.html |
| 34 | search.html | 34 | search.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 199, 15 lines modified | Offset 199, 15 lines modified | ||
| 199 | ······<p·class="built-using"> | 199 | ······<p·class="built-using"> |
| 200 | ········Built·using | 200 | ········Built·using |
| 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 203 | ······</p> | 203 | ······</p> |
| 204 | <p>Copyright·©·1996-202 | 204 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 205 | ····</footer> | 205 | ····</footer> |
| 206 | ··</div> | 206 | ··</div> |
| 207 | </main> | 207 | </main> |
| 208 | </div> | 208 | </div> |
| 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 210 | ··<script> | 210 | ··<script> |
| 211 | ··let·initialized·=·false; | 211 | ··let·initialized·=·false; |
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 161, 45 lines modified | Offset 161, 45 lines modified | ||
| 161 | </h3> | 161 | </h3> |
| 162 | <p>The·runtime·user·interface·for·exclusive·decode·comprises·the·following·two | 162 | <p>The·runtime·user·interface·for·exclusive·decode·comprises·the·following·two |
| 163 | functions:</p><ul><li>A·function·for·an·exclusive·decode,·whose·name·the·user·decides·in·the | 163 | functions:</p><ul><li>A·function·for·an·exclusive·decode,·whose·name·the·user·decides·in·the |
| 164 | configuration·file</li><li>A·<code·class="inline">decode_part/2</code>·function·generated·by·the·ASN.1·compiler·when | 164 | configuration·file</li><li>A·<code·class="inline">decode_part/2</code>·function·generated·by·the·ASN.1·compiler·when |
| 165 | exclusive·decode·is·enabled.·This·function·decodes·the·parts·that | 165 | exclusive·decode·is·enabled.·This·function·decodes·the·parts·that |
| 166 | were·left·undecoded·during·the·exclusive·decode.</li></ul><p>Both·functions·are·described·in·the·following.</p><p>If·the·exclusive·decode·function·has,·for·example,·the·name·<code·class="inline">decode_exclusive</code> | 166 | were·left·undecoded·during·the·exclusive·decode.</li></ul><p>Both·functions·are·described·in·the·following.</p><p>If·the·exclusive·decode·function·has,·for·example,·the·name·<code·class="inline">decode_exclusive</code> |
| 167 | and·an·ASN.1·encoded·message·<code·class="inline">Bin</code>·is·to·be·exclusive·decoded,·the·call·is·as | 167 | and·an·ASN.1·encoded·message·<code·class="inline">Bin</code>·is·to·be·exclusive·decoded,·the·call·is·as |
| 168 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4 | 168 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4144588284-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">ExclMessage</span><span·class="p"·data-group-id="4144588284-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'MyMo[·...·truncated·by·diffoscope;·len:·199,·SHA:·b3e0bea9bc177f7e11277380d60022c53d1cfb584319f07cd6e5d3114e88f433·...·]4-2">)</span></code></pre><p><a·href=""·id="UndecodedPart"></a>·The·result·<code·class="inline">ExclMessage</code>·has·the·same·structure·as·a |
| 169 | complete·decode·would·have,·except·for·the·parts·of·the·top·type·that·were·not | 169 | complete·decode·would·have,·except·for·the·parts·of·the·top·type·that·were·not |
| 170 | decoded.·The·undecoded·parts·are·on·their·places·in·the·structure·on·format | 170 | decoded.·The·undecoded·parts·are·on·their·places·in·the·structure·on·format |
| 171 | <code·class="inline">{TypeKey,UndecodedValue}</code>.</p><p>Each·undecoded·part·that·is·to·be·decoded·must·be·fed·into·function | 171 | <code·class="inline">{TypeKey,UndecodedValue}</code>.</p><p>Each·undecoded·part·that·is·to·be·decoded·must·be·fed·into·function |
| 172 | <code·class="inline">decode_part/2</code>·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 172 | <code·class="inline">decode_part/2</code>·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0806316316-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">PartMessage</span><span·class="p"·data-group-id="0806316316-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'MyM[·...·truncated·by·diffoscope;·len:·285,·SHA:·a3848181b3d588ed16ae15b07ab0f0fd325ed51023ab57af3373f0ce8be0d3d2·...·]-2">)</span></code></pre><p><a·href=""·id="Exclusive-Instruction"></a></p><h3·id="writing-an-exclusive-decode-instruction"·class="section-heading"> |
| 173 | ··<a·href="#writing-an-exclusive-decode-instruction"·class="hover-link"> | 173 | ··<a·href="#writing-an-exclusive-decode-instruction"·class="hover-link"> |
| 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 175 | ··</a> | 175 | ··</a> |
| 176 | ··<span·class="text">Writing·an·Exclusive·Decode·Instruction</span> | 176 | ··<span·class="text">Writing·an·Exclusive·Decode·Instruction</span> |
| 177 | </h3> | 177 | </h3> |
| 178 | <p>This·instruction·is·written·in·the·configuration·file·in·the·following·format:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ExclusiveDecodeInstruction</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 178 | <p>This·instruction·is·written·in·the·configuration·file·in·the·following·format:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ExclusiveDecodeInstruction</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-1">{</span><span·class="ss">exclusive_decode</span><span·class="p">,</span><span·class="p"·data-group-id="6070156208-2">{</span><span·class="n">ModuleName</span><span·class="p">,</span><span·class="n">DecodeInstructions</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·75,·SHA:·6cdbbbafb991e4db70f79af6f2ac4edbf695336abbdb35dd176409383a1a86a1·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="n">ModuleName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 179 | </span><span·class="n">ModuleName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6070156208-3">(</span><span·class="p"·data-group-id="6070156208-3">)</span><span·class="w"> |
| 180 | </span><span·class="n">DecodeInstructions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 180 | </span><span·class="n">DecodeInstructions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-4">[</span><span·class="n">DecodeInstruction</span><span·class="p"·data-group-id="6070156208-4">]</span><span·class="o">+</span><span·class="w"> |
| 181 | </span><span·class="n">DecodeInstruction</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 181 | </span><span·class="n">DecodeInstruction</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-5">{</span><span·class="n">ExclusiveDecodeFunctionName</span><span·class="p">,</span><span·class="n">TypeList</span><span·class="p"·data-group-id="6070156208-5">}</span><span·class="w"> |
| 182 | </span><span·class="n">ExclusiveDecodeFunctionName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 182 | </span><span·class="n">ExclusiveDecodeFunctionName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6070156208-6">(</span><span·class="p"·data-group-id="6070156208-6">)</span><span·class="w"> |
| 183 | </span><span·class="n">TypeList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 183 | </span><span·class="n">TypeList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-7">[</span><span·class="n">TopType</span><span·class="p">,</span><span·class="n">ElementList</span><span·class="p"·data-group-id="6070156208-7">]</span><span·class="w"> |
| 184 | </span><span·class="n">ElementList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 184 | </span><span·class="n">ElementList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-8">[</span><span·class="n">Element</span><span·class="p"·data-group-id="6070156208-8">]</span><span·class="o">+</span><span·class="w"> |
| 185 | </span><span·class="n">Element</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 185 | </span><span·class="n">Element</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6070156208-9">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="ss">parts</span><span·class="p"·data-group-id="6070156208-9">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 186 | ··········</span><span·class="p"·data-group-id=" | 186 | ··········</span><span·class="p"·data-group-id="6070156208-10">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="ss">undecoded</span><span·class="p"·data-group-id="6070156208-10">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 187 | ··········</span><span·class="p"·data-group-id=" | 187 | ··········</span><span·class="p"·data-group-id="6070156208-11">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="n">ElementList</span><span·class="p"·data-group-id="6070156208-11">}</span><span·class="w"> |
| 188 | </span><span·class="n">TopType</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 188 | </span><span·class="n">TopType</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6070156208-12">(</span><span·class="p"·data-group-id="6070156208-12">)</span><span·class="w"> |
| 189 | </span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 189 | </span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6070156208-13">(</span><span·class="p"·data-group-id="6070156208-13">)</span></code></pre><p>The·instruction·must·be·a·valid·Erlang·term·terminated·by·a·dot.</p><p>In·<code·class="inline">TypeList</code>·the·path·from·the·top·type·to·each·undecoded·subcomponent·is |
| 190 | described.·<code·class="inline">TopType</code>·is·the·name·of·a·top-level·type·in·the·ASN.1·specification. | 190 | described.·<code·class="inline">TopType</code>·is·the·name·of·a·top-level·type·in·the·ASN.1·specification. |
| 191 | The·action·for·each·component·in·<code·class="inline">ElementList</code>·is·described·by·one·of:</p><ul><li><code·class="inline">{Name,parts}</code></li><li><code·class="inline">{Name,undecoded}</code></li><li><code·class="inline">{Name,ElementList}</code></li></ul><p>The·use·and·effect·of·the·actions·are·as·follows:</p><ul><li><p><strong><code·class="inline">{Name,undecoded}</code></strong>·-·Leaves·the·element·undecoded.·The·type·of·<code·class="inline">Name</code>·can | 191 | The·action·for·each·component·in·<code·class="inline">ElementList</code>·is·described·by·one·of:</p><ul><li><code·class="inline">{Name,parts}</code></li><li><code·class="inline">{Name,undecoded}</code></li><li><code·class="inline">{Name,ElementList}</code></li></ul><p>The·use·and·effect·of·the·actions·are·as·follows:</p><ul><li><p><strong><code·class="inline">{Name,undecoded}</code></strong>·-·Leaves·the·element·undecoded.·The·type·of·<code·class="inline">Name</code>·can |
| 192 | be·any·ASN.1·type.·The·value·of·element·<code·class="inline">Name</code>·is·returned·as·a·tuple·(as | 192 | be·any·ASN.1·type.·The·value·of·element·<code·class="inline">Name</code>·is·returned·as·a·tuple·(as |
| 193 | mentioned·in·the·previous·section)·in·the·value·structure·of·the·top·type.</p></li><li><p><strong><code·class="inline">{Name,parts}</code></strong>·-·The·type·of·<code·class="inline">Name</code>·must·be·either·<code·class="inline">SEQUENCE·OF</code>·or | 193 | mentioned·in·the·previous·section)·in·the·value·structure·of·the·top·type.</p></li><li><p><strong><code·class="inline">{Name,parts}</code></strong>·-·The·type·of·<code·class="inline">Name</code>·must·be·either·<code·class="inline">SEQUENCE·OF</code>·or |
| 194 | <code·class="inline">SET·OF</code>.·The·action·implies·that·the·different·components·of·<code·class="inline">Name</code>·are·left | 194 | <code·class="inline">SET·OF</code>.·The·action·implies·that·the·different·components·of·<code·class="inline">Name</code>·are·left |
| 195 | undecoded.·The·value·of·<code·class="inline">Name</code>·is·returned·as·a·tuple·(as·mentioned·in·the | 195 | undecoded.·The·value·of·<code·class="inline">Name</code>·is·returned·as·a·tuple·(as·mentioned·in·the |
| 196 | previous·section)·where·the·second·element·is·a·list·of·binaries.·This·is | 196 | previous·section)·where·the·second·element·is·a·list·of·binaries.·This·is |
| Offset 257, 86 lines modified | Offset 257, 86 lines modified | ||
| 257 | ·{'GUI', | 257 | ·{'GUI', |
| 258 | ··[{decode_Window_exclusive, | 258 | ··[{decode_Window_exclusive, |
| 259 | ····['Window',[{status,[{buttonList,parts},{actions,undecoded}]}]]}, | 259 | ····['Window',[{status,[{buttonList,parts},{actions,undecoded}]}]]}, |
| 260 | ···{decode_Button_exclusive, | 260 | ···{decode_Button_exclusive, |
| 261 | ····['Button',[{number,undecoded}]]}]}}.</code></pre><p>The·following·figure·shows·the·bytes·of·a·<code·class="inline">Window:status</code>·message.·The | 261 | ····['Button',[{number,undecoded}]]}]}}.</code></pre><p>The·following·figure·shows·the·bytes·of·a·<code·class="inline">Window:status</code>·message.·The |
| 262 | components·<code·class="inline">buttonList</code>·and·<code·class="inline">actions</code>·are·excluded·from·decode.·Only·<code·class="inline">state</code>·and | 262 | components·<code·class="inline">buttonList</code>·and·<code·class="inline">actions</code>·are·excluded·from·decode.·Only·<code·class="inline">state</code>·and |
| 263 | <code·class="inline">enabled</code>·are·decoded·when·<code·class="inline">decode__Window_exclusive</code>·is·called.</p><p><img·src="assets/exclusive_Win_But.gif"·alt="Bytes·of·a·Window:status·Message"·title="Bytes·of·a·Window:status·Message"/></p><p>Here·follows·an·example·of·how·the·module.·Note·that·option·<code·class="inline">no_ok_wrapper</code>·is | 263 | <code·class="inline">enabled</code>·are·decoded·when·<code·class="inline">decode__Window_exclusive</code>·is·called.</p><p><img·src="assets/exclusive_Win_But.gif"·alt="Bytes·of·a·Window:status·Message"·title="Bytes·of·a·Window:status·Message"/></p><p>Here·follows·an·example·of·how·the·module.·Note·that·option·<code·class="inline">no_ok_wrapper</code>·is |
| 264 | used·to·make·the·example·more·concise.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">asn1ct</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id=" | 264 | used·to·make·the·example·more·concise.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">asn1ct</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="6298984298-1">(</span><span·class="ss">'GUI'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-2">[</span><span·class="ss">ber</span><span·class="p">,</span><span·class="ss">asn1config</span><span·class[·...·truncated·by·diffoscope;·len:·144,·SHA:·caf75ab72819531f8cec1511eef9b437eb6f1c7c7df2c186a42b40b1f5006afe·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 265 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 265 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 266 | 2>·</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 266 | 2>·</span><span·class="nf">rr</span><span·class="p"·data-group-id="6298984298-3">(</span><span·class="ss">'GUI'</span><span·class="p"·data-group-id="6298984298-3">)</span><span·class="p">.</span><span·class="w"> |
| 267 | </span><span·class="p"·data-group-id=" | 267 | </span><span·class="p"·data-group-id="6298984298-4">[</span><span·class="ss">'Action'</span><span·class="p">,</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-4">]</span><span·class="gp·unselectable"> |
| 268 | 3>·</span><span·class="n">ButtonMsg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 268 | 3>·</span><span·class="n">ButtonMsg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-5">{</span><span·class="ss">number</span><span·class="o">=</span><span·class="mi">123</span><span·class="p">,</span><span·class="ss">on</span><span·class="o">=</span><span·class="ss">true</span><span·class="p"·data-group-id="6298984298-5">}</span><span·class="p">.</span><span·class="w"> |
| 269 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 269 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-6">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">123</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·c[·...·truncated·by·diffoscope;·len:·86,·SHA:·62cbf8cdd6d7ee136bac3a732b7474ac395d80b234a2d9cb030f08b9144f7b16·...·]-6">}</span><span·class="gp·unselectable"> |
| 270 | 4>·</span><span·class="n">ButtonBytes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 270 | 4>·</span><span·class="n">ButtonBytes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">encode</span><span·class="p"·data-group-id="6298984298-7">(</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ButtonMsg</span><span·class="p"·data-group-id="6298984298-7">)</span><span·class="p">.</span><span·class="w"> |
| 271 | </span><span·class="p"·data-group-id=" | 271 | </span><span·class="p"·data-group-id="6298984298-8"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">123</span><[·...·truncated·by·diffoscope;·len:·191,·SHA:·891d0eaecf2aec5c427eede32fe88329b1d32f2cb446179e97dfad080849c946·...·]-8">>></span><span·class="gp·unselectable"> |
| 272 | 5>·</span><span·class="n">ExclusiveMsgButton</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_Button_exclusive</span><span·class="p"·data-group-id=" | 272 | 5>·</span><span·class="n">ExclusiveMsgButton</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_Button_exclusive</span><span·class="p"·data-group-id="6298984298-9">(</span><span·class="n">ButtonBytes</span><span·class="p"·data-group-id="6298984298-9">)</span><span·class="p">.</span><span·class="w"> |
| 273 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 273 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-10">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-11">{</span><span·class="ss">'Button_number'</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·284,·SHA:·d9a76b30f418fb63d4f501f113612b3008123220197a778ff79015cac4dcaa69·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 274 | ··········</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id=" | 274 | ··········</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="6298984298-10">}</span><span·class="gp·unselectable"> |
| 275 | 6>·</span><span·class="p"·data-group-id=" | 275 | 6>·</span><span·class="p"·data-group-id="6298984298-13">{</span><span·class="n">UndecKey</span><span·class="p">,</span><span·class="n">UndecBytes</span><span·class="p"·data-group-id="6298984298-13">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">ExclusiveMsgButton</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p">.</span><span·class="ss">number</span><span·class="p">.</span><span·class="w"> |
| 276 | </span><span·class="p"·data-group-id=" | 276 | </span><span·class="p"·data-group-id="6298984298-14">{</span><span·class="ss">'Button_number'</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-15"><<</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·128,·SHA:·a02567f479cc5f0a319bfcd530565d21f72c0fd58a1f67a926169a5e79eb8dab·...·]-14">}</span><span·class="gp·unselectable"> |
| 277 | 7>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id=" | 277 | 7>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id="6298984298-16">(</span><span·class="n">UndecKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UndecBytes</span><span·class="p"·data-group-id="6298984298-16">)</span><span·class="p">.</span><span·class="w"> |
| 278 | </span><span·class="mi">123</span><span·class="gp·unselectable"> | 278 | </span><span·class="mi">123</span><span·class="gp·unselectable"> |
| 279 | 8>·</span><span·class="n">WindowMsg</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 279 | 8>·</span><span·class="n">WindowMsg</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 280 | </span><span·class="p"·data-group-id=" | 280 | </span><span·class="p"·data-group-id="6298984298-17">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-18">{</span><span·class="ss">'Status'</span><span·class="p">,</span><span·class="mi">35</span><span·class="p">,</span><span·class="w"> |
| 281 | ···</span><span·class="p"·data-group-id=" | 281 | ···</span><span·class="p"·data-group-id="6298984298-19">[</span><span·class="p"·data-group-id="6298984298-20">{</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="6298984[·...·truncated·by·diffoscope;·len:·3,·SHA:·76ebdb6d45c61ca12e622118cc90939ade672adf7890aa2b246405d4884dd75a·...·]-20">}</span><span·class="p">,</span><span·class="w"> |
| 282 | ····</span><span·class="p"·data-group-id=" | 282 | ····</span><span·class="p"·data-group-id="6298984298-21">{</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="6298984298-21">}</span><span·class="p">,</span><span·class="w"> |
| 283 | ····</span><span·class="p"·data-group-id=" | 283 | ····</span><span·class="p"·data-group-id="6298984298-22">{</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="6298984298-22">}</span><span·class="p">,</span><span·class="w"> |
| 284 | ····</span><span·class="p"·data-group-id=" | 284 | ····</span><span·class="p"·data-group-id="6298984298-23">{</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="6298984298-23">}</span><span·class="p">,</span><span·class="w"> |
| 285 | ····</span><span·class="p"·data-group-id=" | 285 | ····</span><span·class="p"·data-group-id="6298984298-24">{</span><span·class="ss">'Button'</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="6298984298-24">}</span><span·class="p"·data-group-id="629898[·...·truncated·by·diffoscope;·len:·4,·SHA:·fc8cf0cb7ee532304dc5f62ff63b096168f1f39744cf4016870ec775dcf8421f·...·]-19">]</span><span·class="p">,</span><span·class="w"> |
| 286 | ···</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 286 | ···</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 287 | ···</span><span·class="p"·data-group-id=" | 287 | ···</span><span·class="p"·data-group-id="6298984298-25">{</span><span·class="ss">possibleActions</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-26">[</span><span·class="p"·data-group-id="6298984298-27">{</span><span·class="ss">'Action'</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·559,·SHA:·b44400c7f77d06a2dd12f5ad46ace0bc3ea2e06f7e6616a23cc4e750a891bb51·...·]-17">}</span><span·class="p">.</span><span·class="w"> |
| 288 | </span><span·class="p"·data-group-id=" | 288 | </span><span·class="p"·data-group-id="6298984298-29">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="o">#</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-30">{</span><span·class="ss">state</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">35</span><span·class="p">,</span><span·class="w"> |
| 289 | ········</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 289 | ········</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-31">[</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-32">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·203,·SHA:·01d80a862b20ee48dc2576254ce56b811371dc174a10e1d22dd6cfeb69aec21a·...·]-32">}</span><span·class="p">,</span><span·class="w"> |
| 290 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 290 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-33">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·86,·SHA:·d6fb21f8aee044d449ade2e92b21bef537604e4b925b597cdc697986bf251be9·...·]-33">}</span><span·class="p">,</span><span·class="w"> |
| 291 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 291 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-34">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·85,·SHA:·cfca8bdf9dc27caaffa012da80bdb6f5af643d9988b1ddb936bf27599725e6ed·...·]-34">}</span><span·class="p">,</span><span·class="w"> |
| 292 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 292 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-35">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">6</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·85,·SHA:·cfca8bdf9dc27caaffa012da80bdb6f5af643d9988b1ddb936bf27599725e6ed·...·]-35">}</span><span·class="p">,</span><span·class="w"> |
| 293 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 293 | ······················</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-36">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">7</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·140,·SHA:·18cf5b93aa4fa29252e678b93166c46cff4c97fb601865ac06357cba4e972d21·...·]-31">]</span><span·class="p">,</span><span·class="w"> |
| 294 | ········</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 294 | ········</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 295 | ········</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 295 | ········</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-37">{</span><span·class="ss">possibleActions</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-38">[</span><span·class="o">#</span><span·class="ss">'Action'</span><span·class="p"·data-group-id="6298984298-39">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">,</span><span·class="w"> |
| 296 | ··············································</span><span·class="ss">handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 296 | ··············································</span><span·class="ss">handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-40">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">17</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·c[·...·truncated·by·diffoscope;·len:·356,·SHA:·da75cf444d4ff9b24d4308c547bbc6d01d2598a12651b929ae0a485c024f1c4c·...·]-29">}</span><span·class="gp·unselectable"> |
| 297 | 9>·</span><span·class="n">WindowBytes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 297 | 9>·</span><span·class="n">WindowBytes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">encode</span><span·class="p"·data-group-id="6298984298-41">(</span><span·class="ss">'Window'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">WindowMsg</span><span·class="p"·data-group-id="6298984298-41">)</span><span·class="p">.</span><span·class="w"> |
| 298 | </span><span·class="p"·data-group-id=" | 298 | </span><span·class="p"·data-group-id="6298984298-42"><<</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">35</span><span·class="p">,</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">40</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="w"> |
| 299 | ··</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 299 | ··</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="6298984298-42">>></span><span·class="gp·unselectable"> |
| 300 | 10>·</span><span·class="p"·data-group-id=" | 300 | 10>·</span><span·class="p"·data-group-id="6298984298-43">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="o">#</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-44">{</span><span·class="ss">buttonList</span><span·class="o">=</span><sp[·...·truncated·by·diffoscope;·len:·300,·SHA:·10f58aeea1e20369b5583d53313afc037ce659f16b5ab2f612c93e569585e7d8·...·]-43">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 301 | </span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_Window_exclusive</span><span·class="p"·data-group-id=" | 301 | </span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_Window_exclusive</span><span·class="p"·data-group-id="6298984298-46">(</span><span·class="n">WindowBytes</span><span·class="p"·data-group-id="6298984298-46">)</span><span·class="p">.</span><span·class="w"> |
| 302 | </span><span·class="p"·data-group-id=" | 302 | </span><span·class="p"·data-group-id="6298984298-47">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="o">#</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-48">{</span><span·class="ss">state</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">35</span><span·class="p">,</span><span·class="w"> |
| 303 | ··················</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 303 | ··················</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-49">{</span><span·class="ss">'Status_buttonList'</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-50">[</span><span·class="p"·data-group-id="6298984298-51"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 304 | ·······················································</span><span·class="mi">255</span><span·class="p"·data-group-id=" | 304 | ·······················································</span><span·class="mi">255</span><span·class="p"·data-group-id="6298984298-51">>></span><span·class="p">,</span><span·class="w"> |
| 305 | ·····················································</span><span·class="p"·data-group-id=" | 305 | ·····················································</span><span·class="p"·data-group-id="6298984298-52"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">4</span><s[·...·truncated·by·diffoscope;·len:·188,·SHA:·eca7f0ead9e912793b5cd3298154d8c7c08006799c39192637fb85e0a7d6f074·...·]-52">>></span><span·class="p">,</span><span·class="w"> |
| 306 | ·····················································</span><span·class="p"·data-group-id=" | 306 | ·····················································</span><span·class="p"·data-group-id="6298984298-53"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">5</span><s[·...·truncated·by·diffoscope;·len:·190,·SHA:·16ea7da555f85d09d997198919c89932c9cb7ae8aa2e22777be1c6b35d0a0c7f·...·]-53">>></span><span·class="p">,</span><span·class="w"> |
| 307 | ·····················································</span><span·class="p"·data-group-id=" | 307 | ·····················································</span><span·class="p"·data-group-id="6298984298-54"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">6</span><s[·...·truncated·by·diffoscope;·len:·190,·SHA:·16ea7da555f85d09d997198919c89932c9cb7ae8aa2e22777be1c6b35d0a0c7f·...·]-54">>></span><span·class="p">,</span><span·class="w"> |
| 308 | ·····················································</span><span·class="p"·data-group-id=" | 308 | ·····················································</span><span·class="p"·data-group-id="6298984298-55"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">7</span><s[·...·truncated·by·diffoscope;·len:·303,·SHA:·0436fafcc9137d0d9001aec3e7e831cc8fc0f4793304d8c43c2f9b68b5343c51·...·]-49">}</span><span·class="p">,</span><span·class="w"> |
| 309 | ··················</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 309 | ··················</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 310 | ··················</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 310 | ··················</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-56">{</span><span·class="ss">'Status_actions'</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-57"><<</span><span·class="mi">163</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="mi">13</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="w"> |
| 311 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">17</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="w"> | 311 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">17</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="w"> |
| 312 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">255</span><span·class="p"·data-group-id=" | 312 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">255</span><span·class="p"·data-group-id="6298984298-57">>></span><span·class="p"·data-group-id="6298984298-56">}</span><span·class="p"·data-group-id="6298984298-48">}</span><span·class="p"·data-group-id="6298984298-47">}</span><span·class="gp·unselectable"> |
| 313 | 11>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id=" | 313 | 11>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id="6298984298-58">(</span><span·class="n">UndecWindowKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UndecWindowParts</span><span·class="p"·data-group-id="6298984298-58">)</span><span·class="p">.</span><span·class="w"> |
| 314 | </span><span·class="p"·data-group-id=" | 314 | </span><span·class="p"·data-group-id="6298984298-59">[</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-60">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·203,·SHA:·01d80a862b20ee48dc2576254ce56b811371dc174a10e1d22dd6cfeb69aec21a·...·]-60">}</span><span·class="p">,</span><span·class="w"> |
| 315 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 315 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-61">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·86,·SHA:·d6fb21f8aee044d449ade2e92b21bef537604e4b925b597cdc697986bf251be9·...·]-61">}</span><span·class="p">,</span><span·class="w"> |
| 316 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 316 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-62">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·85,·SHA:·cfca8bdf9dc27caaffa012da80bdb6f5af643d9988b1ddb936bf27599725e6ed·...·]-62">}</span><span·class="p">,</span><span·class="w"> |
| 317 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 317 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-63">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">6</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·85,·SHA:·cfca8bdf9dc27caaffa012da80bdb6f5af643d9988b1ddb936bf27599725e6ed·...·]-63">}</span><span·class="p">,</span><span·class="w"> |
| 318 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 318 | ·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-64">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">7</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·140,·SHA:·ca5a6bbbb9cea7408ae43f209c692d1e38be170e1e95d89154a3fc764bfe3269·...·]-59">]</span><span·class="gp·unselectable"> |
| 319 | 12>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id=" | 319 | 12>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id="6298984298-65">(</span><span·class="n">UndecWindowKey</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">hd</span><span·class="p"·data-group-id="6298984298-66">(</span><span·class="n">UndecWindowParts</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·d8efad2b1037336cd039f578d7e5f7dbb033068fac078a9f5a949971f61b00e4·...·]-65">)</span><span·class="p">.</span><span·class="w"> |
| 320 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 320 | </span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-67">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·85,·SHA:·cfca8bdf9dc27caaffa012da80bdb6f5af643d9988b1ddb936bf27599725e6ed·...·]-67">}</span><span·class="gp·unselectable"> |
| 321 | 13>·</span><span·class="p"·data-group-id=" | 321 | 13>·</span><span·class="p"·data-group-id="6298984298-68">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="o">#</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-69">{</span><span·class="ss">actions</span><span·class="o">=</span><span·[·...·truncated·by·diffoscope;·len:·518,·SHA:·6594ac3cd6269a494959931aa28150be075001e77f1481a0ed1f8f5e0f00f214·...·]-71">)</span><span·class="p">.</span><span·class="w"> |
| 322 | </span><span·class="p"·data-group-id=" | 322 | </span><span·class="p"·data-group-id="6298984298-72">{</span><span·class="ss">status</span><span·class="p">,</span><span·class="o">#</span><span·class="ss">'Status'</span><span·class="p"·data-group-id="6298984298-73">{</span><span·class="ss">state</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">35</span><span·class="p">,</span><span·class="w"> |
| 323 | ··················</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 323 | ··················</span><span·class="ss">buttonList</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-74">{</span><span·class="ss">'Status_buttonList'</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-75">[</span><span·class="p"·data-group-id="6298984298-76"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 324 | ·······················································</span><span·class="mi">255</span><span·class="p"·data-group-id=" | 324 | ·······················································</span><span·class="mi">255</span><span·class="p"·data-group-id="6298984298-76">>></span><span·class="p">,</span><span·class="w"> |
| 325 | ·····················································</span><span·class="p"·data-group-id=" | 325 | ·····················································</span><span·class="p"·data-group-id="6298984298-77"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">4</span><s[·...·truncated·by·diffoscope;·len:·188,·SHA:·eca7f0ead9e912793b5cd3298154d8c7c08006799c39192637fb85e0a7d6f074·...·]-77">>></span><span·class="p">,</span><span·class="w"> |
| 326 | ·····················································</span><span·class="p"·data-group-id=" | 326 | ·····················································</span><span·class="p"·data-group-id="6298984298-78"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">5</span><s[·...·truncated·by·diffoscope;·len:·190,·SHA:·16ea7da555f85d09d997198919c89932c9cb7ae8aa2e22777be1c6b35d0a0c7f·...·]-78">>></span><span·class="p">,</span><span·class="w"> |
| 327 | ·····················································</span><span·class="p"·data-group-id=" | 327 | ·····················································</span><span·class="p"·data-group-id="6298984298-79"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">6</span><s[·...·truncated·by·diffoscope;·len:·190,·SHA:·16ea7da555f85d09d997198919c89932c9cb7ae8aa2e22777be1c6b35d0a0c7f·...·]-79">>></span><span·class="p">,</span><span·class="w"> |
| 328 | ·····················································</span><span·class="p"·data-group-id=" | 328 | ·····················································</span><span·class="p"·data-group-id="6298984298-80"><<</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">7</span><s[·...·truncated·by·diffoscope;·len:·303,·SHA:·ffdb2e64f2311189932d1c73544b4a6415704080f97101abbc3a2710fddc2734·...·]-74">}</span><span·class="p">,</span><span·class="w"> |
| 329 | ··················</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 329 | ··················</span><span·class="ss">enabled</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 330 | ··················</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 330 | ··················</span><span·class="ss">actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6298984298-81">{</span><span·class="ss">'Status_actions'</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-82"><<</span><span·class="mi">163</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="mi">13</span><span·class="p">,</span><span·class="mi">48</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="w"> |
| 331 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">17</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="w"> | 331 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">161</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">17</span><span·class="p">,</span><span·class="mi">129</span><span·class="p">,</span><span·class="w"> |
| 332 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">255</span><span·class="p"·data-group-id=" | 332 | ················································</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">255</span><span·class="p"·data-group-id="6298984298-82">>></span><span·class="p"·data-group-id="6298984298-81">}</span><span·class="p"·data-group-id="6298984298-73">}</span><span·class="p"·data-group-id="6298984298-72">}</span><span·class="gp·unselectable"> |
| 333 | 14>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id=" | 333 | 14>·</span><span·class="nc">'GUI'</span><span·class="p">:</span><span·class="nf">decode_part</span><span·class="p"·data-group-id="6298984298-83">(</span><span·class="n">ChoiceKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ChoiceUndec</span><span·class="p"·data-group-id="6298984298-83">)</span><span·class="p">.</span><span·class="w"> |
| 334 | </span><span·class="p"·data-group-id=" | 334 | </span><span·class="p"·data-group-id="6298984298-84">{</span><span·class="ss">possibleActions</span><span·class="p">,</span><span·class="p"·data-group-id="6298984298-85">[</span><span·class="o">#</span><span·class="ss">'Action'</span><span·class="p"·data-group-id="6298984298-86">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">,</span><span·class="w"> |
| 335 | ····························</span><span·class="ss">handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id=" | 335 | ····························</span><span·class="ss">handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Button'</span><span·class="p"·data-group-id="6298984298-87">{</span><span·class="ss">number</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">17</span><span·class="p">,</span><span·class="ss">on</span><span·class="w">·</span><span·class="o">=</span><span·c[·...·truncated·by·diffoscope;·len:·248,·SHA:·68a43a545466252aaf847a768523b187ec791eb670d6cccf99cad246a8fab40f·...·]-84">}</span></code></pre><h2·id="selective-decode"·class="section-heading"> |
| 336 | ··<a·href="#selective-decode"·class="hover-link"> | 336 | ··<a·href="#selective-decode"·class="hover-link"> |
| 337 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 337 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Max diff block lines reached; 38198/120441 bytes (31.72%) of diff not shown. | |||
| Offset 481, 17 lines modified | Offset 481, 17 lines modified | ||
| 481 | <p>Performs·a·test·of·encode·and·decode·of·types·in·<code·class="inline">Module</code>.</p><p>The·generated·functions·are·called·by·this·function.·This·function·is | 481 | <p>Performs·a·test·of·encode·and·decode·of·types·in·<code·class="inline">Module</code>.</p><p>The·generated·functions·are·called·by·this·function.·This·function·is |
| 482 | useful·for·testing·to·ensure·that·the·generated·encode·and·decode | 482 | useful·for·testing·to·ensure·that·the·generated·encode·and·decode |
| 483 | functions·as·well·as·the·general·runtime·support·work·as·expected.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Currently,·the·<code·class="inline">test</code>·functions·have·many·limitations.·Essentially,·they·will | 483 | functions·as·well·as·the·general·runtime·support·work·as·expected.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Currently,·the·<code·class="inline">test</code>·functions·have·many·limitations.·Essentially,·they·will |
| 484 | mostly·work·for·old·specifications·based·on·the·1997·standard·for·ASN.1,·but | 484 | mostly·work·for·old·specifications·based·on·the·1997·standard·for·ASN.1,·but |
| 485 | not·for·most·modern-style·applications.·Another·limitation·is·that·the·<code·class="inline">test</code> | 485 | not·for·most·modern-style·applications.·Another·limitation·is·that·the·<code·class="inline">test</code> |
| 486 | functions·may·not·work·if·options·that·change·code·generations·strategies·such | 486 | functions·may·not·work·if·options·that·change·code·generations·strategies·such |
| 487 | as·the·options·<code·class="inline">macro_name_prefix</code>·and·<code·class="inline">record_name_prefix</code>·have·been·used.</p></section><ul><li><a·href="#test/1"><code·class="inline">test/1</code></a>·iterates·over·all·types·in·<code·class="inline">Module</code>.</li><li><a·href="#test/2"><code·class="inline">test/2</code></a>·tests·type·<code·class="inline">Type</code>·with·a·random·value.</li><li><a·href="#test/3"><code·class="inline">test/3</code></a>·tests·type·<code·class="inline">Type</code>·with·<code·class="inline">Value</code>.</li></ul><p>Schematically,·the·following·occurs·for·each·type·in·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 487 | as·the·options·<code·class="inline">macro_name_prefix</code>·and·<code·class="inline">record_name_prefix</code>·have·been·used.</p></section><ul><li><a·href="#test/1"><code·class="inline">test/1</code></a>·iterates·over·all·types·in·<code·class="inline">Module</code>.</li><li><a·href="#test/2"><code·class="inline">test/2</code></a>·tests·type·<code·class="inline">Type</code>·with·a·random·value.</li><li><a·href="#test/3"><code·class="inline">test/3</code></a>·tests·type·<code·class="inline">Type</code>·with·<code·class="inline">Value</code>.</li></ul><p>Schematically,·the·following·occurs·for·each·type·in·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7796566089-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Value</span><span·class="p"·data-group-id="7796566089-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·274,·SHA:·2dc8877b3f2f349f2d480debbe2a7297075b1623d1bcc3cdba42290295d07e49·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 488 | </span><span·class="p"·data-group-id=" | 488 | </span><span·class="p"·data-group-id="7796566089-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bytes</span><span·class="p"·data-group-id="7796566089-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·273,·SHA:·c7bf6ee2350f907eca5761bce650991f84bc68ede5af448792da709851694dea·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 489 | </span><span·class="p"·data-group-id=" | 489 | </span><span·class="p"·data-group-id="7796566089-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Value</span><span·class="p"·data-group-id="7796566089-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·273,·SHA:·fdf795c6f89fa6416c256e9c832af418fc32db27a0fbdaa5650986c67f813245·...·]-6">)</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">test</code>·functions·use·the·<code·class="inline">*.asn1db</code>·files·for·all·included·modules.·If·they |
| 490 | are·located·in·a·different·directory·than·the·current·working·directory,·use·the | 490 | are·located·in·a·different·directory·than·the·current·working·directory,·use·the |
| 491 | <code·class="inline">include</code>·option·to·add·paths.·This·is·only·needed·when·automatically·generating | 491 | <code·class="inline">include</code>·option·to·add·paths.·This·is·only·needed·when·automatically·generating |
| 492 | values.·For·static·values·using·<code·class="inline">Value</code>·no·options·are·needed.</p> | 492 | values.·For·static·values·using·<code·class="inline">Value</code>·no·options·are·needed.</p> |
| 493 | ··</section> | 493 | ··</section> |
| 494 | </section> | 494 | </section> |
| 495 | <section·class="detail"·id="value/2"> | 495 | <section·class="detail"·id="value/2"> |
| Offset 548, 15 lines modified | Offset 548, 15 lines modified | ||
| 548 | ······<p·class="built-using"> | 548 | ······<p·class="built-using"> |
| 549 | ········Built·using | 549 | ········Built·using |
| 550 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 550 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 551 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 551 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 552 | ······</p> | 552 | ······</p> |
| 553 | <p>Copyright·©·1996-202 | 553 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 554 | ····</footer> | 554 | ····</footer> |
| 555 | ··</div> | 555 | ··</div> |
| 556 | </main> | 556 | </main> |
| 557 | </div> | 557 | </div> |
| 558 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 558 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 559 | ··<script> | 559 | ··<script> |
| 560 | ··let·initialized·=·false; | 560 | ··let·initialized·=·false; |
| Offset 163, 15 lines modified | Offset 163, 15 lines modified | ||
| 163 | </h3> | 163 | </h3> |
| 164 | <ul><li><p>The·JER·backend·will·now·include·the·SIZE·constraint·in·the·type·info·for·OCTET·STRINGs,·and·a·SIZE·constraint·with·a·range·will·now·be·included·for·BIT·STRINGs.·This·does·not·change·the·actual·encoding·or·decoding·of·JER,·but·can·be·useful·for·tools.</p><p>Own·Id:·OTP-19542·Aux·Id:·ERIERL-1204,·<a·href="https://github.com/erlang/otp/pull/9588"·title="">PR-9588</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> | 164 | <ul><li><p>The·JER·backend·will·now·include·the·SIZE·constraint·in·the·type·info·for·OCTET·STRINGs,·and·a·SIZE·constraint·with·a·range·will·now·be·included·for·BIT·STRINGs.·This·does·not·change·the·actual·encoding·or·decoding·of·JER,·but·can·be·useful·for·tools.</p><p>Own·Id:·OTP-19542·Aux·Id:·ERIERL-1204,·<a·href="https://github.com/erlang/otp/pull/9588"·title="">PR-9588</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> |
| 165 | ··<a·href="#improvements-and-new-features"·class="hover-link"> | 165 | ··<a·href="#improvements-and-new-features"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Improvements·and·New·Features</span> | 168 | ··<span·class="text">Improvements·and·New·Features</span> |
| 169 | </h3> | 169 | </h3> |
| 170 | <ul><li><p>When·using·the·JSON·encoding·rules,·it·is·now·possible·to·call·the·decode/2·function·in·the·following·way·with·data·that·has·already·been·decoded·by·json:decode/1:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">SomeModule</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="05 | 170 | <ul><li><p>When·using·the·JSON·encoding·rules,·it·is·now·possible·to·call·the·decode/2·function·in·the·following·way·with·data·that·has·already·been·decoded·by·json:decode/1:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">SomeModule</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="4054357383-1">(</span><span·class="n">Type</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4054357383-2">{</span><span·class="ss">json_decoded</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Decode[·...·truncated·by·diffoscope;·len:·102,·SHA:·514de4f885d143ba099c6f200f434091ca28375fe97a85017f28b7651d141569·...·]-1">)</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-19547·Aux·Id:·ERIERL-1206,·<a·href="https://github.com/erlang/otp/pull/9611"·title="">PR-9611</a></p></li></ul><h2·id="asn1-5-3-2"·class="section-heading"> |
| 171 | ··<a·href="#asn1-5-3-2"·class="hover-link"> | 171 | ··<a·href="#asn1-5-3-2"·class="hover-link"> |
| 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 173 | ··</a> | 173 | ··</a> |
| 174 | ··<span·class="text">Asn1·5.3.2</span> | 174 | ··<span·class="text">Asn1·5.3.2</span> |
| 175 | </h2> | 175 | </h2> |
| 176 | <h3·id="fixed-bugs-and-malfunctions-3"·class="section-heading"> | 176 | <h3·id="fixed-bugs-and-malfunctions-3"·class="section-heading"> |
| 177 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> | 177 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> |
| Offset 1607, 15 lines modified | Offset 1607, 15 lines modified | ||
| 1607 | ······<p·class="built-using"> | 1607 | ······<p·class="built-using"> |
| 1608 | ········Built·using | 1608 | ········Built·using |
| 1609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1611 | ······</p> | 1611 | ······</p> |
| 1612 | <p>Copyright·©·1996-202 | 1612 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1613 | ····</footer> | 1613 | ····</footer> |
| 1614 | ··</div> | 1614 | ··</div> |
| 1615 | </main> | 1615 | </main> |
| 1616 | </div> | 1616 | </div> |
| 1617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1618 | ··<script> | 1618 | ··<script> |
| 1619 | ··let·initialized·=·false; | 1619 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-79B97512.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 311, 15 lines modified | Offset 311, 15 lines modified | ||
| 311 | ······<p·class="built-using"> | 311 | ······<p·class="built-using"> |
| 312 | ········Built·using | 312 | ········Built·using |
| 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 315 | ······</p> | 315 | ······</p> |
| 316 | <p>Copyright·©·1996-202 | 316 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 317 | ····</footer> | 317 | ····</footer> |
| 318 | ··</div> | 318 | ··</div> |
| 319 | </main> | 319 | </main> |
| 320 | </div> | 320 | </div> |
| 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 322 | ··<script> | 322 | ··<script> |
| 323 | ··let·initialized·=·false; | 323 | ··let·initialized·=·false; |
| Offset 211, 23 lines modified | Offset 211, 23 lines modified | ||
| 211 | <a·href="write_test_chapter.html#intro">Writing·Test·Suites</a>.</p><p>A·test·case·is·considered·successful·if·it·returns·to·the·caller,·no·matter·what | 211 | <a·href="write_test_chapter.html#intro">Writing·Test·Suites</a>.</p><p>A·test·case·is·considered·successful·if·it·returns·to·the·caller,·no·matter·what |
| 212 | the·returned·value·is.·However,·a·few·return·values·have·special·meaning·as | 212 | the·returned·value·is.·However,·a·few·return·values·have·special·meaning·as |
| 213 | follows:</p><ul><li><code·class="inline">{skip,Reason}</code>·indicates·that·the·test·case·is·skipped.</li><li><code·class="inline">{comment,Comment}</code>·prints·a·comment·in·the·log·for·the·test·case.</li><li><code·class="inline">{save_config,Config}</code>·makes·the·<code·class="inline">Common·Test</code>·test·server·pass·<code·class="inline">Config</code>·to | 213 | follows:</p><ul><li><code·class="inline">{skip,Reason}</code>·indicates·that·the·test·case·is·skipped.</li><li><code·class="inline">{comment,Comment}</code>·prints·a·comment·in·the·log·for·the·test·case.</li><li><code·class="inline">{save_config,Config}</code>·makes·the·<code·class="inline">Common·Test</code>·test·server·pass·<code·class="inline">Config</code>·to |
| 214 | the·next·test·case.</li></ul><p>A·test·case·failure·is·specified·as·a·runtime·error·(a·crash),·no·matter·what | 214 | the·next·test·case.</li></ul><p>A·test·case·failure·is·specified·as·a·runtime·error·(a·crash),·no·matter·what |
| 215 | the·reason·for·termination·is.·If·you·use·Erlang·pattern·matching·effectively, | 215 | the·reason·for·termination·is.·If·you·use·Erlang·pattern·matching·effectively, |
| 216 | you·can·take·advantage·of·this·property.·The·result·is·concise·and·readable·test | 216 | you·can·take·advantage·of·this·property.·The·result·is·concise·and·readable·test |
| 217 | case·functions·that·look·much·more·like·scripts·than·actual·programs.·A·simple | 217 | case·functions·that·look·much·more·like·scripts·than·actual·programs.·A·simple |
| 218 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">session</span><span·class="p"·data-group-id=" | 218 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">session</span><span·class="p"·data-group-id="4894350649-1">(</span><span·class="p">_</span><span·class="n">Config</span><span·class="p"·data-group-id="4894350649-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 219 | ····</span><span·class="p"·data-group-id=" | 219 | ····</span><span·class="p"·data-group-id="4894350649-2">{</span><span·class="ss">started</span><span·class="p">,</span><span·class="n">ServerId</span><span·class="p"·data-group-id="4894350649-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_ser[·...·truncated·by·diffoscope;·len:·157,·SHA:·13fefc870f401f37f8bab75fd691a8a807a8210eef12ef754b998dbbda516591·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 220 | ····</span><span·class="p"·data-group-id=" | 220 | ····</span><span·class="p"·data-group-id="4894350649-4">{</span><span·class="ss">clients</span><span·class="p">,</span><span·class="p"·data-group-id="4894350649-5">[</span><span·class="p"·data-group-id="4894350649-5">]</span><span·class="p"·data-group-id="4894350649-4">}</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·269,·SHA:·edd7c247a2328e2109160638b2e3c7e4ed8cc18590e570e9d391878c32ad8495·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 221 | ····</span><span·class="n">MyId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id=" | 221 | ····</span><span·class="n">MyId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="4894350649-7">(</span><span·class="p"·data-group-id="4894350649-7">)</span><span·class="p">,</span><span·class="w"> |
| 222 | ····</span><span·class="ss">connected</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 222 | ····</span><span·class="ss">connected</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="4894350649-8">(</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MyId</span><span·class="p"·data-group-id="4894350649-8">)</span><span·class="p">,</span><span·class="w"> |
| 223 | ····</span><span·class="p"·data-group-id=" | 223 | ····</span><span·class="p"·data-group-id="4894350649-9">{</span><span·class="ss">clients</span><span·class="p">,</span><span·class="p"·data-group-id="4894350649-10">[</span><span·class="n">MyId</span><span·class="p"·data-group-id="4894350649-10">]</span><span·class="p"·data-group-id="4894350649-9"[·...·truncated·by·diffoscope;·len:·299,·SHA:·95d3741ac3ee0b905052296ac12daf1e607f8ec0047a2c2cfad1bb1c891d99ab·...·]-11">)</span><span·class="p">,</span><span·class="w"> |
| 224 | ····</span><span·class="ss">disconnected</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="ss">disconnected</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id="4894350649-12">(</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MyId</span><span·class="p"·data-group-id="4894350649-12">)</span><span·class="p">,</span><span·class="w"> |
| 225 | ····</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="p"·data-group-id="4894350649-13">{</span><span·class="ss">clients</span><span·class="p">,</span><span·class="p"·data-group-id="4894350649-14">[</span><span·class="p"·data-group-id="4894350649-14">]</span><span·class="p"·data-group-id="4894350649-13">}</span><span·class="w">[·...·truncated·by·diffoscope;·len:·274,·SHA:·7e989d5b58a54baffa13d7fc4e4606fe78a8dd4dd97bf4dc3b92f5c198dc4cc5·...·]-15">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ····</span><span·class="ss">stopped</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 226 | ····</span><span·class="ss">stopped</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4894350649-16">(</span><span·class="n">ServerId</span><span·class="p"·data-group-id="4894350649-16">)</span><span·class="p">.</span></code></pre><p>As·a·test·suite·runs,·all·information·(including·output·to·<code·class="inline">stdout</code>)·is·recorded |
| 227 | in·many·different·log·files.·A·minimum·of·information·is·displayed·in·the·user | 227 | in·many·different·log·files.·A·minimum·of·information·is·displayed·in·the·user |
| 228 | console·(only·start·and·stop·information,·plus·a·note·for·each·failed·test | 228 | console·(only·start·and·stop·information,·plus·a·note·for·each·failed·test |
| 229 | case).</p><p>The·result·from·each·test·case·is·recorded·in·a·dedicated·HTML·log·file,·created | 229 | case).</p><p>The·result·from·each·test·case·is·recorded·in·a·dedicated·HTML·log·file,·created |
| 230 | for·the·particular·test·run.·An·overview·page·displays·each·test·case | 230 | for·the·particular·test·run.·An·overview·page·displays·each·test·case |
| 231 | represented·by·a·table·row·showing·total·execution·time,·if·the·case·was | 231 | represented·by·a·table·row·showing·total·execution·time,·if·the·case·was |
| 232 | successful,·failed,·or·skipped,·plus·an·optional·user·comment.·For·a·failed·test | 232 | successful,·failed,·or·skipped,·plus·an·optional·user·comment.·For·a·failed·test |
| 233 | case,·the·reason·for·termination·is·also·printed·in·the·comment·field.·The | 233 | case,·the·reason·for·termination·is·also·printed·in·the·comment·field.·The |
| Offset 299, 15 lines modified | Offset 299, 15 lines modified | ||
| 299 | ······<p·class="built-using"> | 299 | ······<p·class="built-using"> |
| 300 | ········Built·using | 300 | ········Built·using |
| 301 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 301 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 302 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 302 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 303 | ······</p> | 303 | ······</p> |
| 304 | <p>Copyright·©·1996-202 | 304 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 305 | ····</footer> | 305 | ····</footer> |
| 306 | ··</div> | 306 | ··</div> |
| 307 | </main> | 307 | </main> |
| 308 | </div> | 308 | </div> |
| 309 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 309 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 310 | ··<script> | 310 | ··<script> |
| 311 | ··let·initialized·=·false; | 311 | ··let·initialized·=·false; |
| Offset 179, 15 lines modified | Offset 179, 15 lines modified | ||
| 179 | ······<p·class="built-using"> | 179 | ······<p·class="built-using"> |
| 180 | ········Built·using | 180 | ········Built·using |
| 181 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 181 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 182 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 182 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 183 | ······</p> | 183 | ······</p> |
| 184 | <p>Copyright·©·1996-202 | 184 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 185 | ····</footer> | 185 | ····</footer> |
| 186 | ··</div> | 186 | ··</div> |
| 187 | </main> | 187 | </main> |
| 188 | </div> | 188 | </div> |
| 189 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 189 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 190 | ··<script> | 190 | ··<script> |
| 191 | ··let·initialized·=·false; | 191 | ··let·initialized·=·false; |
| Offset 138, 16 lines modified | Offset 138, 16 lines modified | ||
| 138 | properties·without·modifying·the·test·suites·using·the·data.·Examples·of | 138 | properties·without·modifying·the·test·suites·using·the·data.·Examples·of |
| 139 | configuration·data·follows:</p><ul><li>Addresses·to·the·test·plant·or·other·instruments</li><li>User·login·information</li><li>Names·of·files·needed·by·the·test</li><li>Names·of·programs·to·be·executed·during·the·test</li><li>Any·other·variable·needed·by·the·test</li></ul><h2·id="syntax"·class="section-heading"> | 139 | configuration·data·follows:</p><ul><li>Addresses·to·the·test·plant·or·other·instruments</li><li>User·login·information</li><li>Names·of·files·needed·by·the·test</li><li>Names·of·programs·to·be·executed·during·the·test</li><li>Any·other·variable·needed·by·the·test</li></ul><h2·id="syntax"·class="section-heading"> |
| 140 | ··<a·href="#syntax"·class="hover-link"> | 140 | ··<a·href="#syntax"·class="hover-link"> |
| 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 142 | ··</a> | 142 | ··</a> |
| 143 | ··<span·class="text">Syntax</span> | 143 | ··<span·class="text">Syntax</span> |
| 144 | </h2> | 144 | </h2> |
| 145 | <p>A·configuration·file·can·contain·any·number·of·elements·of·the·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 145 | <p>A·configuration·file·can·contain·any·number·of·elements·of·the·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4870548555-1">{</span><span·class="n">CfgVarName</span><span·class="p">,</span><span·class="n">Value</span><span·class="p"·data-group-id="4870548555-1">}</span><span·class="p">.</span></code></pre><p>where</p><pre><code·class="makeup·erlang"·translate="no"[·...·truncated·by·diffoscope;·len:·228,·SHA:·51fbabdc5662fce2e87cae397bb63f4a6fb39d41f527fb5b71e4672c6283b1f2·...·]-1">)</span><span·class="w"> |
| 146 | </span><span·class="n">Value</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 146 | </span><span·class="n">Value</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="7652164012-2">(</span><span·class="p"·data-group-id="7652164012-2">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="7652164012-3">[</span><span·class="p"·data-group-id="7652164012-4">{</span><sp[·...·truncated·by·diffoscope;·len:·176,·SHA:·148342463e9867261b2938b7806ca0dd052e8a80784838d3e9e4b3d0d305e8f0·...·]-3">]</span></code></pre><h2·id="requiring-and-reading-configuration-data"·class="section-heading"> |
| 147 | ··<a·href="#requiring-and-reading-configuration-data"·class="hover-link"> | 147 | ··<a·href="#requiring-and-reading-configuration-data"·class="hover-link"> |
| 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 149 | ··</a> | 149 | ··</a> |
| 150 | ··<span·class="text">Requiring·and·Reading·Configuration·Data</span> | 150 | ··<span·class="text">Requiring·and·Reading·Configuration·Data</span> |
| 151 | </h2> | 151 | </h2> |
| 152 | <p><a·href=""·id="require_config_data"></a></p><p>In·a·test·suite,·one·must·<em>require</em>·that·a·configuration·variable·(<code·class="inline">CfgVarName</code> | 152 | <p><a·href=""·id="require_config_data"></a></p><p>In·a·test·suite,·one·must·<em>require</em>·that·a·configuration·variable·(<code·class="inline">CfgVarName</code> |
| 153 | in·the·previous·definition)·exists·before·attempting·to·read·the·associated | 153 | in·the·previous·definition)·exists·before·attempting·to·read·the·associated |
| Offset 166, 21 lines modified | Offset 166, 21 lines modified | ||
| 166 | <code·class="inline">{require,AliasName,CfgVarName}</code>.·The·arguments·<code·class="inline">AliasName</code>·and·<code·class="inline">CfgVarName</code>·are | 166 | <code·class="inline">{require,AliasName,CfgVarName}</code>.·The·arguments·<code·class="inline">AliasName</code>·and·<code·class="inline">CfgVarName</code>·are |
| 167 | the·same·as·the·arguments·to·<a·href="ct.html#require/1"><code·class="inline">ct:require/1,2</code></a>.·<code·class="inline">AliasName</code> | 167 | the·same·as·the·arguments·to·<a·href="ct.html#require/1"><code·class="inline">ct:require/1,2</code></a>.·<code·class="inline">AliasName</code> |
| 168 | becomes·an·alias·for·the·configuration·variable,·and·can·be·used·as·reference·to | 168 | becomes·an·alias·for·the·configuration·variable,·and·can·be·used·as·reference·to |
| 169 | the·configuration·data·value.·The·configuration·variable·can·be·associated·with | 169 | the·configuration·data·value.·The·configuration·variable·can·be·associated·with |
| 170 | any·number·of·alias·names,·but·each·name·must·be·unique·within·the·same·test | 170 | any·number·of·alias·names,·but·each·name·must·be·unique·within·the·same·test |
| 171 | suite.·The·two·main·uses·for·alias·names·follows:</p><ul><li>To·identify·connections·(described·later).</li><li>To·help·adapt·configuration·data·to·a·test·suite·(or·test·case)·and·improve | 171 | suite.·The·two·main·uses·for·alias·names·follows:</p><ul><li>To·identify·connections·(described·later).</li><li>To·help·adapt·configuration·data·to·a·test·suite·(or·test·case)·and·improve |
| 172 | readability.</li></ul><p>To·read·the·value·of·a·configuration·variable,·use·function | 172 | readability.</li></ul><p>To·read·the·value·of·a·configuration·variable,·use·function |
| 173 | <a·href="ct.html#get_config/1"><code·class="inline">get_config/1,2,3</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 173 | <a·href="ct.html#get_config/1"><code·class="inline">get_config/1,2,3</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="5779504228-1">(</span><span·class="p"·data-group-id="5779504228-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="p"·data-group-id=" | 174 | ····</span><span·class="p"·data-group-id="5779504228-2">[</span><span·class="p"·data-group-id="5779504228-3">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">domain</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'CO[·...·truncated·by·diffoscope;·len:·124,·SHA:·1f7df376bbdf499cb15e0b9d10f622fc9267ee274bd87cda07fdbc7daca41352·...·]-2">]</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 175 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="nf">testcase</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">testcase</span><span·class="p"·data-group-id="5779504228-4">(</span><span·class="n">Config</span><span·class="p"·data-group-id="5779504228-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="n">Domain</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="n">Domain</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="5779504228-5">(</span><span·class="ss">domain</span><span·class="p"·data-group-id="5779504228-5">)</span><span·class="p">,</span><span·class="w"> |
| 178 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="using-configuration-variables-defined-in-multiple-files"·class="section-heading"> | 178 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="using-configuration-variables-defined-in-multiple-files"·class="section-heading"> |
| 179 | ··<a·href="#using-configuration-variables-defined-in-multiple-files"·class="hover-link"> | 179 | ··<a·href="#using-configuration-variables-defined-in-multiple-files"·class="hover-link"> |
| 180 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 180 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 181 | ··</a> | 181 | ··</a> |
| 182 | ··<span·class="text">Using·Configuration·Variables·Defined·in·Multiple·Files</span> | 182 | ··<span·class="text">Using·Configuration·Variables·Defined·in·Multiple·Files</span> |
| 183 | </h2> | 183 | </h2> |
| 184 | <p>If·a·configuration·variable·is·defined·in·multiple·files·and·you·want·to·access | 184 | <p>If·a·configuration·variable·is·defined·in·multiple·files·and·you·want·to·access |
| Offset 257, 19 lines modified | Offset 257, 19 lines modified | ||
| 257 | ···<ftp_host> | 257 | ···<ftp_host> |
| 258 | ·······<ftp>"targethost"</ftp> | 258 | ·······<ftp>"targethost"</ftp> |
| 259 | ·······<username>"tester"</username> | 259 | ·······<username>"tester"</username> |
| 260 | ·······<password>"letmein"</password> | 260 | ·······<password>"letmein"</password> |
| 261 | ···</ftp_host> | 261 | ···</ftp_host> |
| 262 | ···<lm_directory>"/test/loadmodules"</lm_directory> | 262 | ···<lm_directory>"/test/loadmodules"</lm_directory> |
| 263 | </config></code></pre><p>Once·read,·this·file·produces·the·same·configuration·variables·as·the·following | 263 | </config></code></pre><p>Once·read,·this·file·produces·the·same·configuration·variables·as·the·following |
| 264 | text·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 264 | text·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8541180091-1">{</span><span·class="ss">ftp_host</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8541180091-2">[</span><span·class="p"·data-group-id="8541180091-3">{</span><span·class="ss">ftp</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·89,·SHA:·ae0e3a79cd8949b1ee144b83a47b2a96e76bac13efbe37f521bc1c8c757bf500·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ············</span><span·class="p"·data-group-id=" | 265 | ············</span><span·class="p"·data-group-id="8541180091-4">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="s">"tester"</span><span·class="p"·data-group-id="8541180091-4">}</span><span·class="p">,</span><span·class="w"> |
| 266 | ············</span><span·class="p"·data-group-id=" | 266 | ············</span><span·class="p"·data-group-id="8541180091-5">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="s">"letmein"</span><span·class="p"·data-group-id="8541180091-5">}</span><span·class="p"·data-group-id="8541180091-2">]</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·2a707dc49d6611893ccf8a81fd0e6e530113c59bbff06fa99f1e49f344fe95f1·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 267 | </span><span·class="p"·data-group-id=" | 267 | </span><span·class="p"·data-group-id="8541180091-6">{</span><span·class="ss">lm_directory</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/test/loadmodules"</span><span·class="p"·data-group-id="8541180091-6">}</span><span·class="p">.</span></code></pre><h3·id="implement-a-user-specific-handler"·class="section-heading"> |
| 268 | ··<a·href="#implement-a-user-specific-handler"·class="hover-link"> | 268 | ··<a·href="#implement-a-user-specific-handler"·class="hover-link"> |
| 269 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 269 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 270 | ··</a> | 270 | ··</a> |
| 271 | ··<span·class="text">Implement·a·User-Specific·Handler</span> | 271 | ··<span·class="text">Implement·a·User-Specific·Handler</span> |
| 272 | </h3> | 272 | </h3> |
| 273 | <p>The·user-specific·handler·can·be·written·to·handle·special·configuration·file | 273 | <p>The·user-specific·handler·can·be·written·to·handle·special·configuration·file |
| 274 | formats.·The·parameter·can·be·either·file·names·or·configuration·strings·(the | 274 | formats.·The·parameter·can·be·either·file·names·or·configuration·strings·(the |
| Offset 280, 150 lines modified | Offset 280, 150 lines modified | ||
| 280 | specified·configuration·parameter·is·valid:</p><ul><li><code·class="inline">{ok,·{file,·FileName}}</code>·-·the·parameter·is·a·file·name·and·the·file·exists.</li><li><code·class="inline">{ok,·{config,·ConfigString}}</code>·-·the·parameter·is·a·configuration·string·and | 280 | specified·configuration·parameter·is·valid:</p><ul><li><code·class="inline">{ok,·{file,·FileName}}</code>·-·the·parameter·is·a·file·name·and·the·file·exists.</li><li><code·class="inline">{ok,·{config,·ConfigString}}</code>·-·the·parameter·is·a·configuration·string·and |
| 281 | it·is·correct.</li><li><code·class="inline">{error,·{nofile,·FileName}}</code>·-·there·is·no·file·with·the·specified·name·in | 281 | it·is·correct.</li><li><code·class="inline">{error,·{nofile,·FileName}}</code>·-·there·is·no·file·with·the·specified·name·in |
| 282 | the·current·directory.</li><li><code·class="inline">{error,·{wrong_config,·ConfigString}}</code>·-·the·configuration·string·is·wrong.</li></ul><p>The·function·<code·class="inline">Callback:read_config/1</code>·is·to·be·exported·from·the·callback·module | 282 | the·current·directory.</li><li><code·class="inline">{error,·{wrong_config,·ConfigString}}</code>·-·the·configuration·string·is·wrong.</li></ul><p>The·function·<code·class="inline">Callback:read_config/1</code>·is·to·be·exported·from·the·callback·module |
| 283 | to·read·configuration·data,·initially·before·the·tests·start,·or·as·a·result·of | 283 | to·read·configuration·data,·initially·before·the·tests·start,·or·as·a·result·of |
| 284 | data·being·reloaded·during·test·execution.·The·input·argument·is·the·same·as·for | 284 | data·being·reloaded·during·test·execution.·The·input·argument·is·the·same·as·for |
| 285 | function·<code·class="inline">check_parameter/1</code>.</p><p>The·return·value·is·to·be·either·of·the·following:</p><ul><li><code·class="inline">{ok,·Config}</code>·-·if·the·configuration·variables·are·read·successfully.</li><li><code·class="inline">{error,·{Error,·ErrorDetails}}</code>·-·if·the·callback·module·fails·to·proceed | 285 | function·<code·class="inline">check_parameter/1</code>.</p><p>The·return·value·is·to·be·either·of·the·following:</p><ul><li><code·class="inline">{ok,·Config}</code>·-·if·the·configuration·variables·are·read·successfully.</li><li><code·class="inline">{error,·{Error,·ErrorDetails}}</code>·-·if·the·callback·module·fails·to·proceed |
| 286 | with·the·specified·configuration·parameters.</li></ul><p><code·class="inline">Config</code>·is·the·proper·Erlang·key-value·list,·with·possible·key-value·sublists | 286 | with·the·specified·configuration·parameters.</li></ul><p><code·class="inline">Config</code>·is·the·proper·Erlang·key-value·list,·with·possible·key-value·sublists |
| 287 | as·values,·like·the·earlier·configuration·file·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 287 | as·values,·like·the·earlier·configuration·file·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1435293264-1">[</span><span·class="p"·data-group-id="1435293264-2">{</span><span·class="ss">ftp_host</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1435293264-3">[</span><span·class="p"·data-group-id="1435293264-4">{</[·...·truncated·by·diffoscope;·len:·823,·SHA:·496c6e631ccec5953c9d42cfb9edac845890a1e7384b24f1250fbf16b00dd291·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 288 | ·</span><span·class="p"·data-group-id=" | 288 | ·</span><span·class="p"·data-group-id="1435293264-7">{</span><span·class="ss">lm_directory</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/test/loadmodules"</span><span·class="p"·data-group-id="1435293264-7">}</span><span·class="p"·data-group-id="1435293264-1">]</span></code></pre><h2·id="examples-of-configuration-data-handling"·class="section-heading"> |
| 289 | ··<a·href="#examples-of-configuration-data-handling"·class="hover-link"> | 289 | ··<a·href="#examples-of-configuration-data-handling"·class="hover-link"> |
| 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 291 | ··</a> | 291 | ··</a> |
| 292 | ··<span·class="text">Examples·of·Configuration·Data·Handling</span> | 292 | ··<span·class="text">Examples·of·Configuration·Data·Handling</span> |
| 293 | </h2> | 293 | </h2> |
| 294 | <p>A·configuration·file·for·using·the·FTP·client·to·access·files·on·a·remote·host | 294 | <p>A·configuration·file·for·using·the·FTP·client·to·access·files·on·a·remote·host |
| 295 | can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4 | 295 | can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4195269748-1">{</span><span·class="ss">ftp_host</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4195269748-2">[</span><span·class="p"·data-group-id="4195269748-3">{</span><span·class="ss">ftp</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·88,·SHA:·d1a4cc7d42bc09ab2a57776dd7081a416ab10d1a189308c2e6c685047d718ae2·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 296 | ············</span><span·class="p"·data-group-id="4 | 296 | ············</span><span·class="p"·data-group-id="4195269748-4">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="s">"tester"</span><span·class="p"·data-group-id="4195269748-4">}</span><span·class="p">,</span><span·class="w"> |
| 297 | ············</span><span·class="p"·data-group-id="4 | 297 | ············</span><span·class="p"·data-group-id="4195269748-5">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="s">"letmein"</span><span·class="p"·data-group-id="4195269748-5">}</span><span·class="p"·data-group-id="4195269748-2">]</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·fd9f27ddbac612e66ece8b1c490cd0a5b3c9b512b782e34c13b50438391034be·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 298 | </span><span·class="p"·data-group-id="4 | 298 | </span><span·class="p"·data-group-id="4195269748-6">{</span><span·class="ss">lm_directory</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/test/loadmodules"</span><span·class="p"·data-group-id="4195269748-6">}</span><span·class="p">.</span></code></pre><p>The·XML·version·shown·earlier·can·also·be·used,·but·it·is·to·be·explicitly |
| 299 | specified·that·the·<code·class="inline">ct_config_xml</code>·callback·module·is·to·be·used·by | 299 | specified·that·the·<code·class="inline">ct_config_xml</code>·callback·module·is·to·be·used·by |
| 300 | <code·class="inline">Common·Test</code>.</p><p>The·following·is·an·example·of·how·to·assert·that·the·configuration·data·is | 300 | <code·class="inline">Common·Test</code>.</p><p>The·following·is·an·example·of·how·to·assert·that·the·configuration·data·is |
| 301 | available·and·can·be·used·for·an·FTP·session:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id=" | 301 | available·and·can·be·used·for·an·FTP·session:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="3472097962-1">(</span><span·class="ss">ftptest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="3472097962-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 302 | ····</span><span·class="p"·data-group-id=" | 302 | ····</span><span·class="p"·data-group-id="3472097962-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="3472097962-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span><span[·...·truncated·by·diffoscope;·len:·168,·SHA:·6d116c807ac1cbbe69bd760c8ec781ed5341d49d8a855a8d2a9350aeff28ce51·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 303 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> | 303 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id=" | 304 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="3472097962-4">(</span><span·class="ss">ftptest</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Config</span><span·class="p"·data-group-id="3472097962-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 305 | ····</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 305 | ····</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="3472097962-5">(</span><span·class="ss">ftp</span><span·class="p"·data-group-id="3472097962-5">)</span><span·class="p">.</span><span·class="w"> |
| 306 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id=" | 306 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id="3472097962-6">(</span><span·class="p"·data-group-id="3472097962-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 307 | ····</span><span·class="p"·data-group-id=" | 307 | ····</span><span·class="p"·data-group-id="3472097962-7">[</span><span·class="p"·data-group-id="3472097962-8">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="ss">ftp_host</span><span·class="p"·data-group-id="3472097962-8">}</span><span·class="p">,</span><span·class="w"> |
| 308 | ·····</span><span·class="p"·data-group-id=" | 308 | ·····</span><span·class="p"·data-group-id="3472097962-9">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">lm_directory</span><span·class="p"·data-group-id="3472097962-9">}</span><span·class="p"·data-group-id="3472097962-7">]</span><span·class="p">.</span><span·class="w"> |
| 309 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id=" | 309 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id="3472097962-10">(</span><span·class="n">Config</span><span·class="p"·data-group-id="3472097962-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 310 | ····</span><span·class="n">Remote</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 310 | ····</span><span·class="n">Remote</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="3472097962-11">(</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="3472097962-12">(</span><span·class="ss">lm_directory</span><span·class="p"·data-group-id="3472097962-12">)</span><span[·...·truncated·by·diffoscope;·len:·127,·SHA:·81565351c6d48905dff57a2fdb9dd6b5e1abe4e25aeb91ea8c65fff9001cf7ca·...·]-11">)</span><span·class="p">,</span><span·class="w"> |
| 311 | ····</span><span·class="n">Local</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 311 | ····</span><span·class="n">Local</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="3472097962-13">(</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="3472097962-14">(</span><span·class="ss">priv_dir</span><span·class="p">,</span><span·class="n">Config</span><spa[·...·truncated·by·diffoscope;·len:·184,·SHA:·fe7d1f4fc002045feaa963d27047b314d230d8b4218fd14e0f8ae11cf1e6f2e1·...·]-13">)</span><span·class="p">,</span><span·class="w"> |
| 312 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 312 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="3472097962-15">(</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Remote</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Local</span><span·class="p"·data-group-id="3472097962-15">)</span><span·class="p">,</span><span·class="w"> |
| 313 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>The·following·is·an·example·of·how·the·functions·in·the·previous·example·can·be | 313 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>The·following·is·an·example·of·how·the·functions·in·the·previous·example·can·be |
| 314 | rewritten·if·it·is·necessary·to·open·multiple·connections·to·the·FTP·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id=" | 314 | rewritten·if·it·is·necessary·to·open·multiple·connections·to·the·FTP·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="0180286193-1">(</span><span·class="ss">ftptest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="0180286193-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 315 | ····</span><span·class="p"·data-group-id=" | 315 | ····</span><span·class="p"·data-group-id="0180286193-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Handle1</span><span·class="p"·data-group-id="0180286193-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·dea39ea6ecf727d876cc4aa7b6f3741afeada16dc61139eb5b913b2701d1de71·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 316 | ····</span><span·class="p"·data-group-id=" | 316 | ····</span><span·class="p"·data-group-id="0180286193-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Handle2</span><span·class="p"·data-group-id="0180286193-4">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·b3215dbc8c103cfc5f2fc005a4d462094f8c2797abdf387ddeb6089b8846a641·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 317 | ····</span><span·class="p"·data-group-id=" | 317 | ····</span><span·class="p"·data-group-id="0180286193-6">[</span><span·class="p"·data-group-id="0180286193-7">{</span><span·class="ss">ftp_handles</span><span·class="p">,</span><span·class="p"·data-group-id="0180286193-8">[</span><span·class="n">Handle1</span><span·class="p">,</span><span·class="n"[·...·truncated·by·diffoscope;·len:·263,·SHA:·1171beccc9b7cf7e664583f502461d3fb2a6f8e1b1aff0b4cc38009d62d564fd·...·]-6">]</span><span·class="p">.</span><span·class="w"> |
| 318 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id=" | 318 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="0180286193-9">(</span><span·class="ss">ftptest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="0180286193-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 319 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id=" | 319 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id="0180286193-10">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="0180286193-11">(</span><span·class="n">Handle</span><span·class="p"·data-group-id="0180286193-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·[·...·truncated·by·diffoscope;·len:·214,·SHA:·6683833c3e0cd81cb4e40e2f39e1a0bd252a776a2d707d1fe5ebddabda9d7251·...·]-12">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 320 | ··················</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 320 | ··················</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="0180286193-13">(</span><span·class="ss">ftp_handles</span><span·class="p">,</span><span·class="n">Config</span><span·class="p"·data-group-id="0180286193-13">)</span><span·class="p"·data-group-id="0180286193-10">)</span><span·class="p">.</span><span·class="w"> |
| 321 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id=" | 321 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id="0180286193-14">(</span><span·class="p"·data-group-id="0180286193-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 322 | ····</span><span·class="p"·data-group-id=" | 322 | ····</span><span·class="p"·data-group-id="0180286193-15">[</span><span·class="p"·data-group-id="0180286193-16">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">ftp_host</span><span·class="p"·data-group-id="0180286193-16">}</span><span·class="p">,</span><span·class="w"> |
| 323 | ·····</span><span·class="p"·data-group-id=" | 323 | ·····</span><span·class="p"·data-group-id="0180286193-17">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">lm_directory</span><span·class="p"·data-group-id="0180286193-17">}</span><span·class="p"·data-group-id="0180286193-15">]</span><span·class="p">.</span><span·class="w"> |
| 324 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id=" | 324 | </span><span·class="nf">ftptest</span><span·class="p"·data-group-id="0180286193-18">(</span><span·class="n">Config</span><span·class="p"·data-group-id="0180286193-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 325 | ····</span><span·class="n">Remote</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 325 | ····</span><span·class="n">Remote</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="0180286193-19">(</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0180286193-20">(</span><span·class="ss">lm_directory</span><span·class="p"·data-group-id="0180286193-20">)</span><span[·...·truncated·by·diffoscope;·len:·127,·SHA:·7a94b090c918008fa78f6a450daecfd06044b0197329565a99491325795e4bab·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 326 | ····</span><span·class="n">Local</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 326 | ····</span><span·class="n">Local</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="0180286193-21">(</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="0180286193-22">(</span><span·class="ss">priv_dir</span><span·class="p">,</span><span·class="n">Config</span><spa[·...·truncated·by·diffoscope;·len:·184,·SHA:·dadeecc04c0b705e3770d006a75336df4a81c25f4d4dcee98aedda3783acb3ce·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 327 | ····</span><span·class="p"·data-group-id=" | 327 | ····</span><span·class="p"·data-group-id="0180286193-23">[</span><span·class="n">Handle</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">MoreHandles</span><span·class="p"·data-group-id="0180286193-23">]</span><span·class="w">·</span><span·class="o">=</s[·...·truncated·by·diffoscope;·len:·301,·SHA:·a66fd35a75ac5533e6f7f9d1c4723f5c161242b497c8cdd4a99116349749e079·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 328 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 328 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct_ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="0180286193-25">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Remote</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Local</span><span·class="p"·data-group-id="0180286193-25">)</span><span·class="p">,</span><span·class="w"> |
| 329 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="example-of-user-specific-configuration-handler"·class="section-heading"> | 329 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="example-of-user-specific-configuration-handler"·class="section-heading"> |
| 330 | ··<a·href="#example-of-user-specific-configuration-handler"·class="hover-link"> | 330 | ··<a·href="#example-of-user-specific-configuration-handler"·class="hover-link"> |
| 331 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 331 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 332 | ··</a> | 332 | ··</a> |
| 333 | ··<span·class="text">Example·of·User-Specific·Configuration·Handler</span> | 333 | ··<span·class="text">Example·of·User-Specific·Configuration·Handler</span> |
| 334 | </h2> | 334 | </h2> |
| 335 | <p>A·simple·configuration·handling·driver,·asking·an·external·server·for | 335 | <p>A·simple·configuration·handling·driver,·asking·an·external·server·for |
| 336 | configuration·data,·can·be·implemented·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7 | 336 | configuration·data,·can·be·implemented·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7517801005-1">(</span><span·class="ss">config_driver</span><span·class="p"·data-group-id="7517801005-1">)</span><span·class="p">.</span><span·class="w"> |
| 337 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7 | 337 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7517801005-2">(</span><span·class="p"·data-group-id="7517801005-3">[</span><span·class="ss">read_config</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">check_parameter</span><span·class[·...·truncated·by·diffoscope;·len:·130,·SHA:·a91d3aa8590b6dc77c1f367e2c0373430d96f16600381072b4df02fc9fd44063·...·]05-2">)</span><span·class="p">.</span><span·class="w"> |
| 338 | </span><span·class="nf">read_config</span><span·class="p"·data-group-id="7 | 338 | </span><span·class="nf">read_config</span><span·class="p"·data-group-id="7517801005-4">(</span><span·class="n">ServerName</span><span·class="p"·data-group-id="7517801005-4">)</span><span·class="p">-></span><span·class="w"> |
| 339 | ····</span><span·class="n">ServerModule</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list_to_atom</span><span·class="p"·data-group-id="7 | 339 | ····</span><span·class="n">ServerModule</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list_to_atom</span><span·class="p"·data-group-id="7517801005-5">(</span><span·class="n">ServerName</span><span·class="p"·data-group-id="7517801005-5">)</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 31000/82633 bytes (37.52%) of diff not shown. | |||
| Offset 197, 67 lines modified | Offset 197, 67 lines modified | ||
| 197 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 197 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 198 | ··</a> | 198 | ··</a> |
| 199 | ··<span·class="text">General·Config</span> | 199 | ··<span·class="text">General·Config</span> |
| 200 | </h3> | 200 | </h3> |
| 201 | <p>Here·follows·the·general·configuration·terms·that·are·allowed·in·a·cover | 201 | <p>Here·follows·the·general·configuration·terms·that·are·allowed·in·a·cover |
| 202 | specification·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·List·of·Nodes·on·which·cover·will·be·active·during·test.</span><span·class="w"> | 202 | specification·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·List·of·Nodes·on·which·cover·will·be·active·during·test.</span><span·class="w"> |
| 203 | </span><span·class="c1">%%·Nodes·=·[atom()]</span><span·class="w"> | 203 | </span><span·class="c1">%%·Nodes·=·[atom()]</span><span·class="w"> |
| 204 | </span><span·class="p"·data-group-id=" | 204 | </span><span·class="p"·data-group-id="3765265941-1">{</span><span·class="nb">nodes</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Nodes</span><span·class="p"·data-group-id="3765265941-1">}</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="c1">%%·Files·with·previously·exported·cover·data·to·include·in·analysis.</span><span·class="w"> | 205 | </span><span·class="c1">%%·Files·with·previously·exported·cover·data·to·include·in·analysis.</span><span·class="w"> |
| 206 | </span><span·class="c1">%%·CoverDataFiles·=·[string()]</span><span·class="w"> | 206 | </span><span·class="c1">%%·CoverDataFiles·=·[string()]</span><span·class="w"> |
| 207 | </span><span·class="p"·data-group-id=" | 207 | </span><span·class="p"·data-group-id="3765265941-2">{</span><span·class="ss">import</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CoverDataFiles</span><span·class="p"·data-group-id="3765265941-2">}</span><span·class="p">.</span><span·class="w"> |
| 208 | </span><span·class="c1">%%·Cover·data·file·to·export·from·this·session.</span><span·class="w"> | 208 | </span><span·class="c1">%%·Cover·data·file·to·export·from·this·session.</span><span·class="w"> |
| 209 | </span><span·class="c1">%%·CoverDataFile·=·string()</span><span·class="w"> | 209 | </span><span·class="c1">%%·CoverDataFile·=·string()</span><span·class="w"> |
| 210 | </span><span·class="p"·data-group-id=" | 210 | </span><span·class="p"·data-group-id="3765265941-3">{</span><span·class="ss">export</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CoverDataFile</span><span·class="p"·data-group-id="3765265941-3">}</span><span·class="p">.</span><span·class="w"> |
| 211 | </span><span·class="c1">%%·Cover·analysis·level.</span><span·class="w"> | 211 | </span><span·class="c1">%%·Cover·analysis·level.</span><span·class="w"> |
| 212 | </span><span·class="c1">%%·Level·=·details·|·overview</span><span·class="w"> | 212 | </span><span·class="c1">%%·Level·=·details·|·overview</span><span·class="w"> |
| 213 | </span><span·class="p"·data-group-id=" | 213 | </span><span·class="p"·data-group-id="3765265941-4">{</span><span·class="ss">level</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Level</span><span·class="p"·data-group-id="3765265941-4">}</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="c1">%%·Directories·to·include·in·cover.</span><span·class="w"> | 214 | </span><span·class="c1">%%·Directories·to·include·in·cover.</span><span·class="w"> |
| 215 | </span><span·class="c1">%%·Dirs·=·[string()]</span><span·class="w"> | 215 | </span><span·class="c1">%%·Dirs·=·[string()]</span><span·class="w"> |
| 216 | </span><span·class="p"·data-group-id=" | 216 | </span><span·class="p"·data-group-id="3765265941-5">{</span><span·class="ss">incl_dirs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dirs</span><span·class="p"·data-group-id="3765265941-5">}</span><span·class="p">.</span><span·class="w"> |
| 217 | </span><span·class="c1">%%·Directories,·including·subdirectories,·to·include.</span><span·class="w"> | 217 | </span><span·class="c1">%%·Directories,·including·subdirectories,·to·include.</span><span·class="w"> |
| 218 | </span><span·class="p"·data-group-id=" | 218 | </span><span·class="p"·data-group-id="3765265941-6">{</span><span·class="ss">incl_dirs_r</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dirs</span><span·class="p"·data-group-id="3765265941-6">}</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="c1">%%·Specific·modules·to·include·in·cover.</span><span·class="w"> | 219 | </span><span·class="c1">%%·Specific·modules·to·include·in·cover.</span><span·class="w"> |
| 220 | </span><span·class="c1">%%·Mods·=·[atom()]</span><span·class="w"> | 220 | </span><span·class="c1">%%·Mods·=·[atom()]</span><span·class="w"> |
| 221 | </span><span·class="p"·data-group-id=" | 221 | </span><span·class="p"·data-group-id="3765265941-7">{</span><span·class="ss">incl_mods</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mods</span><span·class="p"·data-group-id="3765265941-7">}</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="c1">%%·Directories·to·exclude·in·cover.</span><span·class="w"> | 222 | </span><span·class="c1">%%·Directories·to·exclude·in·cover.</span><span·class="w"> |
| 223 | </span><span·class="p"·data-group-id=" | 223 | </span><span·class="p"·data-group-id="3765265941-8">{</span><span·class="ss">excl_dirs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dirs</span><span·class="p"·data-group-id="3765265941-8">}</span><span·class="p">.</span><span·class="w"> |
| 224 | </span><span·class="c1">%%·Directories,·including·subdirectories,·to·exclude.</span><span·class="w"> | 224 | </span><span·class="c1">%%·Directories,·including·subdirectories,·to·exclude.</span><span·class="w"> |
| 225 | </span><span·class="p"·data-group-id=" | 225 | </span><span·class="p"·data-group-id="3765265941-9">{</span><span·class="ss">excl_dirs_r</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dirs</span><span·class="p"·data-group-id="3765265941-9">}</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="c1">%%·Specific·modules·to·exclude·in·cover.</span><span·class="w"> | 226 | </span><span·class="c1">%%·Specific·modules·to·exclude·in·cover.</span><span·class="w"> |
| 227 | </span><span·class="p"·data-group-id=" | 227 | </span><span·class="p"·data-group-id="3765265941-10">{</span><span·class="ss">excl_mods</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mods</span><span·class="p"·data-group-id="3765265941-10">}</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="c1">%%·Cross·cover·compilation</span><span·class="w"> | 228 | </span><span·class="c1">%%·Cross·cover·compilation</span><span·class="w"> |
| 229 | </span><span·class="c1">%%·Tag·=·atom(),·an·identifier·for·a·test·run</span><span·class="w"> | 229 | </span><span·class="c1">%%·Tag·=·atom(),·an·identifier·for·a·test·run</span><span·class="w"> |
| 230 | </span><span·class="c1">%%·Mod·=·[atom()],·modules·to·compile·for·accumulated·analysis</span><span·class="w"> | 230 | </span><span·class="c1">%%·Mod·=·[atom()],·modules·to·compile·for·accumulated·analysis</span><span·class="w"> |
| 231 | </span><span·class="p"·data-group-id=" | 231 | </span><span·class="p"·data-group-id="3765265941-11">{</span><span·class="ss">cross</span><span·class="p">,</span><span·class="p"·data-group-id="3765265941-12">[</span><span·class="p"·data-group-id="3765265941-13">{</span><span·class="n">Tag</span><span·class="p">,</span><span·class="n">Mods</[·...·truncated·by·diffoscope;·len:·154,·SHA:·6b7fe18d73832145f6d2c3b19a1f12e1b8fe6943067d699a77e4702283c5ce49·...·]-11">}</span><span·class="p">.</span></code></pre><p>The·terms·<code·class="inline">incl_dirs_r</code>·and·<code·class="inline">excl_dirs_r</code>·tell·<code·class="inline">Common·Test</code>·to·search·the |
| 232 | specified·directories·recursively·and·include·or·exclude·any·module·found·during | 232 | specified·directories·recursively·and·include·or·exclude·any·module·found·during |
| 233 | the·search.·The·terms·<code·class="inline">incl_dirs</code>·and·<code·class="inline">excl_dirs</code>·result·in·a·non-recursive | 233 | the·search.·The·terms·<code·class="inline">incl_dirs</code>·and·<code·class="inline">excl_dirs</code>·result·in·a·non-recursive |
| 234 | search·for·modules·(that·is,·only·modules·found·in·the·specified·directories·are | 234 | search·for·modules·(that·is,·only·modules·found·in·the·specified·directories·are |
| 235 | included·or·excluded).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Directories·containing·Erlang·modules·to·be·included·in·a·code·coverage·test | 235 | included·or·excluded).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Directories·containing·Erlang·modules·to·be·included·in·a·code·coverage·test |
| 236 | must·exist·in·the·code·server·path.·Otherwise,·the·Cover·tool·fails·to | 236 | must·exist·in·the·code·server·path.·Otherwise,·the·Cover·tool·fails·to |
| 237 | recompile·the·modules.·It·is·not·sufficient·to·specify·these·directories·in | 237 | recompile·the·modules.·It·is·not·sufficient·to·specify·these·directories·in |
| 238 | the·cover·specification·file·for·<code·class="inline">Common·Test</code>.</p></section><h3·id="otp-application-config"·class="section-heading"> | 238 | the·cover·specification·file·for·<code·class="inline">Common·Test</code>.</p></section><h3·id="otp-application-config"·class="section-heading"> |
| 239 | ··<a·href="#otp-application-config"·class="hover-link"> | 239 | ··<a·href="#otp-application-config"·class="hover-link"> |
| 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 240 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 241 | ··</a> | 241 | ··</a> |
| 242 | ··<span·class="text">OTP·application·Config</span> | 242 | ··<span·class="text">OTP·application·Config</span> |
| 243 | </h3> | 243 | </h3> |
| 244 | <p>When·using·a·cover·specification·in·the·testing·of·an·OTP·application·itself, | 244 | <p>When·using·a·cover·specification·in·the·testing·of·an·OTP·application·itself, |
| 245 | there·is·a·special·incl_app·directive·that·includes·the·applications·modules·for | 245 | there·is·a·special·incl_app·directive·that·includes·the·applications·modules·for |
| 246 | the·cover·compilation.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 246 | the·cover·compilation.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9375747542-1">{</span><span·class="ss">incl_app</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cover</span><span·class="w">·</span><span·class="p">:</span>[·...·truncated·by·diffoscope;·len:·224,·SHA:·29bc2f13fe01bee346fbe8811a1a1f5de4fc054839ef0be35daf24814d095244·...·]-1">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·you·desire·to·also·use·some·other·general·cover·configuration·together·with |
| 247 | this·option·you·should·insert·the·AppName·in·between·the·option·and·its·value | 247 | this·option·you·should·insert·the·AppName·in·between·the·option·and·its·value |
| 248 | creating·a·three·tuple.</p></section><p><a·href=""·id="cross_cover"></a></p><h2·id="cross-cover-analysis"·class="section-heading"> | 248 | creating·a·three·tuple.</p></section><p><a·href=""·id="cross_cover"></a></p><h2·id="cross-cover-analysis"·class="section-heading"> |
| 249 | ··<a·href="#cross-cover-analysis"·class="hover-link"> | 249 | ··<a·href="#cross-cover-analysis"·class="hover-link"> |
| 250 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 250 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 251 | ··</a> | 251 | ··</a> |
| 252 | ··<span·class="text">Cross·Cover·Analysis</span> | 252 | ··<span·class="text">Cross·Cover·Analysis</span> |
| 253 | </h2> | 253 | </h2> |
| Offset 276, 15 lines modified | Offset 276, 15 lines modified | ||
| 276 | ··{incl_mods,[m1]}.</code></pre><p>This·gives·an·entry·for·<code·class="inline">m1</code>·also·in·the·cover·log·for·test·run·<code·class="inline">s2</code>.·The | 276 | ··{incl_mods,[m1]}.</code></pre><p>This·gives·an·entry·for·<code·class="inline">m1</code>·also·in·the·cover·log·for·test·run·<code·class="inline">s2</code>.·The |
| 277 | problem·is·that·this·only·reflects·the·coverage·by·<code·class="inline">s2</code>·tests,·not·the | 277 | problem·is·that·this·only·reflects·the·coverage·by·<code·class="inline">s2</code>·tests,·not·the |
| 278 | accumulated·result·over·<code·class="inline">s1</code>·and·<code·class="inline">s2</code>.·This·is·where·the·cross·cover·mechanism | 278 | accumulated·result·over·<code·class="inline">s1</code>·and·<code·class="inline">s2</code>.·This·is·where·the·cross·cover·mechanism |
| 279 | comes·in·handy.</p><p>If·instead·the·cover·specification·for·<code·class="inline">s2</code>·is·like·the·following:</p><pre><code·class="text">s2.cover: | 279 | comes·in·handy.</p><p>If·instead·the·cover·specification·for·<code·class="inline">s2</code>·is·like·the·following:</p><pre><code·class="text">s2.cover: |
| 280 | ··{cross,[{s1,[m1]}]}.</code></pre><p>Then·<code·class="inline">m1</code>·is·cover·compiled·in·test·run·<code·class="inline">s2</code>,·but·not·shown·in·the·coverage·log. | 280 | ··{cross,[{s1,[m1]}]}.</code></pre><p>Then·<code·class="inline">m1</code>·is·cover·compiled·in·test·run·<code·class="inline">s2</code>,·but·not·shown·in·the·coverage·log. |
| 281 | Instead,·if·<a·href="ct_cover.html#cross_cover_analyse/2"><code·class="inline">ct_cover:cross_cover_analyse/2</code></a>·is·called·after·both·<code·class="inline">s1</code>·and·<code·class="inline">s2</code> | 281 | Instead,·if·<a·href="ct_cover.html#cross_cover_analyse/2"><code·class="inline">ct_cover:cross_cover_analyse/2</code></a>·is·called·after·both·<code·class="inline">s1</code>·and·<code·class="inline">s2</code> |
| 282 | test·runs·are·completed,·the·accumulated·result·for·<code·class="inline">m1</code>·is·available·in·the | 282 | test·runs·are·completed,·the·accumulated·result·for·<code·class="inline">m1</code>·is·available·in·the |
| 283 | cross·cover·log·for·test·run·<code·class="inline">s1</code>.</p><p>The·call·to·the·analyze·function·must·be·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct_cover</span><span·class="p">:</span><span·class="nf">cross_cover_analyse</span><span·class="p"·data-group-id=" | 283 | cross·cover·log·for·test·run·<code·class="inline">s1</code>.</p><p>The·call·to·the·analyze·function·must·be·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct_cover</span><span·class="p">:</span><span·class="nf">cross_cover_analyse</span><span·class="p"·data-group-id="7556185943-1">(</span><span·class="n">Level</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7556185943-2">[</span><span·class="p"·data-group-id="7556185943-3">{</span><span·class="ss">s1</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·387,·SHA:·fdb26d664107d4c00a5ebe13d5519f0b2a89c7f7900ff9ca35674d78917c0492·...·]-1">)</span><span·class="p">.</span></code></pre><p>Here,·<code·class="inline">S1LogDir</code>·and·<code·class="inline">S2LogDir</code>·are·the·directories·named·<code·class="inline"><TestName>.logs</code>·for |
| 284 | each·test·respectively.</p><p>Notice·the·tags·<code·class="inline">s1</code>·and·<code·class="inline">s2</code>,·which·are·used·in·the·cover·specification·file | 284 | each·test·respectively.</p><p>Notice·the·tags·<code·class="inline">s1</code>·and·<code·class="inline">s2</code>,·which·are·used·in·the·cover·specification·file |
| 285 | and·in·the·call·to·<a·href="ct_cover.html#cross_cover_analyse/2"><code·class="inline">ct_cover:cross_cover_analyse/2</code></a>.·The·purpose·of·these·is | 285 | and·in·the·call·to·<a·href="ct_cover.html#cross_cover_analyse/2"><code·class="inline">ct_cover:cross_cover_analyse/2</code></a>.·The·purpose·of·these·is |
| 286 | only·to·map·the·modules·specified·in·the·cover·specification·to·the·log | 286 | only·to·map·the·modules·specified·in·the·cover·specification·to·the·log |
| 287 | directory·specified·in·the·call·to·the·analyze·function.·The·tag·name·has·no | 287 | directory·specified·in·the·call·to·the·analyze·function.·The·tag·name·has·no |
| 288 | meaning·beyond·this.</p><h2·id="logging"·class="section-heading"> | 288 | meaning·beyond·this.</p><h2·id="logging"·class="section-heading"> |
| 289 | ··<a·href="#logging"·class="hover-link"> | 289 | ··<a·href="#logging"·class="hover-link"> |
| 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 290 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 349, 15 lines modified | Offset 349, 15 lines modified | ||
| 349 | ······<p·class="built-using"> | 349 | ······<p·class="built-using"> |
| 350 | ········Built·using | 350 | ········Built·using |
| 351 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 351 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 352 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 352 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 353 | ······</p> | 353 | ······</p> |
| 354 | <p>Copyright·©·1996-202 | 354 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 355 | ····</footer> | 355 | ····</footer> |
| 356 | ··</div> | 356 | ··</div> |
| 357 | </main> | 357 | </main> |
| 358 | </div> | 358 | </div> |
| 359 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 359 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 360 | ··<script> | 360 | ··<script> |
| 361 | ··let·initialized·=·false; | 361 | ··let·initialized·=·false; |
| Offset 1916, 25 lines modified | Offset 1916, 25 lines modified | ||
| 1916 | ························Opt·::·element·|·all, | 1916 | ························Opt·::·element·|·all, |
| 1917 | ························ValueOrElement·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()·|·Default.</pre> | 1917 | ························ValueOrElement·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()·|·Default.</pre> |
| 1918 | ······</div> | 1918 | ······</div> |
| 1919 | <p>Reads·configuration·data·values.</p><p>Returns·the·matching·values·or·configuration·elements,·given·a·configuration | 1919 | <p>Reads·configuration·data·values.</p><p>Returns·the·matching·values·or·configuration·elements,·given·a·configuration |
| 1920 | variable·key·or·its·associated·name·(if·one·has·been·specified·with | 1920 | variable·key·or·its·associated·name·(if·one·has·been·specified·with |
| 1921 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>·or·a·<code·class="inline">require</code>·statement).</p><p><em>Example:</em></p><p>Given·the·following·configuration·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5936564844-1">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="p"·data-group-id="5936564844-2">[</span><span·class="p"·data-group-id="5936564844-3">{</span><span·class="ss">telnet</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="5936564844-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 1922 | ·······</span><span·class="p"·data-group-id="5936564844-4">{</span><span·class="ss">user</span><span·class="p">,</span><span·class="p"·data-group-id="5936564844-5">[</span><span·class="p"·data-group-id="5936564844-6">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="n">Username</span><span·class="p"·data-group-id="5936564844-6">}</span><span·class="p">,</span><span·class="w"> | ||
| 1923 | 1921 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>·or·a·<code·class="inline">require</code>·statement).</p><p><em>Example:</em></p><p>Given·the·following·configuration·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·[·...·truncated·by·diffoscope;·len:·319,·SHA:·567d11d254ee3352c7a8539c8110a466c028b09002fb89fe554f1ee44a4757f4·...·]-3">}</span><span·class="p">,</span><span·class="w"> | |
| 1922 | ·······</span><span·class="p"·data-group-id="0106369512-4">{</span><span·class="ss">user</span><span·class="p">,</span><span·class="p"·data-group-id="0106369512-5">[</span><span·class="p"·data-group-id="0106369512-6">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="n">Username</span><span·class="p"·data-group-id="0106369512-6">}</span><span·class="p">,</span><span·class="w"> | ||
| 1923 | ··············</span><span·class="p"·data-group-id="0106369512-7">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="n">Password</span><span·class="p"·data-group-id="0106369512-7">}</span><span·class="p"·data-group-id="0106369512-5">]</span><span·class="p"·data-group-id="0106369512-4">}</span><span·class="p"·data-group-id="0106369512-2">]</span><span·class="p"·data-group-id="0106369512-1">}</span><span·class="p">.</span></code></pre><p>Then:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0905281315-1">(</span><span·class="ss">unix</span><span·class="p">,</span><span·class="n">Default</span><span·class="p"·data-group-id="0905281315-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0905281315-2">[</span><span·class="p"·data-group-id="0905281315-3">{</span><span·class="ss">telnet</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="0905281315-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 1924 | ·</span><span·class="p"·data-group-id=" | 1924 | ·</span><span·class="p"·data-group-id="0905281315-4">{</span><span·class="ss">user</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0905281315-5">[</span><span·class="p"·data-group-id="0905281315-6">{</span><span·class="ss">username</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·476,·SHA:·d4873ac0a7a9bc8c9d5c45daca1424347cd4c5b58b158a5437ab237ed1db8566·...·]-2">]</span><span·class="w"> |
| 1925 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 1925 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0905281315-8">(</span><span·class="p"·data-group-id="0905281315-9">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="ss">telnet</span><span·class="p"·data-group-id="0905281315-9">}</span><span·class="p">,</span><span·class="n">Defaul[·...·truncated·by·diffoscope;·len:·49,·SHA:·4ef4218f3741aba2e07e26ff60be8e726c409e0b3c8f8bba5ef1872ceca1155a·...·]-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">IpAddr</span><span·class="w"> |
| 1926 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 1926 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0905281315-10">(</span><span·class="p"·data-group-id="0905281315-11">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="ss">user</span><span·class="p">,</span><span·class="ss">username</span><span·class="p"·data-group-id="0905281315-1[·...·truncated·by·diffoscope;·len:·106,·SHA:·1e849d7b24be8f2299ed851cb2b1e3a991ea77dc407a3166b27e89c37550fd4b·...·]-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Username</span><span·class="w"> |
| 1927 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 1927 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0905281315-12">(</span><span·class="p"·data-group-id="0905281315-13">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="ss">ftp</span><span·class="p"·data-group-id="0905281315-13">}</span><span·class="p">,</span><span·class="n">Defaul[·...·truncated·by·diffoscope;·len:·49,·SHA:·4ef4218f3741aba2e07e26ff60be8e726c409e0b3c8f8bba5ef1872ceca1155a·...·]-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Default</span><span·class="w"> |
| 1928 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 1928 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="0905281315-14">(</span><span·class="ss">unknownkey</span><span·class="p">,</span><span·class="n">Default</span><span·class="p"·data-group-id="0905281315-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Default</span></code></pre><p>If·a·configuration·variable·key·has·been·associated·with·a·name·(by |
| 1929 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>·or·a·<code·class="inline">require</code>·statement),·the·name·can·be·used | 1929 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>·or·a·<code·class="inline">require</code>·statement),·the·name·can·be·used |
| 1930 | instead·of·the·key·to·read·the·value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id=" | 1930 | instead·of·the·key·to·read·the·value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id="8363259821-1">(</span><span·class="ss">myuser</span><span·class="p">,</span><span·class="p"·data-group-id="8363259821-2">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="ss">user</span><span·class="p"·data-group-id="8363259821-2">}<[·...·truncated·by·diffoscope;·len:·47,·SHA:·c893355a2f5807d83290c0778fb32504fb897f92495e78fcbe51c7c96ee3868e·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 1931 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id=" | 1931 | </span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="8363259821-3">(</span><span·class="ss">myuser</span><span·class="p">,</span><span·class="n">Default</span><span·class="p"·data-group-id="8363259821-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·507,·SHA:·89851794accc7478802be24b3bcc01b145568d2c65d1e7f969f7e9706dd26444·...·]-4">]</span></code></pre><p>If·a·configuration·variable·is·defined·in·multiple·files,·use·option·<code·class="inline">all</code>·to |
| 1932 | access·all·possible·values.·The·values·are·returned·in·a·list.·The·order·of·the | 1932 | access·all·possible·values.·The·values·are·returned·in·a·list.·The·order·of·the |
| 1933 | elements·corresponds·to·the·order·that·the·configuration·files·were·specified·at | 1933 | elements·corresponds·to·the·order·that·the·configuration·files·were·specified·at |
| 1934 | startup.</p><p>If·configuration·elements·(key-value·tuples)·are·to·be·returned·as·result | 1934 | startup.</p><p>If·configuration·elements·(key-value·tuples)·are·to·be·returned·as·result |
| 1935 | instead·of·values,·use·option·<code·class="inline">element</code>.·The·returned·elements·are·then·on·the | 1935 | instead·of·values,·use·option·<code·class="inline">element</code>.·The·returned·elements·are·then·on·the |
| 1936 | form·<code·class="inline">{Required,Value}</code>.</p><p>See·also·<a·href="#get_config/1"><code·class="inline">ct:get_config/1</code></a>, | 1936 | form·<code·class="inline">{Required,Value}</code>.</p><p>See·also·<a·href="#get_config/1"><code·class="inline">ct:get_config/1</code></a>, |
| 1937 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#require/1"><code·class="inline">ct:require/1</code></a>, | 1937 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#require/1"><code·class="inline">ct:require/1</code></a>, |
| 1938 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p> | 1938 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p> |
| Offset 1962, 15 lines modified | Offset 1962, 15 lines modified | ||
| 1962 | ······<div·class="specs"> | 1962 | ······<div·class="specs"> |
| 1963 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_event_mgr_ref()·->·EvMgrRef·when·EvMgrRef·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>().</pre> | 1963 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_event_mgr_ref()·->·EvMgrRef·when·EvMgrRef·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>().</pre> |
| 1964 | ······</div> | 1964 | ······</div> |
| 1965 | <p>Gets·a·reference·to·the·<code·class="inline">Common·Test</code>·event·manager.·The·reference·can·be·used | 1965 | <p>Gets·a·reference·to·the·<code·class="inline">Common·Test</code>·event·manager.·The·reference·can·be·used |
| 1966 | to,·for·example,·add·a·user-specific·event·handler·while·tests·are·running.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id=" | 1966 | to,·for·example,·add·a·user-specific·event·handler·while·tests·are·running.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="8061483836-1">(</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_event_mgr_ref</span><span·class="p"·data-group-id="8061483836-2">(</span><span·class="p"·data-group-id="8061483836-2">)</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·237,·SHA:·f1d8be2489d22c003c25a1e5ad43267c9894e42155c6d7c5b0bb764f278ff31a·...·]-1">)</span></code></pre> |
| 1967 | ··</section> | 1967 | ··</section> |
| 1968 | </section> | 1968 | </section> |
| 1969 | <section·class="detail"·id="get_progname/0"> | 1969 | <section·class="detail"·id="get_progname/0"> |
| 1970 | ··<div·class="detail-header"> | 1970 | ··<div·class="detail-header"> |
| 1971 | ····<a·href="#get_progname/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1971 | ····<a·href="#get_progname/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1972 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1972 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2235, 15 lines modified | Offset 2235, 15 lines modified | ||
| 2235 | ·····················KeyOrFile·::·{key,·Key}·|·{file,·KeyFile}, | 2235 | ·····················KeyOrFile·::·{key,·Key}·|·{file,·KeyFile}, |
| 2236 | ·····················Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 2236 | ·····················Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 2237 | ·····················KeyFile·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 2237 | ·····················KeyFile·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 2238 | ·····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 2238 | ·····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 2239 | ······</div> | 2239 | ······</div> |
| 2240 | <p>Installs·configuration·files·and·event·handlers.</p><p>Run·this·function·once·before·the·first·test.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">install</span><span·class="p"·data-group-id=" | 2240 | <p>Installs·configuration·files·and·event·handlers.</p><p>Run·this·function·once·before·the·first·test.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">install</span><span·class="p"·data-group-id="4035880009-1">(</span><span·class="p"·data-group-id="4035880009-2">[</span><span·class="p"·data-group-id="4035880009-3">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="p"·data-group-id="4035880009-4">[</span><span·class="s">"[·...·truncated·by·diffoscope;·len:·303,·SHA:·9041155e422907cd9a3682d4e96a855903140af20eabdfb42f95727b2027247e·...·]-1">)</span></code></pre><p>This·function·is·automatically·run·by·program·<code·class="inline">ct_run</code>.</p> |
| 2241 | ··</section> | 2241 | ··</section> |
| 2242 | </section> | 2242 | </section> |
| 2243 | <section·class="detail"·id="listenv/1"> | 2243 | <section·class="detail"·id="listenv/1"> |
| 2244 | ··<div·class="detail-header"> | 2244 | ··<div·class="detail-header"> |
| 2245 | ····<a·href="#listenv/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2245 | ····<a·href="#listenv/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 2246 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 2246 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3026, 15 lines modified | Offset 3026, 15 lines modified | ||
| 3026 | ·····················SubKey·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(), | 3026 | ·····················SubKey·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(), |
| 3027 | ·····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3027 | ·····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3028 | ······</div> | 3028 | ······</div> |
| 3029 | <p>Checks·if·the·required·configuration·is·available.·Arbitrarily·deep·tuples·can | 3029 | <p>Checks·if·the·required·configuration·is·available.·Arbitrarily·deep·tuples·can |
| 3030 | be·specified·as·<code·class="inline">Required</code>.·Only·the·last·element·of·the·tuple·can·be·a·list·of | 3030 | be·specified·as·<code·class="inline">Required</code>.·Only·the·last·element·of·the·tuple·can·be·a·list·of |
| 3031 | <code·class="inline">SubKey</code>s.</p><p><em>Example·1.</em>·Require·the·variable·<code·class="inline">myvar</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id=" | 3031 | <code·class="inline">SubKey</code>s.</p><p><em>Example·1.</em>·Require·the·variable·<code·class="inline">myvar</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id="1632987505-1">(</span><span·class="ss">myvar</span><span·class="p"·data-group-id="1632987505-1">)</span><span·class="p">.</span></code></pre><p>In·this·case·the·configuration·file·must·at·least·contain:</p><pre><code·class="makeup·erlang"·translate="no"><s[·...·truncated·by·diffoscope;·len:·3488,·SHA:·c7cadb4534b0b176bf680c07f943d289966b3bc6109a130c9bc41536d0d37632·...·]-1">}</span><span·class="p">.</span></code></pre><p>See·also·<a·href="#get_config/1"><code·class="inline">ct:get_config/1</code></a>, |
| 3032 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#get_config/3"><code·class="inline">ct:get_config/3</code></a>, | 3032 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#get_config/3"><code·class="inline">ct:get_config/3</code></a>, |
| 3033 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p> | 3033 | <a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p> |
| 3034 | ··</section> | 3034 | ··</section> |
| 3035 | </section> | 3035 | </section> |
| 3036 | <section·class="detail"·id="require/2"> | 3036 | <section·class="detail"·id="require/2"> |
| 3037 | ··<div·class="detail-header"> | 3037 | ··<div·class="detail-header"> |
| Offset 3066, 16 lines modified | Offset 3066, 16 lines modified | ||
| 3066 | <p>Checks·if·the·required·configuration·is·available·and·gives·it·a·name.·The | 3066 | <p>Checks·if·the·required·configuration·is·available·and·gives·it·a·name.·The |
| 3067 | semantics·for·<code·class="inline">Required</code>·is·the·same·as·in·<a·href="#require/1"><code·class="inline">ct:require/1</code></a>·except | 3067 | semantics·for·<code·class="inline">Required</code>·is·the·same·as·in·<a·href="#require/1"><code·class="inline">ct:require/1</code></a>·except |
| 3068 | that·a·list·of·<code·class="inline">SubKey</code>s·cannot·be·specified.</p><p>If·the·requested·data·is·available,·the·subentry·is·associated·with·<code·class="inline">Name</code>·so | 3068 | that·a·list·of·<code·class="inline">SubKey</code>s·cannot·be·specified.</p><p>If·the·requested·data·is·available,·the·subentry·is·associated·with·<code·class="inline">Name</code>·so |
| 3069 | that·the·value·of·the·element·can·be·read·with | 3069 | that·the·value·of·the·element·can·be·read·with |
| 3070 | <a·href="#get_config/1"><code·class="inline">ct:get_config/1,2</code></a>·provided·<code·class="inline">Name</code>·is·used·instead·of·the | 3070 | <a·href="#get_config/1"><code·class="inline">ct:get_config/1,2</code></a>·provided·<code·class="inline">Name</code>·is·used·instead·of·the |
| 3071 | whole·<code·class="inline">Required</code>·term.</p><p><em>Example:</em></p><p>Require·one·node·with·a·Telnet·connection·and·an·FTP·connection.·Name·the·node | 3071 | whole·<code·class="inline">Required</code>·term.</p><p><em>Example:</em></p><p>Require·one·node·with·a·Telnet·connection·and·an·FTP·connection.·Name·the·node |
| 3072 | <code·class="inline">a</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id="5216494222-1">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="p"·data-group-id="5216494222-2">{</span><span·class="ss">machine</span><span·class="p">,</span><span·class="nb">node</span><span·class="p"·data-group-id="5216494222-2">}</span><span·class="p"·data-group-id="5216494222-1">)</span><span·class="p">.</span></code></pre><p>All·references·to·this·node·can·then·use·the·node·name.·For·example,·a·file·over | ||
| 3073 | 3072 | <code·class="inline">a</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</[·...·truncated·by·diffoscope;·len:·469,·SHA:·da92ebee6e8bb31e82fb28492e7feb476ce5dee95e8a8c591634a4245e6fec17·...·] | |
| 3073 | FTP·is·fetched·like·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">ftp_get</span><span·class="p"·data-group-id="0132993358-1">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="n">RemoteFile</span><span·class="p">,</span><span·class="n">LocalFile</span><span·class="p"·data-group-id="0132993358-1">)</span><span·class="p">.</span></code></pre><p>For·this·to·work,·the·configuration·file·must·at·least·contain:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0065824349-1">{</span><span·class="ss">machine</span><span·class="p">,</span><span·class="p"·data-group-id="0065824349-2">[</span><span·class="p"·data-group-id="0065824349-3">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="p"·data-group-id="0065824349-4">[</span><span·class="p"·data-group-id="0065824349-5">{</span><span·class="ss">telnet</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="0065824349-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="0065824349-6">{</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="0065824349-6">}</span><span·class="p"·data-group-id="0065824349-4">]</span><span·class="p"·data-group-id="0065824349-3">}</span><span·class="p"·data-group-id="0065824349-2">]</span><span·class="p"·data-group-id="0065824349-1">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·behavior·of·this·function·changed·radically·in·<code·class="inline">Common·Test</code>·1.6.2.·To | ||
| 3074 | keep·some·backwards·compatibility,·it·is·still·possible·to·do: | 3074 | keep·some·backwards·compatibility,·it·is·still·possible·to·do: |
| 3075 | <code·class="inline">ct:require(a,{node,[telnet,ftp]}).</code>·This·associates·the·name·<code·class="inline">a</code>·with·the | 3075 | <code·class="inline">ct:require(a,{node,[telnet,ftp]}).</code>·This·associates·the·name·<code·class="inline">a</code>·with·the |
| 3076 | top-level·<code·class="inline">node</code>·entry.·For·this·to·work,·the·configuration·file·must·at·least | 3076 | top-level·<code·class="inline">node</code>·entry.·For·this·to·work,·the·configuration·file·must·at·least |
| 3077 | contain:·<code·class="inline">{node,[{telnet,IpAddr},{ftp,IpAddr}]}.</code></p></section><p>See·also·<a·href="#get_config/1"><code·class="inline">ct:get_config/1</code></a>, | 3077 | contain:·<code·class="inline">{node,[{telnet,IpAddr},{ftp,IpAddr}]}.</code></p></section><p>See·also·<a·href="#get_config/1"><code·class="inline">ct:get_config/1</code></a>, |
| 3078 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#get_config/3"><code·class="inline">ct:get_config/3</code></a>, | 3078 | <a·href="#get_config/2"><code·class="inline">ct:get_config/2</code></a>,·<a·href="#get_config/3"><code·class="inline">ct:get_config/3</code></a>, |
| 3079 | <a·href="#require/1"><code·class="inline">ct:require/1</code></a>.</p> | 3079 | <a·href="#require/1"><code·class="inline">ct:require/1</code></a>.</p> |
| 3080 | ··</section> | 3080 | ··</section> |
| Offset 3426, 20 lines modified | Offset 3426, 20 lines modified | ||
| 3426 | ······</div> | 3426 | ······</div> |
| 3427 | <p>Starts·<code·class="inline">Common·Test</code>·in·interactive·mode.</p><p>From·this·mode,·all·test·case·support·functions·can·be·executed·directly·from | 3427 | <p>Starts·<code·class="inline">Common·Test</code>·in·interactive·mode.</p><p>From·this·mode,·all·test·case·support·functions·can·be·executed·directly·from |
| 3428 | the·Erlang·shell.·The·interactive·mode·can·also·be·started·from·the·OS·command | 3428 | the·Erlang·shell.·The·interactive·mode·can·also·be·started·from·the·OS·command |
| 3429 | line·with·<code·class="inline">ct_run·-shell·[-config·File...]</code>.</p><p>If·any·functions·(for·example,·Telnet·or·FTP)·using·"required·configuration | 3429 | line·with·<code·class="inline">ct_run·-shell·[-config·File...]</code>.</p><p>If·any·functions·(for·example,·Telnet·or·FTP)·using·"required·configuration |
| 3430 | data"·are·to·be·called·from·the·Erlang·shell,·configuration·data·must·first·be | 3430 | data"·are·to·be·called·from·the·Erlang·shell,·configuration·data·must·first·be |
| 3431 | required·with·<a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id=" | 3431 | required·with·<a·href="#require/2"><code·class="inline">ct:require/2</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">require</span><span·class="p"·data-group-id="6719819099-1">(</span><span·class="ss">unix_telnet</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">unix</span><span·class="p"·data-group-id="6719819099-1">)</span><span·class="p">.</span><span·class="w"> |
| 3432 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 3432 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 3433 | >·</span><span·class="nc">ct_telnet</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 3433 | >·</span><span·class="nc">ct_telnet</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="6719819099-2">(</span><span·class="ss">unix_telnet</span><span·class="p"·data-group-id="6719819099-2">)</span><span·class="p">.</span><span·class="w"> |
| 3434 | </span><span·class="p"·data-group-id=" | 3434 | </span><span·class="p"·data-group-id="6719819099-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.105</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="6719819099-3">}</span><span·class="gp·unselectable"> |
| 3435 | >·</span><span·class="nc">ct_telnet</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id=" | 3435 | >·</span><span·class="nc">ct_telnet</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="6719819099-4">(</span><span·class="ss">unix_telnet</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"ls·."</span><span·class="p"·data-group-id="6719819099-4">)</span><span·class="p">.</span><span·class="w"> |
| 3436 | </span><span·class="p"·data-group-id=" | 3436 | </span><span·class="p"·data-group-id="6719819099-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="6719819099-6">[</span><span·class="s">"ls"</span><span·class="p">,</span><span·class="s">"file1··..."</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·165,·SHA:·1b981685e6b301a24ffe9771d2441703e5263654a727e32bfebf0a44e71c4927·...·]-5">}</span></code></pre> |
| 3437 | ··</section> | 3437 | ··</section> |
| 3438 | </section> | 3438 | </section> |
| 3439 | <section·class="detail"·id="step/3"> | 3439 | <section·class="detail"·id="step/3"> |
| 3440 | ··<div·class="detail-header"> | 3440 | ··<div·class="detail-header"> |
| 3441 | ····<a·href="#step/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3441 | ····<a·href="#step/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3442 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3442 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3709, 15 lines modified | Offset 3709, 15 lines modified | ||
| 3709 | ······<p·class="built-using"> | 3709 | ······<p·class="built-using"> |
| 3710 | ········Built·using | 3710 | ········Built·using |
| 3711 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3711 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3712 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3712 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3713 | ······</p> | 3713 | ······</p> |
| 3714 | <p>Copyright·©·1996-202 | 3714 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3715 | ····</footer> | 3715 | ····</footer> |
| 3716 | ··</div> | 3716 | ··</div> |
| 3717 | </main> | 3717 | </main> |
| 3718 | </div> | 3718 | </div> |
| Max diff block lines reached; 40/41199 bytes (0.10%) of diff not shown. | |||
| Offset 307, 15 lines modified | Offset 307, 15 lines modified | ||
| 307 | ······<p·class="built-using"> | 307 | ······<p·class="built-using"> |
| 308 | ········Built·using | 308 | ········Built·using |
| 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 311 | ······</p> | 311 | ······</p> |
| 312 | <p>Copyright·©·1996-202 | 312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 313 | ····</footer> | 313 | ····</footer> |
| 314 | ··</div> | 314 | ··</div> |
| 315 | </main> | 315 | </main> |
| 316 | </div> | 316 | </div> |
| 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 318 | ··<script> | 318 | ··<script> |
| 319 | ··let·initialized·=·false; | 319 | ··let·initialized·=·false; |
| Offset 567, 18 lines modified | Offset 567, 18 lines modified | ||
| 567 | ·················LocalFile·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename/0">file:filename</a>(), | 567 | ·················LocalFile·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename/0">file:filename</a>(), |
| 568 | ·················RemoteFile·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename/0">file:filename</a>(), | 568 | ·················RemoteFile·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename/0">file:filename</a>(), |
| 569 | ·················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 569 | ·················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 570 | ······</div> | 570 | ······</div> |
| 571 | <p>Opens·an·FTP·connection·and·sends·a·file·to·the·remote·host.</p><p><code·class="inline">LocalFile</code>·and·<code·class="inline">RemoteFile</code>·must·be·absolute·paths.</p><p>If·the·target·host·is·a·"special"·node,·the·FTP·address·must·be·specified·in·the | 571 | <p>Opens·an·FTP·connection·and·sends·a·file·to·the·remote·host.</p><p><code·class="inline">LocalFile</code>·and·<code·class="inline">RemoteFile</code>·must·be·absolute·paths.</p><p>If·the·target·host·is·a·"special"·node,·the·FTP·address·must·be·specified·in·the |
| 572 | configuration·file·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7720097393-1">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="p"·data-group-id="7720097393-2">[</span><span·class="p"·data-group-id="7720097393-3">{</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="7720097393-3">}</span><span·class="p"·data-group-id="7720097393-2">]</span><span·class="p"·data-group-id="7720097393-1">}</span><span·class="p">.</span></code></pre><p>If·the·target·host·is·something·else,·for·example,·a·UNIX·host,·the | ||
| 573 | configuration·file· | 572 | configuration·file·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4419479821-1">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="p"·data-group-id="4419479821-2">[</span><span·class="p"·data-group-id="4419[·...·truncated·by·diffoscope;·len:·364,·SHA:·c8c12da8b7cd2dd849b86ebbb42e8d28c007531ed03486247d2c16c3bce0d8cd·...·] |
| 573 | configuration·file·must·also·include·the·username·and·password·(both·strings):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6383665983-1">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="p"·data-group-id="6383665983-2">[</span><span·class="p"·data-group-id="6383665983-3">{</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="n">IpAddr</span><span·class="p"·data-group-id="6383665983-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 574 | ·······</span><span·class="p"·data-group-id="38 | 574 | ·······</span><span·class="p"·data-group-id="6383665983-4">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="n">Username</span><span·class="p"·data-group-id="6383665983-4">}</span><span·class="p">,</span><span·class="w"> |
| 575 | ·······</span><span·class="p"·data-group-id="38 | 575 | ·······</span><span·class="p"·data-group-id="6383665983-5">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="n">Password</span><span·class="p"·data-group-id="6383665983-5">}</span><span·class="p"·data-group-id="6383665983-2">]</span><span·class="p"·data-group-id="6383665983-1">}</span><span·class="p">.</span></code></pre><p>See·also·<a·href="ct.html#require/2"><code·class="inline">ct:require/2</code></a>.</p> |
| 576 | ··</section> | 576 | ··</section> |
| 577 | </section> | 577 | </section> |
| 578 | <section·class="detail"·id="recv/2"> | 578 | <section·class="detail"·id="recv/2"> |
| 579 | ··<div·class="detail-header"> | 579 | ··<div·class="detail-header"> |
| 580 | ····<a·href="#recv/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 580 | ····<a·href="#recv/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 581 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 581 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 742, 15 lines modified | Offset 742, 15 lines modified | ||
| 742 | ······<p·class="built-using"> | 742 | ······<p·class="built-using"> |
| 743 | ········Built·using | 743 | ········Built·using |
| 744 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 744 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 745 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 745 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 746 | ······</p> | 746 | ······</p> |
| 747 | <p>Copyright·©·1996-202 | 747 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 748 | ····</footer> | 748 | ····</footer> |
| 749 | ··</div> | 749 | ··</div> |
| 750 | </main> | 750 | </main> |
| 751 | </div> | 751 | </div> |
| 752 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 752 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 753 | ··<script> | 753 | ··<script> |
| 754 | ··let·initialized·=·false; | 754 | ··let·initialized·=·false; |
| Offset 1359, 15 lines modified | Offset 1359, 15 lines modified | ||
| 1359 | ······<p·class="built-using"> | 1359 | ······<p·class="built-using"> |
| 1360 | ········Built·using | 1360 | ········Built·using |
| 1361 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1361 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1362 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1362 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1363 | ······</p> | 1363 | ······</p> |
| 1364 | <p>Copyright·©·1996-202 | 1364 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1365 | ····</footer> | 1365 | ····</footer> |
| 1366 | ··</div> | 1366 | ··</div> |
| 1367 | </main> | 1367 | </main> |
| 1368 | </div> | 1368 | </div> |
| 1369 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1369 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1370 | ··<script> | 1370 | ··<script> |
| 1371 | ··let·initialized·=·false; | 1371 | ··let·initialized·=·false; |
| Offset 249, 20 lines modified | Offset 249, 20 lines modified | ||
| 249 | </h3> | 249 | </h3> |
| 250 | <p>In·a·CTH,·the·behavior·can·be·hooked·in·before·the·following·functions:</p><ul><li><a·href="ct_suite.html#c:init_per_suite/1"><code·class="inline">init_per_suite</code></a></li><li><a·href="ct_suite.html#c:init_per_group/2"><code·class="inline">init_per_group</code></a></li><li><a·href="ct_suite.html#c:init_per_testcase/2"><code·class="inline">init_per_testcase</code></a></li><li><a·href="ct_suite.html#c:end_per_testcase/2"><code·class="inline">end_per_testcase</code></a></li><li><a·href="ct_suite.html#c:end_per_group/2"><code·class="inline">end_per_group</code></a></li><li><a·href="ct_suite.html#c:end_per_suite/1"><code·class="inline">end_per_suite</code></a></li></ul><p>This·is·done·in·the·CTH·functions·called·<code·class="inline">pre_<name·of·function></code>.·These | 250 | <p>In·a·CTH,·the·behavior·can·be·hooked·in·before·the·following·functions:</p><ul><li><a·href="ct_suite.html#c:init_per_suite/1"><code·class="inline">init_per_suite</code></a></li><li><a·href="ct_suite.html#c:init_per_group/2"><code·class="inline">init_per_group</code></a></li><li><a·href="ct_suite.html#c:init_per_testcase/2"><code·class="inline">init_per_testcase</code></a></li><li><a·href="ct_suite.html#c:end_per_testcase/2"><code·class="inline">end_per_testcase</code></a></li><li><a·href="ct_suite.html#c:end_per_group/2"><code·class="inline">end_per_group</code></a></li><li><a·href="ct_suite.html#c:end_per_suite/1"><code·class="inline">end_per_suite</code></a></li></ul><p>This·is·done·in·the·CTH·functions·called·<code·class="inline">pre_<name·of·function></code>.·These |
| 251 | functions·take·the·arguments·<code·class="inline">SuiteName</code>,·<code·class="inline">Name</code>·(group·or·test·case·name,·if | 251 | functions·take·the·arguments·<code·class="inline">SuiteName</code>,·<code·class="inline">Name</code>·(group·or·test·case·name,·if |
| 252 | applicable),·<code·class="inline">Config</code>,·and·<code·class="inline">CTHState</code>.·The·return·value·of·the·CTH·function·is | 252 | applicable),·<code·class="inline">Config</code>,·and·<code·class="inline">CTHState</code>.·The·return·value·of·the·CTH·function·is |
| 253 | always·a·combination·of·a·result·for·the·suite/group/test·and·an·updated | 253 | always·a·combination·of·a·result·for·the·suite/group/test·and·an·updated |
| 254 | <code·class="inline">CTHState</code>.</p><p>To·let·the·test·suite·continue·on·executing,·return·the·configuration·list·that | 254 | <code·class="inline">CTHState</code>.</p><p>To·let·the·test·suite·continue·on·executing,·return·the·configuration·list·that |
| 255 | you·want·the·test·to·use·as·the·result.</p><p>All·pre·hooks,·except·<code·class="inline">pre_end_per_testcase/4</code>,·can·skip·or·fail·the·test·by | 255 | you·want·the·test·to·use·as·the·result.</p><p>All·pre·hooks,·except·<code·class="inline">pre_end_per_testcase/4</code>,·can·skip·or·fail·the·test·by |
| 256 | returning·a·tuple·with·<code·class="inline">skip</code>·or·<code·class="inline">fail</code>,·and·a·reason·as·the·result.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pre_init_per_suite</span><span·class="p"·data-group-id=" | 256 | returning·a·tuple·with·<code·class="inline">skip</code>·or·<code·class="inline">fail</code>,·and·a·reason·as·the·result.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">pre_init_per_suite</span><span·class="p"·data-group-id="8199477833-1">(</span><span·class="n">SuiteName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CTHState</span><span·class="p"·data-group-id="8199477833-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 257 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 257 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="8199477833-2">(</span><span·class="p"·data-group-id="8199477833-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 258 | ····</span><span·class="p"·data-group-id=" | 258 | ····</span><span·class="p"·data-group-id="8199477833-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="p">_</span><span·class="n">Reason</span><span·class="p"·data-group-id="8199477833-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 259 | ······</span><span·class="p"·data-group-id=" | 259 | ······</span><span·class="p"·data-group-id="8199477833-4">{</span><span·class="p"·data-group-id="8199477833-5">{</span><span·class="ss">fail</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Could·not·connect·to·DB"</span><span·class="p"·data-group-id="8199477833-5">}<[·...·truncated·by·diffoscope;·len:·126,·SHA:·86a615c4b2c385ca6ba316c485d4d679d53c5e34f64632f1cd5affe80d3eea5c·...·]-4">}</span><span·class="p">;</span><span·class="w"> |
| 260 | ····</span><span·class="p"·data-group-id=" | 260 | ····</span><span·class="p"·data-group-id="8199477833-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handle</span><span·class="p"·data-group-id="8199477833-6">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 261 | ······</span><span·class="p"·data-group-id=" | 261 | ······</span><span·class="p"·data-group-id="8199477833-7">{</span><span·class="p"·data-group-id="8199477833-8">[</span><span·class="p"·data-group-id="8199477833-9">{</span><span·class="ss">db_handle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handle</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·649,·SHA:·3a1df1a2b2a09e92d75072ed89c45935f66b8c8d51fb59a27ad9b1466ce4dd98·...·]-7">}</span><span·class="w"> |
| 262 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·you·use·multiple·CTHs,·the·first·part·of·the·return·tuple·is·used·as·input | 262 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·you·use·multiple·CTHs,·the·first·part·of·the·return·tuple·is·used·as·input |
| 263 | for·the·next·CTH.·So·in·the·previous·example·the·next·CTH·can·get | 263 | for·the·next·CTH.·So·in·the·previous·example·the·next·CTH·can·get |
| 264 | <code·class="inline">{fail,Reason}</code>·as·the·second·parameter.·If·you·have·many·CTHs·interacting,·do | 264 | <code·class="inline">{fail,Reason}</code>·as·the·second·parameter.·If·you·have·many·CTHs·interacting,·do |
| 265 | not·let·each·CTH·return·<code·class="inline">fail</code>·or·<code·class="inline">skip</code>.·Instead,·return·that·an·action·is·to | 265 | not·let·each·CTH·return·<code·class="inline">fail</code>·or·<code·class="inline">skip</code>.·Instead,·return·that·an·action·is·to |
| 266 | be·taken·through·the·<code·class="inline">Config</code>·list·and·implement·a·CTH·that,·at·the·end,·takes | 266 | be·taken·through·the·<code·class="inline">Config</code>·list·and·implement·a·CTH·that,·at·the·end,·takes |
| 267 | the·correct·action.</p></section><p><a·href=""·id="post"></a></p><h3·id="post-hooks"·class="section-heading"> | 267 | the·correct·action.</p></section><p><a·href=""·id="post"></a></p><h3·id="post-hooks"·class="section-heading"> |
| 268 | ··<a·href="#post-hooks"·class="hover-link"> | 268 | ··<a·href="#post-hooks"·class="hover-link"> |
| Offset 276, 26 lines modified | Offset 276, 26 lines modified | ||
| 276 | same·<code·class="inline">Config</code>·as·the·testcase·is·called·with.·<code·class="inline">Return</code>·is·the·value·returned·by | 276 | same·<code·class="inline">Config</code>·as·the·testcase·is·called·with.·<code·class="inline">Return</code>·is·the·value·returned·by |
| 277 | the·testcase.·If·the·testcase·fails·by·crashing,·<code·class="inline">Return</code>·is | 277 | the·testcase.·If·the·testcase·fails·by·crashing,·<code·class="inline">Return</code>·is |
| 278 | <code·class="inline">{'EXIT',{{Error,Reason},Stacktrace}}</code>.</p><p>The·return·value·of·the·CTH·function·is·always·a·combination·of·a·result·for·the | 278 | <code·class="inline">{'EXIT',{{Error,Reason},Stacktrace}}</code>.</p><p>The·return·value·of·the·CTH·function·is·always·a·combination·of·a·result·for·the |
| 279 | suite/group/test·and·an·updated·<code·class="inline">CTHState</code>.·If·you·do·not·want·the·callback·to | 279 | suite/group/test·and·an·updated·<code·class="inline">CTHState</code>.·If·you·do·not·want·the·callback·to |
| 280 | affect·the·outcome·of·the·test,·return·the·<code·class="inline">Return</code>·data·as·it·is·given·to·the | 280 | affect·the·outcome·of·the·test,·return·the·<code·class="inline">Return</code>·data·as·it·is·given·to·the |
| 281 | CTH.·You·can·also·modify·the·test·result.·By·returning·the·<code·class="inline">Config</code>·list·with | 281 | CTH.·You·can·also·modify·the·test·result.·By·returning·the·<code·class="inline">Config</code>·list·with |
| 282 | element·<code·class="inline">tc_status</code>·removed,·you·can·recover·from·a·test·failure.·As·in·all·the | 282 | element·<code·class="inline">tc_status</code>·removed,·you·can·recover·from·a·test·failure.·As·in·all·the |
| 283 | pre·hooks,·it·is·also·possible·to·fail/skip·the·test·case·in·the·post·hook.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id="5 | 283 | pre·hooks,·it·is·also·possible·to·fail/skip·the·test·case·in·the·post·hook.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id="5024765090-1">(</span><span·class="p">_</span><span·class="n">Suite</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">TC</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·cla[·...·truncated·by·diffoscope;·len:·505,·SHA:·a1de75a5347e6995b083a48c5e84219c4b47c48b8249d538937da66eb2eabebe·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 284 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">check_consistency</span><span·class="p"·data-group-id="5 | 284 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">check_consistency</span><span·class="p"·data-group-id="5024765090-4">(</span><span·class="p"·data-group-id="5024765090-4">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 285 | ····</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 285 | ····</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 286 | ······</span><span·class="c1">%%·DB·is·good,·pass·the·test.</span><span·class="w"> | 286 | ······</span><span·class="c1">%%·DB·is·good,·pass·the·test.</span><span·class="w"> |
| 287 | ······</span><span·class="p"·data-group-id="5 | 287 | ······</span><span·class="p"·data-group-id="5024765090-5">{</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="5024765090-6">(</span><span·class="ss">tc_status</span><span·class="p">,</span><span·class="w">·</span><span·class="n[·...·truncated·by·diffoscope;·len:·188,·SHA:·d1d6e919fc5bdb3396dd11cfdcce2d59cd82807ab2659e409af6678f30fbf8ae·...·]-5">}</span><span·class="p">;</span><span·class="w"> |
| 288 | ····</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 288 | ····</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 289 | ······</span><span·class="c1">%%·DB·is·not·good,·mark·as·skipped·instead·of·failing</span><span·class="w"> | 289 | ······</span><span·class="c1">%%·DB·is·not·good,·mark·as·skipped·instead·of·failing</span><span·class="w"> |
| 290 | ······</span><span·class="p"·data-group-id="5 | 290 | ······</span><span·class="p"·data-group-id="5024765090-7">{</span><span·class="p"·data-group-id="5024765090-8">{</span><span·class="ss">skip</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"DB·is·inconsistent!"</span><span·class="p"·data-group-id="5024765090-8">}</span[·...·truncated·by·diffoscope;·len:·121,·SHA:·ccc6c820b5acf8a9a312f19fd8700ee785f2923a31330465a56f9df5a2a3430e·...·]-7">}</span><span·class="w"> |
| 291 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 291 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 292 | </span><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id="5 | 292 | </span><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id="5024765090-9">(</span><span·class="p">_</span><span·class="n">Suite</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">TC</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·cla[·...·truncated·by·diffoscope;·len:·188,·SHA:·683a0f9a03aeae3819965d03f7db45aec60aa93f0b915b2c4504155ab8a392cb·...·]-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 293 | ··</span><span·class="c1">%%·Do·nothing·if·tc·does·not·crash.</span><span·class="w"> | 293 | ··</span><span·class="c1">%%·Do·nothing·if·tc·does·not·crash.</span><span·class="w"> |
| 294 | ··</span><span·class="p"·data-group-id="5 | 294 | ··</span><span·class="p"·data-group-id="5024765090-10">{</span><span·class="n">Return</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CTHState</span><span·class="p"·data-group-id="5024765090-10">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Do·recover·from·a·testcase·failure·using·CTHs·only·a·last·resort.·If·used |
| 295 | wrongly,·it·can·be·very·difficult·to·determine·which·tests·that·pass·or·fail | 295 | wrongly,·it·can·be·very·difficult·to·determine·which·tests·that·pass·or·fail |
| 296 | in·a·test·run.</p></section><h3·id="skip-and-fail-hooks"·class="section-heading"> | 296 | in·a·test·run.</p></section><h3·id="skip-and-fail-hooks"·class="section-heading"> |
| 297 | ··<a·href="#skip-and-fail-hooks"·class="hover-link"> | 297 | ··<a·href="#skip-and-fail-hooks"·class="hover-link"> |
| 298 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 298 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 299 | ··</a> | 299 | ··</a> |
| 300 | ··<span·class="text">Skip·and·Fail·Hooks</span> | 300 | ··<span·class="text">Skip·and·Fail·Hooks</span> |
| 301 | </h3> | 301 | </h3> |
| Offset 336, 88 lines modified | Offset 336, 88 lines modified | ||
| 336 | <p>The·following·CTH·logs·information·about·a·test·run·into·a·format·parseable·by | 336 | <p>The·following·CTH·logs·information·about·a·test·run·into·a·format·parseable·by |
| 337 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>·(in·Kernel):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%·Common·Test·Example·Common·Test·Hook·module.</span><span·class="w"> | 337 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>·(in·Kernel):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%%·Common·Test·Example·Common·Test·Hook·module.</span><span·class="w"> |
| 338 | </span><span·class="c1">%%%</span><span·class="w"> | 338 | </span><span·class="c1">%%%</span><span·class="w"> |
| 339 | </span><span·class="c1">%%%·To·use·this·hook,·on·the·command·line:</span><span·class="w"> | 339 | </span><span·class="c1">%%%·To·use·this·hook,·on·the·command·line:</span><span·class="w"> |
| 340 | </span><span·class="c1">%%%·····ct_run·-suite·example_SUITE·-pa·.·-ct_hooks·example_cth</span><span·class="w"> | 340 | </span><span·class="c1">%%%·····ct_run·-suite·example_SUITE·-pa·.·-ct_hooks·example_cth</span><span·class="w"> |
| 341 | </span><span·class="c1">%%%</span><span·class="w"> | 341 | </span><span·class="c1">%%%</span><span·class="w"> |
| 342 | </span><span·class="c1">%%%·Note·`-pa·.`:·the·hook·beam·file·must·be·in·the·code·path·when·installing.</span><span·class="w"> | 342 | </span><span·class="c1">%%%·Note·`-pa·.`:·the·hook·beam·file·must·be·in·the·code·path·when·installing.</span><span·class="w"> |
| 343 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 343 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4154685489-1">(</span><span·class="ss">example_cth</span><span·class="p"·data-group-id="4154685489-1">)</span><span·class="p">.</span><span·class="w"> |
| 344 | </span><span·class="c1">%%·Mandatory·Callbacks</span><span·class="w"> | 344 | </span><span·class="c1">%%·Mandatory·Callbacks</span><span·class="w"> |
| 345 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 345 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-2">(</span><span·class="p"·data-group-id="4154685489-3">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="4154685489-3">]</span><span·class="p"·data-group-id="4154685489-2">)</span><span·class="p">.</span><span·class="w"> |
| 346 | </span><span·class="c1">%%·Optional·Callbacks</span><span·class="w"> | 346 | </span><span·class="c1">%%·Optional·Callbacks</span><span·class="w"> |
| 347 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 347 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-4">(</span><span·class="p"·data-group-id="4154685489-5">[</span><span·class="ss">id</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="4154685489-5">]</span><span·class="p"·data-group-id="4154685489-4">)</span><span·class="p">.</span><span·class="w"> |
| 348 | </span><span·class="w"> | 348 | </span><span·class="w"> |
| 349 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 349 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-6">(</span><span·class="p"·data-group-id="4154685489-7">[</span><span·class="ss">pre_init_per_suite</span><span·class="p">/</span><span·class="mi">3</span><span·class="p"·data-group-id="4154685489-7">]</span><span·class="p"·data-group-id="415468[·...·truncated·by·diffoscope;·len:·4,·SHA:·c363831cbfee684fa8a7d96b58cf42f5174ea935bc3b751fff18c237d34d0366·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 350 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 350 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-8">(</span><span·class="p"·data-group-id="4154685489-9">[</span><span·class="ss">post_end_per_suite</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="4154685489-9">]</span><span·class="p"·data-group-id="415468[·...·truncated·by·diffoscope;·len:·4,·SHA:·c363831cbfee684fa8a7d96b58cf42f5174ea935bc3b751fff18c237d34d0366·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 351 | </span><span·class="w"> | 351 | </span><span·class="w"> |
| 352 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 352 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-10">(</span><span·class="p"·data-group-id="4154685489-11">[</span><span·class="ss">pre_init_per_testcase</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="4154685489-11">]</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·c44ed0fc8ca011ef47c81c5fa0aeb892dffc8eef81137e21bfe8c7bbb8d4f0cd·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 353 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 353 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-12">(</span><span·class="p"·data-group-id="4154685489-13">[</span><span·class="ss">post_end_per_testcase</span><span·class="p">/</span><span·class="mi">5</span><span·class="p"·data-group-id="4154685489-13">]</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·c44ed0fc8ca011ef47c81c5fa0aeb892dffc8eef81137e21bfe8c7bbb8d4f0cd·...·]-12">)</span><span·class="p">.</span><span·class="w"> |
| 354 | </span><span·class="w"> | 354 | </span><span·class="w"> |
| 355 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 355 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-14">(</span><span·class="p"·data-group-id="4154685489-15">[</span><span·class="ss">on_tc_skip</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="4154685489-15">]</span><span·class="p"·data-group-id="4154685489-14">)</span><span·class="p">.</span><span·class="w"> |
| 356 | </span><span·class="w"> | 356 | </span><span·class="w"> |
| 357 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 357 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4154685489-16">(</span><span·class="p"·data-group-id="4154685489-17">[</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="4154685489-17">]</span><span·class="p"·data-group-id="4154685489-16">)</span><span·class="p">.</span><span·class="w"> |
| 358 | </span><span·class="c1">%%·This·hook·state·is·threaded·through·all·the·callbacks.</span><span·class="w"> | 358 | </span><span·class="c1">%%·This·hook·state·is·threaded·through·all·the·callbacks.</span><span·class="w"> |
| 359 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 359 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4154685489-18">(</span><span·class="ss">state</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4154685489-19">{</span><span·class="ss">filename</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">total[·...·truncated·by·diffoscope;·len:·489,·SHA:·570bec2c3a7896bc08bfe43a5ed106e8345fea3ef42380e55ce1d0f194ccb999·...·]-18">)</span><span·class="p">.</span><span·class="w"> |
| 360 | </span><span·class="c1">%%·This·example·hook·prints·its·results·to·a·file,·see·terminate/1.</span><span·class="w"> | 360 | </span><span·class="c1">%%·This·example·hook·prints·its·results·to·a·file,·see·terminate/1.</span><span·class="w"> |
| 361 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 361 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4154685489-20">(</span><span·class="ss">test_run</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4154685489-21">{</span><span·class="ss">total</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">skipp[·...·truncated·by·diffoscope;·len:·182,·SHA:·3d03e127f722dcc4b4c495827110f30afadfe1ead7a8f0458b3d142c968a2f09·...·]-20">)</span><span·class="p">.</span><span·class="w"> |
| 362 | </span><span·class="c1">%%·Return·a·unique·id·for·this·CTH.</span><span·class="w"> | 362 | </span><span·class="c1">%%·Return·a·unique·id·for·this·CTH.</span><span·class="w"> |
| 363 | </span><span·class="c1">%%·Using·the·filename·means·the·hook·can·be·used·with·different</span><span·class="w"> | 363 | </span><span·class="c1">%%·Using·the·filename·means·the·hook·can·be·used·with·different</span><span·class="w"> |
| 364 | </span><span·class="c1">%%·log·files·to·separate·timing·data·within·the·same·test·run.</span><span·class="w"> | 364 | </span><span·class="c1">%%·log·files·to·separate·timing·data·within·the·same·test·run.</span><span·class="w"> |
| 365 | </span><span·class="c1">%%·See·Installing·a·CTH·for·more·information.</span><span·class="w"> | 365 | </span><span·class="c1">%%·See·Installing·a·CTH·for·more·information.</span><span·class="w"> |
| 366 | </span><span·class="nf">id</span><span·class="p"·data-group-id=" | 366 | </span><span·class="nf">id</span><span·class="p"·data-group-id="4154685489-22">(</span><span·class="n">Opts</span><span·class="p"·data-group-id="4154685489-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 367 | ····</span><span·class="c1">%%·the·path·is·relative·to·the·test·run·directory</span><span·class="w"> | 367 | ····</span><span·class="c1">%%·the·path·is·relative·to·the·test·run·directory</span><span·class="w"> |
| 368 | ····</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 368 | ····</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="4154685489-23">(</span><span·class="ss">filename</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opts</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"example_cth.log"</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·9af17abf7ab7ca25b834d714ffe3da6234e2e10225025b2ffe8706b1b45854e3·...·]-23">)</span><span·class="p">.</span><span·class="w"> |
| 369 | </span><span·class="c1">%%·Always·called·before·any·other·callback·function.·Use·this·to·initiate</span><span·class="w"> | 369 | </span><span·class="c1">%%·Always·called·before·any·other·callback·function.·Use·this·to·initiate</span><span·class="w"> |
| 370 | </span><span·class="c1">%%·any·common·state.</span><span·class="w"> | 370 | </span><span·class="c1">%%·any·common·state.</span><span·class="w"> |
| 371 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 371 | </span><span·class="nf">init</span><span·class="p"·data-group-id="4154685489-24">(</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Opts</span><span·class="p"·data-group-id="4154685489-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 372 | ····</span><span·class="p"·data-group-id=" | 372 | ····</span><span·class="p"·data-group-id="4154685489-25">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-26">{</span><span·class="ss">filename</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·602,·SHA:·1c02892f5a3576bb91a64aa87c35bba94503d83db1e1ddeef26f4f0b662ad883·...·]-25">}</span><span·class="p">.</span><span·class="w"> |
| 373 | </span><span·class="c1">%%·Called·before·init_per_suite·is·called.</span><span·class="w"> | 373 | </span><span·class="c1">%%·Called·before·init_per_suite·is·called.</span><span·class="w"> |
| 374 | </span><span·class="nf">pre_init_per_suite</span><span·class="p"·data-group-id=" | 374 | </span><span·class="nf">pre_init_per_suite</span><span·class="p"·data-group-id="4154685489-28">(</span><span·class="p">_</span><span·class="n">Suite</span><span·class="p">,</span><span·class="n">Config</span><span·class="p">,</span><span·class="n">State</span><span·class="p"·data-group-id="4154685489-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 375 | ····</span><span·class="p"·data-group-id=" | 375 | ····</span><span·class="p"·data-group-id="4154685489-29">{</span><span·class="n">Config</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-30">{</span><span·class="ss">suit[·...·truncated·by·diffoscope;·len:·461,·SHA:·d49dad88fb6c94e3a6416392144ccea6c9310a73402b48b140179f627bcb938b·...·]-29">}</span><span·class="p">.</span><span·class="w"> |
| 376 | </span><span·class="c1">%%·Called·after·end_per_suite.</span><span·class="w"> | 376 | </span><span·class="c1">%%·Called·after·end_per_suite.</span><span·class="w"> |
| 377 | </span><span·class="nf">post_end_per_suite</span><span·class="p"·data-group-id=" | 377 | </span><span·class="nf">post_end_per_suite</span><span·class="p"·data-group-id="4154685489-32">(</span><span·class="n">Suite</span><span·class="p">,</span><span·class="p">_</span><span·class="n">Config</span><span·class="p">,</span><span·class="n">Return</span><span·class="p">,</span><span·class="n">State</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·a27844e24222fc3f8ac72669119f9e8fd50195e54703b4ab693803ea30e4adec·...·]-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 378 | ····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 378 | ····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4154685489-33">{</span><span·class="ss">suites</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Suite</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">suite_total</span><span·class="p">,</span><span·class="w"> |
| 379 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id=" | 379 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="4154685489-34">(</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">tcs</span><span·class="p"·data-group-id="4154685489-34">)</span><span·class="p"·data-group-id="4154685489-33">}</span><span·class="p">,</span><span·class="w"> |
| 380 | ····</span><span·class="p"·data-group-id=" | 380 | ····</span><span·class="p"·data-group-id="4154685489-35">{</span><span·class="n">Return</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-36">{</span><span·class="ss">data[·...·truncated·by·diffoscope;·len:·406,·SHA:·4cd1842de2a6373f792bfad0897a41ba10199785f574359b5b39304ce9725f0d·...·]-37">]</span><span·class="p">,</span><span·class="w"> |
| 381 | ·························</span><span·class="ss">total</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">total</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">suite_total</span><span·class="p"·data-group-id=" | 381 | ·························</span><span·class="ss">total</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">total</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">suite_total</span><span·class="p"·data-group-id="4154685489-36">}</span><span·class="p"·data-group-id="4154685489-35">}</span><span·class="p">.</span><span·class="w"> |
| 382 | </span><span·class="c1">%%·Called·before·each·init_per_testcase.</span><span·class="w"> | 382 | </span><span·class="c1">%%·Called·before·each·init_per_testcase.</span><span·class="w"> |
| 383 | </span><span·class="nf">pre_init_per_testcase</span><span·class="p"·data-group-id=" | 383 | </span><span·class="nf">pre_init_per_testcase</span><span·class="p"·data-group-id="4154685489-38">(</span><span·class="p">_</span><span·class="n">Suite</span><span·class="p">,</span><span·class="p">_</span><span·class="n">TC</span><span·class="p">,</span><span·class="n">Config</span><span·class="p">,</span><span·class="n">State</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·7b47187217a848cc49d256d075fa9b2d849d995ef4e5f8b75c9bc813bbb4edfe·...·]-38">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 384 | ····</span><span·class="n">Now</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id=" | 384 | ····</span><span·class="n">Now</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id="4154685489-39">(</span><span·class="ss">microsecond</span><span·class="p"·data-group-id="4154685489-39">)</span><span·class="p">,</span><span·class="w"> |
| 385 | ····</span><span·class="p"·data-group-id=" | 385 | ····</span><span·class="p"·data-group-id="4154685489-40">{</span><span·class="n">Config</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-41">{</span><span·class="ss">ts</[·...·truncated·by·diffoscope;·len:·590,·SHA:·90a827300eada8b48b3f33a6e7e4accdd84c3f7564cfd89b038a7365ed6092ed·...·]-40">}</span><span·class="p">.</span><span·class="w"> |
| 386 | </span><span·class="c1">%%·Called·after·each·end_per_testcase.</span><span·class="w"> | 386 | </span><span·class="c1">%%·Called·after·each·end_per_testcase.</span><span·class="w"> |
| 387 | </span><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id=" | 387 | </span><span·class="nf">post_end_per_testcase</span><span·class="p"·data-group-id="4154685489-42">(</span><span·class="n">Suite</span><span·class="p">,</span><span·class="n">TC</span><span·class="p">,</span><span·class="p">_</span><span·class="n">Config</span><span·class="p">,</span><span·class="n">Return</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·67,·SHA:·74f504292d95ec299b3ded63a7aa22e4f3afbbe4e80c96e9ca04006f685795b8·...·]-42">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 388 | ····</span><span·class="n">Now</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id=" | 388 | ····</span><span·class="n">Now</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id="4154685489-43">(</span><span·class="ss">microsecond</span><span·class="p"·data-group-id="4154685489-43">)</span><span·class="p">,</span><span·class="w"> |
| 389 | ····</span><span·class="n">TCInfo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 389 | ····</span><span·class="n">TCInfo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4154685489-44">{</span><span·class="ss">testcase</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Suite</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TC</span><span·class="p">,</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·343,·SHA:·fc81c27c988475e9af913024f38c644483dc3267f8d6907e4910c8444b5a66d3·...·]-44">}</span><span·class="p">,</span><span·class="w"> |
| 390 | ····</span><span·class="p"·data-group-id=" | 390 | ····</span><span·class="p"·data-group-id="4154685489-45">{</span><span·class="n">Return</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-46">{</span><span·class="ss">ts</[·...·truncated·by·diffoscope;·len:·693,·SHA:·917e58840dc1886a0b7451ea7e6c39d1b550e9fa3f976c6cd1ef4a445f5f5639·...·]-45">}</span><span·class="p">.</span><span·class="w"> |
| 391 | </span><span·class="c1">%%·Called·when·a·test·case·is·skipped·by·either·user·action</span><span·class="w"> | 391 | </span><span·class="c1">%%·Called·when·a·test·case·is·skipped·by·either·user·action</span><span·class="w"> |
| 392 | </span><span·class="c1">%%·or·due·to·an·init·function·failing.</span><span·class="w"> | 392 | </span><span·class="c1">%%·or·due·to·an·init·function·failing.</span><span·class="w"> |
| 393 | </span><span·class="nf">on_tc_skip</span><span·class="p"·data-group-id=" | 393 | </span><span·class="nf">on_tc_skip</span><span·class="p"·data-group-id="4154685489-48">(</span><span·class="p">_</span><span·class="n">Suite</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">TC</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class=[·...·truncated·by·diffoscope;·len:·134,·SHA:·8cbc84c8e13f3002993cb6547ea77dc635b464f2fe4b546f340641860c8227e8·...·]-48">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 394 | ····</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id=" | 394 | ····</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p"·data-group-id="4154685489-49">{</span><span·class="ss">skipped</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">skipped<[·...·truncated·by·diffoscope;·len:·144,·SHA:·7c6abf946f1123665bed3aa69fddd07e94f9c049ac68d0d7b8943cd50633fdf4·...·]-49">}</span><span·class="p">.</span><span·class="w"> |
| 395 | </span><span·class="c1">%%·Called·when·the·scope·of·the·CTH·is·done.</span><span·class="w"> | 395 | </span><span·class="c1">%%·Called·when·the·scope·of·the·CTH·is·done.</span><span·class="w"> |
| 396 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id=" | 396 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="4154685489-50">(</span><span·class="n">State</span><span·class="p"·data-group-id="4154685489-50">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 397 | ····</span><span·class="c1">%%·use·append·to·avoid·data·loss·if·the·path·is·reused</span><span·class="w"> | 397 | ····</span><span·class="c1">%%·use·append·to·avoid·data·loss·if·the·path·is·reused</span><span·class="w"> |
| 398 | ····</span><span·class="p"·data-group-id=" | 398 | ····</span><span·class="p"·data-group-id="4154685489-51">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="4154685489-51">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·569,·SHA:·2d73be441cdc61923da432ae0ee652eb4a8a2979f8451523c389f3a97b4892da·...·]-52">)</span><span·class="p">,</span><span·class="w"> |
| 399 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 399 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4154685489-54">(</span><span·class="n">File</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">.</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·340,·SHA:·9a0d69028b502cc102a4524bfa1474878f223252ff5bc9dd8d5c6320f3543925·...·]-54">)</span><span·class="p">,</span><span·class="w"> |
| 400 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 400 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="4154685489-57">(</span><span·class="n">File</span><span·class="p"·data-group-id="4154685489-57">)</span><span·class="p">,</span><span·class="w"> |
| 401 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 401 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 402 | </span><span·class="nf">results</span><span·class="p"·data-group-id=" | 402 | </span><span·class="nf">results</span><span·class="p"·data-group-id="4154685489-58">(</span><span·class="n">State</span><span·class="p"·data-group-id="4154685489-58">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 993/62099 bytes (1.60%) of diff not shown. | |||
| Offset 434, 15 lines modified | Offset 434, 15 lines modified | ||
| 434 | ······<div·class="specs"> | 434 | ······<div·class="specs"> |
| 435 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_event_mgr_ref()·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>().</pre> | 435 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_event_mgr_ref()·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>().</pre> |
| 436 | ······</div> | 436 | ······</div> |
| 437 | <p>Gets·a·reference·to·the·<code·class="inline">Common·Test</code>·master·event·manager.·The·reference·can·be | 437 | <p>Gets·a·reference·to·the·<code·class="inline">Common·Test</code>·master·event·manager.·The·reference·can·be |
| 438 | used·to,·for·example,·add·a·user-specific·event·handler·while·tests·are·running.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id=" | 438 | used·to,·for·example,·add·a·user-specific·event·handler·while·tests·are·running.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gen_event</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="7328999698-1">(</span><span·class="nc">ct_master</span><span·class="p">:</span><span·class="nf">get_event_mgr_ref</span><span·class="p"·data-group-id="7328999698-2">(</span><span·class="p"·data-group-id="7328999698-2">)</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·244,·SHA:·f5261130a09a9e71f714978498297f645fb8bffe92c8a44c05ef3c06aba90e2c·...·]-1">)</span></code></pre> |
| 439 | ··</section> | 439 | ··</section> |
| 440 | </section> | 440 | </section> |
| 441 | <section·class="detail"·id="progress/0"> | 441 | <section·class="detail"·id="progress/0"> |
| 442 | ··<div·class="detail-header"> | 442 | ··<div·class="detail-header"> |
| 443 | ····<a·href="#progress/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 443 | ····<a·href="#progress/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 444 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 444 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 770, 15 lines modified | Offset 770, 15 lines modified | ||
| 770 | ······<p·class="built-using"> | 770 | ······<p·class="built-using"> |
| 771 | ········Built·using | 771 | ········Built·using |
| 772 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 772 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 773 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 773 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 774 | ······</p> | 774 | ······</p> |
| 775 | <p>Copyright·©·1996-202 | 775 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 776 | ····</footer> | 776 | ····</footer> |
| 777 | ··</div> | 777 | ··</div> |
| 778 | </main> | 778 | </main> |
| 779 | </div> | 779 | </div> |
| 780 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 780 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 781 | ··<script> | 781 | ··<script> |
| 782 | ··let·initialized·=·false; | 782 | ··let·initialized·=·false; |
| Offset 152, 15 lines modified | Offset 152, 15 lines modified | ||
| 152 | a·common·file·system.·<code·class="inline">Common·Test</code>·Master·cannot·start·test·nodes | 152 | a·common·file·system.·<code·class="inline">Common·Test</code>·Master·cannot·start·test·nodes |
| 153 | automatically.·The·nodes·must·be·started·in·advance·for·<code·class="inline">Common·Test</code>·Master·to | 153 | automatically.·The·nodes·must·be·started·in·advance·for·<code·class="inline">Common·Test</code>·Master·to |
| 154 | be·able·to·start·test·sessions·on·them.</p><p>Tests·are·started·by·calling·<a·href="ct_master.html#run/1"><code·class="inline">ct_master:run(TestSpecs)</code></a>·or | 154 | be·able·to·start·test·sessions·on·them.</p><p>Tests·are·started·by·calling·<a·href="ct_master.html#run/1"><code·class="inline">ct_master:run(TestSpecs)</code></a>·or |
| 155 | <a·href="ct_master.html#run/3"><code·class="inline">ct_master:run(TestSpecs,·InclNodes,·ExclNodes)</code></a></p><p><code·class="inline">TestSpecs</code>·is·either·the·name·of·a·test·specification·file·(string)·or·a·list | 155 | <a·href="ct_master.html#run/3"><code·class="inline">ct_master:run(TestSpecs,·InclNodes,·ExclNodes)</code></a></p><p><code·class="inline">TestSpecs</code>·is·either·the·name·of·a·test·specification·file·(string)·or·a·list |
| 156 | of·test·specifications.·If·it·is·a·list,·the·specifications·are·handled·(and·the | 156 | of·test·specifications.·If·it·is·a·list,·the·specifications·are·handled·(and·the |
| 157 | corresponding·tests·executed)·in·sequence.·An·element·in·a·<code·class="inline">TestSpecs</code>·list·can | 157 | corresponding·tests·executed)·in·sequence.·An·element·in·a·<code·class="inline">TestSpecs</code>·list·can |
| 158 | also·be·list·of·test·specifications.·The·specifications·in·such·a·list·are | 158 | also·be·list·of·test·specifications.·The·specifications·in·such·a·list·are |
| 159 | merged·into·one·combined·specification·before·test·execution.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct_master</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id=" | 159 | merged·into·one·combined·specification·before·test·execution.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ct_master</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="7799303467-1">(</span><span·class="p"·data-group-id="7799303467-2">[</span><span·class="s">"ts1"</span><span·class="p">,</span><span·class="s">"ts2"</span><span·class="p">,</span><span·class="p"·data-group-id="7799303467-3">[</span><spa[·...·truncated·by·diffoscope;·len:·243,·SHA:·77f538be99b20998c486199766eea6276cc2b546346b076ff10b53723f4beb76·...·]-1">)</span></code></pre><p>Here,·the·tests·specified·by·"ts1"·run·first,·then·the·tests·specified·by·"ts2", |
| 160 | and·finally·the·tests·specified·by·both·"ts3"·and·"ts4".</p><p>The·<code·class="inline">InclNodes</code>·argument·to·<code·class="inline">run/3</code>·is·a·list·of·node·names.·Function·<code·class="inline">run/3</code> | 160 | and·finally·the·tests·specified·by·both·"ts3"·and·"ts4".</p><p>The·<code·class="inline">InclNodes</code>·argument·to·<code·class="inline">run/3</code>·is·a·list·of·node·names.·Function·<code·class="inline">run/3</code> |
| 161 | runs·the·tests·in·<code·class="inline">TestSpecs</code>·just·like·<code·class="inline">run/1</code>,·but·also·takes·any·test·in | 161 | runs·the·tests·in·<code·class="inline">TestSpecs</code>·just·like·<code·class="inline">run/1</code>,·but·also·takes·any·test·in |
| 162 | <code·class="inline">TestSpecs</code>,·which·is·not·explicitly·tagged·with·a·particular·node·name,·and | 162 | <code·class="inline">TestSpecs</code>,·which·is·not·explicitly·tagged·with·a·particular·node·name,·and |
| 163 | execute·it·on·the·nodes·listed·in·<code·class="inline">InclNodes</code>.·By·using·<code·class="inline">run/3</code>·this·way,·any | 163 | execute·it·on·the·nodes·listed·in·<code·class="inline">InclNodes</code>.·By·using·<code·class="inline">run/3</code>·this·way,·any |
| 164 | test·specification·can·be·used,·with·or·without·node·information,·in·a | 164 | test·specification·can·be·used,·with·or·without·node·information,·in·a |
| 165 | large-scale·test·environment.</p><p><code·class="inline">ExclNodes</code>·is·a·list·of·nodes·to·be·excluded·from·the·test.·That·is,·tests·that | 165 | large-scale·test·environment.</p><p><code·class="inline">ExclNodes</code>·is·a·list·of·nodes·to·be·excluded·from·the·test.·That·is,·tests·that |
| 166 | are·specified·in·the·test·specification·to·run·on·a·particular·node·are·not | 166 | are·specified·in·the·test·specification·to·run·on·a·particular·node·are·not |
| Offset 192, 40 lines modified | Offset 192, 40 lines modified | ||
| 192 | achieved·using·constants).·The·alias·is·declared·with·a·<code·class="inline">node</code>·term·as·follows:</p><p><code·class="inline">{node,·NodeAlias,·NodeName}</code></p><p>If·<code·class="inline">NodeRefs</code>·has·the·value·<code·class="inline">all_nodes</code>,·the·operation·or·test·is·performed·on | 192 | achieved·using·constants).·The·alias·is·declared·with·a·<code·class="inline">node</code>·term·as·follows:</p><p><code·class="inline">{node,·NodeAlias,·NodeName}</code></p><p>If·<code·class="inline">NodeRefs</code>·has·the·value·<code·class="inline">all_nodes</code>,·the·operation·or·test·is·performed·on |
| 193 | all·specified·test·nodes.·(Declaring·a·term·without·a·<code·class="inline">NodeRefs</code>·element·has·the | 193 | all·specified·test·nodes.·(Declaring·a·term·without·a·<code·class="inline">NodeRefs</code>·element·has·the |
| 194 | same·effect).·If·<code·class="inline">NodeRefs</code>·has·the·value·<code·class="inline">master</code>,·the·operation·is·only | 194 | same·effect).·If·<code·class="inline">NodeRefs</code>·has·the·value·<code·class="inline">master</code>,·the·operation·is·only |
| 195 | performed·on·the·<code·class="inline">Common·Test</code>·Master·node·(namely·set·the·log·directory·or | 195 | performed·on·the·<code·class="inline">Common·Test</code>·Master·node·(namely·set·the·log·directory·or |
| 196 | install·an·event·handler).</p><p>Consider·the·example·in·section | 196 | install·an·event·handler).</p><p>Consider·the·example·in·section |
| 197 | <a·href="run_test_chapter.html#test_specifications">Test·Specifications</a>·in·section | 197 | <a·href="run_test_chapter.html#test_specifications">Test·Specifications</a>·in·section |
| 198 | Running·Tests·and·Analysing·Results,·now·extended·with·node·information·and | 198 | Running·Tests·and·Analysing·Results,·now·extended·with·node·information·and |
| 199 | intended·to·be·executed·by·<code·class="inline">Common·Test</code>·Master:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 199 | intended·to·be·executed·by·<code·class="inline">Common·Test</code>·Master:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2165346402-1">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'Top'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/test"</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·412f26b3d1179b41f82dc1d6693b57b6aff9ebb1523a6989d4da864fabc35c01·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="p"·data-group-id=" | 200 | </span><span·class="p"·data-group-id="2165346402-2">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T1'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'Top'/t1"</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·cdf1d65f9fae6fb58d0daaaa33696d9ca0427dabe29c01bdc4bb6cc6ff71d155·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="p"·data-group-id=" | 201 | </span><span·class="p"·data-group-id="2165346402-3">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T2'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'Top'/t2"</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·cdf1d65f9fae6fb58d0daaaa33696d9ca0427dabe29c01bdc4bb6cc6ff71d155·...·]-3">}</span><span·class="p">.</span><span·class="w"> |
| 202 | </span><span·class="p"·data-group-id=" | 202 | </span><span·class="p"·data-group-id="2165346402-4">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T3'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'Top'/t3"</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·cdf1d65f9fae6fb58d0daaaa33696d9ca0427dabe29c01bdc4bb6cc6ff71d155·...·]-4">}</span><span·class="p">.</span><span·class="w"> |
| 203 | </span><span·class="p"·data-group-id=" | 203 | </span><span·class="p"·data-group-id="2165346402-5">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'CfgFile'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"config.cfg"</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·95770d8c51eadc308712618a8705992ae56cd88eed07fe17104a12d703e5fb2d·...·]-5">}</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="p"·data-group-id=" | 204 | </span><span·class="p"·data-group-id="2165346402-6">{</span><span·class="ss">define</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'Node'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ct_node</span><span·class="p"·data-group-id="21653464[·...·truncated·by·diffoscope;·len:·2,·SHA:·a953f09a1b6b6725b81956e9ad0b1eb49e3ad40004c04307ef8af6246a054116·...·]-6">}</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="p"·data-group-id=" | 205 | </span><span·class="p"·data-group-id="2165346402-7">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'Node@host_x'</span><span·class="p"·data-group-id="21653[·...·truncated·by·diffoscope;·len:·5,·SHA:·6d3418390ad5d4fa9e6e3cf7b276fc92e9f5837adcf39dbf1c2e0429b6777fc3·...·]-7">}</span><span·class="p">.</span><span·class="w"> |
| 206 | </span><span·class="p"·data-group-id=" | 206 | </span><span·class="p"·data-group-id="2165346402-8">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'Node@host_y'</span><span·class="p"·data-group-id="21653[·...·truncated·by·diffoscope;·len:·5,·SHA:·6d3418390ad5d4fa9e6e3cf7b276fc92e9f5837adcf39dbf1c2e0429b6777fc3·...·]-8">}</span><span·class="p">.</span><span·class="w"> |
| 207 | </span><span·class="p"·data-group-id=" | 207 | </span><span·class="p"·data-group-id="2165346402-9">{</span><span·class="ss">logdir</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">master</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'Top'/master_logs"</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·4d08168bd609eeed03fe5c373b88fc0700313bf973f97053e4b949d76ea016aa·...·]-9">}</span><span·class="p">.</span><span·class="w"> |
| 208 | </span><span·class="p"·data-group-id=" | 208 | </span><span·class="p"·data-group-id="2165346402-10">{</span><span·class="ss">logdir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'Top'/logs"</span><span·class="p"·data-group-id="2165346402-10">}</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="p"·data-group-id=" | 209 | </span><span·class="p"·data-group-id="2165346402-11">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'T1'/'CfgFile'"</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·1a149d5c173a0826320d72f8568ec1b8d73bf0b5add95b9cea4014f78cc9bff8·...·]-11">}</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="p"·data-group-id=" | 210 | </span><span·class="p"·data-group-id="2165346402-12">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'T2'/'CfgFile'"</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·1a149d5c173a0826320d72f8568ec1b8d73bf0b5add95b9cea4014f78cc9bff8·...·]-12">}</span><span·class="p">.</span><span·class="w"> |
| 211 | </span><span·class="p"·data-group-id=" | 211 | </span><span·class="p"·data-group-id="2165346402-13">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"'T3'/'CfgFile'"</span><span·class="p"·data-group-id="2165346402-13">}</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="p"·data-group-id=" | 212 | </span><span·class="p"·data-group-id="2165346402-14">{</span><span·class="ss">suites</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T1'</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·74,·SHA:·2da4a920aafbd8f8d32722071ed0cf1b830ee99409144f87804f44a2298659ad·...·]-14">}</span><span·class="p">.</span><span·class="w"> |
| 213 | </span><span·class="p"·data-group-id=" | 213 | </span><span·class="p"·data-group-id="2165346402-15">{</span><span·class="ss">skip_suites</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T1'</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·348,·SHA:·bb412e7ce88f01cc9c13aa79db278929cde407855af258e0ebf1df56b4a26af6·...·]-15">}</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="p"·data-group-id=" | 214 | </span><span·class="p"·data-group-id="2165346402-17">{</span><span·class="ss">skip_cases</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T1'</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·415,·SHA:·14a85d2bd39e43b5dd51088955b524e5678e69649f1cc25940c98a1d44b9c17a·...·]-17">}</span><span·class="p">.</span><span·class="w"> |
| 215 | </span><span·class="p"·data-group-id=" | 215 | </span><span·class="p"·data-group-id="2165346402-19">{</span><span·class="ss">skip_cases</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T1'</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·358,·SHA:·b1deda61ffcf517916a20640e601a7243dcf966f753b441dd0e2dffe81a23098·...·]-19">}</span><span·class="p">.</span><span·class="w"> |
| 216 | </span><span·class="p"·data-group-id=" | 216 | </span><span·class="p"·data-group-id="2165346402-21">{</span><span·class="ss">suites</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T2'</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·245,·SHA:·02717c10cbdd289aa19a6c9f854fa125ddd5be083a85a019dd92657b04d2bd53·...·]-21">}</span><span·class="p">.</span><span·class="w"> |
| 217 | </span><span·class="p"·data-group-id=" | 217 | </span><span·class="p"·data-group-id="2165346402-23">{</span><span·class="ss">cases</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T2'</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·370,·SHA:·14ff74ad4d0f3db9ce690a34b9dcaffbb3769ad74109081702f4590c3e8f0c38·...·]-23">}</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="p"·data-group-id=" | 218 | </span><span·class="p"·data-group-id="2165346402-25">{</span><span·class="ss">skip_suites</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'T3'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">all</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·100,·SHA:·eec852297341b38dd8b9b54a483a15c0e24c227fdaae71db5488b92f5e9639df·...·]-25">}</span><span·class="p">.</span></code></pre><p>This·example·specifies·the·same·tests·as·the·original·example.·But·now·if |
| 219 | started·with·a·call·to·<code·class="inline">ct_master:run(TestSpecName)</code>,·test·<code·class="inline">t1</code>·is·executed·on | 219 | started·with·a·call·to·<code·class="inline">ct_master:run(TestSpecName)</code>,·test·<code·class="inline">t1</code>·is·executed·on |
| 220 | node·<code·class="inline">ct_node@host_x</code>·(<code·class="inline">node1</code>),·test·<code·class="inline">t2</code>·on·<code·class="inline">ct_node@host_y</code>·(<code·class="inline">node2</code>)·and | 220 | node·<code·class="inline">ct_node@host_x</code>·(<code·class="inline">node1</code>),·test·<code·class="inline">t2</code>·on·<code·class="inline">ct_node@host_y</code>·(<code·class="inline">node2</code>)·and |
| 221 | test·<code·class="inline">t3</code>·on·both·<code·class="inline">node1</code>·and·<code·class="inline">node2</code>.·Configuration·file·<code·class="inline">t1</code>·is·only·read·on | 221 | test·<code·class="inline">t3</code>·on·both·<code·class="inline">node1</code>·and·<code·class="inline">node2</code>.·Configuration·file·<code·class="inline">t1</code>·is·only·read·on |
| 222 | <code·class="inline">node1</code>·and·configuration·file·<code·class="inline">t2</code>·only·on·<code·class="inline">node2</code>,·while·the·configuration | 222 | <code·class="inline">node1</code>·and·configuration·file·<code·class="inline">t2</code>·only·on·<code·class="inline">node2</code>,·while·the·configuration |
| 223 | file·<code·class="inline">t3</code>·is·read·on·both·<code·class="inline">node1</code>·and·<code·class="inline">node2</code>.·Both·test·nodes·write·log·files | 223 | file·<code·class="inline">t3</code>·is·read·on·both·<code·class="inline">node1</code>·and·<code·class="inline">node2</code>.·Both·test·nodes·write·log·files |
| 224 | to·the·same·directory.·(However,·the·<code·class="inline">Common·Test</code>·Master·node·uses·a·different | 224 | to·the·same·directory.·(However,·the·<code·class="inline">Common·Test</code>·Master·node·uses·a·different |
| 225 | log·directory·than·the·test·nodes.)</p><p>If·the·test·session·is·instead·started·with·a·call·to | 225 | log·directory·than·the·test·nodes.)</p><p>If·the·test·session·is·instead·started·with·a·call·to |
| Offset 240, 21 lines modified | Offset 240, 21 lines modified | ||
| 240 | always·performed·too,·of·course.</p><h2·id="automatic-startup-of-test-target-nodes"·class="section-heading"> | 240 | always·performed·too,·of·course.</p><h2·id="automatic-startup-of-test-target-nodes"·class="section-heading"> |
| 241 | ··<a·href="#automatic-startup-of-test-target-nodes"·class="hover-link"> | 241 | ··<a·href="#automatic-startup-of-test-target-nodes"·class="hover-link"> |
| 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 243 | ··</a> | 243 | ··</a> |
| 244 | ··<span·class="text">Automatic·Startup·of·Test·Target·Nodes</span> | 244 | ··<span·class="text">Automatic·Startup·of·Test·Target·Nodes</span> |
| 245 | </h2> | 245 | </h2> |
| 246 | <p><a·href=""·id="ct_slave"></a></p><p>Initial·actions·can·be·started·and·performed·automatically·on·test·target·nodes | 246 | <p><a·href=""·id="ct_slave"></a></p><p>Initial·actions·can·be·started·and·performed·automatically·on·test·target·nodes |
| 247 | using·test·specification·term·<code·class="inline">init</code>.</p><p>Two·subterms·are·supported,·<code·class="inline">node_start</code>·and·<code·class="inline">eval</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 247 | using·test·specification·term·<code·class="inline">init</code>.</p><p>Two·subterms·are·supported,·<code·class="inline">node_start</code>·and·<code·class="inline">eval</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4436262321-1">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1@host1</span><span·class="p"·data-group-id="4436262321-1">}</span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="p"·data-group-id=" | 248 | </span><span·class="p"·data-group-id="4436262321-2">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1@host2</span><span·class="p"·data-group-id="4436262321-2">}</span><span·class="p">.</span><span·class="w"> |
| 249 | </span><span·class="p"·data-group-id=" | 249 | </span><span·class="p"·data-group-id="4436262321-3">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node2@host2</span><span·class="p"·data-group-id="4436262321-3">}</span><span·class="p">.</span><span·class="w"> |
| 250 | </span><span·class="p"·data-group-id=" | 250 | </span><span·class="p"·data-group-id="4436262321-4">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1@host3</span><span·class="p"·data-group-id="4436262321-4">}</span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="p"·data-group-id=" | 251 | </span><span·class="p"·data-group-id="4436262321-5">{</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4436262321-6">[</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·594,·SHA:·bc87a1f423caad0a249722d1e89531787dc52000dafb9220ae88106ed17bf232·...·]-5">}</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="p"·data-group-id=" | 252 | </span><span·class="p"·data-group-id="4436262321-10">{</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4436262321-11">[</span><span·class="ss">node2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node3</sp[·...·truncated·by·diffoscope;·len:·956,·SHA:·77c56a3b62904456334422e3f7a76f54740796e438de457889cbba2504fb1594·...·]-10">}</span><span·class="p">.</span><span·class="w"> |
| 253 | </span><span·class="p"·data-group-id=" | 253 | </span><span·class="p"·data-group-id="4436262321-16">{</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4436262321-17">{</span><span·class="ss">eval</spa[·...·truncated·by·diffoscope;·len:·519,·SHA:·577c8f7a465825e17d9b6ed87ffa9d9ef712d85474e1c8bb3d54e4aa92487016·...·]-16">}</span><span·class="p">.</span></code></pre><p>This·test·specification·declares·that·<code·class="inline">node1@host1</code>·is·to·be·started·using·the |
| 254 | user·callback·function·<code·class="inline">callback_module:my_slave_callback/0</code>,·and·nodes | 254 | user·callback·function·<code·class="inline">callback_module:my_slave_callback/0</code>,·and·nodes |
| 255 | <code·class="inline">node1@host2</code>·and·<code·class="inline">node2@host2</code>·are·to·be·started·with·the·default·callback | 255 | <code·class="inline">node1@host2</code>·and·<code·class="inline">node2@host2</code>·are·to·be·started·with·the·default·callback |
| 256 | module·<code·class="inline">ct_slave</code>.·The·specified·username·and·password·are·used·to·log·on·to | 256 | module·<code·class="inline">ct_slave</code>.·The·specified·username·and·password·are·used·to·log·on·to |
| 257 | remote·host·<code·class="inline">host2</code>.·Also,·function·<code·class="inline">module:function/0</code>·is·evaluated·on | 257 | remote·host·<code·class="inline">host2</code>.·Also,·function·<code·class="inline">module:function/0</code>·is·evaluated·on |
| 258 | <code·class="inline">node1@host3</code>,·and·the·result·of·this·call·is·printed·to·the·log.</p><p>The·default·callback·module·<a·href="ct_slave.html"><code·class="inline">ct_slave</code></a>,·has·the·following·features:</p><ul><li>Starting·Erlang·target·nodes·on·local·or·remote·hosts·(application·<code·class="inline">SSH</code>·is | 258 | <code·class="inline">node1@host3</code>,·and·the·result·of·this·call·is·printed·to·the·log.</p><p>The·default·callback·module·<a·href="ct_slave.html"><code·class="inline">ct_slave</code></a>,·has·the·following·features:</p><ul><li>Starting·Erlang·target·nodes·on·local·or·remote·hosts·(application·<code·class="inline">SSH</code>·is |
| 259 | used·for·communication).</li><li>Ability·to·start·an·Erlang·emulator·with·more·flags·(any·flags·supported·by | 259 | used·for·communication).</li><li>Ability·to·start·an·Erlang·emulator·with·more·flags·(any·flags·supported·by |
| 260 | <code·class="inline">erl</code>·are·supported).</li><li>Supervision·of·a·node·being·started·using·internal·callback·functions.·Used·to | 260 | <code·class="inline">erl</code>·are·supported).</li><li>Supervision·of·a·node·being·started·using·internal·callback·functions.·Used·to |
| Offset 310, 15 lines modified | Offset 310, 15 lines modified | ||
| 310 | ······<p·class="built-using"> | 310 | ······<p·class="built-using"> |
| 311 | ········Built·using | 311 | ········Built·using |
| 312 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 312 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 313 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 313 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 314 | ······</p> | 314 | ······</p> |
| 315 | <p>Copyright·©·1996-202 | 315 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 316 | ····</footer> | 316 | ····</footer> |
| 317 | ··</div> | 317 | ··</div> |
| 318 | </main> | 318 | </main> |
| 319 | </div> | 319 | </div> |
| 320 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 320 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 321 | ··<script> | 321 | ··<script> |
| 322 | ··let·initialized·=·false; | 322 | ··let·initialized·=·false; |
| Offset 133, 50 lines modified | Offset 133, 50 lines modified | ||
| 133 | and·with·support·for·RFC·5277,·NETCONF·Event·Notifications.</p><p><a·href=""·id="Connecting"></a></p><p><em>Connecting·to·a·NETCONF·server</em></p><p>Call·<a·href="#connect/1"><code·class="inline">connect/1,2</code></a>·to·establish·a·connection·to·a·server,·then | 133 | and·with·support·for·RFC·5277,·NETCONF·Event·Notifications.</p><p><a·href=""·id="Connecting"></a></p><p><em>Connecting·to·a·NETCONF·server</em></p><p>Call·<a·href="#connect/1"><code·class="inline">connect/1,2</code></a>·to·establish·a·connection·to·a·server,·then |
| 134 | pass·the·returned·handle·to·<a·href="#session/1"><code·class="inline">session/1-3</code></a>·to·establish·a·NETCONF | 134 | pass·the·returned·handle·to·<a·href="#session/1"><code·class="inline">session/1-3</code></a>·to·establish·a·NETCONF |
| 135 | session·on·a·new·SSH·channel.·Each·call·to·<a·href="#session/1"><code·class="inline">session/1-3</code></a> | 135 | session·on·a·new·SSH·channel.·Each·call·to·<a·href="#session/1"><code·class="inline">session/1-3</code></a> |
| 136 | establishes·a·new·session·on·the·same·connection,·and·results·in·a·hello·message | 136 | establishes·a·new·session·on·the·same·connection,·and·results·in·a·hello·message |
| 137 | to·the·server.</p><p>Alternately,·<a·href="#open/1"><code·class="inline">open/1,2</code></a>·can·be·used·to·establish·a·single·session·on | 137 | to·the·server.</p><p>Alternately,·<a·href="#open/1"><code·class="inline">open/1,2</code></a>·can·be·used·to·establish·a·single·session·on |
| 138 | a·dedicated·connection.·(Or,·equivalently,·<a·href="#only_open/1"><code·class="inline">only_open/1,2</code></a> | 138 | a·dedicated·connection.·(Or,·equivalently,·<a·href="#only_open/1"><code·class="inline">only_open/1,2</code></a> |
| 139 | followed·by·<a·href="#hello/1"><code·class="inline">hello/1-3</code></a>.)</p><p>Connect/session·options·can·be·specified·in·a·configuration·file·with·entries | 139 | followed·by·<a·href="#hello/1"><code·class="inline">hello/1-3</code></a>.)</p><p>Connect/session·options·can·be·specified·in·a·configuration·file·with·entries |
| 140 | like·the·following.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 140 | like·the·following.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5289229355-1">{</span><span·class="nf">server_id</span><span·class="p"·data-group-id="5289229355-2">(</span><span·class="p"·data-group-id="5289229355-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5289229355-3">[<[·...·truncated·by·diffoscope;·len:·236,·SHA:·30ce6472b2ae2c0d602f54a68a400c1d72daa618e7ae3cd99371349e781272e1·...·]-1">}</span><span·class="p">.</span></code></pre><p>The·<a·href="#t:server_id/0"><code·class="inline">server_id/0</code></a>·or·an·associated·<a·href="ct.html#t:target_name/0"><code·class="inline">ct:target_name/0</code></a>·can·then·be·passed·to |
| 141 | the·aforementioned·functions·to·use·the·referenced·configuration.</p><p><a·href=""·id="Signaling"></a></p><p><em>Signaling</em></p><p>Protocol·operations·in·the·NETCONF·protocol·are·realized·as·remote·procedure | 141 | the·aforementioned·functions·to·use·the·referenced·configuration.</p><p><a·href=""·id="Signaling"></a></p><p><em>Signaling</em></p><p>Protocol·operations·in·the·NETCONF·protocol·are·realized·as·remote·procedure |
| 142 | calls·(RPCs)·from·client·to·server·and·a·corresponding·reply·from·server·to | 142 | calls·(RPCs)·from·client·to·server·and·a·corresponding·reply·from·server·to |
| 143 | client.·RPCs·are·sent·using·like-named·functions·(eg. | 143 | client.·RPCs·are·sent·using·like-named·functions·(eg. |
| 144 | <a·href="#edit_config/3"><code·class="inline">edit_config/3-5</code></a>·to·send·an·edit-config·RPC),·with·the | 144 | <a·href="#edit_config/3"><code·class="inline">edit_config/3-5</code></a>·to·send·an·edit-config·RPC),·with·the |
| 145 | server·reply·as·return·value.·There·are·functions·for·each·RPC·defined·in·RFC | 145 | server·reply·as·return·value.·There·are·functions·for·each·RPC·defined·in·RFC |
| 146 | 6241·and·the·create-subscription·RPC·from·RFC·5277,·all·of·which·are·wrappers·on | 146 | 6241·and·the·create-subscription·RPC·from·RFC·5277,·all·of·which·are·wrappers·on |
| 147 | <a·href="#send_rpc/2"><code·class="inline">send_rpc/2,3</code></a>,·that·can·be·used·to·send·an·arbitrary·RPC·not | 147 | <a·href="#send_rpc/2"><code·class="inline">send_rpc/2,3</code></a>,·that·can·be·used·to·send·an·arbitrary·RPC·not |
| 148 | defined·in·RFC·6241·or·RFC·5277.</p><p>All·of·the·signaling·functions·have·one·variant·with·a·<code·class="inline">Timeout</code>·argument·and | 148 | defined·in·RFC·6241·or·RFC·5277.</p><p>All·of·the·signaling·functions·have·one·variant·with·a·<code·class="inline">Timeout</code>·argument·and |
| 149 | one·without,·corresponding·to·an·infinite·timeout.·The·latter·is·inappropriate | 149 | one·without,·corresponding·to·an·infinite·timeout.·The·latter·is·inappropriate |
| 150 | in·most·cases·since·a·non-response·by·the·server·or·a·missing·message-id·causes | 150 | in·most·cases·since·a·non-response·by·the·server·or·a·missing·message-id·causes |
| 151 | the·call·to·hang·indefinitely.</p><p><a·href=""·id="Logging"></a></p><p><em>Logging</em></p><p>The·NETCONF·server·uses·<code·class="inline">error_logger</code>·for·logging·of·NETCONF·traffic.·A·special | 151 | the·call·to·hang·indefinitely.</p><p><a·href=""·id="Logging"></a></p><p><em>Logging</em></p><p>The·NETCONF·server·uses·<code·class="inline">error_logger</code>·for·logging·of·NETCONF·traffic.·A·special |
| 152 | purpose·error·handler·is·implemented·in·<code·class="inline">ct_conn_log_h</code>.·To·use·this·error | 152 | purpose·error·handler·is·implemented·in·<code·class="inline">ct_conn_log_h</code>.·To·use·this·error |
| 153 | handler,·add·the·<code·class="inline">cth_conn_log</code>·hook·in·the·test·suite,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 153 | handler,·add·the·<code·class="inline">cth_conn_log</code>·hook·in·the·test·suite,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="6885424421-1">(</span><span·class="p"·data-group-id="6885424421-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 154 | ····</span><span·class="p"·data-group-id=" | 154 | ····</span><span·class="p"·data-group-id="6885424421-2">[</span><span·class="p"·data-group-id="6885424421-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6885424421-4">[</span><span·class="p"·data-group-id="6885424421-5">{</[·...·truncated·by·diffoscope;·len:·937,·SHA:·c8b298b82cb30a210d5beae86f109d43f4e462b2c287655bc771243436288161·...·]-2">]</span><span·class="p">.</span></code></pre><p><code·class="inline">conn_log_mod()</code>·is·the·name·of·the·<code·class="inline">Common·Test</code>·module·implementing·the |
| 155 | connection·protocol,·for·example,·<code·class="inline">ct_netconfc</code>.</p><p>Hook·option·<code·class="inline">log_type</code>·specifies·the·type·of·logging:</p><ul><li><p><strong><code·class="inline">raw</code></strong>·-·The·sent·and·received·NETCONF·data·is·logged·to·a·separate·text | 155 | connection·protocol,·for·example,·<code·class="inline">ct_netconfc</code>.</p><p>Hook·option·<code·class="inline">log_type</code>·specifies·the·type·of·logging:</p><ul><li><p><strong><code·class="inline">raw</code></strong>·-·The·sent·and·received·NETCONF·data·is·logged·to·a·separate·text |
| 156 | file·"as·is"·without·any·formatting.·A·link·to·the·file·is·added·to·the·test | 156 | file·"as·is"·without·any·formatting.·A·link·to·the·file·is·added·to·the·test |
| 157 | case·HTML·log.</p></li><li><p><strong><code·class="inline">pretty</code></strong>·-·The·sent·and·received·NETCONF·data·is·logged·to·a·separate·text | 157 | case·HTML·log.</p></li><li><p><strong><code·class="inline">pretty</code></strong>·-·The·sent·and·received·NETCONF·data·is·logged·to·a·separate·text |
| 158 | file·with·XML·data·nicely·indented.·A·link·to·the·file·is·added·to·the·test | 158 | file·with·XML·data·nicely·indented.·A·link·to·the·file·is·added·to·the·test |
| 159 | case·HTML·log.</p></li><li><p><strong><code·class="inline">html·(default)</code></strong>·-·The·sent·and·received·NETCONF·traffic·is·pretty·printed | 159 | case·HTML·log.</p></li><li><p><strong><code·class="inline">html·(default)</code></strong>·-·The·sent·and·received·NETCONF·traffic·is·pretty·printed |
| 160 | directly·in·the·test·case·HTML·log.</p></li><li><p><strong><code·class="inline">silent</code></strong>·-·NETCONF·traffic·is·not·logged.</p></li></ul><p>By·default,·all·NETCONF·traffic·is·logged·in·one·single·log·file.·However, | 160 | directly·in·the·test·case·HTML·log.</p></li><li><p><strong><code·class="inline">silent</code></strong>·-·NETCONF·traffic·is·not·logged.</p></li></ul><p>By·default,·all·NETCONF·traffic·is·logged·in·one·single·log·file.·However, |
| 161 | different·connections·can·be·logged·in·separate·files.·To·do·this,·use·hook | 161 | different·connections·can·be·logged·in·separate·files.·To·do·this,·use·hook |
| 162 | option·<code·class="inline">hosts</code>·and·list·the·names·of·the·servers/connections·to·be·used·in·the | 162 | option·<code·class="inline">hosts</code>·and·list·the·names·of·the·servers/connections·to·be·used·in·the |
| 163 | suite.·The·connections·must·be·named·for·this·to·work,·that·is,·they·must·be | 163 | suite.·The·connections·must·be·named·for·this·to·work,·that·is,·they·must·be |
| 164 | opened·with·<a·href="#open/2"><code·class="inline">open/2</code></a>.</p><p>Option·<code·class="inline">hosts</code>·has·no·effect·if·<code·class="inline">log_type</code>·is·set·to·<code·class="inline">html</code>·or·<code·class="inline">silent</code>.</p><p>The·hook·options·can·also·be·specified·in·a·configuration·file·with | 164 | opened·with·<a·href="#open/2"><code·class="inline">open/2</code></a>.</p><p>Option·<code·class="inline">hosts</code>·has·no·effect·if·<code·class="inline">log_type</code>·is·set·to·<code·class="inline">html</code>·or·<code·class="inline">silent</code>.</p><p>The·hook·options·can·also·be·specified·in·a·configuration·file·with |
| 165 | configuration·variable·<code·class="inline">ct_conn_log</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5009343916-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="p"·data-group-id="5009343916-2">[</span><span·class="p"·data-group-id="5009343916-3">{</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">conn_log_mod</span><span·class="p"·data-group-id="5009343916-4">(</span><span·class="p"·data-group-id="5009343916-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">conn_log_options</span><span·class="p"·data-group-id="5009343916-5">(</span><span·class="p"·data-group-id="5009343916-5">)</span><span·class="p"·data-group-id="5009343916-3">}</span><span·class="p"·data-group-id="5009343916-2">]</span><span·class="p"·data-group-id="5009343916-1">}</span><span·class="p">.</span></code></pre><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5818713789-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="p"·data-group-id="5818713789-2">[</span><span·class="p"·data-group-id="5818713789-3">{</span><span·class="ss">ct_netconfc</span><span·class="p">,</span><span·class="p"·data-group-id="5818713789-4">[</span><span·class="p"·data-group-id="5818713789-5">{</span><span·class="ss">log_type</span><span·class="p">,</span><span·class="ss">pretty</span><span·class="p"·data-group-id="5818713789-5">}</span><span·class="p">,</span><span·class="w"> | ||
| 166 | 165 | configuration·variable·<code·class="inline">ct_conn_log</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0270453995-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·1338,·SHA:·5a8e829c3e6e40244e1d29871e2738c80c62ddea7de6c0e874e2befe64be8279·...·] | |
| 166 | ····························</span><span·class="p"·data-group-id="2777393954-6">{</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="p"·data-group-id="2777393954-7">[</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">key_or_name</span><span·class="p"·data-group-id="2777393954-8">(</span><span·class="p"·data-group-id="2777393954-8">)</span><span·class="p"·data-group-id="2777393954-7">]</span><span·class="p"·data-group-id="2777393954-6">}</span><span·class="p"·data-group-id="2777393954-4">]</span><span·class="p"·data-group-id="2777393954-3">}</span><span·class="p"·data-group-id="2777393954-2">]</span><span·class="p"·data-group-id="2777393954-1">}</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Hook·options·specified·in·a·configuration·file·overwrite·the·hard-coded·hook | ||
| 167 | options·in·the·test·suite.</p></section><p><em>Logging·Example·1:</em></p><p><a·href=""·id="Logging_example_1"></a></p><p>The·following·<code·class="inline">ct_hooks</code>·statement·causes·pretty·printing·of·NETCONF·traffic·to | 167 | options·in·the·test·suite.</p></section><p><em>Logging·Example·1:</em></p><p><a·href=""·id="Logging_example_1"></a></p><p>The·following·<code·class="inline">ct_hooks</code>·statement·causes·pretty·printing·of·NETCONF·traffic·to |
| 168 | separate·logs·for·the·connections·named·<code·class="inline">nc_server1</code>·and·<code·class="inline">nc_server2</code>.·Any·other | 168 | separate·logs·for·the·connections·named·<code·class="inline">nc_server1</code>·and·<code·class="inline">nc_server2</code>.·Any·other |
| 169 | connections·are·logged·to·default·NETCONF·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 169 | connections·are·logged·to·default·NETCONF·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="0506173907-1">(</span><span·class="p"·data-group-id="0506173907-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ···</span><span·class="p"·data-group-id=" | 170 | ···</span><span·class="p"·data-group-id="0506173907-2">[</span><span·class="p"·data-group-id="0506173907-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0506173907-4">[</span><span·class="p"·data-group-id="0506173907-5">{</[·...·truncated·by·diffoscope;·len:·487,·SHA:·57e2d0cdb210c82b5d59978fef01f64ef5d6b717c53bb8f33b57ed8142bf3320·...·]-9">}</span><span·class="p">}</span><span·class="p">,</span><span·class="w"> |
| 171 | ··············································</span><span·class="p"·data-group-id=" | 171 | ··············································</span><span·class="p"·data-group-id="0506173907-10">{</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="p"·data-group-id="0506173907-11">[</span><span·class="ss">nc_server1</span><span·class="p">,</span><span·class="ss">nc_server2</span><span·class="p"·data-group-id="050[·...·truncated·by·diffoscope;·len:·168,·SHA:·fb39b5b04bbf3cb1c99a239c0c2a8b9d80072a8fb43c851aab01370d1a736984·...·]-7">}</span><span·class="w"> |
| 172 | ·······························</span><span·class="p"·data-group-id="8760385539-6">]</span><span·class="p"·data-group-id="8760385539-5">}</span><span·class="p"·data-group-id="8760385539-4">]</span><span·class="p"·data-group-id="8760385539-3">}</span><span·class="p"·data-group-id="8760385539-2">]</span><span·class="p">.</span></code></pre><p>Connections·must·be·opened·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">open</span><span·class="p"·data-group-id="2667444732-1">(</span><span·class="ss">nc_server1</span><span·class="p">,</span><span·class="p"·data-group-id="2667444732-2">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2667444732-2">]</span><span·class="p"·data-group-id="2667444732-1">)</span><span·class="p">,</span><span·class="w"> | ||
| 173 | </span><span·class="nf">open</span><span·class="p"·data-group-id="2667444732-3">(</span><span·class="ss">nc_server2</span><span·class="p">,</span><span·class="p"·data-group-id="2667444732-4">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2667444732-4">]</span><span·class="p"·data-group-id="2667444732-3">)</span><span·class="p">.</span></code></pre><p><em>Logging·Example·2:</em></p><p><a·href=""·id="Logging_example_2"></a></p><p>The·following·configuration·file·causes·raw·logging·of·all·NETCONF·traffic·in·to | ||
| 174 | one·single·text·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4470055599-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="p"·data-group-id="4470055599-2">[</span><span·class="p"·data-group-id="4470055599-3">{</span><span·class="ss">ct_netconfc</span><span·class="p">,</span><span·class="p"·data-group-id="4470055599-4">[</span><span·class="p"·data-group-id="4470055599-5">{</span><span·class="ss">log_type</span><span·class="p">,</span><span·class="ss">raw</span><span·class="p"·data-group-id="4470055599-5">}</span><span·class="p"·data-group-id="4470055599-4">]</span><span·class="p"·data-group-id="4470055599-3">}</span><span·class="p"·data-group-id="4470055599-2">]</span><span·class="p"·data-group-id="4470055599-1">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">ct_hooks</code>·statement·must·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="2745701409-1">(</span><span·class="p"·data-group-id="2745701409-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 175 | ····</span><span·class="p"·data-group-id=" | 172 | ·······························</span><span·class="p"·data-group-id="0506173907-6">]</span><span·class="p"·data-group-id="0506173907-5">}</span><span·class="p"·data-group-id="0506173907-4">]</span><span·class="p"·data-group-id="0506173907-3">}</span><span·clas[·...·truncated·by·diffoscope;·len:·583,·SHA:·f1e0abfafbb397fc161fbc9aaf017b2e8fc3c3bfd096d9b6b4a8f8d1d2c5579d·...·] |
| 173 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5617538188-3">(</span><span·class="ss">nc_server2</span><span·class="p">,</span><span·class="p"·data-group-id="5617538188-4">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="5617538188-4">]</span><span·class="p"·data-group-id="5617538188-3">)</span><span·class="p">.</span></code></pre><p><em>Logging·Example·2:</em></p><p><a·href=""·id="Logging_example_2"></a></p><p>The·following·configuration·file·causes·raw·logging·of·all·NETCONF·traffic·in·to | ||
| 174 | one·single·text·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7381347482-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="p"·data-group-id="7381347482-2">[</span><span·class="p"·data-group-id="7381347482-3">{</span><span·class="ss">ct_netconfc</span><span·class="p">,</span><span·class="p"·data-group-id="7381347482-4">[</span><span·class="p"·data-group-id="7381347482-5">{</span><span·class="ss">log_type</span><span·class="p">,</span><span·class="ss">raw</span><span·class="p"·data-group-id="7381347482-5">}</span><span·class="p"·data-group-id="7381347482-4">]</span><span·class="p"·data-group-id="7381347482-3">}</span><span·class="p"·data-group-id="7381347482-2">]</span><span·class="p"·data-group-id="7381347482-1">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">ct_hooks</code>·statement·must·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="1186968014-1">(</span><span·class="p"·data-group-id="1186968014-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 175 | ····</span><span·class="p"·data-group-id="1186968014-2">[</span><span·class="p"·data-group-id="1186968014-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1186968014-4">[</span><span·class="p"·data-group-id="1186968014-5">{</span><span·class="ss">cth_conn_log</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1186968014-6">[</span><span·class="p"·data-group-id="1186968014-6">]</span><span·class="p"·data-group-id="1186968014-5">}</span><span·class="p"·data-group-id="1186968014-4">]</span><span·class="p"·data-group-id="1186968014-3">}</span><span·class="p"·data-group-id="1186968014-2">]</span><span·class="p">.</span></code></pre><p>The·same·<code·class="inline">ct_hooks</code>·statement·without·the·configuration·file·would·cause·HTML | ||
| 176 | logging·of·all·NETCONF·connections·in·to·the·test·case·HTML·log.</p> | 176 | logging·of·all·NETCONF·connections·in·to·the·test·case·HTML·log.</p> |
| 177 | ····</section> | 177 | ····</section> |
| 178 | </div> | 178 | </div> |
| 179 | ··<section·id="summary"·class="details-list"> | 179 | ··<section·id="summary"·class="details-list"> |
| 180 | ····<h1·class="section-heading"> | 180 | ····<h1·class="section-heading"> |
| Offset 2097, 16 lines modified | Offset 2097, 16 lines modified | ||
| 2097 | ·························Result·::·ok·|·{error,·<a·href="#t:error_reason/0">error_reason</a>()}.</pre> | 2097 | ·························Result·::·ok·|·{error,·<a·href="#t:error_reason/0">error_reason</a>()}.</pre> |
| 2098 | ······</div> | 2098 | ······</div> |
| 2099 | <p>Edits·configuration·data.</p><p>By·default·only·the·running·target·is·available,·unless·the·server·includes | 2099 | <p>Edits·configuration·data.</p><p>By·default·only·the·running·target·is·available,·unless·the·server·includes |
| 2100 | <code·class="inline">:candidate</code>·or·<code·class="inline">:startup</code>·in·its·list·of·capabilities.</p><p><code·class="inline">OptParams</code>·can·be·used·for·specifying·optional·parameters·(<code·class="inline">default-operation</code>, | 2100 | <code·class="inline">:candidate</code>·or·<code·class="inline">:startup</code>·in·its·list·of·capabilities.</p><p><code·class="inline">OptParams</code>·can·be·used·for·specifying·optional·parameters·(<code·class="inline">default-operation</code>, |
| 2101 | <code·class="inline">test-option</code>,·or·<code·class="inline">error-option</code>)·to·be·added·to·the·<code·class="inline">edit-config</code>·request.·The | 2101 | <code·class="inline">test-option</code>,·or·<code·class="inline">error-option</code>)·to·be·added·to·the·<code·class="inline">edit-config</code>·request.·The |
| 2102 | value·must·be·a·list·containing·valid·simple·XML,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 2102 | value·must·be·a·list·containing·valid·simple·XML,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0162348673-1">[</span><span·class="p"·data-group-id="0162348673-2">{</span><span·class="ss">'default-operation'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0162348673-3">[</span><span·class="s">"none&qu[·...·truncated·by·diffoscope;·len:·104,·SHA:·c55d1e67e1b20da112ab40c3acd75f1b1c7251970abe4b1c356d7266be4ede39·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 2103 | ·</span><span·class="p"·data-group-id=" | 2103 | ·</span><span·class="p"·data-group-id="0162348673-4">{</span><span·class="ss">'error-option'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0162348673-5">[</span><span·class="s">"rollback-on-error"</span><span·class="p"·data-group-id="0162[·...·truncated·by·diffoscope;·len:·112,·SHA:·57529b3f9e080926c8f2b03bd4ad3b1bc55e8d200e76b448fa6e163ba6225b4b·...·]-1">]</span></code></pre><p>If·<code·class="inline">OptParams</code>·is·not·given,·the·default·value·<code·class="inline">[]</code>·is·used.</p> |
| 2104 | ··</section> | 2104 | ··</section> |
| 2105 | </section> | 2105 | </section> |
| 2106 | <section·class="detail"·id="get/2"> | 2106 | <section·class="detail"·id="get/2"> |
| 2107 | ··<div·class="detail-header"> | 2107 | ··<div·class="detail-header"> |
| 2108 | ····<a·href="#get/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2108 | ····<a·href="#get/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 2109 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 2109 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3158, 15 lines modified | Offset 3158, 15 lines modified | ||
| 3158 | ······<p·class="built-using"> | 3158 | ······<p·class="built-using"> |
| 3159 | ········Built·using | 3159 | ········Built·using |
| 3160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3162 | ······</p> | 3162 | ······</p> |
| 3163 | <p>Copyright·©·1996-202 | 3163 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3164 | ····</footer> | 3164 | ····</footer> |
| 3165 | ··</div> | 3165 | ··</div> |
| 3166 | </main> | 3166 | </main> |
| 3167 | </div> | 3167 | </div> |
| 3168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3169 | ··<script> | 3169 | ··<script> |
| 3170 | ··let·initialized·=·false; | 3170 | ··let·initialized·=·false; |
| Offset 131, 38 lines modified | Offset 131, 38 lines modified | ||
| 131 | <p>Support·in·Common·Test·for·running·property-based·tests.</p><p>This·module·helps·running·property-based·tests·in·the·<code·class="inline">Common·Test</code>·framework. | 131 | <p>Support·in·Common·Test·for·running·property-based·tests.</p><p>This·module·helps·running·property-based·tests·in·the·<code·class="inline">Common·Test</code>·framework. |
| 132 | One·(or·more)·of·the·property·testing·tools</p><ul><li><a·href="http://www.quviq.com">QuickCheck</a>,</li><li><a·href="https://proper-testing.github.io">PropEr</a>·or</li><li><a·href="https://github.com/krestenkrab/triq">Triq</a></li></ul><p>is·assumed·to·be·installed.</p><p>The·idea·with·this·module·is·to·have·a·<code·class="inline">Common·Test</code>·test·suite·calling·a | 132 | One·(or·more)·of·the·property·testing·tools</p><ul><li><a·href="http://www.quviq.com">QuickCheck</a>,</li><li><a·href="https://proper-testing.github.io">PropEr</a>·or</li><li><a·href="https://github.com/krestenkrab/triq">Triq</a></li></ul><p>is·assumed·to·be·installed.</p><p>The·idea·with·this·module·is·to·have·a·<code·class="inline">Common·Test</code>·test·suite·calling·a |
| 133 | property·testing·tool·with·special·property·test·suites·as·defined·by·that·tool. | 133 | property·testing·tool·with·special·property·test·suites·as·defined·by·that·tool. |
| 134 | The·tests·are·collected·in·the·<code·class="inline">test</code>·directory·of·the·application.·The·<code·class="inline">test</code> | 134 | The·tests·are·collected·in·the·<code·class="inline">test</code>·directory·of·the·application.·The·<code·class="inline">test</code> |
| 135 | directory·has·a·subdirectory·<code·class="inline">property_test</code>,·where·everything·needed·for·the | 135 | directory·has·a·subdirectory·<code·class="inline">property_test</code>,·where·everything·needed·for·the |
| 136 | property·tests·are·collected.·The·usual·Erlang·application·directory·structure | 136 | property·tests·are·collected.·The·usual·Erlang·application·directory·structure |
| 137 | is·assumed.</p><p>A·typical·<code·class="inline">Common·Test</code>·test·suite·using·<code·class="inline">ct_property_test</code>·is·organized·as | 137 | is·assumed.</p><p>A·typical·<code·class="inline">Common·Test</code>·test·suite·using·<code·class="inline">ct_property_test</code>·is·organized·as |
| 138 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 138 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2392111467-1">(</span><span·class="ss">my_prop_test_SUITE</span><span·class="p"·data-group-id="2392111467-1">)</span><span·class="p">.</span><span·class="w"> |
| 139 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 139 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="2392111467-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="2392111467-2">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="w"> | 140 | </span><span·class="w"> |
| 141 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 141 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="2392111467-3">(</span><span·class="s">"common_test/include/ct.hrl"</span><span·class="p"·data-group-id="2392111467-3">)</span><span·class="p">.</span><span·class="w"> |
| 142 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 142 | </span><span·class="nf">all</span><span·class="p"·data-group-id="2392111467-4">(</span><span·class="p"·data-group-id="2392111467-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2392111467-5">[</span><span·class="ss">prop_ftp_case</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·77867a07fc6d5658f226b9770a4122851de4ee4b0e7705cfad53ed354fe7a80a·...·]-5">]</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 143 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="2392111467-6">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2392111467-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 144 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 144 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="2392111467-7">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2392111467-7">)</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="c1">%%%----·test·case</span><span·class="w"> | 145 | </span><span·class="c1">%%%----·test·case</span><span·class="w"> |
| 146 | </span><span·class="nf">prop_ftp_case</span><span·class="p"·data-group-id=" | 146 | </span><span·class="nf">prop_ftp_case</span><span·class="p"·data-group-id="2392111467-8">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2392111467-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 147 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">quickcheck</span><span·class="p"·data-group-id=" | 147 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">quickcheck</span><span·class="p"·data-group-id="2392111467-9">(</span><span·class="w"> |
| 148 | ······</span><span·class="nc">ftp_simple_client_server</span><span·class="p">:</span><span·class="nf">prop_ftp</span><span·class="p"·data-group-id=" | 148 | ······</span><span·class="nc">ftp_simple_client_server</span><span·class="p">:</span><span·class="nf">prop_ftp</span><span·class="p"·data-group-id="2392111467-10">(</span><span·class="p"·data-group-id="2392111467-10">)</span><span·class="p">,</span><span·class="w"> |
| 149 | ······</span><span·class="n">Config</span><span·class="w"> | 149 | ······</span><span·class="n">Config</span><span·class="w"> |
| 150 | ·····</span><span·class="p"·data-group-id=" | 150 | ·····</span><span·class="p"·data-group-id="2392111467-9">)</span><span·class="p">.</span></code></pre><p>and·the·the·property·test·module·(in·this·example |
| 151 | <code·class="inline">ftp_simple_client_server.erl</code>)·as·almost·a·usual·property·testing·module·(More | 151 | <code·class="inline">ftp_simple_client_server.erl</code>)·as·almost·a·usual·property·testing·module·(More |
| 152 | examples·are·in·<a·href="ct_property_test_chapter.html">the·User's·Guide</a>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 152 | examples·are·in·<a·href="ct_property_test_chapter.html">the·User's·Guide</a>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7110950546-1">(</span><span·class="ss">ftp_simple_client_server</span><span·class="p"·data-group-id="7110950546-1">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7110950546-2">(</span><span·class="p"·data-group-id="7110950546-3">[</span><span·class="ss">prop_ftp</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·66,·SHA:·98d240cb7ee13f113c02482674af85e1ed413c507524a2513ee0918e864cf015·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="w"> | 154 | </span><span·class="w"> |
| 155 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 155 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7110950546-4">(</span><span·class="s">"common_test/include/ct_property_test.hrl"</span><span·class="p"·data-group-id="7110950546-4">)</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="nf">prop_ftp</span><span·class="p"·data-group-id=" | 156 | </span><span·class="nf">prop_ftp</span><span·class="p"·data-group-id="7110950546-5">(</span><span·class="p"·data-group-id="7110950546-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ····</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id="7110950546-6">(</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> |
| 158 | ····</section> | 158 | ····</section> |
| 159 | </div> | 159 | </div> |
| 160 | ··<section·id="summary"·class="details-list"> | 160 | ··<section·id="summary"·class="details-list"> |
| 161 | ····<h1·class="section-heading"> | 161 | ····<h1·class="section-heading"> |
| 162 | ······<a·class="hover-link"·href="#summary"> | 162 | ······<a·class="hover-link"·href="#summary"> |
| Offset 842, 15 lines modified | Offset 842, 15 lines modified | ||
| 842 | <code·class="inline">{fail,·Explanation}</code>.</p><p>If·support·is·found,·the·option·<code·class="inline">{property_test_tool,ToolModule}</code>·with·the | 842 | <code·class="inline">{fail,·Explanation}</code>.</p><p>If·support·is·found,·the·option·<code·class="inline">{property_test_tool,ToolModule}</code>·with·the |
| 843 | selected·tool·main·module·name·(<code·class="inline">eqc</code>,·<code·class="inline">proper</code>·or·<code·class="inline">triq</code>)·is·added·to·the·list | 843 | selected·tool·main·module·name·(<code·class="inline">eqc</code>,·<code·class="inline">proper</code>·or·<code·class="inline">triq</code>)·is·added·to·the·list |
| 844 | <code·class="inline">Config</code>·which·then·is·returned.</p><p>The·property·tests·are·assumed·to·be·in·a·subdirectory·named·<code·class="inline">property_test</code>. | 844 | <code·class="inline">Config</code>·which·then·is·returned.</p><p>The·property·tests·are·assumed·to·be·in·a·subdirectory·named·<code·class="inline">property_test</code>. |
| 845 | All·found·Erlang·files·in·that·directory·are·compiled·with·one·of·the·macros | 845 | All·found·Erlang·files·in·that·directory·are·compiled·with·one·of·the·macros |
| 846 | <code·class="inline">'EQC'</code>,·<code·class="inline">'PROPER'</code>·or·<code·class="inline">'TRIQ'</code>·set,·depending·on·which·tool·that·is·first | 846 | <code·class="inline">'EQC'</code>,·<code·class="inline">'PROPER'</code>·or·<code·class="inline">'TRIQ'</code>·set,·depending·on·which·tool·that·is·first |
| 847 | found.·This·could·make·parts·of·the·Erlang·property·tests·code·to·be·included·or | 847 | found.·This·could·make·parts·of·the·Erlang·property·tests·code·to·be·included·or |
| 848 | excluded·with·the·macro·directives·<code·class="inline">-ifdef(Macro).</code>·or·<code·class="inline">-ifndef(Macro).</code>.</p><p>The·file(s)·in·the·<code·class="inline">property_test</code>·subdirectory·could,·or·should,·include·the | 848 | excluded·with·the·macro·directives·<code·class="inline">-ifdef(Macro).</code>·or·<code·class="inline">-ifndef(Macro).</code>.</p><p>The·file(s)·in·the·<code·class="inline">property_test</code>·subdirectory·could,·or·should,·include·the |
| 849 | ct_property_test·include·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="1 | 849 | ct_property_test·include·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8170980163-1">(</span><span·class="s">"common_test/include/ct_property_test.hrl"</span><span·class="p"·data-group-id="8170980163-1">)</span><span·class="p">.</span></code></pre><p>This·included·file·will:</p><ul><li>Include·the·correct·tool's·include·file</li><li>Set·the·macro·<code·class="inline">'MOD_eqc'</code>·to·the·correct·module·name·for·the·selected·tool. |
| 850 | That·is,·the·macro·<code·class="inline">'MOD_eqc'</code>·is·set·to·either·<code·class="inline">eqc</code>,·<code·class="inline">proper</code>·or·<code·class="inline">triq</code>.</li></ul> | 850 | That·is,·the·macro·<code·class="inline">'MOD_eqc'</code>·is·set·to·either·<code·class="inline">eqc</code>,·<code·class="inline">proper</code>·or·<code·class="inline">triq</code>.</li></ul> |
| 851 | ··</section> | 851 | ··</section> |
| 852 | </section> | 852 | </section> |
| 853 | <section·class="detail"·id="num_calls/1"> | 853 | <section·class="detail"·id="num_calls/1"> |
| 854 | ··<div·class="detail-header"> | 854 | ··<div·class="detail-header"> |
| 855 | ····<a·href="#num_calls/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 855 | ····<a·href="#num_calls/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 947, 34 lines modified | Offset 947, 34 lines modified | ||
| 947 | ····························Config·::·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/proplists.html#t:proplist/0">proplists:proplist</a>(), | 947 | ····························Config·::·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/proplists.html#t:proplist/0">proplists:proplist</a>(), |
| 948 | ····························Options0·::·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/proplists.html#t:proplist/0">proplists:proplist</a>().</pre> | 948 | ····························Options0·::·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/proplists.html#t:proplist/0">proplists:proplist</a>().</pre> |
| 949 | ······</div> | 949 | ······</div> |
| 950 | <p>Presents·the·result·of·<em>stateful·(statem)·property·testing</em>·using·the·aggregate | 950 | <p>Presents·the·result·of·<em>stateful·(statem)·property·testing</em>·using·the·aggregate |
| 951 | function·in·PropEr,·QuickCheck·or·other·similar·property·testing·tool.</p><p>It·is·assumed·to·be·called·inside·the·property·called·by·<a·href="#quickcheck/2"><code·class="inline">quickcheck/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 951 | function·in·PropEr,·QuickCheck·or·other·similar·property·testing·tool.</p><p>It·is·assumed·to·be·called·inside·the·property·called·by·<a·href="#quickcheck/2"><code·class="inline">quickcheck/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 952 | </span><span·class="n">RunResult</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">run_parallel_commands</span><span·class="p"·data-group-id=" | 952 | </span><span·class="n">RunResult</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">run_parallel_commands</span><span·class="p"·data-group-id="2947256855-1">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cmds</span><span·class="p"·data-group-id="2947256855-1">)</span><span·class="p">,</span><span·class="w"> |
| 953 | </span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">present_result</span><span·class="p"·data-group-id=" | 953 | </span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">present_result</span><span·class="p"·data-group-id="2947256855-2">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cmds</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RunResult</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·92,·SHA:·0f9e15a414c7d15a208c3731e2b520383488f454083b2f94977849048e4df9a7·...·]-2">)</span><span·class="w"> |
| 954 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>See·the·<a·href="ct_property_test_chapter.html#stateful1">User's·Guide</a>·for·an·example·of | 954 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>See·the·<a·href="ct_property_test_chapter.html#stateful1">User's·Guide</a>·for·an·example·of |
| 955 | the·usage·and·of·the·default·printout.</p><p>The·<code·class="inline">StatisticsSpec</code>·is·a·list·of·the·tuples:</p><ul><li><code·class="inline">{Title::string(),·CollectFun::fun/1}</code></li><li><code·class="inline">{Title::string(),·FrequencyFun::/0,·CollectFun::fun/1}</code></li></ul><p>Each·tuple·will·produce·one·table·in·the·order·of·their·places·in·the·list.</p><ul><li><p><code·class="inline">Title</code>·will·be·the·title·of·one·result·table</p></li><li><p><code·class="inline">CollectFun</code>·is·called·with·one·argument:·the·<code·class="inline">Cmds</code>.·It·should·return·a·list | 955 | the·usage·and·of·the·default·printout.</p><p>The·<code·class="inline">StatisticsSpec</code>·is·a·list·of·the·tuples:</p><ul><li><code·class="inline">{Title::string(),·CollectFun::fun/1}</code></li><li><code·class="inline">{Title::string(),·FrequencyFun::/0,·CollectFun::fun/1}</code></li></ul><p>Each·tuple·will·produce·one·table·in·the·order·of·their·places·in·the·list.</p><ul><li><p><code·class="inline">Title</code>·will·be·the·title·of·one·result·table</p></li><li><p><code·class="inline">CollectFun</code>·is·called·with·one·argument:·the·<code·class="inline">Cmds</code>.·It·should·return·a·list |
| 956 | of·the·values·to·be·counted.·The·following·pre-defined·functions·exist:</p><ul><li><a·href="#cmnd_names/1"><code·class="inline">ct_property_test:cmnd_names/1</code></a>·returns·a·list·of·commands·(function·calls) | 956 | of·the·values·to·be·counted.·The·following·pre-defined·functions·exist:</p><ul><li><a·href="#cmnd_names/1"><code·class="inline">ct_property_test:cmnd_names/1</code></a>·returns·a·list·of·commands·(function·calls) |
| 957 | generated·in·the·<code·class="inline">Cmnd</code>·sequence,·without·Module,·Arguments·and·other | 957 | generated·in·the·<code·class="inline">Cmnd</code>·sequence,·without·Module,·Arguments·and·other |
| 958 | details.</li><li><a·href="#num_calls/1"><code·class="inline">ct_property_test:num_calls/1</code></a>·returns·a·list·of·the·length·of·commands | 958 | details.</li><li><a·href="#num_calls/1"><code·class="inline">ct_property_test:num_calls/1</code></a>·returns·a·list·of·the·length·of·commands |
| 959 | lists</li><li><a·href="#sequential_parallel/1"><code·class="inline">ct_property_test:sequential_parallel/1</code></a>·returns·a·list·with·information | 959 | lists</li><li><a·href="#sequential_parallel/1"><code·class="inline">ct_property_test:sequential_parallel/1</code></a>·returns·a·list·with·information |
| 960 | about·sequential·and·parallel·parts·from·<code·class="inline">Tool:parallel_commands/1,2</code></li></ul></li><li><p><code·class="inline">FrequencyFun/0</code>·returns·a·fun/1·which·is·supposed·to·take·a·list·of·items·as | 960 | about·sequential·and·parallel·parts·from·<code·class="inline">Tool:parallel_commands/1,2</code></li></ul></li><li><p><code·class="inline">FrequencyFun/0</code>·returns·a·fun/1·which·is·supposed·to·take·a·list·of·items·as |
| 961 | input,·and·return·an·iolist·which·will·be·printed·as·the·table.·Per·default, | 961 | input,·and·return·an·iolist·which·will·be·printed·as·the·table.·Per·default, |
| 962 | the·number·of·each·item·is·counted·and·the·percentage·is·printed·for·each.·The | 962 | the·number·of·each·item·is·counted·and·the·percentage·is·printed·for·each.·The |
| 963 | list·[a,b,a,a,c]·could·for·example·return</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 963 | list·[a,b,a,a,c]·could·for·example·return</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6893381525-1">[</span><span·class="s">"a·60%\n"</span><span·class="p">,</span><span·class="s">"b·20%\n"</span><span·class="p">,</span><span·class="s">"c·20%\n"</span><span·class="p"·data-group-id="6893381525-1">]</span></code></pre><p>which·will·be·printed·by·the·<code·class="inline">print_fun</code>.·The·default·<code·class="inline">print_fun</code>·will·print |
| 964 | it·as:</p><pre><code·class="text">a·60% | 964 | it·as:</p><pre><code·class="text">a·60% |
| 965 | b·20% | 965 | b·20% |
| 966 | c·20%</code></pre></li></ul><p>The·default·<code·class="inline">StatisticsSpec</code>·is:</p><ul><li><p>For·sequential·commands:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 966 | c·20%</code></pre></li></ul><p>The·default·<code·class="inline">StatisticsSpec</code>·is:</p><ul><li><p>For·sequential·commands:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0193666773-1">[</span><span·class="p"·data-group-id="0193666773-2">{</span><span·class="s">"Function·calls"</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">cmnd_names</span>[·...·truncated·by·diffoscope;·len:·90,·SHA:·7544a8d440bfdd145ab8dc30fe8674a91ebc194df1c80c5fcc728e4ccd5257af·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 967 | ·</span><span·class="p"·data-group-id=" | 967 | ·</span><span·class="p"·data-group-id="0193666773-3">{</span><span·class="s">"Length·of·command·sequences"</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">print_frequency_ranges</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 968 | ··················································</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">num_calls</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 968 | ··················································</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">num_calls</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="0193666773-3">}</span><span·class="p"·data-group-id="0193666773-1">]</span></code></pre></li><li><p>For·parallel·commands:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8939568419-1">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·322,·SHA:·9e7c51ca24833e961e70f10abec72cf77670e70ed503c7e0d4395549242be16a·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 969 | ·</span><span·class="p"·data-group-id=" | 969 | ·</span><span·class="p"·data-group-id="8939568419-3">{</span><span·class="s">"Function·calls"</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">cmnd_names</span><span·class="p">/</span><span·class="mi">1</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·d3ddb4ab49f55dcc274ca084dbf01d6f9176102a610f0211d40657aded1e24ee·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 970 | ·</span><span·class="p"·data-group-id=" | 970 | ·</span><span·class="p"·data-group-id="8939568419-4">{</span><span·class="s">"Length·of·command·sequences"</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">print_frequency_ranges</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 971 | ··················································</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">num_calls</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 971 | ··················································</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">num_calls</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8939568419-4">}</span><span·class="p"·data-group-id="8939568419-1">]</span></code></pre></li></ul> |
| 972 | ··</section> | 972 | ··</section> |
| 973 | </section> | 973 | </section> |
| 974 | <section·class="detail"·id="quickcheck/2"> | 974 | <section·class="detail"·id="quickcheck/2"> |
| 975 | ··<div·class="detail-header"> | 975 | ··<div·class="detail-header"> |
| 976 | ····<a·href="#quickcheck/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 976 | ····<a·href="#quickcheck/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 977 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 977 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1055, 15 lines modified | Offset 1055, 15 lines modified | ||
| 1055 | ······<p·class="built-using"> | 1055 | ······<p·class="built-using"> |
| 1056 | ········Built·using | 1056 | ········Built·using |
| 1057 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1057 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1058 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1058 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1059 | ······</p> | 1059 | ······</p> |
| 1060 | <p>Copyright·©·1996-202 | 1060 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1061 | ····</footer> | 1061 | ····</footer> |
| 1062 | ··</div> | 1062 | ··</div> |
| 1063 | </main> | 1063 | </main> |
| 1064 | </div> | 1064 | </div> |
| 1065 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1065 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1066 | ··<script> | 1066 | ··<script> |
| 1067 | ··let·initialized·=·false; | 1067 | ··let·initialized·=·false; |
| Offset 143, 59 lines modified | Offset 143, 59 lines modified | ||
| 143 | <p>The·<a·href="ct_property_test.html#">ct_property_test</a>·module·does·the·following:</p><ul><li>Compiles·the·files·with·property·tests·in·the·subdirectory·<code·class="inline">property_test</code></li><li>Tests·properties·in·those·files·using·the·first·found·Property·Testing·Tool.</li><li>Saves·the·results·-·that·is·the·printouts·-·in·the·usual·Common·Test·Log</li></ul><h2·id="introductory-example"·class="section-heading"> | 143 | <p>The·<a·href="ct_property_test.html#">ct_property_test</a>·module·does·the·following:</p><ul><li>Compiles·the·files·with·property·tests·in·the·subdirectory·<code·class="inline">property_test</code></li><li>Tests·properties·in·those·files·using·the·first·found·Property·Testing·Tool.</li><li>Saves·the·results·-·that·is·the·printouts·-·in·the·usual·Common·Test·Log</li></ul><h2·id="introductory-example"·class="section-heading"> |
| 144 | ··<a·href="#introductory-example"·class="hover-link"> | 144 | ··<a·href="#introductory-example"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">Introductory·Example</span> | 147 | ··<span·class="text">Introductory·Example</span> |
| 148 | </h2> | 148 | </h2> |
| 149 | <p>Assume·that·we·want·to·test·the·lists:sort/1·function.</p><p>We·need·a·property·to·test·the·function.·In·normal·way,·we·create | 149 | <p>Assume·that·we·want·to·test·the·lists:sort/1·function.</p><p>We·need·a·property·to·test·the·function.·In·normal·way,·we·create |
| 150 | <code·class="inline">property_test/ct_prop.erl</code>·module·in·the·<code·class="inline">test</code>·directory·in·our·application:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 150 | <code·class="inline">property_test/ct_prop.erl</code>·module·in·the·<code·class="inline">test</code>·directory·in·our·application:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8226003639-1">(</span><span·class="ss">ct_prop</span><span·class="p"·data-group-id="8226003639-1">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 151 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8226003639-2">(</span><span·class="p"·data-group-id="8226003639-3">[</span><span·class="ss">prop_sort</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="8226003639-3">]</span><span·class="p"·data-group-id="8226003639-2">)</span><span·class="p">.</span><span·class="w"> |
| 152 | </span><span·class="c1">%%%·This·will·include·the·.hrl·file·for·the·installed·testing·tool:</span><span·class="w"> | 152 | </span><span·class="c1">%%%·This·will·include·the·.hrl·file·for·the·installed·testing·tool:</span><span·class="w"> |
| 153 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 153 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8226003639-4">(</span><span·class="s">"common_test/include/ct_property_test.hrl"</span><span·class="p"·data-group-id="8226003639-4">)</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="c1">%%%·The·property·we·want·to·check:</span><span·class="w"> | 154 | </span><span·class="c1">%%%·The·property·we·want·to·check:</span><span·class="w"> |
| 155 | </span><span·class="c1">%%%···For·all·possibly·unsorted·lists,</span><span·class="w"> | 155 | </span><span·class="c1">%%%···For·all·possibly·unsorted·lists,</span><span·class="w"> |
| 156 | </span><span·class="c1">%%%···the·result·of·lists:sort/1·is·sorted.</span><span·class="w"> | 156 | </span><span·class="c1">%%%···the·result·of·lists:sort/1·is·sorted.</span><span·class="w"> |
| 157 | </span><span·class="nf">prop_sort</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">prop_sort</span><span·class="p"·data-group-id="8226003639-5">(</span><span·class="p"·data-group-id="8226003639-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id="8226003639-6">(</span><span·class="n">UnSorted</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">list</span><span·class="p"·data-group-id="8226003639-7">(</span><span·class="p"·data-group-id="8226003639-7">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ············</span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 159 | ············</span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-8">(</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">sort</span><span·class="p"·data-group-id="8226003639-9">(</span><span·class="n">UnSorted</span><span·class="p"·data-group-id="8226003639-9">)</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·d9037a0c42e58fe5a0d680fba47242a28686d76a1f4d3fa6b99e8c749a33491a·...·]-8">)</span><span·class="w"> |
| 160 | ···········</span><span·class="p"·data-group-id=" | 160 | ···········</span><span·class="p"·data-group-id="8226003639-6">)</span><span·class="p">.</span><span·class="w"> |
| 161 | </span><span·class="c1">%%%·Function·to·check·that·a·list·is·sorted:</span><span·class="w"> | 161 | </span><span·class="c1">%%%·Function·to·check·that·a·list·is·sorted:</span><span·class="w"> |
| 162 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 162 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-10">(</span><span·class="p"·data-group-id="8226003639-11">[</span><span·class="p"·data-group-id="8226003639-11">]</span><span·class="p"·data-group-id="8226003639-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 163 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 163 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 164 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 164 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-12">(</span><span·class="p"·data-group-id="8226003639-13">[</span><span·class="p">_</span><span·class="p"·data-group-id="8226003639-13">]</span><span·class="p"·data-group-id="8226003639-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 165 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 165 | ····</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 166 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 166 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-14">(</span><span·class="p"·data-group-id="8226003639-15">[</span><span·class="n">H1</span><span·class="p">,</span><span·class="n">H2</span><span·class="p">|</span><span·class="n">SortedTail</span><span·class="p"·data-group-id="8226003639-15">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·d749000e36b0f77410823b39ffa693ca3a397db2e783d13bd9bd5a23f071372a·...·]-14">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">H1</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="n">H2</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 167 | ····</span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-16">(</span><span·class="p"·data-group-id="8226003639-17">[</span><span·class="n">H2</span><span·class="p">|</span><span·class="n">SortedTail</span><span·class="p"·data-group-id="8226003639-17">]</span><span·class="p"·data-group-id="8226003639-16">)</span><span·class="p">;</span><span·class="w"> |
| 168 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id=" | 168 | </span><span·class="nf">is_sorted</span><span·class="p"·data-group-id="8226003639-18">(</span><span·class="p">_</span><span·class="p"·data-group-id="8226003639-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ····</span><span·class="ss">false</span><span·class="p">.</span></code></pre><p>We·also·need·a·CommonTest·test·suite:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 169 | ····</span><span·class="ss">false</span><span·class="p">.</span></code></pre><p>We·also·need·a·CommonTest·test·suite:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9200210415-1">(</span><span·class="ss">ct_property_test_SUITE</span><span·class="p"·data-group-id="9200210415-1">)</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 170 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="9200210415-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="9200210415-2">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·Only·in·tests!</span><span·class="w"> |
| 171 | </span><span·class="w"> | 171 | </span><span·class="w"> |
| 172 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 172 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="9200210415-3">(</span><span·class="s">"common_test/include/ct.hrl"</span><span·class="p"·data-group-id="9200210415-3">)</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nf">all</span><span·class="p"·data-group-id="9200210415-4">(</span><span·class="p"·data-group-id="9200210415-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="9200210415-5">[</span><span·class="ss">prop_sort</span><span·class="w"> |
| 174 | ·········</span><span·class="p"·data-group-id=" | 174 | ·········</span><span·class="p"·data-group-id="9200210415-5">]</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="c1">%%%·First·prepare·Config·and·compile·the·property·tests·for·the·found·tool:</span><span·class="w"> | 175 | </span><span·class="c1">%%%·First·prepare·Config·and·compile·the·property·tests·for·the·found·tool:</span><span·class="w"> |
| 176 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="9200210415-6">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9200210415-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="9200210415-7">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9200210415-7">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id="9200210415-8">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9200210415-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> | 179 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="c1">%%%================================================================</span><span·class="w"> | 180 | </span><span·class="c1">%%%================================================================</span><span·class="w"> |
| 181 | </span><span·class="c1">%%%·Test·suites</span><span·class="w"> | 181 | </span><span·class="c1">%%%·Test·suites</span><span·class="w"> |
| 182 | </span><span·class="c1">%%%</span><span·class="w"> | 182 | </span><span·class="c1">%%%</span><span·class="w"> |
| 183 | </span><span·class="nf">prop_sort</span><span·class="p"·data-group-id=" | 183 | </span><span·class="nf">prop_sort</span><span·class="p"·data-group-id="9200210415-9">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9200210415-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 184 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">quickcheck</span><span·class="p"·data-group-id=" | 184 | ····</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">quickcheck</span><span·class="p"·data-group-id="9200210415-10">(</span><span·class="w"> |
| 185 | ······</span><span·class="nc">ct_prop</span><span·class="p">:</span><span·class="nf">prop_sort</span><span·class="p"·data-group-id=" | 185 | ······</span><span·class="nc">ct_prop</span><span·class="p">:</span><span·class="nf">prop_sort</span><span·class="p"·data-group-id="9200210415-11">(</span><span·class="p"·data-group-id="9200210415-11">)</span><span·class="p">,</span><span·class="w"> |
| 186 | ······</span><span·class="n">Config</span><span·class="w"> | 186 | ······</span><span·class="n">Config</span><span·class="w"> |
| 187 | ·····</span><span·class="p"·data-group-id=" | 187 | ·····</span><span·class="p"·data-group-id="9200210415-10">)</span><span·class="p">.</span></code></pre><p>We·run·it·as·usual,·for·example·with·ct_run·in·the·OS·shell:</p><pre><code·class="text">..../test$·ct_run·-suite·ct_property_test_SUITE |
| 188 | ..... | 188 | ..... |
| 189 | Common·Test:·Running·make·in·test·directories... | 189 | Common·Test:·Running·make·in·test·directories... |
| 190 | TEST·INFO:·1·test(s),·1·case(s)·in·1·suite(s) | 190 | TEST·INFO:·1·test(s),·1·case(s)·in·1·suite(s) |
| 191 | Testing·lib.common_test.ct_property_test_SUITE:·Starting·test,·1·test·cases | 191 | Testing·lib.common_test.ct_property_test_SUITE:·Starting·test,·1·test·cases |
| Offset 217, 21 lines modified | Offset 217, 21 lines modified | ||
| 217 | ....</code></pre><p><a·href=""·id="stateful1"></a></p><h2·id="a-stateful-testing-example"·class="section-heading"> | 217 | ....</code></pre><p><a·href=""·id="stateful1"></a></p><h2·id="a-stateful-testing-example"·class="section-heading"> |
| 218 | ··<a·href="#a-stateful-testing-example"·class="hover-link"> | 218 | ··<a·href="#a-stateful-testing-example"·class="hover-link"> |
| 219 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 219 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 220 | ··</a> | 220 | ··</a> |
| 221 | ··<span·class="text">A·stateful·testing·example</span> | 221 | ··<span·class="text">A·stateful·testing·example</span> |
| 222 | </h2> | 222 | </h2> |
| 223 | <p>Assume·a·test·that·generates·some·parallel·stateful·commands,·and·runs·300 | 223 | <p>Assume·a·test·that·generates·some·parallel·stateful·commands,·and·runs·300 |
| 224 | tests:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">prop_parallel</span><span·class="p"·data-group-id=" | 224 | tests:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">prop_parallel</span><span·class="p"·data-group-id="9767532765-1">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9767532765-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ····</span><span·class="nf">numtests</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="nf">numtests</span><span·class="p"·data-group-id="9767532765-2">(</span><span·class="mi">300</span><span·class="p">,</span><span·class="w"> |
| 226 | ·············</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id=" | 226 | ·············</span><span·class="o">?</span><span·class="n">FORALL</span><span·class="p"·data-group-id="9767532765-3">(</span><span·class="n">Cmds</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">parallel_commands</span><span·class="p"·data-group-id="9767532765-4">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class=[·...·truncated·by·diffoscope;·len:·29,·SHA:·037ea02973b680d31e69c6514c7841b92ae8416d1abe62506e0bee9f48ab7cef·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 227 | ·····················</span><span·class="k">begin</span><span·class="w"> | 227 | ·····················</span><span·class="k">begin</span><span·class="w"> |
| 228 | ·························</span><span·class="n">RunResult</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">run_parallel_commands</span><span·class="p"·data-group-id=" | 228 | ·························</span><span·class="n">RunResult</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">run_parallel_commands</span><span·class="p"·data-group-id="9767532765-5">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cmds</span><span·class="p"·data-group-id="9767532765-5">)</span><span·class="p">,</span><span·class="w"> |
| 229 | ·························</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">present_result</span><span·class="p"·data-group-id=" | 229 | ·························</span><span·class="nc">ct_property_test</span><span·class="p">:</span><span·class="nf">present_result</span><span·class="p"·data-group-id="9767532765-6">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cmds</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RunResult</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·92,·SHA:·0212b18c75229c853556e5b8cfafe34230f2234dfd49c4e15b38d2967f561933·...·]-6">)</span><span·class="w"> |
| 230 | ·····················</span><span·class="k">end</span><span·class="p"·data-group-id=" | 230 | ·····················</span><span·class="k">end</span><span·class="p"·data-group-id="9767532765-3">)</span><span·class="p"·data-group-id="9767532765-2">)</span><span·class="p">.</span></code></pre><p>The·<a·href="ct_property_test.html#present_result/4"><code·class="inline">ct_property_test:present_result/4</code></a>·is·a·help·function·for·printing·some |
| 231 | statistics·in·the·CommonTest·log·file.</p><p>Our·example·test·could·for·example·be·a·simple·test·of·an·ftp·server,·where·we | 231 | statistics·in·the·CommonTest·log·file.</p><p>Our·example·test·could·for·example·be·a·simple·test·of·an·ftp·server,·where·we |
| 232 | perform·get,·put·and·delete·requests,·some·of·them·in·parallel.·Per·default,·the | 232 | perform·get,·put·and·delete·requests,·some·of·them·in·parallel.·Per·default,·the |
| 233 | result·has·three·sections:</p><pre><code·class="text">***·User·2019-12-11·13:28:17.504·*** | 233 | result·has·three·sections:</p><pre><code·class="text">***·User·2019-12-11·13:28:17.504·*** |
| 234 | Distribution·sequential/parallel | 234 | Distribution·sequential/parallel |
| 235 | ·57.7%·sequential | 235 | ·57.7%·sequential |
| Offset 326, 15 lines modified | Offset 326, 15 lines modified | ||
| 326 | ······<p·class="built-using"> | 326 | ······<p·class="built-using"> |
| 327 | ········Built·using | 327 | ········Built·using |
| 328 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 328 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 329 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 329 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 330 | ······</p> | 330 | ······</p> |
| 331 | <p>Copyright·©·1996-202 | 331 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 332 | ····</footer> | 332 | ····</footer> |
| 333 | ··</div> | 333 | ··</div> |
| 334 | </main> | 334 | </main> |
| 335 | </div> | 335 | </div> |
| 336 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 336 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 337 | ··<script> | 337 | ··<script> |
| 338 | ··let·initialized·=·false; | 338 | ··let·initialized·=·false; |
| Offset 553, 15 lines modified | Offset 553, 15 lines modified | ||
| 553 | ······<p·class="built-using"> | 553 | ······<p·class="built-using"> |
| 554 | ········Built·using | 554 | ········Built·using |
| 555 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 555 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 556 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 556 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 557 | ······</p> | 557 | ······</p> |
| 558 | <p>Copyright·©·1996-202 | 558 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 559 | ····</footer> | 559 | ····</footer> |
| 560 | ··</div> | 560 | ··</div> |
| 561 | </main> | 561 | </main> |
| 562 | </div> | 562 | </div> |
| 563 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 563 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 564 | ··<script> | 564 | ··<script> |
| 565 | ··let·initialized·=·false; | 565 | ··let·initialized·=·false; |
| Offset 247, 18 lines modified | Offset 247, 18 lines modified | ||
| 247 | ··[-keep_logs·all·|·NLogs]</code></pre><h2·id="run-common-test-in-interactive-mode"·class="section-heading"> | 247 | ··[-keep_logs·all·|·NLogs]</code></pre><h2·id="run-common-test-in-interactive-mode"·class="section-heading"> |
| 248 | ··<a·href="#run-common-test-in-interactive-mode"·class="hover-link"> | 248 | ··<a·href="#run-common-test-in-interactive-mode"·class="hover-link"> |
| 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 250 | ··</a> | 250 | ··</a> |
| 251 | ··<span·class="text">Run·Common·Test·in·Interactive·Mode</span> | 251 | ··<span·class="text">Run·Common·Test·in·Interactive·Mode</span> |
| 252 | </h2> | 252 | </h2> |
| 253 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="ss">ct_run</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">shell</span><span·class="w"> | 253 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="ss">ct_run</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">shell</span><span·class="w"> |
| 254 | ··</span><span·class="p"·data-group-id=" | 254 | ··</span><span·class="p"·data-group-id="9970427889-1">[</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="n">ConfigFile1</span><span·class="w">·</span><span·class="n">ConfigFile2</span><span·class="w">·</span><span·class="p">.</span><span·class="p">[·...·truncated·by·diffoscope;·len:·131,·SHA:·041d25e0b9cc36ffa510b326add3e12326e9552b815e91f39d59190517f99f60·...·]-1">]</span><span·class="w"> |
| 255 | ··</span><span·class="p"·data-group-id=" | 255 | ··</span><span·class="p"·data-group-id="9970427889-2">[</span><span·class="o">-</span><span·class="ss">userconfig</span><span·class="w">·</span><span·class="n">CallbackModule1</span><span·class="w">·</span><span·class="n">ConfigString1</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">CallbackModule2</span><span·class="w"> |
| 256 | ···</span><span·class="n">ConfigString2</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">CallbackModuleN</span><span·class="w">·</span><span·class="n">ConfigStringN</span><span·class="p"·data-group-id=" | 256 | ···</span><span·class="n">ConfigString2</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">CallbackModuleN</span><span·class="w">·</span><span·class="n">ConfigStringN</span><span·class="p"·data-group-id="9970427889-2">]</span><span·class="w"> |
| 257 | ··</span><span·class="p"·data-group-id=" | 257 | ··</span><span·class="p"·data-group-id="9970427889-3">[</span><span·class="o">-</span><span·class="ss">decrypt_key</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="9970427889-3">]</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·208,·SHA:·1af6ae1cce5ad7d46a0120fa3f8db0aaa40d97d3ef336e3176abde38847e27eb·...·]-4">]</span></code></pre><h2·id="start-a-common-test-master-node"·class="section-heading"> |
| 258 | ··<a·href="#start-a-common-test-master-node"·class="hover-link"> | 258 | ··<a·href="#start-a-common-test-master-node"·class="hover-link"> |
| 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 260 | ··</a> | 260 | ··</a> |
| 261 | ··<span·class="text">Start·a·Common·Test·Master·Node</span> | 261 | ··<span·class="text">Start·a·Common·Test·Master·Node</span> |
| 262 | </h2> | 262 | </h2> |
| 263 | <pre><code·class="text">·ct_run·-ctmaster</code></pre><h2·id="see-also"·class="section-heading"> | 263 | <pre><code·class="text">·ct_run·-ctmaster</code></pre><h2·id="see-also"·class="section-heading"> |
| 264 | ··<a·href="#see-also"·class="hover-link"> | 264 | ··<a·href="#see-also"·class="hover-link"> |
| Offset 305, 15 lines modified | Offset 305, 15 lines modified | ||
| 305 | ······<p·class="built-using"> | 305 | ······<p·class="built-using"> |
| 306 | ········Built·using | 306 | ········Built·using |
| 307 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 307 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 308 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 308 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 309 | ······</p> | 309 | ······</p> |
| 310 | <p>Copyright·©·1996-202 | 310 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 311 | ····</footer> | 311 | ····</footer> |
| 312 | ··</div> | 312 | ··</div> |
| 313 | </main> | 313 | </main> |
| 314 | </div> | 314 | </div> |
| 315 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 315 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 316 | ··<script> | 316 | ··<script> |
| 317 | ··let·initialized·=·false; | 317 | ··let·initialized·=·false; |
| Offset 549, 15 lines modified | Offset 549, 15 lines modified | ||
| 549 | ······<p·class="built-using"> | 549 | ······<p·class="built-using"> |
| 550 | ········Built·using | 550 | ········Built·using |
| 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 553 | ······</p> | 553 | ······</p> |
| 554 | <p>Copyright·©·1996-202 | 554 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 555 | ····</footer> | 555 | ····</footer> |
| 556 | ··</div> | 556 | ··</div> |
| 557 | </main> | 557 | </main> |
| 558 | </div> | 558 | </div> |
| 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 560 | ··<script> | 560 | ··<script> |
| 561 | ··let·initialized·=·false; | 561 | ··let·initialized·=·false; |
| Offset 146, 23 lines modified | Offset 146, 23 lines modified | ||
| 146 | configuration·files·have·default·values·set·by·the·<code·class="inline">SNMP</code>·application.·These | 146 | configuration·files·have·default·values·set·by·the·<code·class="inline">SNMP</code>·application.·These |
| 147 | values·can·be·overridden·by·suppling·a·list·of·valid·configuration·values·or·a | 147 | values·can·be·overridden·by·suppling·a·list·of·valid·configuration·values·or·a |
| 148 | file·located·in·the·test·suites·data·directory,·which·can·produce·a·list·of | 148 | file·located·in·the·test·suites·data·directory,·which·can·produce·a·list·of |
| 149 | valid·configuration·values·if·you·apply·function·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>·to·the·file.</p><ul><li><p><strong><code·class="inline">{agent_contexts,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_community,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_sysinfo,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_vacm,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_usm,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_notify_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_target_address_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·- | 149 | valid·configuration·values·if·you·apply·function·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>·to·the·file.</p><ul><li><p><strong><code·class="inline">{agent_contexts,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_community,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_sysinfo,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_vacm,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_usm,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_notify_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·-·Optional.</p></li><li><p><strong><code·class="inline">{agent_target_address_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·- |
| 150 | Optional.</p></li><li><p><strong><code·class="inline">{agent_target_param_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·- | 150 | Optional.</p></li><li><p><strong><code·class="inline">{agent_target_param_def,·[term()]·|·{data_dir_file,·rel_path()}}</code></strong>·- |
| 151 | Optional.</p></li></ul><p>Parameter·<code·class="inline">MgrAgentConfName</code>·in·the·functions·is·to·be·a·name·you·allocate·in | 151 | Optional.</p></li></ul><p>Parameter·<code·class="inline">MgrAgentConfName</code>·in·the·functions·is·to·be·a·name·you·allocate·in |
| 152 | your·test·suite·using·a·<code·class="inline">require</code>·statement.·Example·(where | 152 | your·test·suite·using·a·<code·class="inline">require</code>·statement.·Example·(where |
| 153 | <code·class="inline">MgrAgentConfName·=·snmp_mgr_agent</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="6 | 153 | <code·class="inline">MgrAgentConfName·=·snmp_mgr_agent</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="5640520941-1">(</span><span·class="p"·data-group-id="5640520941-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="5640520941-2">[</span><span·class="p"·data-group-id="5640520941-3">{</span[·...·truncated·by·diffoscope;·len:·683,·SHA:·e14ec4222be6cee2152f793622b0a994a35cdd7df3256c7aea35563d7601dde2·...·]-1">)</span><span·class="p">.</span></code></pre><p>Notice·that·USM·users·are·needed·for·SNMPv3·configuration·and·are·not·to·be |
| 154 | confused·with·users.</p><p>SNMP·traps,·inform,·and·report·messages·are·handled·by·the·user·callback·module. | 154 | confused·with·users.</p><p>SNMP·traps,·inform,·and·report·messages·are·handled·by·the·user·callback·module. |
| 155 | For·details,·see·the·<a·href="../../../../lib/snmp-5.18.2/doc/html/index.html"><code·class="inline">SNMP</code></a>·application.</p><p>It·is·recommended·to·use·the·<code·class="inline">.hrl</code>·files·created·by·the·Erlang/OTP·MIB·compiler | 155 | For·details,·see·the·<a·href="../../../../lib/snmp-5.18.2/doc/html/index.html"><code·class="inline">SNMP</code></a>·application.</p><p>It·is·recommended·to·use·the·<code·class="inline">.hrl</code>·files·created·by·the·Erlang/OTP·MIB·compiler |
| 156 | to·define·the·Object·Identifiers·(OIDs).·For·example,·to·get·the·Erlang·node | 156 | to·define·the·Object·Identifiers·(OIDs).·For·example,·to·get·the·Erlang·node |
| 157 | name·from·<code·class="inline">erlNodeTable</code>·in·the·OTP-MIB:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Oid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">erlNodeEntry</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id=" | 157 | name·from·<code·class="inline">erlNodeTable</code>·in·the·OTP-MIB:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Oid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">erlNodeEntry</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id="0104277675-1">[</span><span·class="o">?</span><span·class="ss">erlNodeName</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="0104277675-1">]</span></code></pre><p>Furthermore,·values·can·be·set·for·<code·class="inline">SNMP</code>·application·configuration·parameters, |
| 158 | <code·class="inline">config</code>,·<code·class="inline">server</code>,·<code·class="inline">net_if</code>,·and·so·on·(for·a·list·of·valid·parameters·and | 158 | <code·class="inline">config</code>,·<code·class="inline">server</code>,·<code·class="inline">net_if</code>,·and·so·on·(for·a·list·of·valid·parameters·and |
| 159 | types,·see·the·<a·href="../../../../lib/snmp-5.18.2/doc/html/index.html"><code·class="inline">User's·Guide·for·the·SNMP·application</code></a>). | 159 | types,·see·the·<a·href="../../../../lib/snmp-5.18.2/doc/html/index.html"><code·class="inline">User's·Guide·for·the·SNMP·application</code></a>). |
| 160 | This·is·done·by·defining·a·configuration·data·variable·on·the·following·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5419408037-1">{</span><span·class="ss">snmp_app</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5419408037-2">[</span><span·class="p"·data-group-id="5419408037-3">{</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5419408037-4">[</span><span·class="nf">snmp_app_manager_params</span><span·class="p"·data-group-id="5419408037-5">(</span><span·class="p"·data-group-id="5419408037-5">)</span><span·class="p"·data-group-id="5419408037-4">]</span><span·class="p"·data-group-id="5419408037-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 161 | 160 | This·is·done·by·defining·a·configuration·data·variable·on·the·following·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3973276930-1">{</span><span·class="ss">snmp_app</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·543,·SHA:·79b0ca8eaabf5bb1822f4d3ea74e8e6c8678ded1fa0f87a99675803765ebcafb·...·] | |
| 161 | ············</span><span·class="p"·data-group-id="3973276930-6">{</span><span·class="ss">agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3973276930-7">[</span><span·class="nf">snmp_app_agent_params</span><span·class="p"·data-group-id="3973276930-8">(</span><span·class="p"·data-group-id="3973276930-8">)</span><span·class="p"·data-group-id="3973276930-7">]</span><span·class="p"·data-group-id="3973276930-6">}</span><span·class="p"·data-group-id="3973276930-2">]</span><span·class="p"·data-group-id="3973276930-1">}</span><span·class="p">.</span></code></pre><p>A·name·for·the·data·must·be·allocated·in·the·suite·using·<code·class="inline">require</code>·(see·the | ||
| 162 | example·above).·Pass·this·name·as·argument·<code·class="inline">SnmpAppConfName</code>·to | 162 | example·above).·Pass·this·name·as·argument·<code·class="inline">SnmpAppConfName</code>·to |
| 163 | <a·href="#start/3"><code·class="inline">ct_snmp:start/3</code></a>.·<code·class="inline">ct_snmp</code>·specifies·default·values·for·some | 163 | <a·href="#start/3"><code·class="inline">ct_snmp:start/3</code></a>.·<code·class="inline">ct_snmp</code>·specifies·default·values·for·some |
| 164 | <code·class="inline">SNMP</code>·application·configuration·parameters·(such·as·<code·class="inline">{verbosity,trace}</code>·for | 164 | <code·class="inline">SNMP</code>·application·configuration·parameters·(such·as·<code·class="inline">{verbosity,trace}</code>·for |
| 165 | parameter·<code·class="inline">config</code>).·This·set·of·defaults·is·merged·with·the·parameters | 165 | parameter·<code·class="inline">config</code>).·This·set·of·defaults·is·merged·with·the·parameters |
| 166 | specified·by·the·user.·The·user·values·override·<code·class="inline">ct_snmp</code>·defaults.</p> | 166 | specified·by·the·user.·The·user·values·override·<code·class="inline">ct_snmp</code>·defaults.</p> |
| 167 | ····</section> | 167 | ····</section> |
| Offset 1840, 15 lines modified | Offset 1840, 15 lines modified | ||
| 1840 | ······<p·class="built-using"> | 1840 | ······<p·class="built-using"> |
| 1841 | ········Built·using | 1841 | ········Built·using |
| 1842 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1842 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1843 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1843 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1844 | ······</p> | 1844 | ······</p> |
| 1845 | <p>Copyright·©·1996-202 | 1845 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1846 | ····</footer> | 1846 | ····</footer> |
| 1847 | ··</div> | 1847 | ··</div> |
| 1848 | </main> | 1848 | </main> |
| 1849 | </div> | 1849 | </div> |
| 1850 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1850 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1851 | ··<script> | 1851 | ··<script> |
| 1852 | ··let·initialized·=·false; | 1852 | ··let·initialized·=·false; |
| Offset 129, 22 lines modified | Offset 129, 22 lines modified | ||
| 129 | ····<section·id="moduledoc"> | 129 | ····<section·id="moduledoc"> |
| 130 | <p>SSH/SFTP·client·module.</p><p>This·module·uses·application·<code·class="inline">SSH</code>,·which·provides·detailed·information·about, | 130 | <p>SSH/SFTP·client·module.</p><p>This·module·uses·application·<code·class="inline">SSH</code>,·which·provides·detailed·information·about, |
| 131 | for·example,·functions,·types,·and·options.</p><p>Argument·<code·class="inline">Server</code>·in·the·SFTP·functions·is·only·to·be·used·for·SFTP·sessions | 131 | for·example,·functions,·types,·and·options.</p><p>Argument·<code·class="inline">Server</code>·in·the·SFTP·functions·is·only·to·be·used·for·SFTP·sessions |
| 132 | that·have·been·started·on·existing·SSH·connections·(that·is,·when·the·original | 132 | that·have·been·started·on·existing·SSH·connections·(that·is,·when·the·original |
| 133 | connection·type·is·<code·class="inline">ssh</code>).·Whenever·the·connection·type·is·<code·class="inline">sftp</code>,·use·the·SSH | 133 | connection·type·is·<code·class="inline">ssh</code>).·Whenever·the·connection·type·is·<code·class="inline">sftp</code>,·use·the·SSH |
| 134 | connection·reference·only.</p><p>The·following·options·are·valid·for·specifying·an·SSH/SFTP·connection·(that·is, | 134 | connection·reference·only.</p><p>The·following·options·are·valid·for·specifying·an·SSH/SFTP·connection·(that·is, |
| 135 | can·be·used·as·configuration·elements):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 135 | can·be·used·as·configuration·elements):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7118729660-1">[</span><span·class="p"·data-group-id="7118729660-2">{</span><span·class="n">ConnType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Addr</span><span·class="p"·data-group-id="7118729660-2">}</span><span·class="p">,</span><span·class="w"> |
| 136 | ·</span><span·class="p"·data-group-id=" | 136 | ·</span><span·class="p"·data-group-id="7118729660-3">{</span><span·class="ss">port</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="7118729660-3">}</span><span·class="p">,</span><span·class="w"> |
| 137 | ·</span><span·class="p"·data-group-id=" | 137 | ·</span><span·class="p"·data-group-id="7118729660-4">{</span><span·class="ss">user</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserName</span><span·class="p"·data-group-id="7118729660-4">}</span><span·class="w"> |
| 138 | ·</span><span·class="p"·data-group-id=" | 138 | ·</span><span·class="p"·data-group-id="7118729660-5">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pwd</span><span·class="p"·data-group-id="7118729660-5">}</span><span·class="w"> |
| 139 | ·</span><span·class="p"·data-group-id=" | 139 | ·</span><span·class="p"·data-group-id="7118729660-6">{</span><span·class="ss">user_dir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">String</span><span·class="p"·data-group-id="7118729660-6">}</span><span·class="w"> |
| 140 | ·</span><span·class="p"·data-group-id=" | 140 | ·</span><span·class="p"·data-group-id="7118729660-7">{</span><span·class="ss">public_key_alg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PubKeyAlg</span><span·class="p"·data-group-id="7118729660-7">}</span><span·class="w"> |
| 141 | ·</span><span·class="p"·data-group-id=" | 141 | ·</span><span·class="p"·data-group-id="7118729660-8">{</span><span·class="ss">connect_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Timeout</span><span·class="p"·data-group-id="7118729660-8">}</span><span·class="w"> |
| 142 | ·</span><span·class="p"·data-group-id=" | 142 | ·</span><span·class="p"·data-group-id="7118729660-9">{</span><span·class="ss">key_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="n">KeyCallbackMod</span><span·class="p"·data-group-id="7118729660-9">}</span><span·class="p"·data-group-id="7118729660-1">]</span></code></pre><p><code·class="inline">ConnType·=·ssh·|·sftp</code>.</p><p>For·other·types,·see·<a·href="../../../../lib/ssh-5.2.11.1/doc/html/ssh.html"><code·class="inline">ssh</code></a>.</p><p>All·time-out·parameters·in·<code·class="inline">ct_ssh</code>·functions·are·values·in·milliseconds.</p> |
| 143 | ····</section> | 143 | ····</section> |
| 144 | </div> | 144 | </div> |
| 145 | ··<section·id="summary"·class="details-list"> | 145 | ··<section·id="summary"·class="details-list"> |
| 146 | ····<h1·class="section-heading"> | 146 | ····<h1·class="section-heading"> |
| 147 | ······<a·class="hover-link"·href="#summary"> | 147 | ······<a·class="hover-link"·href="#summary"> |
| Offset 3708, 15 lines modified | Offset 3708, 15 lines modified | ||
| 3708 | ······<p·class="built-using"> | 3708 | ······<p·class="built-using"> |
| 3709 | ········Built·using | 3709 | ········Built·using |
| 3710 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3710 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3711 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3711 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3712 | ······</p> | 3712 | ······</p> |
| 3713 | <p>Copyright·©·1996-202 | 3713 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3714 | ····</footer> | 3714 | ····</footer> |
| 3715 | ··</div> | 3715 | ··</div> |
| 3716 | </main> | 3716 | </main> |
| 3717 | </div> | 3717 | </div> |
| 3718 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3718 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3719 | ··<script> | 3719 | ··<script> |
| 3720 | ··let·initialized·=·false; | 3720 | ··let·initialized·=·false; |
| Offset 1585, 15 lines modified | Offset 1585, 15 lines modified | ||
| 1585 | ······<p·class="built-using"> | 1585 | ······<p·class="built-using"> |
| 1586 | ········Built·using | 1586 | ········Built·using |
| 1587 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1587 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1588 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1588 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1589 | ······</p> | 1589 | ······</p> |
| 1590 | <p>Copyright·©·1996-202 | 1590 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1591 | ····</footer> | 1591 | ····</footer> |
| 1592 | ··</div> | 1592 | ··</div> |
| 1593 | </main> | 1593 | </main> |
| 1594 | </div> | 1594 | </div> |
| 1595 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1595 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1596 | ··<script> | 1596 | ··<script> |
| 1597 | ··let·initialized·=·false; | 1597 | ··let·initialized·=·false; |
| Offset 132, 38 lines modified | Offset 132, 38 lines modified | ||
| 132 | matching·on·the·result.·For·information·about·how·to·use·<code·class="inline">ct_telnet</code>·and | 132 | matching·on·the·result.·For·information·about·how·to·use·<code·class="inline">ct_telnet</code>·and |
| 133 | configure·connections,·specifically·for·UNIX·hosts,·see·the·<a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a> | 133 | configure·connections,·specifically·for·UNIX·hosts,·see·the·<a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a> |
| 134 | manual·page.</p><p>Default·values·defined·in·<code·class="inline">ct_telnet</code>:</p><p><a·href=""·id="Default_values"></a></p><ul><li>Connection·timeout·(time·to·wait·for·connection)·=·10·seconds</li><li>Command·timeout·(time·to·wait·for·a·command·to·return)·=·10·seconds</li><li>Max·number·of·reconnection·attempts·=·3</li><li>Reconnection·interval·(time·to·wait·in·between·reconnection·attempts)·=·5 | 134 | manual·page.</p><p>Default·values·defined·in·<code·class="inline">ct_telnet</code>:</p><p><a·href=""·id="Default_values"></a></p><ul><li>Connection·timeout·(time·to·wait·for·connection)·=·10·seconds</li><li>Command·timeout·(time·to·wait·for·a·command·to·return)·=·10·seconds</li><li>Max·number·of·reconnection·attempts·=·3</li><li>Reconnection·interval·(time·to·wait·in·between·reconnection·attempts)·=·5 |
| 135 | seconds</li><li>Keep·alive·(sends·NOP·to·the·server·every·8·sec·if·connection·is·idle)·= | 135 | seconds</li><li>Keep·alive·(sends·NOP·to·the·server·every·8·sec·if·connection·is·idle)·= |
| 136 | <code·class="inline">true</code></li><li>Polling·limit·(max·number·of·times·to·poll·to·get·a·remaining·string | 136 | <code·class="inline">true</code></li><li>Polling·limit·(max·number·of·times·to·poll·to·get·a·remaining·string |
| 137 | terminated)·=·0</li><li>Polling·interval·(sleep·time·between·polls)·=·1·second</li><li>The·TCP_NODELAY·option·for·the·telnet·socket·is·disabled·(set·to·<code·class="inline">false</code>)·per | 137 | terminated)·=·0</li><li>Polling·interval·(sleep·time·between·polls)·=·1·second</li><li>The·TCP_NODELAY·option·for·the·telnet·socket·is·disabled·(set·to·<code·class="inline">false</code>)·per |
| 138 | default</li></ul><p>These·parameters·can·be·modified·by·the·user·with·the·following·configuration | 138 | default</li></ul><p>These·parameters·can·be·modified·by·the·user·with·the·following·configuration |
| 139 | term:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 139 | term:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3077474420-1">{</span><span·class="ss">telnet_settings</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3077474420-2">[</span><span·class="p"·data-group-id="3077474420-3">{</span><span·class="ss">connect_timeout</span><s[·...·truncated·by·diffoscope;·len:·94,·SHA:·086b5e481dadfc06d6634215c4dcd8a6ea92f4d4116c3e4321dd16335b751fe9·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 140 | ···················</span><span·class="p"·data-group-id=" | 140 | ···················</span><span·class="p"·data-group-id="3077474420-4">{</span><span·class="ss">command_timeout</span><span·class="p">,</span><span·class="n">Millisec</span><span·class="p"·data-group-id="3077474420-4">}</span><span·class="p">,</span><span·class="w"> |
| 141 | ···················</span><span·class="p"·data-group-id=" | 141 | ···················</span><span·class="p"·data-group-id="3077474420-5">{</span><span·class="ss">reconnection_attempts</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="3077474420-5">}</span><span·class="p">,</span><span·class="w"> |
| 142 | ···················</span><span·class="p"·data-group-id=" | 142 | ···················</span><span·class="p"·data-group-id="3077474420-6">{</span><span·class="ss">reconnection_interval</span><span·class="p">,</span><span·class="n">Millisec</span><span·class="p"·data-group-id="3077474420-6">}</span><span·class="p">,</span><span·class="w"> |
| 143 | ···················</span><span·class="p"·data-group-id=" | 143 | ···················</span><span·class="p"·data-group-id="3077474420-7">{</span><span·class="ss">keep_alive</span><span·class="p">,</span><span·class="n">Bool</span><span·class="p"·data-group-id="3077474420-7">}</span><span·class="p">,</span><span·class="w"> |
| 144 | ···················</span><span·class="p"·data-group-id=" | 144 | ···················</span><span·class="p"·data-group-id="3077474420-8">{</span><span·class="ss">poll_limit</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id="3077474420-8">}</span><span·class="p">,</span><span·class="w"> |
| 145 | ···················</span><span·class="p"·data-group-id=" | 145 | ···················</span><span·class="p"·data-group-id="3077474420-9">{</span><span·class="ss">poll_interval</span><span·class="p">,</span><span·class="n">Millisec</span><span·class="p"·data-group-id="3077474420-9">}</span><span·class="p">,</span><span·class="w"> |
| 146 | ···················</span><span·class="p"·data-group-id=" | 146 | ···················</span><span·class="p"·data-group-id="3077474420-10">{</span><span·class="ss">tcp_nodelay</span><span·class="p">,</span><span·class="n">Bool</span><span·class="p"·data-group-id="3077474420-10">}</span><span·class="p"·data-group-id="3077474420-2">]</span><span·class="p"·data-group-id="307747442[·...·truncated·by·diffoscope;·len:·1,·SHA:·5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9·...·]-1">}</span><span·class="p">.</span></code></pre><p><code·class="inline">Millisec·=·integer(),·N·=·integer()</code></p><p>Enter·the·<code·class="inline">telnet_settings</code>·term·in·a·configuration·file·included·in·the·test |
| 147 | and·<code·class="inline">ct_telnet</code>·retrieves·the·information·automatically.</p><p><code·class="inline">keep_alive</code>·can·be·specified·per·connection,·if·necessary.·For·details,·see | 147 | and·<code·class="inline">ct_telnet</code>·retrieves·the·information·automatically.</p><p><code·class="inline">keep_alive</code>·can·be·specified·per·connection,·if·necessary.·For·details,·see |
| 148 | <a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a>.</p><h2·id="module-logging"·class="section-heading"> | 148 | <a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a>.</p><h2·id="module-logging"·class="section-heading"> |
| 149 | ··<a·href="#module-logging"·class="hover-link"> | 149 | ··<a·href="#module-logging"·class="hover-link"> |
| 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 151 | ··</a> | 151 | ··</a> |
| 152 | ··<span·class="text">Logging</span> | 152 | ··<span·class="text">Logging</span> |
| 153 | </h2> | 153 | </h2> |
| 154 | <p><a·href=""·id="Logging"></a></p><p>The·default·logging·behavior·of·<code·class="inline">ct_telnet</code>·is·to·print·information·about | 154 | <p><a·href=""·id="Logging"></a></p><p>The·default·logging·behavior·of·<code·class="inline">ct_telnet</code>·is·to·print·information·about |
| 155 | performed·operations,·commands,·and·their·corresponding·results·to·the·test·case | 155 | performed·operations,·commands,·and·their·corresponding·results·to·the·test·case |
| 156 | HTML·log.·The·following·is·not·printed·to·the·HTML·log:·text·strings·sent·from | 156 | HTML·log.·The·following·is·not·printed·to·the·HTML·log:·text·strings·sent·from |
| 157 | the·Telnet·server·that·are·not·explicitly·received·by·a·<code·class="inline">ct_telnet</code>·function, | 157 | the·Telnet·server·that·are·not·explicitly·received·by·a·<code·class="inline">ct_telnet</code>·function, |
| 158 | such·as·<a·href="#expect/3"><code·class="inline">expect/3</code></a>.·However,·<code·class="inline">ct_telnet</code>·can·be·configured·to·use | 158 | such·as·<a·href="#expect/3"><code·class="inline">expect/3</code></a>.·However,·<code·class="inline">ct_telnet</code>·can·be·configured·to·use |
| 159 | a·special·purpose·event·handler,·implemented·in·<code·class="inline">ct_conn_log_h</code>,·for·logging | 159 | a·special·purpose·event·handler,·implemented·in·<code·class="inline">ct_conn_log_h</code>,·for·logging |
| 160 | <em>all</em>·Telnet·traffic.·To·use·this·handler,·install·a·<code·class="inline">Common·Test</code>·hook·named | 160 | <em>all</em>·Telnet·traffic.·To·use·this·handler,·install·a·<code·class="inline">Common·Test</code>·hook·named |
| 161 | <code·class="inline">cth_conn_log</code>.·Example·(using·the·test·suite·information·function):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 161 | <code·class="inline">cth_conn_log</code>.·Example·(using·the·test·suite·information·function):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="3370367594-1">(</span><span·class="p"·data-group-id="3370367594-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | ····</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="p"·data-group-id="3370367594-2">[</span><span·class="p"·data-group-id="3370367594-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3370367594-4">[</span><span·class="p"·data-group-id="3370367594-5">{</[·...·truncated·by·diffoscope;·len:·805,·SHA:·43c289fab0fb8fc5f8c7988debc7190a11b13016c5bbde0f6a971082d69c8154·...·]-2">]</span><span·class="p">.</span></code></pre><p><code·class="inline">conn_mod()</code>·is·the·name·of·the·<code·class="inline">Common·Test</code>·module·implementing·the·connection |
| 163 | protocol,·that·is,·<code·class="inline">ct_telnet</code>.</p><p>The·<code·class="inline">cth_conn_log</code>·hook·performs·unformatted·logging·of·Telnet·data·to·a | 163 | protocol,·that·is,·<code·class="inline">ct_telnet</code>.</p><p>The·<code·class="inline">cth_conn_log</code>·hook·performs·unformatted·logging·of·Telnet·data·to·a |
| 164 | separate·text·file.·All·Telnet·communication·is·captured·and·printed,·including | 164 | separate·text·file.·All·Telnet·communication·is·captured·and·printed,·including |
| 165 | any·data·sent·from·the·server.·The·link·to·this·text·file·is·located·at·the·top | 165 | any·data·sent·from·the·server.·The·link·to·this·text·file·is·located·at·the·top |
| 166 | of·the·test·case·HTML·log.</p><p>By·default,·data·for·all·Telnet·connections·is·logged·in·one·common·file·(named | 166 | of·the·test·case·HTML·log.</p><p>By·default,·data·for·all·Telnet·connections·is·logged·in·one·common·file·(named |
| 167 | <code·class="inline">default</code>),·which·can·get·messy,·for·example,·if·multiple·Telnet·sessions·are | 167 | <code·class="inline">default</code>),·which·can·get·messy,·for·example,·if·multiple·Telnet·sessions·are |
| 168 | running·in·parallel.·Therefore·a·separate·log·file·can·be·created·for·each | 168 | running·in·parallel.·Therefore·a·separate·log·file·can·be·created·for·each |
| 169 | connection.·To·configure·this,·use·hook·option·<code·class="inline">hosts</code>·and·list·the·names·of·the | 169 | connection.·To·configure·this,·use·hook·option·<code·class="inline">hosts</code>·and·list·the·names·of·the |
| Offset 172, 23 lines modified | Offset 172, 23 lines modified | ||
| 172 | default·value·of·this·option·is·<code·class="inline">raw</code>,·which·results·in·the·behavior·described | 172 | default·value·of·this·option·is·<code·class="inline">raw</code>,·which·results·in·the·behavior·described |
| 173 | above.·If·the·value·is·set·to·<code·class="inline">html</code>,·all·Telnet·communication·is·printed·to·the | 173 | above.·If·the·value·is·set·to·<code·class="inline">html</code>,·all·Telnet·communication·is·printed·to·the |
| 174 | test·case·HTML·log·instead.</p><p>For·raw·logs,·<code·class="inline">prefix</code>·option·can·be·used·for·adjusting·prefix·data | 174 | test·case·HTML·log·instead.</p><p>For·raw·logs,·<code·class="inline">prefix</code>·option·can·be·used·for·adjusting·prefix·data |
| 175 | added·to·connection·log.·The·default·value·of·this·option·is | 175 | added·to·connection·log.·The·default·value·of·this·option·is |
| 176 | <code·class="inline">disabled</code>,·which·results·with·no·prefix·data.·If·the·value·is·set·to | 176 | <code·class="inline">disabled</code>,·which·results·with·no·prefix·data.·If·the·value·is·set·to |
| 177 | <code·class="inline">full</code>·prefix·contains·timestamp·and·additonal·information.·If·the | 177 | <code·class="inline">full</code>·prefix·contains·timestamp·and·additonal·information.·If·the |
| 178 | value·is·set·to·<code·class="inline">short</code>·prefix·includes·only·human·readable·timestamp.</p><p>All·<code·class="inline">cth_conn_log</code>·hook·options·described·can·also·be·specified·in·a | 178 | value·is·set·to·<code·class="inline">short</code>·prefix·includes·only·human·readable·timestamp.</p><p>All·<code·class="inline">cth_conn_log</code>·hook·options·described·can·also·be·specified·in·a |
| 179 | configuration·file·with·configuration·variable·<code·class="inline">ct_conn_log</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6639447327-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6639447327-2">[</span><span·class="p"·data-group-id="6639447327-3">{</span><span·class="ss">ct_telnet</span><span·class="p">,</span><span·class="p"·data-group-id="6639447327-4">[</span><span·class="p"·data-group-id="6639447327-5">{</span><span·class="ss">log_type</span><span·class="p">,</span><span·class="ss">raw</span><span·class="p"·data-group-id="6639447327-5">}</span><span·class="p">,</span><span·class="w"> | ||
| 180 | 179 | configuration·file·with·configuration·variable·<code·class="inline">ct_conn_log</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9101931195-1">{</span><span·class="ss">ct_conn_log</span><span[·...·truncated·by·diffoscope;·len:·488,·SHA:·ab1517e5be135582460f9bf3a3b434d5869b529b67ef20218bff9577a6eb8efe·...·] | |
| 180 | ···························</span><span·class="p"·data-group-id="9101931195-6">{</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="p"·data-group-id="9101931195-7">[</span><span·class="nf">key_or_name</span><span·class="p"·data-group-id="9101931195-8">(</span><span·class="p"·data-group-id="9101931195-8">)</span><span·class="p"·data-group-id="9101931195-7">]</span><span·class="p"·data-group-id="9101931195-6">}</span><span·class="p"·data-group-id="9101931195-4">]</span><span·class="p"·data-group-id="9101931195-3">}</span><span·class="p"·data-group-id="9101931195-2">]</span><span·class="p"·data-group-id="9101931195-1">}</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Hook·options·specified·in·a·configuration·file·overwrite·any·hard-coded·hook | ||
| 181 | options·in·the·test·suite.</p></section><p><a·href=""·id="Logging_example"></a></p><p><em>Logging·Example:</em></p><p>The·following·<code·class="inline">ct_hooks</code>·statement·causes·printing·of·Telnet·traffic·to·separate | 181 | options·in·the·test·suite.</p></section><p><a·href=""·id="Logging_example"></a></p><p><em>Logging·Example:</em></p><p>The·following·<code·class="inline">ct_hooks</code>·statement·causes·printing·of·Telnet·traffic·to·separate |
| 182 | logs·for·the·connections·<code·class="inline">server1</code>·and·<code·class="inline">server2</code>.·Traffic·for·any·other | 182 | logs·for·the·connections·<code·class="inline">server1</code>·and·<code·class="inline">server2</code>.·Traffic·for·any·other |
| 183 | connections·is·logged·in·the·default·Telnet·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 183 | connections·is·logged·in·the·default·Telnet·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="1879806088-1">(</span><span·class="p"·data-group-id="1879806088-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 184 | ····</span><span·class="p"·data-group-id=" | 184 | ····</span><span·class="p"·data-group-id="1879806088-2">[</span><span·class="p"·data-group-id="1879806088-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w"> |
| 185 | ······</span><span·class="p"·data-group-id="2159937933-4">[</span><span·class="p"·data-group-id="2159937933-5">{</span><span·class="ss">cth_conn_log</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2159937933-6">[</span><span·class="p"·data-group-id="2159937933-7">{</span><span·class="ss">ct_telnet</span><span·class="p">,</span><span·class="p"·data-group-id="2159937933-8">[</span><span·class="p"·data-group-id="2159937933-9">{</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="p"·data-group-id="2159937933-10">[</span><span·class="ss">server1</span><span·class="p">,</span><span·class="ss">server2</span><span·class="p"·data-group-id="2159937933-10">]</span><span·class="p"·data-group-id="2159937933-9">}</span><span·class="p"·data-group-id="2159937933-8">]</span><span·class="p"·data-group-id="2159937933-7">}</span><span·class="p"·data-group-id="2159937933-6">]</span><span·class="p"·data-group-id="2159937933-5">}</span><span·class="p"·data-group-id="2159937933-4">]</span><span·class="p"·data-group-id="2159937933-3">}</span><span·class="p"·data-group-id="2159937933-2">]</span><span·class="p">.</span></code></pre><p>As·previously·explained,·this·specification·can·also·be·provided·by·an·entry | ||
| 186 | 185 | ······</span><span·class="p"·data-group-id="1879806088-4">[</span><span·class="p"·data-group-id="1879806088-5">{</span><span·class="ss">cth_conn_log</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1879806088-6">[</span>[·...·truncated·by·diffoscope;·len:·1003,·SHA:·f45fc1ca352e20fb0f4d1932a7067619f2f2a51ef08c9e4965012f0a6c7e0df0·...·] | |
| 186 | like·the·following·in·a·configuration·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6792512776-1">{</span><span·class="ss">ct_conn_log</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6792512776-2">[</span><span·class="p"·data-group-id="6792512776-3">{</span><span·class="ss">ct_telnet</span><span·class="p">,</span><span·class="p"·data-group-id="6792512776-4">[</span><span·class="p"·data-group-id="6792512776-5">{</span><span·class="ss">hosts</span><span·class="p">,</span><span·class="p"·data-group-id="6792512776-6">[</span><span·class="ss">server1</span><span·class="p">,</span><span·class="ss">server2</span><span·class="p"·data-group-id="6792512776-6">]</span><span·class="p"·data-group-id="6792512776-5">}</span><span·class="p"·data-group-id="6792512776-4">]</span><span·class="p"·data-group-id="6792512776-3">}</span><span·class="p"·data-group-id="6792512776-2">]</span><span·class="p"·data-group-id="6792512776-1">}</span><span·class="p">.</span></code></pre><p>In·this·case·the·<code·class="inline">ct_hooks</code>·statement·in·the·test·suite·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="4362311327-1">(</span><span·class="p"·data-group-id="4362311327-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 187 | ····</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="p"·data-group-id="4362311327-2">[</span><span·class="p"·data-group-id="4362311327-3">{</span><span·class="ss">ct_hooks</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4362311327-4">[</span><span·class="p"·data-group-id="4362311327-5">{</[·...·truncated·by·diffoscope;·len:·395,·SHA:·514036e017a7e2790859b2233a24e4b59c82a7d42cde5c2a71a5f3b11ecdf2ad·...·]-2">]</span><span·class="p">.</span></code></pre><h2·id="module-see-also"·class="section-heading"> |
| 188 | ··<a·href="#module-see-also"·class="hover-link"> | 188 | ··<a·href="#module-see-also"·class="hover-link"> |
| 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 190 | ··</a> | 190 | ··</a> |
| 191 | ··<span·class="text">See·Also</span> | 191 | ··<span·class="text">See·Also</span> |
| 192 | </h2> | 192 | </h2> |
| 193 | <p><a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a></p> | 193 | <p><a·href="unix_telnet.html"><code·class="inline">unix_telnet</code></a></p> |
| 194 | ····</section> | 194 | ····</section> |
| Offset 865, 17 lines modified | Offset 865, 17 lines modified | ||
| 865 | of·waiting·for·prompt.</p></li><li><p><strong><code·class="inline">repeat·|·repeat,·N</code></strong>·-·The·pattern(s)·must·be·matched·multiple·times.·If | 865 | of·waiting·for·prompt.</p></li><li><p><strong><code·class="inline">repeat·|·repeat,·N</code></strong>·-·The·pattern(s)·must·be·matched·multiple·times.·If |
| 866 | <code·class="inline">N</code>·is·specified,·the·pattern(s)·are·matched·<code·class="inline">N</code>·times,·and·the·function | 866 | <code·class="inline">N</code>·is·specified,·the·pattern(s)·are·matched·<code·class="inline">N</code>·times,·and·the·function |
| 867 | returns·<code·class="inline">HaltReason·=·done</code>.·This·option·can·be·interrupted·by·one·or·more | 867 | returns·<code·class="inline">HaltReason·=·done</code>.·This·option·can·be·interrupted·by·one·or·more |
| 868 | <code·class="inline">HaltPatterns</code>.·<code·class="inline">MatchList</code>·is·always·returned,·that·is,·a·list·of·<code·class="inline">Match</code> | 868 | <code·class="inline">HaltPatterns</code>.·<code·class="inline">MatchList</code>·is·always·returned,·that·is,·a·list·of·<code·class="inline">Match</code> |
| 869 | instead·of·only·one·<code·class="inline">Match</code>.·Also·<code·class="inline">HaltReason</code>·is·returned.</p></li><li><p><strong><code·class="inline">sequence</code></strong>·-·All·patterns·must·be·matched·in·a·sequence.·A·match·is·not | 869 | instead·of·only·one·<code·class="inline">Match</code>.·Also·<code·class="inline">HaltReason</code>·is·returned.</p></li><li><p><strong><code·class="inline">sequence</code></strong>·-·All·patterns·must·be·matched·in·a·sequence.·A·match·is·not |
| 870 | concluded·until·all·patterns·are·matched.·This·option·can·be·interrupted·by | 870 | concluded·until·all·patterns·are·matched.·This·option·can·be·interrupted·by |
| 871 | one·or·more·<code·class="inline">HaltPatterns</code>.·<code·class="inline">MatchList</code>·is·always·returned,·that·is,·a·list·of | 871 | one·or·more·<code·class="inline">HaltPatterns</code>.·<code·class="inline">MatchList</code>·is·always·returned,·that·is,·a·list·of |
| 872 | <code·class="inline">Match</code>·instead·of·only·one·<code·class="inline">Match</code>.·Also·<code·class="inline">HaltReason</code>·is·returned.</p></li></ul><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expect</span><span·class="p"·data-group-id=" | 872 | <code·class="inline">Match</code>·instead·of·only·one·<code·class="inline">Match</code>.·Also·<code·class="inline">HaltReason</code>·is·returned.</p></li></ul><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expect</span><span·class="p"·data-group-id="6649624176-1">(</span><span·class="n">Connection</span><span·class="p">,</span><span·class="p"·data-group-id="6649624176-2">[</span><span·class="p"·data-group-id="6649624176-3">{</span><span·class="ss">abc</span><span·class="p">,</span><span·class="s">&quo[·...·truncated·by·diffoscope;·len:·1028,·SHA:·2e7a08f1aea0ed356c404844fdc38dfd1b729f6f23e45f0cee193082376c2a3e·...·]6-1">)</span></code></pre><p>First·this·tries·to·match·<code·class="inline">"ABC"</code>,·and·then·<code·class="inline">"XYZ"</code>,·but·if·<code·class="inline">"NNN"</code>·appears,·the |
| 873 | function·returns·<code·class="inline">{error,{nnn,["NNN"]}}</code>.·If·both·<code·class="inline">"ABC"</code>·and·<code·class="inline">"XYZ"</code>·are | 873 | function·returns·<code·class="inline">{error,{nnn,["NNN"]}}</code>.·If·both·<code·class="inline">"ABC"</code>·and·<code·class="inline">"XYZ"</code>·are |
| 874 | matched,·the·function·returns·<code·class="inline">{ok,[AbcMatch,XyzMatch]}</code>.</p><p><em>Example·2:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expect</span><span·class="p"·data-group-id=" | 874 | matched,·the·function·returns·<code·class="inline">{ok,[AbcMatch,XyzMatch]}</code>.</p><p><em>Example·2:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expect</span><span·class="p"·data-group-id="1290800694-1">(</span><span·class="n">Connection</span><span·class="p">,</span><span·class="p"·data-group-id="1290800694-2">[</span><span·class="p"·data-group-id="1290800694-3">{</span><span·class="ss">abc</span><span·class="p">,</span><span·class="s">&quo[·...·truncated·by·diffoscope;·len:·1182,·SHA:·80815250d61781048fb3dfe966375f611f47078d7bfcb535c070b48a08fc7495·...·]-1">)</span></code></pre><p>This·tries·to·match·<code·class="inline">"ABC"</code>·or·<code·class="inline">"XYZ"</code>·twice.·If·<code·class="inline">"NNN"</code>·appears,·the·function |
| 875 | returns·<code·class="inline">HaltReason·=·{nnn,["NNN"]}</code>.</p><p>Options·<code·class="inline">repeat</code>·and·<code·class="inline">sequence</code>·can·be·combined·to·match·a·sequence·multiple | 875 | returns·<code·class="inline">HaltReason·=·{nnn,["NNN"]}</code>.</p><p>Options·<code·class="inline">repeat</code>·and·<code·class="inline">sequence</code>·can·be·combined·to·match·a·sequence·multiple |
| 876 | times.</p> | 876 | times.</p> |
| 877 | ··</section> | 877 | ··</section> |
| 878 | </section> | 878 | </section> |
| 879 | <section·class="detail"·id="get_data/1"> | 879 | <section·class="detail"·id="get_data/1"> |
| 880 | ··<div·class="detail-header"> | 880 | ··<div·class="detail-header"> |
| Offset 1189, 15 lines modified | Offset 1189, 15 lines modified | ||
| 1189 | ······<p·class="built-using"> | 1189 | ······<p·class="built-using"> |
| 1190 | ········Built·using | 1190 | ········Built·using |
| 1191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1193 | ······</p> | 1193 | ······</p> |
| 1194 | <p>Copyright·©·1996-202 | 1194 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1195 | ····</footer> | 1195 | ····</footer> |
| 1196 | ··</div> | 1196 | ··</div> |
| 1197 | </main> | 1197 | </main> |
| 1198 | </div> | 1198 | </div> |
| 1199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1200 | ··<script> | 1200 | ··<script> |
| 1201 | ··let·initialized·=·false; | 1201 | ··let·initialized·=·false; |
| Offset 233, 15 lines modified | Offset 233, 15 lines modified | ||
| 233 | ······<p·class="built-using"> | 233 | ······<p·class="built-using"> |
| 234 | ········Built·using | 234 | ········Built·using |
| 235 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 235 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 236 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 236 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 237 | ······</p> | 237 | ······</p> |
| 238 | <p>Copyright·©·1996-202 | 238 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 239 | ····</footer> | 239 | ····</footer> |
| 240 | ··</div> | 240 | ··</div> |
| 241 | </main> | 241 | </main> |
| 242 | </div> | 242 | </div> |
| 243 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 243 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 244 | ··<script> | 244 | ··<script> |
| 245 | ··let·initialized·=·false; | 245 | ··let·initialized·=·false; |
| Offset 157, 73 lines modified | Offset 157, 73 lines modified | ||
| 157 | between·the·cases·and·therefore·introduce·dependencies·between·them.</p><p>To·avoid·this,·we·can·consider·starting·and·stopping·the·server·for·every·test. | 157 | between·the·cases·and·therefore·introduce·dependencies·between·them.</p><p>To·avoid·this,·we·can·consider·starting·and·stopping·the·server·for·every·test. |
| 158 | We·can·thus·implement·the·start·and·stop·action·as·common·functions·to·be·called | 158 | We·can·thus·implement·the·start·and·stop·action·as·common·functions·to·be·called |
| 159 | from·<a·href="ct_suite.html#c:init_per_testcase/2"><code·class="inline">init_per_testcase</code></a>·and | 159 | from·<a·href="ct_suite.html#c:init_per_testcase/2"><code·class="inline">init_per_testcase</code></a>·and |
| 160 | <a·href="ct_suite.html#c:end_per_testcase/2"><code·class="inline">end_per_testcase</code></a>.·(Remember·to·test·the | 160 | <a·href="ct_suite.html#c:end_per_testcase/2"><code·class="inline">end_per_testcase</code></a>.·(Remember·to·test·the |
| 161 | start·and·stop·functionality·separately.)·The·configuration·can·also·be | 161 | start·and·stop·functionality·separately.)·The·configuration·can·also·be |
| 162 | implemented·as·a·common·function,·maybe·grouped·with·the·start·function. | 162 | implemented·as·a·common·function,·maybe·grouped·with·the·start·function. |
| 163 | Finally,·the·testing·of·connecting·and·disconnecting·a·client·can·be·grouped | 163 | Finally,·the·testing·of·connecting·and·disconnecting·a·client·can·be·grouped |
| 164 | into·one·test·case.·The·resulting·suite·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9 | 164 | into·one·test·case.·The·resulting·suite·can·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9955732898-1">(</span><span·class="ss">my_server_SUITE</span><span·class="p"·data-group-id="9955732898-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="9 | 165 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="9955732898-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="9955732898-2">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="9 | 166 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="9955732898-3">(</span><span·class="s">"ct.hrl"</span><span·class="p"·data-group-id="9955732898-3">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="c1">%%%·init·and·end·functions...</span><span·class="w"> | 167 | </span><span·class="c1">%%%·init·and·end·functions...</span><span·class="w"> |
| 168 | </span><span·class="nf">suite</span><span·class="p"·data-group-id="9 | 168 | </span><span·class="nf">suite</span><span·class="p"·data-group-id="9955732898-4">(</span><span·class="p"·data-group-id="9955732898-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="9955732898-5">[</span><span·class="p"·data-group-id="9955732898-6">{</span>[·...·truncated·by·diffoscope;·len:·185,·SHA:·62b6f081446c3ca94a7e8dc9d6a9627b1a98f111dbcaa42af00a2fd6db950b32·...·]8-5">]</span><span·class="p">.</span><span·class="w"> |
| 169 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9 | 169 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9955732898-7">(</span><span·class="ss">start_and_stop</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ····</span><span·class="n">Config</span><span·class="p">;</span><span·class="w"> | 170 | ····</span><span·class="n">Config</span><span·class="p">;</span><span·class="w"> |
| 171 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9 | 171 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9955732898-8">(</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="p"·data-group-id="9 | 172 | ····</span><span·class="p"·data-group-id="9955732898-9">[</span><span·class="p"·data-group-id="9955732898-10">{</span><span·class="ss">server_pid</span><span·class="p">,</span><span·class="nf">start_server</span><span·class="p"·data-group-id="9955732898-11">(</span><span·class="p"·data-group-id="99[·...·truncated·by·diffoscope;·len:·216,·SHA:·1e6034b36caf6f4f5657cb8ecd75b5650ce89fdefd23f4df3a7a99428385602d·...·]8-9">]</span><span·class="p">;</span><span·class="w"> |
| 173 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9 | 173 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="9955732898-12">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_server</span><span·class="p"·data-group-id="9 | 174 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_server</span><span·class="p"·data-group-id="9955732898-13">(</span><span·class="p"·data-group-id="9955732898-13">)</span><span·class="p">,</span><span·class="w"> |
| 175 | ····</span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9 | 175 | ····</span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9955732898-14">(</span><span·class="p"·data-group-id="9955732898-14">)</span><span·class="p">,</span><span·class="w"> |
| 176 | ····</span><span·class="p"·data-group-id="9 | 176 | ····</span><span·class="p"·data-group-id="9955732898-15">[</span><span·class="p"·data-group-id="9955732898-16">{</span><span·class="ss">server_pid</span><span·class="p">,</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-16">}</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·105,·SHA:·8d9511c50242b78ba9cf0898ea3683fb415dae44e94ac5a593b81d858a68954a·...·]8-15">]</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="9 | 177 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="9955732898-17">(</span><span·class="ss">start_and_stop</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="9955732898-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 178 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 178 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 179 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="9 | 179 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="9955732898-18">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9 | 180 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9955732898-19">(</span><span·class="ss">server_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-19">)</span><span·class="p">,</span><span·class="w"> |
| 181 | ····</span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9 | 181 | ····</span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9955732898-20">(</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-20">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="c1">%%%·test·cases...</span><span·class="w"> | 182 | </span><span·class="c1">%%%·test·cases...</span><span·class="w"> |
| 183 | </span><span·class="nf">all</span><span·class="p"·data-group-id="9 | 183 | </span><span·class="nf">all</span><span·class="p"·data-group-id="9955732898-21">(</span><span·class="p"·data-group-id="9955732898-21">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="9955732898-22">[</span><span·class="ss">start_and_stop</span><span·class=[·...·truncated·by·diffoscope;·len:·200,·SHA:·fe0433f9da6b4417994022f6cd29716600bcf7c354a1e45e43fed6ca4c392122·...·]8-22">]</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="c1">%%·test·that·starting·and·stopping·works</span><span·class="w"> | 184 | </span><span·class="c1">%%·test·that·starting·and·stopping·works</span><span·class="w"> |
| 185 | </span><span·class="nf">start_and_stop</span><span·class="p"·data-group-id="9 | 185 | </span><span·class="nf">start_and_stop</span><span·class="p"·data-group-id="9955732898-23">(</span><span·class="p">_</span><span·class="p"·data-group-id="9955732898-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 186 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_server</span><span·class="p"·data-group-id="9 | 186 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_server</span><span·class="p"·data-group-id="9955732898-24">(</span><span·class="p"·data-group-id="9955732898-24">)</span><span·class="p">,</span><span·class="w"> |
| 187 | ····</span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9 | 187 | ····</span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9955732898-25">(</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-25">)</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="c1">%%·configuration·test</span><span·class="w"> | 188 | </span><span·class="c1">%%·configuration·test</span><span·class="w"> |
| 189 | </span><span·class="nf">config</span><span·class="p"·data-group-id="9 | 189 | </span><span·class="nf">config</span><span·class="p"·data-group-id="9955732898-26">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9 | 190 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9955732898-27">(</span><span·class="ss">server_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-27">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9 | 191 | ····</span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9955732898-28">(</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-28">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="c1">%%·test·connecting·and·disconnecting·client</span><span·class="w"> | 192 | </span><span·class="c1">%%·test·connecting·and·disconnecting·client</span><span·class="w"> |
| 193 | </span><span·class="nf">connect_and_disconnect</span><span·class="p"·data-group-id="9 | 193 | </span><span·class="nf">connect_and_disconnect</span><span·class="p"·data-group-id="9955732898-29">(</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9 | 194 | ····</span><span·class="n">ServerPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9955732898-30">(</span><span·class="ss">server_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9955732898-30">)</span><span·class="p">,</span><span·class="w"> |
| 195 | ····</span><span·class="p"·data-group-id="9 | 195 | ····</span><span·class="p"·data-group-id="9955732898-31">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">SessionId</span><span·class="p"·data-group-id="9955732898-31">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server[·...·truncated·by·diffoscope;·len:·188,·SHA:·5a5d34d2d4cae10d497358a00264bb1e2c6616c5675a7edf02ad008d86c71a4b·...·]8-32">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id="9 | 196 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id="9955732898-33">(</span><span·class="n">ServerPid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SessionId</span><span·class="p"·data-group-id="9955732898-33">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="c1">%%%·common·functions...</span><span·class="w"> | 197 | </span><span·class="c1">%%%·common·functions...</span><span·class="w"> |
| 198 | </span><span·class="nf">start_server</span><span·class="p"·data-group-id="9 | 198 | </span><span·class="nf">start_server</span><span·class="p"·data-group-id="9955732898-34">(</span><span·class="p"·data-group-id="9955732898-34">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="p"·data-group-id="9 | 199 | ····</span><span·class="p"·data-group-id="9955732898-35">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-35">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server[·...·truncated·by·diffoscope;·len:·154,·SHA:·783e0a4ad70051ad6df9add403160ae45eabb19a8ae833e25d372eb2149c0232·...·]8-36">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ····</span><span·class="n">ServerPid</span><span·class="p">.</span><span·class="w"> | 200 | ····</span><span·class="n">ServerPid</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9 | 201 | </span><span·class="nf">stop_server</span><span·class="p"·data-group-id="9955732898-37">(</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-37">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="9 | 202 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="9955732898-38">(</span><span·class="p"·data-group-id="9955732898-38">)</span><span·class="p">,</span><span·class="w"> |
| 203 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 203 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9 | 204 | </span><span·class="nf">configure_server</span><span·class="p"·data-group-id="9955732898-39">(</span><span·class="n">ServerPid</span><span·class="p"·data-group-id="9955732898-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 205 | ····</span><span·class="n">ServerCfgData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="9 | 205 | ····</span><span·class="n">ServerCfgData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">get_config</span><span·class="p"·data-group-id="9955732898-40">(</span><span·class="ss">my_server_cfg</span><span·class="p"·data-group-id="9955732898-40">)</span><span·class="p">,</span><span·class="w"> |
| 206 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">configure</span><span·class="p"·data-group-id="9 | 206 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">my_server</span><span·class="p">:</span><span·class="nf">configure</span><span·class="p"·data-group-id="9955732898-41">(</span><span·class="n">ServerPid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ServerCfgData</span><span·class="p"·data-group-id="9955732898-41">)</span><span·class="p">,</span><span·class="w"> |
| 207 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p><a·href=""·id="save_config"></a></p><h2·id="saving-configuration-data"·class="section-heading"> | 207 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p><a·href=""·id="save_config"></a></p><h2·id="saving-configuration-data"·class="section-heading"> |
| 208 | ··<a·href="#saving-configuration-data"·class="hover-link"> | 208 | ··<a·href="#saving-configuration-data"·class="hover-link"> |
| 209 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 209 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 210 | ··</a> | 210 | ··</a> |
| 211 | ··<span·class="text">Saving·Configuration·Data</span> | 211 | ··<span·class="text">Saving·Configuration·Data</span> |
| 212 | </h2> | 212 | </h2> |
| 213 | <p>Sometimes·it·is·impossible,·or·infeasible,·to·implement·independent·test·cases. | 213 | <p>Sometimes·it·is·impossible,·or·infeasible,·to·implement·independent·test·cases. |
| Offset 243, 48 lines modified | Offset 243, 48 lines modified | ||
| 243 | <code·class="inline">Saver</code>·is·always·matched·to·the·expected·name·of·the·saving·test·case.·This | 243 | <code·class="inline">Saver</code>·is·always·matched·to·the·expected·name·of·the·saving·test·case.·This |
| 244 | way,·problems·because·of·restructuring·of·the·test·suite·can·be·avoided.·Also, | 244 | way,·problems·because·of·restructuring·of·the·test·suite·can·be·avoided.·Also, |
| 245 | it·makes·the·dependency·more·explicit·and·the·test·suite·easier·to·read·and | 245 | it·makes·the·dependency·more·explicit·and·the·test·suite·easier·to·read·and |
| 246 | maintain.</p><p>To·pass·data·from·one·test·suite·to·another,·the·same·mechanism·is·used.·The | 246 | maintain.</p><p>To·pass·data·from·one·test·suite·to·another,·the·same·mechanism·is·used.·The |
| 247 | data·is·to·be·saved·by·finction·<a·href="ct_suite.html#c:end_per_suite/1"><code·class="inline">end_per_suite</code></a> | 247 | data·is·to·be·saved·by·finction·<a·href="ct_suite.html#c:end_per_suite/1"><code·class="inline">end_per_suite</code></a> |
| 248 | and·read·by·function·<a·href="ct_suite.html#c:init_per_suite/1"><code·class="inline">init_per_suite</code></a>·in·the | 248 | and·read·by·function·<a·href="ct_suite.html#c:init_per_suite/1"><code·class="inline">init_per_suite</code></a>·in·the |
| 249 | suite·that·follows.·When·passing·data·between·suites,·<code·class="inline">Saver</code>·carries·the·name | 249 | suite·that·follows.·When·passing·data·between·suites,·<code·class="inline">Saver</code>·carries·the·name |
| 250 | of·the·test·suite.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 250 | of·the·test·suite.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2476143784-1">(</span><span·class="ss">server_b_SUITE</span><span·class="p"·data-group-id="2476143784-1">)</span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 251 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="2476143784-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="2476143784-2">)</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 252 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="2476143784-3">(</span><span·class="s">"ct.hrl"</span><span·class="p"·data-group-id="2476143784-3">)</span><span·class="p">.</span><span·class="w"> |
| 253 | </span><span·class="c1">%%%·init·and·end·functions...</span><span·class="w"> | 253 | </span><span·class="c1">%%%·init·and·end·functions...</span><span·class="w"> |
| 254 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 254 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="2476143784-4">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 255 | ····</span><span·class="c1">%%·read·config·saved·by·previous·test·suite</span><span·class="w"> | 255 | ····</span><span·class="c1">%%·read·config·saved·by·previous·test·suite</span><span·class="w"> |
| 256 | ····</span><span·class="p"·data-group-id=" | 256 | ····</span><span·class="p"·data-group-id="2476143784-5">{</span><span·class="ss">server_a_SUITE</span><span·class="p">,</span><span·class="n">OldConfig</span><span·class="p"·data-group-id="2476143784-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc[·...·truncated·by·diffoscope;·len:·282,·SHA:·00250f29ae46b3fcee4d26988b073a82b631f36223c64718a16e72fce29ba8c0·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 257 | ····</span><span·class="c1">%%·extract·server·identity·(comes·from·server_a_SUITE)</span><span·class="w"> | 257 | ····</span><span·class="c1">%%·extract·server·identity·(comes·from·server_a_SUITE)</span><span·class="w"> |
| 258 | ····</span><span·class="n">ServerId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 258 | ····</span><span·class="n">ServerId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="2476143784-7">(</span><span·class="ss">server_id</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OldConfig</span><span·class="p"·data-group-id="2476143784-7">)</span><span·class="p">,</span><span·class="w"> |
| 259 | ····</span><span·class="n">SessionId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">connect_to_server</span><span·class="p"·data-group-id="3783820223-8">(</span><span·class="n">ServerId</span><span·class="p"·data-group-id="3783820223-8">)</span><span·class="p">,</span><span·class="w"> | ||
| 260 | ····</span><span·class=" | 259 | ····</span><span·class="n">SessionId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">connect_to_server</span><span·class="p"·data-group-id="2476143784-8">(</span><span·class="n">ServerId</span><span·class="p"·data-group-id="247614378[·...·truncated·by·diffoscope;·len:·30,·SHA:·4c99838827dbc772633e31fc165a68f8b5e4b8807b830955b3124b5a50af8ae2·...·]</span><span·class="w"> |
| 260 | ····</span><span·class="p"·data-group-id="2476143784-9">[</span><span·class="p"·data-group-id="2476143784-10">{</span><span·class="ss">ids</span><span·class="p">,</span><span·class="p"·data-group-id="2476143784-11">{</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="n">SessionId</span><span·class="p"·data-group-id="2476143784-11">}</span><span·class="p"·data-group-id="2476143784-10">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-9">]</span><span·class="p">.</span><span·class="w"> | ||
| 261 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id=" | 261 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id="2476143784-12">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 262 | ····</span><span·class="c1">%%·save·config·for·server_c_SUITE·(session_id·and·server_id)</span><span·class="w"> | 262 | ····</span><span·class="c1">%%·save·config·for·server_c_SUITE·(session_id·and·server_id)</span><span·class="w"> |
| 263 | ····</span><span·class="p"·data-group-id=" | 263 | ····</span><span·class="p"·data-group-id="2476143784-13">{</span><span·class="ss">save_config</span><span·class="p">,</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-13">}</span><span·class="w"> |
| 264 | </span><span·class="c1">%%%·test·cases...</span><span·class="w"> | 264 | </span><span·class="c1">%%%·test·cases...</span><span·class="w"> |
| 265 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 265 | </span><span·class="nf">all</span><span·class="p"·data-group-id="2476143784-14">(</span><span·class="p"·data-group-id="2476143784-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2476143784-15">[</span><span·class="ss">allocate</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·106,·SHA:·4905ef2823c85b8f1a855cd0f5e6af30ea403c43a04f053a7e958169e7d763d8·...·]-15">]</span><span·class="p">.</span><span·class="w"> |
| 266 | </span><span·class="nf">allocate</span><span·class="p"·data-group-id=" | 266 | </span><span·class="nf">allocate</span><span·class="p"·data-group-id="2476143784-16">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 267 | ····</span><span·class="p"·data-group-id=" | 267 | ····</span><span·class="p"·data-group-id="2476143784-17">{</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="n">SessionId</span><span·class="p"·data-group-id="2476143784-17">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">pro[·...·truncated·by·diffoscope;·len:·269,·SHA:·4ce5024993071f4afdbdf57b91780a82a0b57df191b0d10f82ce44fe966274f1·...·]-18">)</span><span·class="p">,</span><span·class="w"> |
| 268 | ····</span><span·class="p"·data-group-id=" | 268 | ····</span><span·class="p"·data-group-id="2476143784-19">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Handle</span><span·class="p"·data-group-id="2476143784-19">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">allocate_re[·...·truncated·by·diffoscope;·len:·219,·SHA:·ebd747dce7557962d08c08e661bc4147ae5331186909191b9a7ae2ce9265d31e·...·]-20">)</span><span·class="p">,</span><span·class="w"> |
| 269 | ····</span><span·class="c1">%%·save·handle·for·deallocation·test</span><span·class="w"> | 269 | ····</span><span·class="c1">%%·save·handle·for·deallocation·test</span><span·class="w"> |
| 270 | ····</span><span·class="n">NewConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 270 | ····</span><span·class="n">NewConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2476143784-21">[</span><span·class="p"·data-group-id="2476143784-22">{</span><span·class="ss">handle</span><span·class="p">,</span><span·class="n">Handle</span><span·class="p"·data-group-id="2476143784-22">}</span><span·class="p"·data-group-id="2476143784-21">]</span><span·class="p">,</span><span·class="w"> |
| 271 | ····</span><span·class="p"·data-group-id=" | 271 | ····</span><span·class="p"·data-group-id="2476143784-23">{</span><span·class="ss">save_config</span><span·class="p">,</span><span·class="n">NewConfig</span><span·class="p"·data-group-id="2476143784-23">}</span><span·class="p">.</span><span·class="w"> |
| 272 | </span><span·class="nf">deallocate</span><span·class="p"·data-group-id=" | 272 | </span><span·class="nf">deallocate</span><span·class="p"·data-group-id="2476143784-24">(</span><span·class="n">Config</span><span·class="p"·data-group-id="2476143784-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 273 | ····</span><span·class="p"·data-group-id=" | 273 | ····</span><span·class="p"·data-group-id="2476143784-25">{</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="n">SessionId</span><span·class="p"·data-group-id="2476143784-25">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">pro[·...·truncated·by·diffoscope;·len:·269,·SHA:·1e1f5eba285c7f9768d2e336e64a31bac92e4bd57db663d998ef44eae4ef239a·...·]-26">)</span><span·class="p">,</span><span·class="w"> |
| 274 | ····</span><span·class="p"·data-group-id=" | 274 | ····</span><span·class="p"·data-group-id="2476143784-27">{</span><span·class="ss">allocate</span><span·class="p">,</span><span·class="n">OldConfig</span><span·class="p"·data-group-id="2476143784-27">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">pr[·...·truncated·by·diffoscope;·len:·279,·SHA:·e9881880c36ed5638d45b3a83fda89ac3b0934ab2bb0a08b19994cbd7d80f998·...·]-28">)</span><span·class="p">,</span><span·class="w"> |
| 275 | ····</span><span·class="n">Handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 275 | ····</span><span·class="n">Handle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="2476143784-29">(</span><span·class="ss">handle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OldConfig</span><span·class="p"·data-group-id="2476143784-29">)</span><span·class="p">,</span><span·class="w"> |
| 276 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">deallocate_resource</span><span·class="p"·data-group-id=" | 276 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">deallocate_resource</span><span·class="p"·data-group-id="2476143784-30">(</span><span·class="n">ServerId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SessionId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Handle</span><span·class="p"·data-group-id="2476143784-30">)</span><span·class="p">.</span></code></pre><p>To·save·<code·class="inline">Config</code>·data·from·a·test·case·that·is·to·be·skipped,·return·tuple |
| 277 | <code·class="inline">{skip_and_save,Reason,ConfigList}</code>.</p><p>The·result·is·that·the·test·case·is·skipped·with·<code·class="inline">Reason</code>·printed·to·the·log | 277 | <code·class="inline">{skip_and_save,Reason,ConfigList}</code>.</p><p>The·result·is·that·the·test·case·is·skipped·with·<code·class="inline">Reason</code>·printed·to·the·log |
| 278 | file·(as·described·earlier)·and·<code·class="inline">ConfigList</code>·is·saved·for·the·next·test·case. | 278 | file·(as·described·earlier)·and·<code·class="inline">ConfigList</code>·is·saved·for·the·next·test·case. |
| 279 | <code·class="inline">ConfigList</code>·can·be·read·using·<code·class="inline">proplists:get_value(saved_config,·Config)</code>,·as | 279 | <code·class="inline">ConfigList</code>·can·be·read·using·<code·class="inline">proplists:get_value(saved_config,·Config)</code>,·as |
| 280 | described·earlier.·<code·class="inline">skip_and_save</code>·can·also·be·returned·from·<code·class="inline">init_per_suite</code>. | 280 | described·earlier.·<code·class="inline">skip_and_save</code>·can·also·be·returned·from·<code·class="inline">init_per_suite</code>. |
| 281 | In·this·case,·the·saved·data·can·be·read·by·<code·class="inline">init_per_suite</code>·in·the·suite·that | 281 | In·this·case,·the·saved·data·can·be·read·by·<code·class="inline">init_per_suite</code>·in·the·suite·that |
| 282 | follows.</p><h2·id="sequences"·class="section-heading"> | 282 | follows.</p><h2·id="sequences"·class="section-heading"> |
| 283 | ··<a·href="#sequences"·class="hover-link"> | 283 | ··<a·href="#sequences"·class="hover-link"> |
| Offset 296, 30 lines modified | Offset 296, 30 lines modified | ||
| 296 | following·tests·are·not·to·be·executed.·Typically,·if·the·<code·class="inline">save_config</code>·facility | 296 | following·tests·are·not·to·be·executed.·Typically,·if·the·<code·class="inline">save_config</code>·facility |
| 297 | is·used·and·a·test·case·that·is·expected·to·save·data·crashes,·the·following | 297 | is·used·and·a·test·case·that·is·expected·to·save·data·crashes,·the·following |
| 298 | case·cannot·run.·<code·class="inline">Common·Test</code>·offers·a·way·to·declare·such·dependencies,·called | 298 | case·cannot·run.·<code·class="inline">Common·Test</code>·offers·a·way·to·declare·such·dependencies,·called |
| Max diff block lines reached; 12265/57820 bytes (21.21%) of diff not shown. | |||
| Offset 164, 20 lines modified | Offset 164, 20 lines modified | ||
| 164 | </h2> | 164 | </h2> |
| 165 | <p>Event·handlers·can·be·installed·by·an·<code·class="inline">event_handler</code>·start·flag | 165 | <p>Event·handlers·can·be·installed·by·an·<code·class="inline">event_handler</code>·start·flag |
| 166 | (<a·href="ct_run_cmd.html"><code·class="inline">ct_run</code></a>)·or·option·<a·href="ct.html#run_test/1"><code·class="inline">ct:run_test/1</code></a>,·where·the·argument | 166 | (<a·href="ct_run_cmd.html"><code·class="inline">ct_run</code></a>)·or·option·<a·href="ct.html#run_test/1"><code·class="inline">ct:run_test/1</code></a>,·where·the·argument |
| 167 | specifies·the·names·of·one·or·more·event·handler·modules.</p><p><em>Example:</em></p><p><code·class="inline">$·ct_run·-suite·test/my_SUITE·-event_handler·handlers/my_evh1·handlers/my_evh2·-pa·$PWD/handlers</code></p><p>To·pass·start·arguments·to·the·event·handler·init·function,·use·option | 167 | specifies·the·names·of·one·or·more·event·handler·modules.</p><p><em>Example:</em></p><p><code·class="inline">$·ct_run·-suite·test/my_SUITE·-event_handler·handlers/my_evh1·handlers/my_evh2·-pa·$PWD/handlers</code></p><p>To·pass·start·arguments·to·the·event·handler·init·function,·use·option |
| 168 | <code·class="inline">ct_run·-event_handler_init</code>·instead·of·<code·class="inline">-event_handler</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>All·event·handler·modules·must·have·<code·class="inline">gen_event</code>·behavior.·These·modules·must | 168 | <code·class="inline">ct_run·-event_handler_init</code>·instead·of·<code·class="inline">-event_handler</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>All·event·handler·modules·must·have·<code·class="inline">gen_event</code>·behavior.·These·modules·must |
| 169 | be·precompiled·and·their·locations·must·be·added·explicitly·to·the·Erlang·code | 169 | be·precompiled·and·their·locations·must·be·added·explicitly·to·the·Erlang·code |
| 170 | server·search·path·(as·in·the·previous·example).</p></section><p>An·event_handler·tuple·in·argument·<code·class="inline">Opts</code>·has·the·following·definition·(see | 170 | server·search·path·(as·in·the·previous·example).</p></section><p>An·event_handler·tuple·in·argument·<code·class="inline">Opts</code>·has·the·following·definition·(see |
| 171 | <a·href="ct.html#run_test/1"><code·class="inline">ct:run_test/1</code></a>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 171 | <a·href="ct.html#run_test/1"><code·class="inline">ct:run_test/1</code></a>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2579617915-1">{</span><span·class="ss">event_handler</span><span·class="p">,</span><span·class="n">EventHandlers</span><span·class="p"·data-group-id="2579617915-1">}</span><span·class="w"> |
| 172 | </span><span·class="n">EventHandlers</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">EH</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 172 | </span><span·class="n">EventHandlers</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">EH</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="2579617915-2">[</span><span·class="n">EH</span><span·class="p"·data-group-id="2579617915-2">]</span><span·class="w"> |
| 173 | </span><span·class="n">EH</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="8825051253-3">(</span><span·class="p"·data-group-id="8825051253-3">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="8825051253-4">{</span><span·class="nf">atom</span><span·class="p"·data-group-id="8825051253-5">(</span><span·class="p"·data-group-id="8825051253-5">)</span><span·class="p">,</span><span·class="n">InitArgs</span><span·class="p"·data-group-id="8825051253-4">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="8825051253-6">{</span><span·class="p"·data-group-id="8825051253-7">[</span><span·class="nf">atom</span><span·class="p"·data-group-id="8825051253-8">(</span><span·class="p"·data-group-id="8825051253-8">)</span><span·class="p"·data-group-id="8825051253-7">]</span><span·class="p">,</span><span·class="n">InitArgs</span><span·class="p"·data-group-id="8825051253-6">}</span><span·class="w"> | ||
| 174 | </span><span·class="n">InitArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8825051253-9">[</span><span·class="nf">term</span><span·class="p"·data-group-id="8825051253-10">(</span><span·class="p"·data-group-id="8825051253-10">)</span><span·class="p"·data-group-id="8825051253-9">]</span></code></pre><p>In·the·following·example,·two·event·handlers·for·the·<code·class="inline">my_SUITE</code>·test·are | ||
| 175 | 173 | </span><span·class="n">EH</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="2579617915-3">(</span><span·class="p"·data-group-id="2579617915-3">)</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·838,·SHA:·5a2d4ac795b5d143f7e03aab2488057c6cba4d719cca1a7cf17eeb213ee81837·...·] | |
| 174 | </span><span·class="n">InitArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2579617915-9">[</span><span·class="nf">term</span><span·class="p"·data-group-id="2579617915-10">(</span><span·class="p"·data-group-id="2579617915-10">)</span><span·class="p"·data-group-id="2579617915-9">]</span></code></pre><p>In·the·following·example,·two·event·handlers·for·the·<code·class="inline">my_SUITE</code>·test·are | ||
| 175 | installed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">run_test</span><span·class="p"·data-group-id="3415893102-1">(</span><span·class="p"·data-group-id="3415893102-2">[</span><span·class="p"·data-group-id="3415893102-3">{</span><span·class="ss">suite</span><span·class="p">,</span><span·class="s">"test/my_SUITE"</span><span·class="p"·data-group-id="3415893102-3">}</span><span·class="p">,</span><span·class="p"·data-group-id="3415893102-4">{</span><span·class="ss">event_handler</span><span·class="p">,</span><span·class="p"·data-group-id="3415893102-5">[</span><span·class="ss">my_evh1</span><span·class="p">,</span><span·class="p"·data-group-id="3415893102-6">{</span><span·class="ss">my_evh2</span><span·class="p">,</span><span·class="p"·data-group-id="3415893102-7">[</span><span·class="nf">node</span><span·class="p"·data-group-id="3415893102-8">(</span><span·class="p"·data-group-id="3415893102-8">)</span><span·class="p"·data-group-id="3415893102-7">]</span><span·class="p"·data-group-id="3415893102-6">}</span><span·class="p"·data-group-id="3415893102-5">]</span><span·class="p"·data-group-id="3415893102-4">}</span><span·class="p"·data-group-id="3415893102-2">]</span><span·class="p"·data-group-id="3415893102-1">)</span><span·class="p">.</span></code></pre><p>Event·handler·<code·class="inline">my_evh1</code>·is·started·with·<code·class="inline">[]</code>·as·argument·to·the·init·function. | ||
| 176 | Event·handler·<code·class="inline">my_evh2</code>·is·started·with·the·name·of·the·current·node·in·the·init | 176 | Event·handler·<code·class="inline">my_evh2</code>·is·started·with·the·name·of·the·current·node·in·the·init |
| 177 | argument·list.</p><p>Event·handlers·can·also·be·plugged·in·using·one·of·the·following | 177 | argument·list.</p><p>Event·handlers·can·also·be·plugged·in·using·one·of·the·following |
| 178 | <a·href="run_test_chapter.html#test_specifications">test·specification</a>·terms:</p><ul><li><code·class="inline">{event_handler,·EventHandlers}</code></li><li><code·class="inline">{event_handler,·EventHandlers,·InitArgs}</code></li><li><code·class="inline">{event_handler,·NodeRefs,·EventHandlers}</code></li><li><code·class="inline">{event_handler,·NodeRefs,·EventHandlers,·InitArgs}</code></li></ul><p><code·class="inline">EventHandlers</code>·is·a·list·of·module·names.·Before·a·test·session·starts,·the | 178 | <a·href="run_test_chapter.html#test_specifications">test·specification</a>·terms:</p><ul><li><code·class="inline">{event_handler,·EventHandlers}</code></li><li><code·class="inline">{event_handler,·EventHandlers,·InitArgs}</code></li><li><code·class="inline">{event_handler,·NodeRefs,·EventHandlers}</code></li><li><code·class="inline">{event_handler,·NodeRefs,·EventHandlers,·InitArgs}</code></li></ul><p><code·class="inline">EventHandlers</code>·is·a·list·of·module·names.·Before·a·test·session·starts,·the |
| 179 | init·function·of·each·plugged·in·event·handler·is·called·(with·the·<code·class="inline">InitArgs</code> | 179 | init·function·of·each·plugged·in·event·handler·is·called·(with·the·<code·class="inline">InitArgs</code> |
| 180 | list·as·argument·or·<code·class="inline">[]</code>·if·no·start·arguments·are·specified).</p><p>To·plug·in·a·handler·to·the·<code·class="inline">Common·Test</code>·Master·event·manager,·specify·<code·class="inline">master</code> | 180 | list·as·argument·or·<code·class="inline">[]</code>·if·no·start·arguments·are·specified).</p><p>To·plug·in·a·handler·to·the·<code·class="inline">Common·Test</code>·Master·event·manager,·specify·<code·class="inline">master</code> |
| 181 | as·the·node·in·<code·class="inline">NodeRefs</code>.</p><p>To·be·able·to·match·on·events,·the·event·handler·module·must·include·the·header | 181 | as·the·node·in·<code·class="inline">NodeRefs</code>.</p><p>To·be·able·to·match·on·events,·the·event·handler·module·must·include·the·header |
| 182 | file·<code·class="inline">ct_event.hrl</code>.·An·event·is·a·record·with·the·following·definition:</p><p><code·class="inline">#event{name,·node,·data}</code></p><ul><li><p><strong><code·class="inline">name</code></strong>·-·Label·(type)·of·the·event.</p></li><li><p><strong><code·class="inline">node</code></strong>·-·Name·of·the·node·that·the·event·originated·from·(only·relevant | 182 | file·<code·class="inline">ct_event.hrl</code>.·An·event·is·a·record·with·the·following·definition:</p><p><code·class="inline">#event{name,·node,·data}</code></p><ul><li><p><strong><code·class="inline">name</code></strong>·-·Label·(type)·of·the·event.</p></li><li><p><strong><code·class="inline">node</code></strong>·-·Name·of·the·node·that·the·event·originated·from·(only·relevant |
| Offset 320, 15 lines modified | Offset 320, 15 lines modified | ||
| 320 | ······<p·class="built-using"> | 320 | ······<p·class="built-using"> |
| 321 | ········Built·using | 321 | ········Built·using |
| 322 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 322 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 323 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 323 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 324 | ······</p> | 324 | ······</p> |
| 325 | <p>Copyright·©·1996-202 | 325 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 326 | ····</footer> | 326 | ····</footer> |
| 327 | ··</div> | 327 | ··</div> |
| 328 | </main> | 328 | </main> |
| 329 | </div> | 329 | </div> |
| 330 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 330 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 331 | ··<script> | 331 | ··<script> |
| 332 | ··let·initialized·=·false; | 332 | ··let·initialized·=·false; |
| Offset 127, 136 lines modified | Offset 127, 136 lines modified | ||
| 127 | <p><a·href=""·id="top"></a></p><h2·id="test-suite-example"·class="section-heading"> | 127 | <p><a·href=""·id="top"></a></p><h2·id="test-suite-example"·class="section-heading"> |
| 128 | ··<a·href="#test-suite-example"·class="hover-link"> | 128 | ··<a·href="#test-suite-example"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">Test·Suite·Example</span> | 131 | ··<span·class="text">Test·Suite·Example</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <p>The·following·example·test·suite·shows·some·tests·of·a·database·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 133 | <p>The·following·example·test·suite·shows·some·tests·of·a·database·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7001362296-1">(</span><span·class="ss">db_data_type_SUITE</span><span·class="p"·data-group-id="7001362296-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="w"> | 134 | </span><span·class="w"> |
| 135 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 135 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7001362296-2">(</span><span·class="s">"common_test/include/ct.hrl"</span><span·class="p"·data-group-id="7001362296-2">)</span><span·class="p">.</span><span·class="w"> |
| 136 | </span><span·class="c1">%%·Test·server·callbacks</span><span·class="w"> | 136 | </span><span·class="c1">%%·Test·server·callbacks</span><span·class="w"> |
| 137 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 137 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7001362296-3">(</span><span·class="p"·data-group-id="7001362296-4">[</span><span·class="ss">suite</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">all</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 138 | ·········</span><span·class="ss">init_per_suite</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_per_suite</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 138 | ·········</span><span·class="ss">init_per_suite</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_per_suite</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 139 | ·········</span><span·class="ss">init_per_testcase</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_per_testcase</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id=" | 139 | ·········</span><span·class="ss">init_per_testcase</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_per_testcase</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="7001362296-4">]</span><span·class="p"·data-group-id="7001362296-3">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="c1">%%·Test·cases</span><span·class="w"> | 140 | </span><span·class="c1">%%·Test·cases</span><span·class="w"> |
| 141 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 141 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7001362296-5">(</span><span·class="p"·data-group-id="7001362296-6">[</span><span·class="ss">string</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">integer</span><span·class="p">/</span[·...·truncated·by·diffoscope;·len:·120,·SHA:·9fb21ae209225112ddc5b626409e04c329159a70963331b70895f49c53d558af·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 142 | </span><span·class="w"> | 142 | </span><span·class="w"> |
| 143 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 143 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7001362296-7">(</span><span·class="n">CONNECT_STR</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"DSN=sqlserver;UID=alladin;PWD=sesame"</span><span·class="p"·data-group-id="7001362296-7">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 144 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 145 | </span><span·class="c1">%%·COMMON·TEST·CALLBACK·FUNCTIONS</span><span·class="w"> | 145 | </span><span·class="c1">%%·COMMON·TEST·CALLBACK·FUNCTIONS</span><span·class="w"> |
| 146 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 146 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 147 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 147 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 148 | </span><span·class="c1">%%·Function:·suite()·->·Info</span><span·class="w"> | 148 | </span><span·class="c1">%%·Function:·suite()·->·Info</span><span·class="w"> |
| 149 | </span><span·class="c1">%%</span><span·class="w"> | 149 | </span><span·class="c1">%%</span><span·class="w"> |
| 150 | </span><span·class="c1">%%·Info·=·[tuple()]</span><span·class="w"> | 150 | </span><span·class="c1">%%·Info·=·[tuple()]</span><span·class="w"> |
| 151 | </span><span·class="c1">%%···List·of·key/value·pairs.</span><span·class="w"> | 151 | </span><span·class="c1">%%···List·of·key/value·pairs.</span><span·class="w"> |
| 152 | </span><span·class="c1">%%</span><span·class="w"> | 152 | </span><span·class="c1">%%</span><span·class="w"> |
| 153 | </span><span·class="c1">%%·Description:·Returns·list·of·tuples·to·set·default·properties</span><span·class="w"> | 153 | </span><span·class="c1">%%·Description:·Returns·list·of·tuples·to·set·default·properties</span><span·class="w"> |
| 154 | </span><span·class="c1">%%··············for·the·suite.</span><span·class="w"> | 154 | </span><span·class="c1">%%··············for·the·suite.</span><span·class="w"> |
| 155 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 155 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 156 | </span><span·class="nf">suite</span><span·class="p"·data-group-id=" | 156 | </span><span·class="nf">suite</span><span·class="p"·data-group-id="7001362296-8">(</span><span·class="p"·data-group-id="7001362296-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 157 | ····</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="p"·data-group-id="7001362296-9">[</span><span·class="p"·data-group-id="7001362296-10">{</span><span·class="ss">timetrap</span><span·class="p">,</span><span·class="p"·data-group-id="7001362296-11">{</span><span·class="ss">minutes</span><span·class="p">,</span><span·class="mi[·...·truncated·by·diffoscope;·len:·159,·SHA:·aba80bd0d9c34da8f9cb9658a7eea931450af20c6877b0a595020276ccc9a19b·...·]-9">]</span><span·class="p">.</span><span·class="w"> |
| 158 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 158 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 159 | </span><span·class="c1">%%·Function:·init_per_suite(Config0)·->·Config1</span><span·class="w"> | 159 | </span><span·class="c1">%%·Function:·init_per_suite(Config0)·->·Config1</span><span·class="w"> |
| 160 | </span><span·class="c1">%%</span><span·class="w"> | 160 | </span><span·class="c1">%%</span><span·class="w"> |
| 161 | </span><span·class="c1">%%·Config0·=·Config1·=·[tuple()]</span><span·class="w"> | 161 | </span><span·class="c1">%%·Config0·=·Config1·=·[tuple()]</span><span·class="w"> |
| 162 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> | 162 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> |
| 163 | </span><span·class="c1">%%</span><span·class="w"> | 163 | </span><span·class="c1">%%</span><span·class="w"> |
| 164 | </span><span·class="c1">%%·Description:·Initialization·before·the·suite.</span><span·class="w"> | 164 | </span><span·class="c1">%%·Description:·Initialization·before·the·suite.</span><span·class="w"> |
| 165 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 165 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 166 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 166 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="7001362296-12">(</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 167 | ····</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="p"·data-group-id="7001362296-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ref</span><span·class="p"·data-group-id="7001362296-13">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·383,·SHA:·49aef7a03c6aef43b49f34ab31dec6d9e1299b16dd3297a29801035d0828c4af·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 168 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db_lib</span><span·class="p">:</span><span·class="nf">unique_table_name</span><span·class="p"·data-group-id=" | 168 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db_lib</span><span·class="p">:</span><span·class="nf">unique_table_name</span><span·class="p"·data-group-id="7001362296-16">(</span><span·class="p"·data-group-id="7001362296-16">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ····</span><span·class="p"·data-group-id=" | 169 | ····</span><span·class="p"·data-group-id="7001362296-17">[</span><span·class="p"·data-group-id="7001362296-18">{</span><span·class="ss">con_ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ref</span><span·class="w">·</span><span·class="p"·data-group-id="7001362296-18">}</s[·...·truncated·by·diffoscope;·len:·368,·SHA:·dc82287cb2b73aa163527f46eed197d02b0057ee4c981c76ccb83299d1f25ba5·...·]-17">]</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 170 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 171 | </span><span·class="c1">%%·Function:·end_per_suite(Config)·->·term()</span><span·class="w"> | 171 | </span><span·class="c1">%%·Function:·end_per_suite(Config)·->·term()</span><span·class="w"> |
| 172 | </span><span·class="c1">%%</span><span·class="w"> | 172 | </span><span·class="c1">%%</span><span·class="w"> |
| 173 | </span><span·class="c1">%%·Config·=·[tuple()]</span><span·class="w"> | 173 | </span><span·class="c1">%%·Config·=·[tuple()]</span><span·class="w"> |
| 174 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> | 174 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> |
| 175 | </span><span·class="c1">%%</span><span·class="w"> | 175 | </span><span·class="c1">%%</span><span·class="w"> |
| 176 | </span><span·class="c1">%%·Description:·Cleanup·after·the·suite.</span><span·class="w"> | 176 | </span><span·class="c1">%%·Description:·Cleanup·after·the·suite.</span><span·class="w"> |
| 177 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 177 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 178 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id="7001362296-20">(</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 179 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-21">(</span><span·class="ss">con_ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-21">)</span><span·class="p">,</span><span·class="w"> |
| 180 | ····</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id="7001362296-22">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="7001362296-22">)</span><span·class="p">,</span><span·class="w"> |
| 181 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 181 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 182 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 183 | </span><span·class="c1">%%·Function:·init_per_testcase(TestCase,·Config0)·->·Config1</span><span·class="w"> | 183 | </span><span·class="c1">%%·Function:·init_per_testcase(TestCase,·Config0)·->·Config1</span><span·class="w"> |
| 184 | </span><span·class="c1">%%</span><span·class="w"> | 184 | </span><span·class="c1">%%</span><span·class="w"> |
| 185 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> | 185 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> |
| 186 | </span><span·class="c1">%%···Name·of·the·test·case·that·is·about·to·run.</span><span·class="w"> | 186 | </span><span·class="c1">%%···Name·of·the·test·case·that·is·about·to·run.</span><span·class="w"> |
| 187 | </span><span·class="c1">%%·Config0·=·Config1·=·[tuple()]</span><span·class="w"> | 187 | </span><span·class="c1">%%·Config0·=·Config1·=·[tuple()]</span><span·class="w"> |
| 188 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> | 188 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> |
| 189 | </span><span·class="c1">%%</span><span·class="w"> | 189 | </span><span·class="c1">%%</span><span·class="w"> |
| 190 | </span><span·class="c1">%%·Description:·Initialization·before·each·test·case.</span><span·class="w"> | 190 | </span><span·class="c1">%%·Description:·Initialization·before·each·test·case.</span><span·class="w"> |
| 191 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 191 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 192 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id=" | 192 | </span><span·class="nf">init_per_testcase</span><span·class="p"·data-group-id="7001362296-23">(</span><span·class="n">Case</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-24">(</span><span·class="ss">con_ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-24">)</span><span·class="p">,</span><span·class="w"> |
| 194 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 194 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-25">(</span><span·class="ss">table_name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-25">)</span><span·class="p">,</span><span·class="w"> |
| 195 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 195 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="7001362296-26">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TableName</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">table_type</span><span·class="p"·data-group-id="7001362296-27"[·...·truncated·by·diffoscope;·len:·131,·SHA:·9428065e866686a54ba5f27aa49d08ca3f7d3e17caba42b494b43b2ebf40f00b·...·]-26">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> | 196 | ····</span><span·class="n">Config</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 197 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 198 | </span><span·class="c1">%%·Function:·end_per_testcase(TestCase,·Config)·->·term()</span><span·class="w"> | 198 | </span><span·class="c1">%%·Function:·end_per_testcase(TestCase,·Config)·->·term()</span><span·class="w"> |
| 199 | </span><span·class="c1">%%</span><span·class="w"> | 199 | </span><span·class="c1">%%</span><span·class="w"> |
| 200 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> | 200 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> |
| 201 | </span><span·class="c1">%%···Name·of·the·test·case·that·is·finished.</span><span·class="w"> | 201 | </span><span·class="c1">%%···Name·of·the·test·case·that·is·finished.</span><span·class="w"> |
| 202 | </span><span·class="c1">%%·Config·=·[tuple()]</span><span·class="w"> | 202 | </span><span·class="c1">%%·Config·=·[tuple()]</span><span·class="w"> |
| 203 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> | 203 | </span><span·class="c1">%%···A·list·of·key/value·pairs,·holding·the·test·case·configuration.</span><span·class="w"> |
| 204 | </span><span·class="c1">%%</span><span·class="w"> | 204 | </span><span·class="c1">%%</span><span·class="w"> |
| 205 | </span><span·class="c1">%%·Description:·Cleanup·after·each·test·case.</span><span·class="w"> | 205 | </span><span·class="c1">%%·Description:·Cleanup·after·each·test·case.</span><span·class="w"> |
| 206 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 206 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 207 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id=" | 207 | </span><span·class="nf">end_per_testcase</span><span·class="p"·data-group-id="7001362296-28">(</span><span·class="p">_</span><span·class="n">Case</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 208 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 208 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-29">(</span><span·class="ss">con_ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-29">)</span><span·class="p">,</span><span·class="w"> |
| 209 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 209 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-30">(</span><span·class="ss">table_name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-30">)</span><span·class="p">,</span><span·class="w"> |
| 210 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">delete_table</span><span·class="p"·data-group-id=" | 210 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">delete_table</span><span·class="p"·data-group-id="7001362296-31">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TableName</span><span·class="p"·data-group-id="7001362296-31">)</span><span·class="p">,</span><span·class="w"> |
| 211 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 211 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 212 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 213 | </span><span·class="c1">%%·Function:·all()·->·GroupsAndTestCases</span><span·class="w"> | 213 | </span><span·class="c1">%%·Function:·all()·->·GroupsAndTestCases</span><span·class="w"> |
| 214 | </span><span·class="c1">%%</span><span·class="w"> | 214 | </span><span·class="c1">%%</span><span·class="w"> |
| 215 | </span><span·class="c1">%%·GroupsAndTestCases·=·[{group,GroupName}·|·TestCase]</span><span·class="w"> | 215 | </span><span·class="c1">%%·GroupsAndTestCases·=·[{group,GroupName}·|·TestCase]</span><span·class="w"> |
| 216 | </span><span·class="c1">%%·GroupName·=·atom()</span><span·class="w"> | 216 | </span><span·class="c1">%%·GroupName·=·atom()</span><span·class="w"> |
| 217 | </span><span·class="c1">%%···Name·of·a·test·case·group.</span><span·class="w"> | 217 | </span><span·class="c1">%%···Name·of·a·test·case·group.</span><span·class="w"> |
| 218 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> | 218 | </span><span·class="c1">%%·TestCase·=·atom()</span><span·class="w"> |
| 219 | </span><span·class="c1">%%···Name·of·a·test·case.</span><span·class="w"> | 219 | </span><span·class="c1">%%···Name·of·a·test·case.</span><span·class="w"> |
| 220 | </span><span·class="c1">%%</span><span·class="w"> | 220 | </span><span·class="c1">%%</span><span·class="w"> |
| 221 | </span><span·class="c1">%%·Description:·Returns·the·list·of·groups·and·test·cases·that</span><span·class="w"> | 221 | </span><span·class="c1">%%·Description:·Returns·the·list·of·groups·and·test·cases·that</span><span·class="w"> |
| 222 | </span><span·class="c1">%%··············are·to·be·executed.</span><span·class="w"> | 222 | </span><span·class="c1">%%··············are·to·be·executed.</span><span·class="w"> |
| 223 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 223 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 224 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 224 | </span><span·class="nf">all</span><span·class="p"·data-group-id="7001362296-32">(</span><span·class="p"·data-group-id="7001362296-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ····</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="p"·data-group-id="7001362296-33">[</span><span·class="ss">string</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">integer</span><span·class="p"·data-group-id="7001362296-33">]</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 226 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 227 | </span><span·class="c1">%%·TEST·CASES</span><span·class="w"> | 227 | </span><span·class="c1">%%·TEST·CASES</span><span·class="w"> |
| 228 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> | 228 | </span><span·class="c1">%%--------------------------------------------------------------------</span><span·class="w"> |
| 229 | </span><span·class="nf">string</span><span·class="p"·data-group-id=" | 229 | </span><span·class="nf">string</span><span·class="p"·data-group-id="7001362296-34">(</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-34">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 230 | ····</span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id="7001362296-35">(</span><span·class="ss">dummy_key</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Dummy·string"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·1588857f0fdd152f67f0c0778cf058a7aaf60731f23a0b69c0714451c691d5d7·...·]-35">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 231 | </span><span·class="nf">integer</span><span·class="p"·data-group-id="7001362296-36">(</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-36">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id=" | 232 | ····</span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id="7001362296-37">(</span><span·class="ss">dummy_key</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-37">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id=" | 233 | </span><span·class="nf">insert_and_lookup</span><span·class="p"·data-group-id="7001362296-38">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Value</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-38">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 234 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 234 | ····</span><span·class="n">Ref</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-39">(</span><span·class="ss">con_ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-39">)</span><span·class="p">,</span><span·class="w"> |
| 235 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 235 | ····</span><span·class="n">TableName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="7001362296-40">(</span><span·class="ss">table_name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="7001362296-40">)</span><span·class="p">,</span><span·class="w"> |
| 236 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 236 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="7001362296-41">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TableName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·64,·SHA:·1682ac717480c9b3414864d14e25e5454ea2db5a14586f7085737649fedcc771·...·]-41">)</span><span·class="p">,</span><span·class="w"> |
| 237 | ····</span><span·class="p"·data-group-id=" | 237 | ····</span><span·class="p"·data-group-id="7001362296-42">[</span><span·class="n">Value</span><span·class="p"·data-group-id="7001362296-42">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">db</span><span·class="p">:</span><span·class="nf">lookup</span[·...·truncated·by·diffoscope;·len:·276,·SHA:·7a3ddfc529f336ed4a2e21f408e03a493c8b6967baee1abaad73e5db569a6977·...·]-43">)</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 42813/79983 bytes (53.53%) of diff not shown. | |||
| Offset 165, 61 lines modified | Offset 165, 61 lines modified | ||
| 165 | ··</a> | 165 | ··</a> |
| 166 | ··<span·class="text">A·Simple·Test·Suite</span> | 166 | ··<span·class="text">A·Simple·Test·Suite</span> |
| 167 | </h2> | 167 | </h2> |
| 168 | <p>As·shown·in·section·<a·href="basics_chapter.html#External_Interfaces">Common·Test·Basics</a>, | 168 | <p>As·shown·in·section·<a·href="basics_chapter.html#External_Interfaces">Common·Test·Basics</a>, |
| 169 | the·test·suite·module·implements·<a·href="ct_suite.html">callback·functions</a>·(mandatory | 169 | the·test·suite·module·implements·<a·href="ct_suite.html">callback·functions</a>·(mandatory |
| 170 | or·optional)·for·various·purposes,·for·example:</p><ul><li>Init/end·configuration·function·for·the·test·suite</li><li>Init/end·configuration·function·for·a·test·case</li><li>Init/end·configuration·function·for·a·test·case·group</li><li>Test·cases</li></ul><p>The·configuration·functions·are·optional.·The·following·example·is·a·test·suite | 170 | or·optional)·for·various·purposes,·for·example:</p><ul><li>Init/end·configuration·function·for·the·test·suite</li><li>Init/end·configuration·function·for·a·test·case</li><li>Init/end·configuration·function·for·a·test·case·group</li><li>Test·cases</li></ul><p>The·configuration·functions·are·optional.·The·following·example·is·a·test·suite |
| 171 | without·configuration·functions,·including·one·simple·test·case,·to·check·that | 171 | without·configuration·functions,·including·one·simple·test·case,·to·check·that |
| 172 | module·<code·class="inline">mymod</code>·exists·(that·is,·can·be·successfully·loaded·by·the·code·server):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 172 | module·<code·class="inline">mymod</code>·exists·(that·is,·can·be·successfully·loaded·by·the·code·server):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1463533558-1">(</span><span·class="ss">my1st_SUITE</span><span·class="p"·data-group-id="1463533558-1">)</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 173 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="1463533558-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="1463533558-2">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nf">all</span><span·class="p"·data-group-id="1463533558-3">(</span><span·class="p"·data-group-id="1463533558-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 175 | ····</span><span·class="p"·data-group-id=" | 175 | ····</span><span·class="p"·data-group-id="1463533558-4">[</span><span·class="ss">mod_exists</span><span·class="p"·data-group-id="1463533558-4">]</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="nf">mod_exists</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">mod_exists</span><span·class="p"·data-group-id="1463533558-5">(</span><span·class="p">_</span><span·class="p"·data-group-id="1463533558-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="p"·data-group-id="1463533558-6">{</span><span·class="ss">module</span><span·class="p">,</span><span·class="ss">mymod</span><span·class="p"·data-group-id="1463533558-6">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</spa[·...·truncated·by·diffoscope;·len:·182,·SHA:·da1f6f5dc82d11eb42fb67fccc5ed68cd174347878aec147db11fd1f32230d5a·...·]-7">)</span><span·class="p">.</span></code></pre><p>If·the·operation·fails,·a·bad·match·error·occurs·that·terminates·the·test·case.</p><h2·id="a-test-suite-with-configuration-functions"·class="section-heading"> |
| 178 | ··<a·href="#a-test-suite-with-configuration-functions"·class="hover-link"> | 178 | ··<a·href="#a-test-suite-with-configuration-functions"·class="hover-link"> |
| 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 180 | ··</a> | 180 | ··</a> |
| 181 | ··<span·class="text">A·Test·Suite·with·Configuration·Functions</span> | 181 | ··<span·class="text">A·Test·Suite·with·Configuration·Functions</span> |
| 182 | </h2> | 182 | </h2> |
| 183 | <p>If·you·need·to·perform·configuration·operations·to·run·your·test,·you·can | 183 | <p>If·you·need·to·perform·configuration·operations·to·run·your·test,·you·can |
| 184 | implement·configuration·functions·in·your·suite.·The·result·from·a·configuration | 184 | implement·configuration·functions·in·your·suite.·The·result·from·a·configuration |
| 185 | function·is·configuration·data,·or·<code·class="inline">Config</code>.·This·is·a·list·of·key-value·tuples | 185 | function·is·configuration·data,·or·<code·class="inline">Config</code>.·This·is·a·list·of·key-value·tuples |
| 186 | that·get·passed·from·the·configuration·function·to·the·test·cases·(possibly | 186 | that·get·passed·from·the·configuration·function·to·the·test·cases·(possibly |
| 187 | through·configuration·functions·on·"lower·level").·The·data·flow·looks·as | 187 | through·configuration·functions·on·"lower·level").·The·data·flow·looks·as |
| 188 | follows:</p><p><img·src="assets/config.gif"·alt="Configuration·Data·Flow·in·a·Suite"·title="Configuration·Data·Flow·in·a·Suite"/></p><p>The·following·example·shows·a·test·suite·that·uses·configuration·functions·to | 188 | follows:</p><p><img·src="assets/config.gif"·alt="Configuration·Data·Flow·in·a·Suite"·title="Configuration·Data·Flow·in·a·Suite"/></p><p>The·following·example·shows·a·test·suite·that·uses·configuration·functions·to |
| 189 | open·and·close·a·log·file·for·the·test·cases·(an·operation·that·is·unnecessary | 189 | open·and·close·a·log·file·for·the·test·cases·(an·operation·that·is·unnecessary |
| 190 | and·irrelevant·to·perform·by·each·test·case):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 190 | and·irrelevant·to·perform·by·each·test·case):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7994482623-1">(</span><span·class="ss">check_log_SUITE</span><span·class="p"·data-group-id="7994482623-1">)</span><span·class="p">.</span><span·class="w"> |
| 191 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 191 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7994482623-2">(</span><span·class="p"·data-group-id="7994482623-3">[</span><span·class="ss">all</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init_per_suite</span><span·class="p">/</[·...·truncated·by·diffoscope;·len:·258,·SHA:·dbe50fc81fc507eb317e8083d0597c6b523cf5d69cb371c8af7dba1ddec943dd·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 192 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7994482623-4">(</span><span·class="p"·data-group-id="7994482623-5">[</span><span·class="ss">check_restart_result</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">check_no_errors</span><[·...·truncated·by·diffoscope;·len:·142,·SHA:·ca766c53f7e9782c9cafcf0e3c55d4e60f6f26e7b12302184cb7bbef35021188·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="w"> | 193 | </span><span·class="w"> |
| 194 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 194 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="7994482623-6">(</span><span·class="nf">value</span><span·class="p"·data-group-id="7994482623-7">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="n">Config</span><span·class="p"·data-group-id="7994482623-7">)</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·344,·SHA:·f4979cba7f4afed84208bd515e2eea589ad25136aea8a278ed5b62e7a146f98d·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 195 | </span><span·class="nf">all</span><span·class="p"·data-group-id="7994482623-9">(</span><span·class="p"·data-group-id="7994482623-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="7994482623-10">[</span><span·class="ss">check_restart_result</span><span·c[·...·truncated·by·diffoscope;·len:·121,·SHA:·306f72018a9adc9bfc297686bb0fada927c62de171ac721d93bd2af0d0c38b57·...·]-10">]</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id=" | 196 | </span><span·class="nf">init_per_suite</span><span·class="p"·data-group-id="7994482623-11">(</span><span·class="n">InitConfigData</span><span·class="p"·data-group-id="7994482623-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 197 | ····</span><span·class="p"·data-group-id=" | 197 | ····</span><span·class="p"·data-group-id="7994482623-12">[</span><span·class="p"·data-group-id="7994482623-13">{</span><span·class="ss">logref</span><span·class="p">,</span><span·class="nf">open_log</span><span·class="p"·data-group-id="7994482623-14">(</span><span·class="p"·data-group-id="79944826[·...·truncated·by·diffoscope;·len:·219,·SHA:·f570606c12d319a61e5ee53f7c327816d2e784f6a95deada6d4b5e24e7375aaa·...·]-12">]</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id=" | 198 | </span><span·class="nf">end_per_suite</span><span·class="p"·data-group-id="7994482623-15">(</span><span·class="n">ConfigData</span><span·class="p"·data-group-id="7994482623-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="nf">close_log</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nf">close_log</span><span·class="p"·data-group-id="7994482623-16">(</span><span·class="o">?</span><span·class="nf">value</span><span·class="p"·data-group-id="7994482623-17">(</span><span·class="ss">logref</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ConfigData</span><span·class="p"[·...·truncated·by·diffoscope;·len:·80,·SHA:·49bd04ab773c62455f1369c16e742246aeaecbf1faf893c7ac99429a5aaa96b4·...·]-16">)</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="nf">check_restart_result</span><span·class="p"·data-group-id=" | 200 | </span><span·class="nf">check_restart_result</span><span·class="p"·data-group-id="7994482623-18">(</span><span·class="n">ConfigData</span><span·class="p"·data-group-id="7994482623-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ····</span><span·class="n">TestData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">read_log</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="n">TestData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">read_log</span><span·class="p"·data-group-id="7994482623-19">(</span><span·class="ss">restart</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="nf">value</span><span·class="p"·data-group-id="7994482623-20">(</span><span·class="ss">logref</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·159,·SHA:·98fdc4404d2b4ed7dbfcb0f18e2dbceea720b58cc1d715e2b69aeae28e2e462e·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ····</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="p"·data-group-id="7994482623-21">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p">_</span><span·class="n">Line</span><span·class="p"·data-group-id="7994482623-21">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·258,·SHA:·943a5a42d25f451afa6e10276b0d154844769ea96d4b39a3008b574ccd92cac2·...·]-22">)</span><span·class="p">.</span><span·class="w"> |
| 203 | </span><span·class="nf">check_no_errors</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">check_no_errors</span><span·class="p"·data-group-id="7994482623-23">(</span><span·class="n">ConfigData</span><span·class="p"·data-group-id="7994482623-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="n">TestData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">read_log</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="n">TestData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">read_log</span><span·class="p"·data-group-id="7994482623-24">(</span><span·class="ss">all</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="nf">value</span><span·class="p"·data-group-id="7994482623-25">(</span><span·class="ss">logref</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·155,·SHA:·ea5935d95cdee49fc9ef0b8908c6888900e7c5ee4824a7d62cb3e09fa0a32036·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">search_for</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">search_for</span><span·class="p"·data-group-id="7994482623-26">(</span><span·class="s">"error"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TestData</span><span·class="p"·data-group-id="7994482623-26">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 206 | ········</span><span·class="p"·data-group-id=" | 206 | ········</span><span·class="p"·data-group-id="7994482623-27">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="n">Line</span><span·class="p"·data-group-id="7994482623-27">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">ct</sp[·...·truncated·by·diffoscope;·len:·351,·SHA:·8f233795798f3de7b230fa86601182f9cf7fdcbc26e37e8b2f46da9f990c2c9f·...·]-28">)</span><span·class="p">;</span><span·class="w"> |
| 207 | ········</span><span·class="ss">nomatch</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> | 207 | ········</span><span·class="ss">nomatch</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> |
| 208 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·test·cases·verify,·by·parsing·a·log·file,·that·our·SUT·has·performed·a | 208 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·test·cases·verify,·by·parsing·a·log·file,·that·our·SUT·has·performed·a |
| 209 | successful·restart·and·that·no·unexpected·errors·are·printed.</p><p>To·execute·the·test·cases·in·the·recent·test·suite,·type·the·following·on·the | 209 | successful·restart·and·that·no·unexpected·errors·are·printed.</p><p>To·execute·the·test·cases·in·the·recent·test·suite,·type·the·following·on·the |
| 210 | UNIX/Linux·command·line·(assuming·that·the·suite·module·is·in·the·current | 210 | UNIX/Linux·command·line·(assuming·that·the·suite·module·is·in·the·current |
| 211 | working·directory):</p><pre><code·class="text">$·ct_run·-dir·.</code></pre><p>or:</p><pre><code·class="text">$·ct_run·-suite·check_log_SUITE</code></pre><p>To·use·the·Erlang·shell·to·run·our·test,·you·can·evaluate·the·following·call:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">run_test</span><span·class="p"·data-group-id="7 | 211 | working·directory):</p><pre><code·class="text">$·ct_run·-dir·.</code></pre><p>or:</p><pre><code·class="text">$·ct_run·-suite·check_log_SUITE</code></pre><p>To·use·the·Erlang·shell·to·run·our·test,·you·can·evaluate·the·following·call:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ct</span><span·class="p">:</span><span·class="nf">run_test</span><span·class="p"·data-group-id="7809842235-1">(</span><span·class="p"·data-group-id="7809842235-2">[</span><span·class="p"·data-group-id="7809842235-3">{</span><span·class="ss">dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"."</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·794,·SHA:·8ac4223a47c504381a6dfbe403fc04e10b9cbb9a5c6280a7a76419bde663e02f·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·result·from·running·the·test·is·printed·in·log·files·in·HTML·format·(stored |
| 212 | in·unique·log·directories·on·a·different·level).·The·following·illustration | 212 | in·unique·log·directories·on·a·different·level).·The·following·illustration |
| 213 | shows·the·log·file·structure:</p><p><img·src="assets/html_logs.gif"·alt="HTML·Log·File·Structure"·title="HTML·Log·File·Structure"/></p><h2·id="questions-and-answers"·class="section-heading"> | 213 | shows·the·log·file·structure:</p><p><img·src="assets/html_logs.gif"·alt="HTML·Log·File·Structure"·title="HTML·Log·File·Structure"/></p><h2·id="questions-and-answers"·class="section-heading"> |
| 214 | ··<a·href="#questions-and-answers"·class="hover-link"> | 214 | ··<a·href="#questions-and-answers"·class="hover-link"> |
| 215 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 215 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 216 | ··</a> | 216 | ··</a> |
| 217 | ··<span·class="text">Questions·and·Answers</span> | 217 | ··<span·class="text">Questions·and·Answers</span> |
| 218 | </h2> | 218 | </h2> |
| Offset 293, 15 lines modified | Offset 293, 15 lines modified | ||
| 293 | ······<p·class="built-using"> | 293 | ······<p·class="built-using"> |
| 294 | ········Built·using | 294 | ········Built·using |
| 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 297 | ······</p> | 297 | ······</p> |
| 298 | <p>Copyright·©·1996-202 | 298 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 299 | ····</footer> | 299 | ····</footer> |
| 300 | ··</div> | 300 | ··</div> |
| 301 | </main> | 301 | </main> |
| 302 | </div> | 302 | </div> |
| 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 304 | ··<script> | 304 | ··<script> |
| 305 | ··let·initialized·=·false; | 305 | ··let·initialized·=·false; |
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 200, 15 lines modified | Offset 200, 15 lines modified | ||
| 200 | ······<p·class="built-using"> | 200 | ······<p·class="built-using"> |
| 201 | ········Built·using | 201 | ········Built·using |
| 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 204 | ······</p> | 204 | ······</p> |
| 205 | <p>Copyright·©·1996-202 | 205 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 206 | ····</footer> | 206 | ····</footer> |
| 207 | ··</div> | 207 | ··</div> |
| 208 | </main> | 208 | </main> |
| 209 | </div> | 209 | </div> |
| 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 211 | ··<script> | 211 | ··<script> |
| 212 | ··let·initialized·=·false; | 212 | ··let·initialized·=·false; |
| Offset 2830, 15 lines modified | Offset 2830, 15 lines modified | ||
| 2830 | ······<p·class="built-using"> | 2830 | ······<p·class="built-using"> |
| 2831 | ········Built·using | 2831 | ········Built·using |
| 2832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2834 | ······</p> | 2834 | ······</p> |
| 2835 | <p>Copyright·©·1996-202 | 2835 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2836 | ····</footer> | 2836 | ····</footer> |
| 2837 | ··</div> | 2837 | ··</div> |
| 2838 | </main> | 2838 | </main> |
| 2839 | </div> | 2839 | </div> |
| 2840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2841 | ··<script> | 2841 | ··<script> |
| 2842 | ··let·initialized·=·false; | 2842 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 232, 15 lines modified | Offset 232, 15 lines modified | ||
| 232 | ······<p·class="built-using"> | 232 | ······<p·class="built-using"> |
| 233 | ········Built·using | 233 | ········Built·using |
| 234 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 234 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 235 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 235 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 236 | ······</p> | 236 | ······</p> |
| 237 | <p>Copyright·©·1996-202 | 237 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 238 | ····</footer> | 238 | ····</footer> |
| 239 | ··</div> | 239 | ··</div> |
| 240 | </main> | 240 | </main> |
| 241 | </div> | 241 | </div> |
| 242 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 242 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 243 | ··<script> | 243 | ··<script> |
| 244 | ··let·initialized·=·false; | 244 | ··let·initialized·=·false; |
| Offset 125, 22 lines modified | Offset 125, 22 lines modified | ||
| 125 | ····<small·class="app-vsn"·translate="no">(common_test·v1.27.7)</small> | 125 | ····<small·class="app-vsn"·translate="no">(common_test·v1.27.7)</small> |
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | ····<section·id="moduledoc"> | 127 | ····<section·id="moduledoc"> |
| 128 | <p>Callback·module·for·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>,·for·connecting·to·a·Telnet·server·on·a·UNIX | 128 | <p>Callback·module·for·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>,·for·connecting·to·a·Telnet·server·on·a·UNIX |
| 129 | host.</p><p>It·requires·the·following·entry·in·the·configuration·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1782041863-1">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="p"·data-group-id="1782041863-2">[</span><span·class="p"·data-group-id="1782041863-3">{</span><span·class="ss">telnet</span><span·class="p">,</span><span·class="n">HostNameOrIpAddress</span><span·class="p"·data-group-id="1782041863-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 130 | 129 | host.</p><p>It·requires·the·following·entry·in·the·configuration·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7644260493-1">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·243,·SHA:·52c9f775fdb70c9f9591ba76ba80adfea9c72e1750f76abeeb4881ae13f62c34·...·]</span><span·class="w"> | |
| 130 | ·······</span><span·class="p"·data-group-id="7644260493-4">{</span><span·class="ss">port</span><span·class="p">,</span><span·class="n">PortNum</span><span·class="p"·data-group-id="7644260493-4">}</span><span·class="p">,</span><span·class="w">·················</span><span·class="c1">%·optional</span><span·class="w"> | ||
| 131 | ·······</span><span·class="p"·data-group-id=" | 131 | ·······</span><span·class="p"·data-group-id="7644260493-5">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="n">UserName</span><span·class="p"·data-group-id="7644260493-5">}</span><span·class="p">,</span><span·class="w"> |
| 132 | ·······</span><span·class="p"·data-group-id=" | 132 | ·······</span><span·class="p"·data-group-id="7644260493-6">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="n">Password</span><span·class="p"·data-group-id="7644260493-6">}</span><span·class="p">,</span><span·class="w"> |
| 133 | ·······</span><span·class="p"·data-group-id=" | 133 | ·······</span><span·class="p"·data-group-id="7644260493-7">{</span><span·class="ss">keep_alive</span><span·class="p">,</span><span·class="n">Bool</span><span·class="p"·data-group-id="7644260493-7">}</span><span·class="p"·data-group-id="7644260493-2">]</span><span·class="p"·data-group-id="7644260493-1">}</span><span·class="p">.</span><span·class="w">············</span><span·class="c1">%·optional</span></code></pre><p>To·communicate·through·Telnet·to·the·host·specified·by·<code·class="inline">HostNameOrIpAddress</code>, |
| 134 | use·the·interface·functions·in·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>,·for·example,·<code·class="inline">open(Name)</code>·and | 134 | use·the·interface·functions·in·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>,·for·example,·<code·class="inline">open(Name)</code>·and |
| 135 | <code·class="inline">cmd(Name,Cmd)</code>.</p><p><code·class="inline">Name</code>·is·the·name·you·allocated·to·the·Unix·host·in·your·<code·class="inline">require</code>·statement, | 135 | <code·class="inline">cmd(Name,Cmd)</code>.</p><p><code·class="inline">Name</code>·is·the·name·you·allocated·to·the·Unix·host·in·your·<code·class="inline">require</code>·statement, |
| 136 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id=" | 136 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="0973049767-1">(</span><span·class="p"·data-group-id="0973049767-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0973049767-2">[</span><span·class="p"·data-group-id="0973049767-3">{</span[·...·truncated·by·diffoscope;·len:·1121,·SHA:·3d28b41a3eceea932f596eb417c7ba7809d856db92c6498d252c7213bdcd4dd2·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·"keep·alive"·activity·(that·is,·that·<code·class="inline">Common·Test</code>·sends·NOP·to·the·server |
| 137 | every·10·seconds·if·the·connection·is·idle)·can·be·enabled·or·disabled·for·one | 137 | every·10·seconds·if·the·connection·is·idle)·can·be·enabled·or·disabled·for·one |
| 138 | particular·connection·as·described·here.·It·can·be·disabled·for·all·connections | 138 | particular·connection·as·described·here.·It·can·be·disabled·for·all·connections |
| 139 | using·<code·class="inline">telnet_settings</code>·(see·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>).</p><p>The·<code·class="inline">{port,PortNum}</code>·tuple·is·optional·and·if·omitted,·default·Telnet·port·23·is | 139 | using·<code·class="inline">telnet_settings</code>·(see·<a·href="ct_telnet.html"><code·class="inline">ct_telnet</code></a>).</p><p>The·<code·class="inline">{port,PortNum}</code>·tuple·is·optional·and·if·omitted,·default·Telnet·port·23·is |
| 140 | used.·Also·the·<code·class="inline">keep_alive</code>·tuple·is·optional,·and·the·value·default·to·<code·class="inline">true</code> | 140 | used.·Also·the·<code·class="inline">keep_alive</code>·tuple·is·optional,·and·the·value·default·to·<code·class="inline">true</code> |
| 141 | (enabled).</p><h2·id="module-see-also"·class="section-heading"> | 141 | (enabled).</p><h2·id="module-see-also"·class="section-heading"> |
| 142 | ··<a·href="#module-see-also"·class="hover-link"> | 142 | ··<a·href="#module-see-also"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 288, 15 lines modified | Offset 288, 15 lines modified | ||
| 288 | ······<p·class="built-using"> | 288 | ······<p·class="built-using"> |
| 289 | ········Built·using | 289 | ········Built·using |
| 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 292 | ······</p> | 292 | ······</p> |
| 293 | <p>Copyright·©·1996-202 | 293 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 294 | ····</footer> | 294 | ····</footer> |
| 295 | ··</div> | 295 | ··</div> |
| 296 | </main> | 296 | </main> |
| 297 | </div> | 297 | </div> |
| 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 299 | ··<script> | 299 | ··<script> |
| 300 | ··let·initialized·=·false; | 300 | ··let·initialized·=·false; |
| Offset 206, 15 lines modified | Offset 206, 15 lines modified | ||
| 206 | ······<p·class="built-using"> | 206 | ······<p·class="built-using"> |
| 207 | ········Built·using | 207 | ········Built·using |
| 208 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 208 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 209 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 209 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 210 | ······</p> | 210 | ······</p> |
| 211 | <p>Copyright·©·1996-202 | 211 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 212 | ····</footer> | 212 | ····</footer> |
| 213 | ··</div> | 213 | ··</div> |
| 214 | </main> | 214 | </main> |
| 215 | </div> | 215 | </div> |
| 216 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 216 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 217 | ··<script> | 217 | ··<script> |
| 218 | ··let·initialized·=·false; | 218 | ··let·initialized·=·false; |
| Offset 262, 58 lines modified | Offset 262, 58 lines modified | ||
| 262 | <a·href="write_test_chapter.html#timetraps">Timetrap·Time-Outs</a>.</p></li><li><p><strong><code·class="inline">userdata</code></strong>·-·Specifies·any·data·related·to·the·test·case.·This·data·can·be | 262 | <a·href="write_test_chapter.html#timetraps">Timetrap·Time-Outs</a>.</p></li><li><p><strong><code·class="inline">userdata</code></strong>·-·Specifies·any·data·related·to·the·test·case.·This·data·can·be |
| 263 | retrieved·at·any·time·using·the·<a·href="ct.html#userdata/3"><code·class="inline">ct:userdata/3</code></a>·utility·function.</p></li><li><p><strong><code·class="inline">silent_connections</code></strong>·-·For·details,·see·section | 263 | retrieved·at·any·time·using·the·<a·href="ct.html#userdata/3"><code·class="inline">ct:userdata/3</code></a>·utility·function.</p></li><li><p><strong><code·class="inline">silent_connections</code></strong>·-·For·details,·see·section |
| 264 | <a·href="run_test_chapter.html#silent_connections">Silent·Connections</a>.</p></li><li><p><strong><code·class="inline">require</code></strong>·-·Specifies·configuration·variables·required·by·the·test·case. | 264 | <a·href="run_test_chapter.html#silent_connections">Silent·Connections</a>.</p></li><li><p><strong><code·class="inline">require</code></strong>·-·Specifies·configuration·variables·required·by·the·test·case. |
| 265 | If·the·required·configuration·variables·are·not·found·in·any·of·the·test | 265 | If·the·required·configuration·variables·are·not·found·in·any·of·the·test |
| 266 | system·configuration·files,·the·test·case·is·skipped.</p><p>A·required·variable·can·also·be·given·a·default·value·to·be·used·if·the | 266 | system·configuration·files,·the·test·case·is·skipped.</p><p>A·required·variable·can·also·be·given·a·default·value·to·be·used·if·the |
| 267 | variable·is·not·found·in·any·configuration·file.·To·specify·a·default·value, | 267 | variable·is·not·found·in·any·configuration·file.·To·specify·a·default·value, |
| 268 | add·a·tuple·on·the·form·<code·class="inline">{default_config,ConfigVariableName,Value}</code>·to·the | 268 | add·a·tuple·on·the·form·<code·class="inline">{default_config,ConfigVariableName,Value}</code>·to·the |
| 269 | test·case·information·list·(the·position·in·the·list·is·irrelevant).</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">testcase1</span><span·class="p"·data-group-id=" | 269 | test·case·information·list·(the·position·in·the·list·is·irrelevant).</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">testcase1</span><span·class="p"·data-group-id="1831959243-1">(</span><span·class="p"·data-group-id="1831959243-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 270 | ····</span><span·class="p"·data-group-id=" | 270 | ····</span><span·class="p"·data-group-id="1831959243-2">[</span><span·class="p"·data-group-id="1831959243-3">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ftp</span><span·class="p"·data-group-id="1831959243-3">}</span><span·class="p">,</span><span·class="w"> |
| 271 | ·····</span><span·class="p"·data-group-id=" | 271 | ·····</span><span·class="p"·data-group-id="1831959243-4">{</span><span·class="ss">default_config</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ftp</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1831959243-5">[</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·195,·SHA:·8b197da8b0df3b96db4e689932e1c344c4f2b301538e1a3bad05a5bbf57a24f8·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 272 | ····························</span><span·class="p"·data-group-id=" | 272 | ····························</span><span·class="p"·data-group-id="1831959243-7">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"aladdin"</span><span·class="p"·data-group-id="1831959243-7">}</span><span·class="p">,</span><span·class="w"> |
| 273 | ····························</span><span·class="p"·data-group-id=" | 273 | ····························</span><span·class="p"·data-group-id="1831959243-8">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sesame"</span><span·class="p"·data-group-id="1831959243-8">}</span><span·class="p"·data-group-id="1831959243-5">]</span><span·c[·...·truncated·by·diffoscope;·len:·335,·SHA:·2da61e5cfaf9aa24b4f691991f197b93cb2e0d7360c57efabbf88a8b92563dc4·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 274 | ····</span><span·class="p"·data-group-id=" | 274 | ····</span><span·class="p"·data-group-id="8710151319-2">[</span><span·class="p"·data-group-id="8710151319-3">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">unix_telnet</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">un[·...·truncated·by·diffoscope;·len:·50,·SHA:·5257d48081af83ac21d469a5a3fe6b0592966723db8f312ef92f97bb6852bdb9·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 275 | ·····</span><span·class="p"·data-group-id=" | 275 | ·····</span><span·class="p"·data-group-id="8710151319-4">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8710151319-5">{</span><span·class="ss">unix</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·364,·SHA:·650ec1c8dad7656921a427c1312b78f69ced1100ddf9dc54b64706173a36ecb1·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 276 | ·····</span><span·class="p"·data-group-id=" | 276 | ·····</span><span·class="p"·data-group-id="8710151319-7">{</span><span·class="ss">default_config</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">unix</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8710151319-8">[</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·202,·SHA:·79cc81c00cc08115a169eb5a5f04024ccc934d8311c4098b2fe142f49eaba750·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 277 | ·····························</span><span·class="p"·data-group-id=" | 277 | ·····························</span><span·class="p"·data-group-id="8710151319-10">{</span><span·class="ss">username</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"aladdin"</span><span·class="p"·data-group-id="8710151319-10">}</span><span·class="p">,</span><span·class="w"> |
| 278 | ·····························</span><span·class="p"·data-group-id=" | 278 | ·····························</span><span·class="p"·data-group-id="8710151319-11">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sesame"</span><span·class="p"·data-group-id="8710151319-11">}</span><span·class="p"·data-group-id="8710151319-8">]</span><span[·...·truncated·by·diffoscope;·len:·113,·SHA:·afb2ae000eec312fb16971aafac64a8de9d9df7819c7a4480eb9cbb1a263b587·...·]-2">]</span><span·class="p">.</span></code></pre></li></ul><p>For·more·information·about·<code·class="inline">require</code>,·see·section |
| 279 | <a·href="config_file_chapter.html#require_config_data">Requiring·and·Reading·Configuration·Data</a> | 279 | <a·href="config_file_chapter.html#require_config_data">Requiring·and·Reading·Configuration·Data</a> |
| 280 | in·section·External·Configuration·Data·and·function | 280 | in·section·External·Configuration·Data·and·function |
| 281 | <a·href="ct.html#require/1"><code·class="inline">ct:require/1/2</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Specifying·a·default·value·for·a·required·variable·can·result·in·a·test·case | 281 | <a·href="ct.html#require/1"><code·class="inline">ct:require/1/2</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Specifying·a·default·value·for·a·required·variable·can·result·in·a·test·case |
| 282 | always·getting·executed.·This·might·not·be·a·desired·behavior.</p></section><p>If·<code·class="inline">timetrap</code>·or·<code·class="inline">require</code>,·or·both,·is·not·set·specifically·for·a·particular | 282 | always·getting·executed.·This·might·not·be·a·desired·behavior.</p></section><p>If·<code·class="inline">timetrap</code>·or·<code·class="inline">require</code>,·or·both,·is·not·set·specifically·for·a·particular |
| 283 | test·case,·default·values·specified·by·function | 283 | test·case,·default·values·specified·by·function |
| 284 | <a·href="ct_suite.html#c:suite/0"><code·class="inline">suite/0</code></a>·are·used.</p><p>Tags·other·than·the·earlier·mentioned·are·ignored·by·the·test·server.</p><p>An·example·of·a·test·case·information·function·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">reboot_node</span><span·class="p"·data-group-id=" | 284 | <a·href="ct_suite.html#c:suite/0"><code·class="inline">suite/0</code></a>·are·used.</p><p>Tags·other·than·the·earlier·mentioned·are·ignored·by·the·test·server.</p><p>An·example·of·a·test·case·information·function·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">reboot_node</span><span·class="p"·data-group-id="4326188495-1">(</span><span·class="p"·data-group-id="4326188495-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 285 | ····</span><span·class="p"·data-group-id=" | 285 | ····</span><span·class="p"·data-group-id="4326188495-2">[</span><span·class="w"> |
| 286 | ·····</span><span·class="p"·data-group-id=" | 286 | ·····</span><span·class="p"·data-group-id="4326188495-3">{</span><span·class="ss">timetrap</span><span·class="p">,</span><span·class="p"·data-group-id="4326188495-4">{</span><span·class="ss">seconds</span><span·class="p">,</span><span·class="mi">60</span><span·class="p"·data-group-id="4326188495-4"[·...·truncated·by·diffoscope;·len:·50,·SHA:·bc295a5c77b569c6e37c6ffdb29253a2f340abbe7b21c6090e28f6cbd6ec9402·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 287 | ·····</span><span·class="p"·data-group-id=" | 287 | ·····</span><span·class="p"·data-group-id="4326188495-5">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">interfaces</span><span·class="p"·data-group-id="4326188495-5">}</span><span·class="p">,</span><span·class="w"> |
| 288 | ·····</span><span·class="p"·data-group-id=" | 288 | ·····</span><span·class="p"·data-group-id="4326188495-6">{</span><span·class="ss">userdata</span><span·class="p">,</span><span·class="w"> |
| 289 | ·········</span><span·class="p"·data-group-id=" | 289 | ·········</span><span·class="p"·data-group-id="4326188495-7">[</span><span·class="p"·data-group-id="4326188495-8">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="s">"System·Upgrade:·RpuAddition·Normal·RebootNode"</span><span·class="p"·data-group-id="4326188495-8">}</span><span·class="p">,</span><span·class="w"> |
| 290 | ··········</span><span·class="p"·data-group-id=" | 290 | ··········</span><span·class="p"·data-group-id="4326188495-9">{</span><span·class="ss">fts</span><span·class="p">,</span><span·class="s">"http://someserver.ericsson.se/test_doc4711.pdf"</span><span·class="p"·data-group-id="4326188495-9">}</span><span·class="p"·data-group-id="4326188495-7">]</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·1b4ffed26e6ad4a70422e1b605dd1a3ddc40ef0030e4e36674cd4d480b311e27·...·]-6">}</span><span·class="w"> |
| 291 | ····</span><span·class="p"·data-group-id=" | 291 | ····</span><span·class="p"·data-group-id="4326188495-2">]</span><span·class="p">.</span></code></pre><p><a·href=""·id="suite"></a></p><h2·id="test-suite-information-function"·class="section-heading"> |
| 292 | ··<a·href="#test-suite-information-function"·class="hover-link"> | 292 | ··<a·href="#test-suite-information-function"·class="hover-link"> |
| 293 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 293 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 294 | ··</a> | 294 | ··</a> |
| 295 | ··<span·class="text">Test·Suite·Information·Function</span> | 295 | ··<span·class="text">Test·Suite·Information·Function</span> |
| 296 | </h2> | 296 | </h2> |
| 297 | <p>Function·<a·href="ct_suite.html#c:suite/0"><code·class="inline">suite/0</code></a>·can,·for·example,·be·used·in·a·test | 297 | <p>Function·<a·href="ct_suite.html#c:suite/0"><code·class="inline">suite/0</code></a>·can,·for·example,·be·used·in·a·test |
| 298 | suite·module·to·set·a·default·<code·class="inline">timetrap</code>·value·and·to·<code·class="inline">require</code>·external | 298 | suite·module·to·set·a·default·<code·class="inline">timetrap</code>·value·and·to·<code·class="inline">require</code>·external |
| 299 | configuration·data.·If·a·test·case,·or·a·group·information·function·also | 299 | configuration·data.·If·a·test·case,·or·a·group·information·function·also |
| 300 | specifies·any·of·the·information·tags,·it·overrides·the·default·values·set·by | 300 | specifies·any·of·the·information·tags,·it·overrides·the·default·values·set·by |
| 301 | <code·class="inline">suite/0</code>.·For·details,·see | 301 | <code·class="inline">suite/0</code>.·For·details,·see |
| 302 | <a·href="write_test_chapter.html#info_function">Test·Case·Information·Function</a>·and | 302 | <a·href="write_test_chapter.html#info_function">Test·Case·Information·Function</a>·and |
| 303 | <a·href="write_test_chapter.html#test_case_groups">Test·Case·Groups</a>.</p><p>The·following·options·can·also·be·specified·with·the·suite·information·list:</p><ul><li><code·class="inline">stylesheet</code>,·see·<a·href="run_test_chapter.html#html_stylesheet">HTML·Style·Sheets</a></li><li><code·class="inline">userdata</code>,·see | 303 | <a·href="write_test_chapter.html#test_case_groups">Test·Case·Groups</a>.</p><p>The·following·options·can·also·be·specified·with·the·suite·information·list:</p><ul><li><code·class="inline">stylesheet</code>,·see·<a·href="run_test_chapter.html#html_stylesheet">HTML·Style·Sheets</a></li><li><code·class="inline">userdata</code>,·see |
| 304 | <a·href="write_test_chapter.html#info_function">Test·Case·Information·Function</a></li><li><code·class="inline">silent_connections</code>,·see | 304 | <a·href="write_test_chapter.html#info_function">Test·Case·Information·Function</a></li><li><code·class="inline">silent_connections</code>,·see |
| 305 | <a·href="run_test_chapter.html#silent_connections">Silent·Connections</a></li></ul><p>An·example·of·the·suite·information·function·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="4 | 305 | <a·href="run_test_chapter.html#silent_connections">Silent·Connections</a></li></ul><p>An·example·of·the·suite·information·function·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">suite</span><span·class="p"·data-group-id="4777563083-1">(</span><span·class="p"·data-group-id="4777563083-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 306 | ····</span><span·class="p"·data-group-id="4 | 306 | ····</span><span·class="p"·data-group-id="4777563083-2">[</span><span·class="w"> |
| 307 | ·····</span><span·class="p"·data-group-id="4 | 307 | ·····</span><span·class="p"·data-group-id="4777563083-3">{</span><span·class="ss">timetrap</span><span·class="p">,</span><span·class="p"·data-group-id="4777563083-4">{</span><span·class="ss">minutes</span><span·class="p">,</span><span·class="mi">10</span><span·class="p"·data-group-id="4777563083-4">[·...·truncated·by·diffoscope;·len:·49,·SHA:·c67d890e860468bc267260ec592700e6c3c5c3422602cd62501141ff8a07d8d6·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 308 | ·····</span><span·class="p"·data-group-id="4 | 308 | ·····</span><span·class="p"·data-group-id="4777563083-5">{</span><span·class="ss">require</span><span·class="p">,</span><span·class="ss">global_names</span><span·class="p"·data-group-id="4777563083-5">}</span><span·class="p">,</span><span·class="w"> |
| 309 | ·····</span><span·class="p"·data-group-id="4 | 309 | ·····</span><span·class="p"·data-group-id="4777563083-6">{</span><span·class="ss">userdata</span><span·class="p">,</span><span·class="p"·data-group-id="4777563083-7">[</span><span·class="p"·data-group-id="4777563083-8">{</span><span·class="ss">info</span><span·class="p">,</span><span·class="s">"[·...·truncated·by·diffoscope;·len:·200,·SHA:·d454889a1b741ffe549d6b4b45464dd31f984d1c01041a57d4724d969075ef1d·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 310 | ·····</span><span·class="p"·data-group-id="4 | 310 | ·····</span><span·class="p"·data-group-id="4777563083-9">{</span><span·class="ss">silent_connections</span><span·class="p">,</span><span·class="p"·data-group-id="4777563083-10">[</span><span·class="ss">telnet</span><span·class="p"·data-group-id="4777563083-10">]</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·53866e56872108d384fd628e24eda938052712b50a6f05af8bf4ff248e26f9cb·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 311 | ·····</span><span·class="p"·data-group-id="4 | 311 | ·····</span><span·class="p"·data-group-id="4777563083-11">{</span><span·class="ss">stylesheet</span><span·class="p">,</span><span·class="s">"db_testing.css"</span><span·class="p"·data-group-id="4777563083-11">}</span><span·class="w"> |
| 312 | ····</span><span·class="p"·data-group-id="4 | 312 | ····</span><span·class="p"·data-group-id="4777563083-2">]</span><span·class="p">.</span></code></pre><p><a·href=""·id="test_case_groups"></a></p><h2·id="test-case-groups"·class="section-heading"> |
| 313 | ··<a·href="#test-case-groups"·class="hover-link"> | 313 | ··<a·href="#test-case-groups"·class="hover-link"> |
| 314 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 314 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 315 | ··</a> | 315 | ··</a> |
| 316 | ··<span·class="text">Test·Case·Groups</span> | 316 | ··<span·class="text">Test·Case·Groups</span> |
| 317 | </h2> | 317 | </h2> |
| 318 | <p>A·test·case·group·is·a·set·of·test·cases·sharing·configuration·functions·and | 318 | <p>A·test·case·group·is·a·set·of·test·cases·sharing·configuration·functions·and |
| 319 | execution·properties.·Test·case·groups·are·defined·by·function | 319 | execution·properties.·Test·case·groups·are·defined·by·function |
| Offset 327, 63 lines modified | Offset 327, 63 lines modified | ||
| 327 | GroupName·=·atom() | 327 | GroupName·=·atom() |
| 328 | GroupsAndTestCases·=·[GroupDef·|·{group,GroupName}·|·TestCase·| | 328 | GroupsAndTestCases·=·[GroupDef·|·{group,GroupName}·|·TestCase·| |
| 329 | ·····················{testcase,TestCase,TCRepeatProps}] | 329 | ·····················{testcase,TestCase,TCRepeatProps}] |
| 330 | TestCase·=·atom() | 330 | TestCase·=·atom() |
| 331 | TCRepeatProps·=·[{repeat,N}·|·{repeat_until_ok,N}·|·{repeat_until_fail,N}]</code></pre><p><code·class="inline">GroupName</code>·is·the·name·of·the·group·and·must·be·unique·within·the·test·suite | 331 | TCRepeatProps·=·[{repeat,N}·|·{repeat_until_ok,N}·|·{repeat_until_fail,N}]</code></pre><p><code·class="inline">GroupName</code>·is·the·name·of·the·group·and·must·be·unique·within·the·test·suite |
| 332 | module.·Groups·can·be·nested,·by·including·a·group·definition·within·the | 332 | module.·Groups·can·be·nested,·by·including·a·group·definition·within·the |
| 333 | <code·class="inline">GroupsAndTestCases</code>·list·of·another·group.·<code·class="inline">Properties</code>·is·the·list·of | 333 | <code·class="inline">GroupsAndTestCases</code>·list·of·another·group.·<code·class="inline">Properties</code>·is·the·list·of |
| 334 | execution·properties·for·the·group.·The·possible·values·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Properties</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 334 | execution·properties·for·the·group.·The·possible·values·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Properties</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2368815906-1">[</span><span·class="ss">parallel</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">sequence</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Shuffle</s[·...·truncated·by·diffoscope;·len:·308,·SHA:·2fc16d94e80d525c29cb03cacfd802dd7650f8cf64efbf6ddfc21239d6a0eb43·...·]6-1">]</span><span·class="w"> |
| 335 | </span><span·class="n">Shuffle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">shuffle</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 335 | </span><span·class="n">Shuffle</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">shuffle</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="2368815906-3">{</span><span·class="ss">shuffle</span><span·class="p">,</span><span·class="n">Seed</span><span·class="p"·data-group-id="2368815906-3">}</span><span·class="w"> |
| 336 | </span><span·class="n">Seed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 336 | </span><span·class="n">Seed</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2368815906-4">{</span><span·class="nf">integer</span><span·class="p"·data-group-id="2368815906-5">(</span><span·class="p"·data-group-id="2368815906-5">)</span><span·class="p">,</span><span·class="nf">integer</span><span·class="p"·data-group-id="2368815906-[·...·truncated·by·diffoscope;·len:·265,·SHA:·effe5155435fbbe87c627399de8b0f041f2f6ec271bc9b06bc052c746760b8ca·...·]6-4">}</span><span·class="w"> |
| 337 | </span><span·class="n">GroupRepeatType</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">repeat</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_all_ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_all_fail</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | 337 | </span><span·class="n">GroupRepeatType</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">repeat</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_all_ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_all_fail</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 338 | ··················</span><span·class="ss">repeat_until_any_ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_any_fail</span><span·class="w"> | 338 | ··················</span><span·class="ss">repeat_until_any_ok</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">repeat_until_any_fail</span><span·class="w"> |
| 339 | </span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 339 | </span><span·class="n">N</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="2368815906-8">(</span><span·class="p"·data-group-id="2368815906-8">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">forever</span></code></pre><p><em>Explanations:</em></p><ul><li><p><strong><code·class="inline">parallel</code></strong>·-·<code·class="inline">Common·Test</code>·executes·all·test·cases·in·the·group·in |
| 340 | parallel.</p></li><li><p><strong><code·class="inline">sequence</code></strong>·-·The·cases·are·executed·in·a·sequence·as·described·in·section | 340 | parallel.</p></li><li><p><strong><code·class="inline">sequence</code></strong>·-·The·cases·are·executed·in·a·sequence·as·described·in·section |
| 341 | <a·href="dependencies_chapter.html#sequences">Sequences</a>·in·section·Dependencies·Between | 341 | <a·href="dependencies_chapter.html#sequences">Sequences</a>·in·section·Dependencies·Between |
| 342 | Test·Cases·and·Suites.</p></li><li><p><strong><code·class="inline">shuffle</code></strong>·-·The·cases·in·the·group·are·executed·in·random·order.</p></li><li><p><strong><code·class="inline">repeat,·repeat_until_*</code></strong>·-·Orders·<code·class="inline">Common·Test</code>·to·repeat·execution·of·all | 342 | Test·Cases·and·Suites.</p></li><li><p><strong><code·class="inline">shuffle</code></strong>·-·The·cases·in·the·group·are·executed·in·random·order.</p></li><li><p><strong><code·class="inline">repeat,·repeat_until_*</code></strong>·-·Orders·<code·class="inline">Common·Test</code>·to·repeat·execution·of·all |
| 343 | the·cases·in·the·group·a·given·number·of·times,·or·until·any,·or·all,·cases | 343 | the·cases·in·the·group·a·given·number·of·times,·or·until·any,·or·all,·cases |
| 344 | fail·or·succeed.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id=" | 344 | fail·or·succeed.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id="4495119585-1">(</span><span·class="p"·data-group-id="4495119585-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="4495119585-2">[</span><span·class="p"·data-group-id="4495119585-3">{</span[·...·truncated·by·diffoscope;·len:·496,·SHA:·7eff3bb7593f1f80679560296a9cc08a33cf2173c3e637c96d3ccb44d1f4cfa8·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 345 | ·············</span><span·class="p"·data-group-id=" | 345 | ·············</span><span·class="p"·data-group-id="4495119585-6">{</span><span·class="ss">group2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4495119585-7">[</span><span·class="ss">shuffle</span><span·class="p">,</span><span·class="ss">sequence</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·423,·SHA:·44d2849710a5d562bb42e1eaab6f354b6d9253148664c4e2cd2944dfbd55cf44·...·]-2">]</span><span·class="p">.</span></code></pre><p>To·specify·in·which·order·groups·are·to·be·executed·(also·with·respect·to·test |
| 346 | cases·that·are·not·part·of·any·group),·add·tuples·on·the·form | 346 | cases·that·are·not·part·of·any·group),·add·tuples·on·the·form |
| 347 | <code·class="inline">{group,GroupName}</code>·to·the·<code·class="inline">all/0</code>·list.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id=" | 347 | <code·class="inline">{group,GroupName}</code>·to·the·<code·class="inline">all/0</code>·list.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id="1823029243-1">(</span><span·class="p"·data-group-id="1823029243-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="1823029243-2">[</span><span·class="ss">testcase1</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·1055,·SHA:·4078a17645b4c34392119a57b5f691a57c386b13cb5302caabaeaa8dbfd13585·...·]-2">]</span><span·class="p">.</span></code></pre><p>Execution·properties·with·a·group·tuple·in·<code·class="inline">all/0</code>: |
| 348 | <code·class="inline">{group,GroupName,Properties}</code>·can·also·be·specified.·These·properties·override | 348 | <code·class="inline">{group,GroupName,Properties}</code>·can·also·be·specified.·These·properties·override |
| 349 | those·specified·in·the·group·definition·(see·<code·class="inline">groups/0</code>·earlier).·This·way,·the | 349 | those·specified·in·the·group·definition·(see·<code·class="inline">groups/0</code>·earlier).·This·way,·the |
| 350 | same·set·of·tests·can·be·run,·but·with·different·properties,·without·having·to | 350 | same·set·of·tests·can·be·run,·but·with·different·properties,·without·having·to |
| 351 | make·copies·of·the·group·definition·in·question.</p><p>If·a·group·contains·subgroups,·the·execution·properties·for·these·can·also·be | 351 | make·copies·of·the·group·definition·in·question.</p><p>If·a·group·contains·subgroups,·the·execution·properties·for·these·can·also·be |
| 352 | specified·in·the·group·tuple:·<code·class="inline">{group,GroupName,Properties,SubGroups}</code>·Where, | 352 | specified·in·the·group·tuple:·<code·class="inline">{group,GroupName,Properties,SubGroups}</code>·Where, |
| 353 | <code·class="inline">SubGroups</code>·is·a·list·of·tuples,·<code·class="inline">{GroupName,Properties}</code>·or | 353 | <code·class="inline">SubGroups</code>·is·a·list·of·tuples,·<code·class="inline">{GroupName,Properties}</code>·or |
| 354 | <code·class="inline">{GroupName,Properties,SubGroups}</code>·representing·the·subgroups.·Any·subgroups | 354 | <code·class="inline">{GroupName,Properties,SubGroups}</code>·representing·the·subgroups.·Any·subgroups |
| 355 | defined·in·<code·class="inline">groups/0</code>·for·a·group,·that·are·not·specified·in·the·<code·class="inline">SubGroups</code> | 355 | defined·in·<code·class="inline">groups/0</code>·for·a·group,·that·are·not·specified·in·the·<code·class="inline">SubGroups</code> |
| 356 | list,·executes·with·their·predefined·properties.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id=" | 356 | list,·executes·with·their·predefined·properties.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id="2781429933-1">(</span><span·class="p"·data-group-id="2781429933-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2781429933-2">[</span><span·class="p"·data-group-id="2781429933-3">{</span[·...·truncated·by·diffoscope;·len:·795,·SHA:·1372b30e65a20c1104cbe8e74a38cd8a32414de1b8ee745911868f16d9a941fa·...·]3-6">}</span><span·class="p">,</span><span·class="w"> |
| 357 | ··························</span><span·class="p"·data-group-id=" | 357 | ··························</span><span·class="p"·data-group-id="2781429933-9">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2781429933-10">[</span><span·class="p"·data-group-id="2781429933-10">]</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·385,·SHA:·621a8d687f5a44c04fb85bab84d26d4f9299dc2c2b408f801014a227dacf8bb6·...·]3-2">]</span><span·class="p">.</span></code></pre><p>To·execute·group·<code·class="inline">tests1</code>·twice·with·different·properties·for·<code·class="inline">tests2</code>·each |
| 358 | time:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id="1 | 358 | time:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id="1883286833-1">(</span><span·class="p"·data-group-id="1883286833-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 359 | ···</span><span·class="p"·data-group-id="1503227436-2">[</span><span·class="p"·data-group-id="1503227436-3">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1503227436-4">[</span><span·class="p"·data-group-id="1503227436-5">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1503227436-6">[</span><span·class="ss">parallel</span><span·class="p"·data-group-id="1503227436-6">]</span><span·class="p"·data-group-id="1503227436-5">}</span><span·class="p"·data-group-id="1503227436-4">]</span><span·class="p"·data-group-id="1503227436-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 360 | ··· | 359 | ···</span><span·class="p"·data-group-id="1883286833-2">[</span><span·class="p"·data-group-id="1883286833-3">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class=[·...·truncated·by·diffoscope;·len:·589,·SHA:·12fd4402e6a1240ed74786d6203e1d32fbc93b1aee570d790a361f7c4a995b1f·...·]</span><span·class="w"> |
| 360 | ····</span><span·class="p"·data-group-id="1883286833-7">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1883286833-8">[</span><span·class="p"·data-group-id="1883286833-9">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1883286833-10">[</span><span·class="ss">shuffle</span><span·class="p">,</span><span·class="p"·data-group-id="1883286833-11">{</span><span·class="ss">repeat</span><span·class="p">,</span><span·class="mi">10</span><span·class="p"·data-group-id="1883286833-11">}</span><span·class="p"·data-group-id="1883286833-10">]</span><span·class="p"·data-group-id="1883286833-9">}</span><span·class="p"·data-group-id="1883286833-8">]</span><span·class="p"·data-group-id="1883286833-7">}</span><span·class="p"·data-group-id="1883286833-2">]</span><span·class="p">.</span></code></pre><p>This·is·equivalent·to·the·following·specification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id="6933030042-1">(</span><span·class="p"·data-group-id="6933030042-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 361 | ···</span><span·class="p"·data-group-id=" | 361 | ···</span><span·class="p"·data-group-id="6933030042-2">[</span><span·class="p"·data-group-id="6933030042-3">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</[·...·truncated·by·diffoscope;·len:·416,·SHA:·901bf178a2452916bed00703256092b3f9dde5afac17d7120eca5d9ea3cd804d·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 362 | ······························</span><span·class="p"·data-group-id=" | 362 | ······························</span><span·class="p"·data-group-id="6933030042-7">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p"·data-group-id="6933030042-7">}</span><span·class="p"·data-group-id="6933030042-4">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·d16c8c85aed07d04639ca527be160da32bf61d7b22f94dd94d8d68f96c18baad·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 363 | ····</span><span·class="p"·data-group-id=" | 363 | ····</span><span·class="p"·data-group-id="6933030042-8">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·577,·SHA:·3970930741ca8b3e30c07a6b7c062380db8c82c7c344eb60c1bea70eedf616f6·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 364 | ······························</span><span·class="p"·data-group-id=" | 364 | ······························</span><span·class="p"·data-group-id="6933030042-13">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p"·data-group-id="6933030042-13">}</span><span·class="p"·data-group-id="6933030042-9">]</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·77,·SHA:·195365bb06100a6b5fdc4694c13772cd5a72b76a3968d64752dbad0cd0a1635b·...·]-2">]</span><span·class="p">.</span></code></pre><p>Value·<code·class="inline">default</code>·states·that·the·predefined·properties·are·to·be·used.</p><p>The·following·example·shows·how·to·override·properties·in·a·scenario·with·deeply |
| 365 | nested·groups:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id="0 | 365 | nested·groups:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">groups</span><span·class="p"·data-group-id="2096387208-1">(</span><span·class="p"·data-group-id="2096387208-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 366 | ···</span><span·class="p"·data-group-id="0081276082-2">[</span><span·class="p"·data-group-id="0081276082-3">{</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0081276082-4">[</span><span·class="p"·data-group-id="0081276082-4">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0081276082-5">[</span><span·class="p"·data-group-id="0081276082-6">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests2</span><span·class="p"·data-group-id="0081276082-6">}</span><span·class="p"·data-group-id="0081276082-5">]</span><span·class="p"·data-group-id="0081276082-3">}</span><span·class="p">,</span><span·class="w"> | ||
| 367 | ··· | 366 | ···</span><span·class="p"·data-group-id="2096387208-2">[</span><span·class="p"·data-group-id="2096387208-3">{</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2096387208-4">[</span><span·class=[·...·truncated·by·diffoscope;·len:·451,·SHA:·08f24512e2b5716140b0b773dad5e7337a8bef1dcff576e8e157004b33115190·...·]">}</span><span·class="p">,</span><span·class="w"> |
| 367 | ····</span><span·class="p"·data-group-id="2096387208-7">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2096387208-8">[</span><span·class="p"·data-group-id="2096387208-8">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2096387208-9">[</span><span·class="p"·data-group-id="2096387208-10">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests3</span><span·class="p"·data-group-id="2096387208-10">}</span><span·class="p"·data-group-id="2096387208-9">]</span><span·class="p"·data-group-id="2096387208-7">}</span><span·class="p">,</span><span·class="w"> | ||
| 368 | ····</span><span·class="p"·data-group-id="0 | 368 | ····</span><span·class="p"·data-group-id="2096387208-11">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2096387208-12">[</span><span·class="p"·data-group-id="2096387208-13">{</span><span·class="ss">repeat</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·520,·SHA:·c4de333da8ff51999564cc161ce0605eb34f99644ff77eb1fe2100e353216955·...·]-2">]</span><span·class="p">.</span><span·class="w"> |
| 369 | </span><span·class="nf">all</span><span·class="p"·data-group-id="0 | 369 | </span><span·class="nf">all</span><span·class="p"·data-group-id="2096387208-15">(</span><span·class="p"·data-group-id="2096387208-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 370 | ···</span><span·class="p"·data-group-id="0 | 370 | ···</span><span·class="p"·data-group-id="2096387208-16">[</span><span·class="p"·data-group-id="2096387208-17">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w"> |
| 371 | ·····</span><span·class="p"·data-group-id="0 | 371 | ·····</span><span·class="p"·data-group-id="2096387208-18">[</span><span·class="p"·data-group-id="2096387208-19">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w"> |
| 372 | ·······</span><span·class="p"·data-group-id="0 | 372 | ·······</span><span·class="p"·data-group-id="2096387208-20">[</span><span·class="p"·data-group-id="2096387208-21">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2096387208-22">[</span><span·class="ss">parallel</span><span·class="p"[·...·truncated·by·diffoscope;·len:·563,·SHA:·ea0bfc2f7f376f97e03da69769c9d12e6c353d07dc77067d04017fabc945f357·...·]-16">]</span><span·class="p">.</span></code></pre><p>For·ease·of·readability,·all·syntax·definitions·can·be·replaced·by·a·function |
| 373 | call·whose·return·value·should·match·the·expected·syntax·case.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id=" | 373 | call·whose·return·value·should·match·the·expected·syntax·case.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">all</span><span·class="p"·data-group-id="2973245665-1">(</span><span·class="p"·data-group-id="2973245665-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 374 | ···</span><span·class="p"·data-group-id=" | 374 | ···</span><span·class="p"·data-group-id="2973245665-2">[</span><span·class="p"·data-group-id="2973245665-3">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</[·...·truncated·by·diffoscope;·len:·234,·SHA:·029b0f5d910fb2b74f6675a4d9845e69dadb4b095f666a2501441b2cb41c130f·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 375 | ····</span><span·class="p"·data-group-id=" | 375 | ····</span><span·class="p"·data-group-id="2973245665-5">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">tests1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·183,·SHA:·6022e9d451bdc4834fb6dadbf3edfb2edd1abaa3c68604e7824719b8858b074a·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 376 | ······························</span><span·class="p"·data-group-id=" | 376 | ······························</span><span·class="p"·data-group-id="2973245665-8">{</span><span·class="ss">tests3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p"·data-group-id="2973245665-8">}</span><span·class="p"·data-group-id="2973245665-6">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·75,·SHA:·1ef559f9893ae1a853b08d8d17548c5e2e30ba2a5a2484378c1a5224d09def43·...·]-2">]</span><span·class="p">.</span><span·class="w"> |
| 377 | </span><span·class="nf">test_cases</span><span·class="p"·data-group-id=" | 377 | </span><span·class="nf">test_cases</span><span·class="p"·data-group-id="2973245665-9">(</span><span·class="p"·data-group-id="2973245665-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 378 | ···</span><span·class="p"·data-group-id=" | 378 | ···</span><span·class="p"·data-group-id="2973245665-10">[</span><span·class="p"·data-group-id="2973245665-11">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2973245665-12">[</span><span·class="ss">parallel</span><span·class="p"[·...·truncated·by·diffoscope;·len:·399,·SHA:·e202d9f96f64288ddab43ad0d6cfba07c3a9bbc4a43299f64281104143a498e1·...·]-10">]</span><span·class="p">.</span><span·class="w"> |
| 379 | </span><span·class="nf">shuffle_test</span><span·class="p"·data-group-id=" | 379 | </span><span·class="nf">shuffle_test</span><span·class="p"·data-group-id="2973245665-14">(</span><span·class="p"·data-group-id="2973245665-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 380 | ···</span><span·class="p"·data-group-id=" | 380 | ···</span><span·class="p"·data-group-id="2973245665-15">{</span><span·class="ss">tests2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2973245665-16">[</span><span·class="ss">shuffle</span><span·class="p">,</span><span·class="p"·data-group-id="2973245665-17">[·...·truncated·by·diffoscope;·len:·237,·SHA:·2bc1e3e48aa9b7660f50c320489de53b1120760da55b7334949d145786022e8c·...·]-15">}</span><span·class="p">.</span></code></pre><p>The·described·syntax·can·also·be·used·in·test·specifications·to·change·group |
| 381 | properties·at·the·time·of·execution,·without·having·to·edit·the·test·suite.·For | 381 | properties·at·the·time·of·execution,·without·having·to·edit·the·test·suite.·For |
| 382 | more·information,·see·section | 382 | more·information,·see·section |
| 383 | <a·href="run_test_chapter.html#test_specifications">Test·Specifications</a>·in·section | 383 | <a·href="run_test_chapter.html#test_specifications">Test·Specifications</a>·in·section |
| 384 | Running·Tests·and·Analyzing·Results.</p><p>As·illustrated,·properties·can·be·combined.·If,·for·example,·<code·class="inline">shuffle</code>, | 384 | Running·Tests·and·Analyzing·Results.</p><p>As·illustrated,·properties·can·be·combined.·If,·for·example,·<code·class="inline">shuffle</code>, |
| 385 | <code·class="inline">repeat_until_any_fail</code>,·and·<code·class="inline">sequence</code>·are·all·specified,·the·test·cases·in·the | 385 | <code·class="inline">repeat_until_any_fail</code>,·and·<code·class="inline">sequence</code>·are·all·specified,·the·test·cases·in·the |
| 386 | group·are·executed·repeatedly,·and·in·random·order,·until·a·test·case·fails. | 386 | group·are·executed·repeatedly,·and·in·random·order,·until·a·test·case·fails. |
| 387 | Then·execution·is·immediately·stopped·and·the·remaining·cases·are·skipped.</p><p>Before·execution·of·a·group·begins,·the·configuration·function | 387 | Then·execution·is·immediately·stopped·and·the·remaining·cases·are·skipped.</p><p>Before·execution·of·a·group·begins,·the·configuration·function |
| Offset 401, 21 lines modified | Offset 401, 21 lines modified | ||
| 401 | <a·href="ct_hooks_chapter.html#manipulating">Manipulating·Tests</a>·in·section·Common·Test | 401 | <a·href="ct_hooks_chapter.html#manipulating">Manipulating·Tests</a>·in·section·Common·Test |
| 402 | Hooks.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">init_per_testcase/2</code>·and·<code·class="inline">end_per_testcase/2</code>·are·always·called·for·each | 402 | Hooks.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">init_per_testcase/2</code>·and·<code·class="inline">end_per_testcase/2</code>·are·always·called·for·each |
| Max diff block lines reached; 42855/112576 bytes (38.07%) of diff not shown. | |||
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 208, 15 lines modified | Offset 208, 15 lines modified | ||
| 208 | ······<p·class="built-using"> | 208 | ······<p·class="built-using"> |
| 209 | ········Built·using | 209 | ········Built·using |
| 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 212 | ······</p> | 212 | ······</p> |
| 213 | <p>Copyright·©·1996-202 | 213 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 214 | ····</footer> | 214 | ····</footer> |
| 215 | ··</div> | 215 | ··</div> |
| 216 | </main> | 216 | </main> |
| 217 | </div> | 217 | </div> |
| 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 219 | ··<script> | 219 | ··<script> |
| 220 | ··let·initialized·=·false; | 220 | ··let·initialized·=·false; |
| Offset 184, 16 lines modified | Offset 184, 16 lines modified | ||
| 184 | </span><span·class="nc">landing_pad_block</span><span·class="p">:</span><span·class="w"> | 184 | </span><span·class="nc">landing_pad_block</span><span·class="p">:</span><span·class="w"> |
| 185 | ···</span><span·class="p">@</span><span·class="ss">aggregate</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">landingpad</span><span·class="w">·</span><span·class="k">catch</span><span·class="p">,</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tag</span><span·class="w"> | 185 | ···</span><span·class="p">@</span><span·class="ss">aggregate</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">landingpad</span><span·class="w">·</span><span·class="k">catch</span><span·class="p">,</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tag</span><span·class="w"> |
| 186 | ···</span><span·class="p">@</span><span·class="ss">catched_val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">extract</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">ssa_agg</span><span·class="p">,</span><span·class="w">·</span><span·class="err">`</span><span·class="mi">0</span><span·class="err">`</span><span·class="w"> | 186 | ···</span><span·class="p">@</span><span·class="ss">catched_val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">extract</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">ssa_agg</span><span·class="p">,</span><span·class="w">·</span><span·class="err">`</span><span·class="mi">0</span><span·class="err">`</span><span·class="w"> |
| 187 | ···</span><span·class="ss">br</span><span·class="w">·</span><span·class="err">^</span><span·class="ss">common_end_of_catch</span><span·class="w"> | 187 | ···</span><span·class="ss">br</span><span·class="w">·</span><span·class="err">^</span><span·class="ss">common_end_of_catch</span><span·class="w"> |
| 188 | </span><span·class="nc">common_end_of_catch</span><span·class="p">:</span><span·class="w"> | 188 | </span><span·class="nc">common_end_of_catch</span><span·class="p">:</span><span·class="w"> |
| 189 | ··</span><span·class="p">@</span><span·class="ss">tmp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">phi</span><span·class="w">·</span><span·class="p"·data-group-id=" | 189 | ··</span><span·class="p">@</span><span·class="ss">tmp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">phi</span><span·class="w">·</span><span·class="p"·data-group-id="3614070685-1">{</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">catched_val</span><span·class="p">,</span><span·class="w">·</span><span·class="err">^</span><span·class="ss">landing_pad_block</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·29,·SHA:·6040897846b50d876bf2ffc489ed5b8ef6131a5d18885e01149d18ea6232558e·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ·············</span><span·class="p"·data-group-id=" | 190 | ·············</span><span·class="p"·data-group-id="3614070685-2">{</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">successful_result</span><span·class="p">,</span><span·class="w">·</span><span·class="err">^</span><span·class="ss">protected_blockN</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·ff234efe4c24542b4efb1546fc7ecdc6520ee49ea8ce7761f2a2bde0ecb7429e·...·]-2">}</span><span·class="w"> |
| 191 | ··</span><span·class="p">@</span><span·class="ss">result_of_catch_expr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">catch_end</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tag</span><span·class="p">,</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tmp</span></code></pre><p>Just·as·for·a·<code·class="inline">try</code>-<code·class="inline">catch</code>·expression·all·code·that·can·cause·an | 191 | ··</span><span·class="p">@</span><span·class="ss">result_of_catch_expr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">catch_end</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tag</span><span·class="p">,</span><span·class="w">·</span><span·class="p">@</span><span·class="ss">tmp</span></code></pre><p>Just·as·for·a·<code·class="inline">try</code>-<code·class="inline">catch</code>·expression·all·code·that·can·cause·an |
| 192 | exception·in·one·of·the·protected·blocks·must·have·explicit·control | 192 | exception·in·one·of·the·protected·blocks·must·have·explicit·control |
| 193 | flow·edges·to·the·landing·pad·block.</p><h2·id="exception-re-issuing"·class="section-heading"> | 193 | flow·edges·to·the·landing·pad·block.</p><h2·id="exception-re-issuing"·class="section-heading"> |
| 194 | ··<a·href="#exception-re-issuing"·class="hover-link"> | 194 | ··<a·href="#exception-re-issuing"·class="hover-link"> |
| 195 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 195 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 196 | ··</a> | 196 | ··</a> |
| 197 | ··<span·class="text">Exception·Re-issuing</span> | 197 | ··<span·class="text">Exception·Re-issuing</span> |
| Offset 230, 15 lines modified | Offset 230, 15 lines modified | ||
| 230 | proven·to·always·succeed·or·fail.</p></li></ul><h2·id="variable-naming"·class="section-heading"> | 230 | proven·to·always·succeed·or·fail.</p></li></ul><h2·id="variable-naming"·class="section-heading"> |
| 231 | ··<a·href="#variable-naming"·class="hover-link"> | 231 | ··<a·href="#variable-naming"·class="hover-link"> |
| 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 233 | ··</a> | 233 | ··</a> |
| 234 | ··<span·class="text">Variable·Naming</span> | 234 | ··<span·class="text">Variable·Naming</span> |
| 235 | </h2> | 235 | </h2> |
| 236 | <p>A·variable·name·in·BEAM·SSA·is·either·an·atom·or·a·non-negative | 236 | <p>A·variable·name·in·BEAM·SSA·is·either·an·atom·or·a·non-negative |
| 237 | integer:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom</span><span·class="p"·data-group-id=" | 237 | integer:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">atom</span><span·class="p"·data-group-id="8694372617-1">(</span><span·class="p"·data-group-id="8694372617-1">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id="8694372617-2">(</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·130bd59be1d293b8cc5e684bceacefe44234f60bb9504625c66c81081dd95760·...·]-2">)</span></code></pre><p>In·order·to·generate·fresh·unused·variable·names,·all·compiler |
| 238 | transforms·maintain·a·counter,·the·<code·class="inline">cnt</code>-field·in·the·<code·class="inline">b_function</code>·and | 238 | transforms·maintain·a·counter,·the·<code·class="inline">cnt</code>-field·in·the·<code·class="inline">b_function</code>·and |
| 239 | <code·class="inline">opt_st</code>·records,·which·is·incremented·each·time·a·new·variable·or | 239 | <code·class="inline">opt_st</code>·records,·which·is·incremented·each·time·a·new·variable·or |
| 240 | label·is·created.·In·the·following·description·the·value·of·the | 240 | label·is·created.·In·the·following·description·the·value·of·the |
| 241 | <code·class="inline">cnt</code>-field·is·called·<code·class="inline">Cnt</code>.·The·<code·class="inline">Cnt</code>·value·is·guaranteed·to·never | 241 | <code·class="inline">cnt</code>-field·is·called·<code·class="inline">Cnt</code>.·The·<code·class="inline">Cnt</code>·value·is·guaranteed·to·never |
| 242 | clash·with·a·previously·defined·variable·name.·Therefore,·value·of | 242 | clash·with·a·previously·defined·variable·name.·Therefore,·value·of |
| 243 | <code·class="inline">Cnt</code>·can·directly·be·used·as·a·variable·name·in·the·SSA·passes.</p><p>Note·that·the·rules·were·more·complicated·before·Erlang/OTP·27,·because | 243 | <code·class="inline">Cnt</code>·can·directly·be·used·as·a·variable·name·in·the·SSA·passes.</p><p>Note·that·the·rules·were·more·complicated·before·Erlang/OTP·27,·because |
| 244 | the·<code·class="inline">Cnt</code>·value·could·clash·with·other·variables.</p> | 244 | the·<code·class="inline">Cnt</code>·value·could·clash·with·other·variables.</p> |
| Offset 288, 15 lines modified | Offset 288, 15 lines modified | ||
| 288 | ······<p·class="built-using"> | 288 | ······<p·class="built-using"> |
| 289 | ········Built·using | 289 | ········Built·using |
| 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 292 | ······</p> | 292 | ······</p> |
| 293 | <p>Copyright·©·1996-202 | 293 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 294 | ····</footer> | 294 | ····</footer> |
| 295 | ··</div> | 295 | ··</div> |
| 296 | </main> | 296 | </main> |
| 297 | </div> | 297 | </div> |
| 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 299 | ··<script> | 299 | ··<script> |
| 300 | ··let·initialized·=·false; | 300 | ··let·initialized·=·false; |
| Offset 10980, 15 lines modified | Offset 10980, 15 lines modified | ||
| 10980 | ······<p·class="built-using"> | 10980 | ······<p·class="built-using"> |
| 10981 | ········Built·using | 10981 | ········Built·using |
| 10982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 10982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 10983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 10983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 10984 | ······</p> | 10984 | ······</p> |
| 10985 | <p>Copyright·©·1996-202 | 10985 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 10986 | ····</footer> | 10986 | ····</footer> |
| 10987 | ··</div> | 10987 | ··</div> |
| 10988 | </main> | 10988 | </main> |
| 10989 | </div> | 10989 | </div> |
| 10990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 10990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 10991 | ··<script> | 10991 | ··<script> |
| 10992 | ··let·initialized·=·false; | 10992 | ··let·initialized·=·false; |
| Offset 650, 15 lines modified | Offset 650, 15 lines modified | ||
| 650 | ······<p·class="built-using"> | 650 | ······<p·class="built-using"> |
| 651 | ········Built·using | 651 | ········Built·using |
| 652 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 652 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 653 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 653 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 654 | ······</p> | 654 | ······</p> |
| 655 | <p>Copyright·©·1996-202 | 655 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 656 | ····</footer> | 656 | ····</footer> |
| 657 | ··</div> | 657 | ··</div> |
| 658 | </main> | 658 | </main> |
| 659 | </div> | 659 | </div> |
| 660 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 660 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 661 | ··<script> | 661 | ··<script> |
| 662 | ··let·initialized·=·false; | 662 | ··let·initialized·=·false; |
| Offset 703, 15 lines modified | Offset 703, 15 lines modified | ||
| 703 | ······<p·class="built-using"> | 703 | ······<p·class="built-using"> |
| 704 | ········Built·using | 704 | ········Built·using |
| 705 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 705 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 706 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 706 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 707 | ······</p> | 707 | ······</p> |
| 708 | <p>Copyright·©·1996-202 | 708 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 709 | ····</footer> | 709 | ····</footer> |
| 710 | ··</div> | 710 | ··</div> |
| 711 | </main> | 711 | </main> |
| 712 | </div> | 712 | </div> |
| 713 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 713 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 714 | ··<script> | 714 | ··<script> |
| 715 | ··let·initialized·=·false; | 715 | ··let·initialized·=·false; |
| Offset 149, 15 lines modified | Offset 149, 15 lines modified | ||
| 149 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 149 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 150 | ··</a> | 150 | ··</a> |
| 151 | ··<span·class="text">Order·of·Compiler·Options</span> | 151 | ··<span·class="text">Order·of·Compiler·Options</span> |
| 152 | </h2> | 152 | </h2> |
| 153 | <p>Options·given·in·the·<code·class="inline">compile()</code>·attribute·in·the·source·code·take | 153 | <p>Options·given·in·the·<code·class="inline">compile()</code>·attribute·in·the·source·code·take |
| 154 | precedence·over·options·given·to·the·compiler,·which·in·turn·take | 154 | precedence·over·options·given·to·the·compiler,·which·in·turn·take |
| 155 | precedence·over·options·given·in·the·environment.</p><p>A·later·compiler·option·takes·precedence·over·an·earlier·one·in·the | 155 | precedence·over·options·given·in·the·environment.</p><p>A·later·compiler·option·takes·precedence·over·an·earlier·one·in·the |
| 156 | option·list.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id=" | 156 | option·list.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="6950690135-1">(</span><span·class="ss">something</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6950690135-2">[</span><span·class="ss">nowarn_missing_spec</span><span·class="p">,</span><span·class="ss">warn_missing_spe[·...·truncated·by·diffoscope;·len:·102,·SHA:·5dbe25e34a69dcb88794fcc0f01d50999aff12ecb35940d1c4767719b82a3dcf·...·]-1">)</span><span·class="p">.</span></code></pre><p>Warnings·will·be·emitted·for·functions·without·specifications,·unless |
| 157 | the·source·code·for·module·<code·class="inline">something</code>·contains·a·<code·class="inline">compile(nowarn_missing_spec)</code> | 157 | the·source·code·for·module·<code·class="inline">something</code>·contains·a·<code·class="inline">compile(nowarn_missing_spec)</code> |
| 158 | attribute.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>In·Erlang/OTP·26·and·earlier,·the·option·order·was·the·opposite·of·what | 158 | attribute.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>In·Erlang/OTP·26·and·earlier,·the·option·order·was·the·opposite·of·what |
| 159 | is·described·here.</p></section><h2·id="module-inlining"·class="section-heading"> | 159 | is·described·here.</p></section><h2·id="module-inlining"·class="section-heading"> |
| 160 | ··<a·href="#module-inlining"·class="hover-link"> | 160 | ··<a·href="#module-inlining"·class="hover-link"> |
| 161 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 161 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 162 | ··</a> | 162 | ··</a> |
| 163 | ··<span·class="text">Inlining</span> | 163 | ··<span·class="text">Inlining</span> |
| Offset 173, 22 lines modified | Offset 173, 22 lines modified | ||
| 173 | all·calls·to·the·function·are·inlined.</p><p>Inlining·does·not·necessarily·improve·running·time.·For·example,·inlining·can | 173 | all·calls·to·the·function·are·inlined.</p><p>Inlining·does·not·necessarily·improve·running·time.·For·example,·inlining·can |
| 174 | increase·Beam·stack·use,·which·probably·is·detrimental·to·performance·for | 174 | increase·Beam·stack·use,·which·probably·is·detrimental·to·performance·for |
| 175 | recursive·functions.</p><p>Inlining·is·never·default.·It·must·be·explicitly·enabled·with·a·compiler·option | 175 | recursive·functions.</p><p>Inlining·is·never·default.·It·must·be·explicitly·enabled·with·a·compiler·option |
| 176 | or·a·<code·class="inline">-compile()</code>·attribute·in·the·source·module.</p><p>To·enable·inlining,·either·use·the·option·<code·class="inline">inline</code>·to·let·the·compiler·decide | 176 | or·a·<code·class="inline">-compile()</code>·attribute·in·the·source·module.</p><p>To·enable·inlining,·either·use·the·option·<code·class="inline">inline</code>·to·let·the·compiler·decide |
| 177 | which·functions·to·inline,·or·<code·class="inline">{inline,[{Name,Arity},...]}</code>·to·have·the·compiler | 177 | which·functions·to·inline,·or·<code·class="inline">{inline,[{Name,Arity},...]}</code>·to·have·the·compiler |
| 178 | inline·all·calls·to·the·given·functions.·If·the·option·is·given·inside·a | 178 | inline·all·calls·to·the·given·functions.·If·the·option·is·given·inside·a |
| 179 | <code·class="inline">compile</code>·directive·in·an·Erlang·module,·<code·class="inline">{Name,Arity}</code>·can·be·written·as | 179 | <code·class="inline">compile</code>·directive·in·an·Erlang·module,·<code·class="inline">{Name,Arity}</code>·can·be·written·as |
| 180 | <code·class="inline">Name/Arity</code>.</p><p>Example·of·explicit·inlining:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="89 | 180 | <code·class="inline">Name/Arity</code>.</p><p>Example·of·explicit·inlining:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="8989304282-1">(</span><span·class="p"·data-group-id="8989304282-2">{</span><span·class="ss">inline</span><span·class="p">,</span><span·class="p"·data-group-id="8989304282-3">[</span><span·class="ss">pi</span><span·class="p">/</span><span·class="mi">0</span><[·...·truncated·by·diffoscope;·len:·146,·SHA:·2e3045ae8608897e5c87461d043c61bc06a0c06e683b0a9011ecf1451f416ef6·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="nf">pi</span><span·class="p"·data-group-id="89 | 181 | </span><span·class="nf">pi</span><span·class="p"·data-group-id="8989304282-4">(</span><span·class="p"·data-group-id="8989304282-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mf">3.1416</span><span·class="p">.</span></code></pre><p>Example·of·implicit·inlining:</p><pre><code·class="text">-compile(inline).</code></pre><p>The·option·<code·class="inline">{inline_size,Size}</code>·controls·how·large·functions·that·are·allowed·to |
| 182 | be·inlined.·Default·is·<code·class="inline">24</code>,·which·keeps·the·size·of·the·inlined·code·roughly | 182 | be·inlined.·Default·is·<code·class="inline">24</code>,·which·keeps·the·size·of·the·inlined·code·roughly |
| 183 | the·same·as·the·un-inlined·version·(only·relatively·small·functions·are | 183 | the·same·as·the·un-inlined·version·(only·relatively·small·functions·are |
| 184 | inlined).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Aggressive·inlining·-·will·increase·code·size.</span><span·class="w"> | 184 | inlined).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Aggressive·inlining·-·will·increase·code·size.</span><span·class="w"> |
| 185 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 185 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="5352634325-1">(</span><span·class="ss">inline</span><span·class="p"·data-group-id="5352634325-1">)</span><span·class="p">.</span><span·class="w"> |
| 186 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 186 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="5352634325-2">(</span><span·class="p"·data-group-id="5352634325-3">{</span><span·class="ss">inline_size</span><span·class="p">,</span><span·class="mi">100</span><span·class="p"·data-group-id="5352634325-3">}</span><span·class="p"·data-group-id="5352634325-2">)</span><span·class="p">.</span></code></pre><h2·id="module-inlining-of-list-functions"·class="section-heading"> |
| 187 | ··<a·href="#module-inlining-of-list-functions"·class="hover-link"> | 187 | ··<a·href="#module-inlining-of-list-functions"·class="hover-link"> |
| 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 188 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 189 | ··</a> | 189 | ··</a> |
| 190 | ··<span·class="text">Inlining·of·List·Functions</span> | 190 | ··<span·class="text">Inlining·of·List·Functions</span> |
| 191 | </h2> | 191 | </h2> |
| 192 | <p>The·compiler·can·also·inline·various·list·manipulation·functions·from·the·module | 192 | <p>The·compiler·can·also·inline·various·list·manipulation·functions·from·the·module |
| 193 | <code·class="inline">list</code>·in·STDLIB.</p><p>This·feature·must·be·explicitly·enabled·with·a·compiler·option·or·a·<code·class="inline">-compile()</code> | 193 | <code·class="inline">list</code>·in·STDLIB.</p><p>This·feature·must·be·explicitly·enabled·with·a·compiler·option·or·a·<code·class="inline">-compile()</code> |
| Offset 900, 18 lines modified | Offset 900, 18 lines modified | ||
| 900 | features.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·option·has·no·effect·when·used·in·a·<code·class="inline">-compile(..)</code>·attribute.·Instead, | 900 | features.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·option·has·no·effect·when·used·in·a·<code·class="inline">-compile(..)</code>·attribute.·Instead, |
| 901 | the·<code·class="inline">-feature(..)</code>·directive·(described·next)·should·be·used.</p><p><a·href=""·id="feature-directive"></a>·A·feature·can·also·be·enabled·(disabled)·using | 901 | the·<code·class="inline">-feature(..)</code>·directive·(described·next)·should·be·used.</p><p><a·href=""·id="feature-directive"></a>·A·feature·can·also·be·enabled·(disabled)·using |
| 902 | the·<code·class="inline">-feature(Feature,·enable·|·disable).</code>·module·directive.·Note·that·this | 902 | the·<code·class="inline">-feature(Feature,·enable·|·disable).</code>·module·directive.·Note·that·this |
| 903 | directive·can·only·be·present·in·a·prefix·of·the·file,·before·exports·and | 903 | directive·can·only·be·present·in·a·prefix·of·the·file,·before·exports·and |
| 904 | function·definitions.·This·is·the·preferred·method·of·enabling·and·disabling | 904 | function·definitions.·This·is·the·preferred·method·of·enabling·and·disabling |
| 905 | features,·since·it·is·a·local·property·of·a·module.</p></section></li><li><p><strong><code·class="inline">makedep</code></strong>·-·Produces·a·Makefile·rule·to·track·headers·dependencies.·No | 905 | features,·since·it·is·a·local·property·of·a·module.</p></section></li><li><p><strong><code·class="inline">makedep</code></strong>·-·Produces·a·Makefile·rule·to·track·headers·dependencies.·No |
| 906 | object·file·is·produced.</p><p>By·default,·this·rule·is·written·to·<code·class="inline"><File>.Pbeam</code>.·However,·if·option | 906 | object·file·is·produced.</p><p>By·default,·this·rule·is·written·to·<code·class="inline"><File>.Pbeam</code>.·However,·if·option |
| 907 | <code·class="inline">binary</code>·is·set,·nothing·is·written·and·the·rule·is·returned·in·<code·class="inline">Binary</code>.</p><p>The·output·will·be·encoded·in·UTF-8.</p><p>For·example,·if·you·have·the·following·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 907 | <code·class="inline">binary</code>·is·set,·nothing·is·written·and·the·rule·is·returned·in·<code·class="inline">Binary</code>.</p><p>The·output·will·be·encoded·in·UTF-8.</p><p>For·example,·if·you·have·the·following·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8878621095-1">(</span><span·class="ss">module</span><span·class="p"·data-group-id="8878621095-1">)</span><span·class="p">.</span><span·class="w"> |
| 908 | </span><span·class="w"> | 908 | </span><span·class="w"> |
| 909 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 909 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8878621095-2">(</span><span·class="s">"eunit/include/eunit.hrl"</span><span·class="p"·data-group-id="8878621095-2">)</span><span·class="p">.</span><span·class="w"> |
| 910 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 910 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="8878621095-3">(</span><span·class="s">"header.hrl"</span><span·class="p"·data-group-id="8878621095-3">)</span><span·class="p">.</span></code></pre><p>The·Makefile·rule·generated·by·this·option·looks·as·follows:</p><pre><code·class="text">module.beam:·module.erl·\ |
| 911 | ··/usr/local/lib/erlang/lib/eunit/include/eunit.hrl·\ | 911 | ··/usr/local/lib/erlang/lib/eunit/include/eunit.hrl·\ |
| 912 | ··header.hrl</code></pre></li><li><p><strong><code·class="inline">makedep_side_effect</code></strong>·-·The·dependencies·are·created·as·a·side·effect·to | 912 | ··header.hrl</code></pre></li><li><p><strong><code·class="inline">makedep_side_effect</code></strong>·-·The·dependencies·are·created·as·a·side·effect·to |
| 913 | the·normal·compilation·process.·This·means·that·the·object·file·will·also·be | 913 | the·normal·compilation·process.·This·means·that·the·object·file·will·also·be |
| 914 | produced.·This·option·override·the·<code·class="inline">makedep</code>·option.</p></li><li><p><strong><code·class="inline">{makedep_output,·Output}</code></strong>·-·Writes·generated·rules·to·<code·class="inline">Output</code>·instead·of | 914 | produced.·This·option·override·the·<code·class="inline">makedep</code>·option.</p></li><li><p><strong><code·class="inline">{makedep_output,·Output}</code></strong>·-·Writes·generated·rules·to·<code·class="inline">Output</code>·instead·of |
| 915 | the·default·<code·class="inline"><File>.Pbeam</code>.·<code·class="inline">Output</code>·can·be·a·filename·or·an·<code·class="inline">io_device()</code>.·To | 915 | the·default·<code·class="inline"><File>.Pbeam</code>.·<code·class="inline">Output</code>·can·be·a·filename·or·an·<code·class="inline">io_device()</code>.·To |
| 916 | write·to·stdout,·use·<code·class="inline">standard_io</code>.·However,·if·<code·class="inline">binary</code>·is·set,·nothing·is | 916 | write·to·stdout,·use·<code·class="inline">standard_io</code>.·However,·if·<code·class="inline">binary</code>·is·set,·nothing·is |
| 917 | written·to·<code·class="inline">Output</code>·and·the·result·is·returned·to·the·caller·with | 917 | written·to·<code·class="inline">Output</code>·and·the·result·is·returned·to·the·caller·with |
| Offset 969, 15 lines modified | Offset 969, 15 lines modified | ||
| 969 | that·verification·(there·will·not·even·be·a·warning·if·there·is·a | 969 | that·verification·(there·will·not·even·be·a·warning·if·there·is·a |
| 970 | mismatch).</p></li><li><p><strong><code·class="inline">{no_auto_import,[{F,A},·...]}</code></strong>·-·Makes·the·function·<code·class="inline">F/A</code>·no·longer·being | 970 | mismatch).</p></li><li><p><strong><code·class="inline">{no_auto_import,[{F,A},·...]}</code></strong>·-·Makes·the·function·<code·class="inline">F/A</code>·no·longer·being |
| 971 | auto-imported·from·the·<code·class="inline">erlang</code>·module,·which·resolves·BIF·name·clashes.·This | 971 | auto-imported·from·the·<code·class="inline">erlang</code>·module,·which·resolves·BIF·name·clashes.·This |
| 972 | option·must·be·used·to·resolve·name·clashes·with·auto-imported·BIFs·that·existed | 972 | option·must·be·used·to·resolve·name·clashes·with·auto-imported·BIFs·that·existed |
| 973 | before·Erlang/OTP·R14A··when·calling·a·local·function·with·the·same·name | 973 | before·Erlang/OTP·R14A··when·calling·a·local·function·with·the·same·name |
| 974 | as·an·auto-imported·BIF·without·module·prefix.</p><p>If·the·BIF·is·to·be·called,·use·the·<code·class="inline">erlang</code>·module·prefix | 974 | as·an·auto-imported·BIF·without·module·prefix.</p><p>If·the·BIF·is·to·be·called,·use·the·<code·class="inline">erlang</code>·module·prefix |
| 975 | in·the·call,·not·<code·class="inline">{no_auto_import,[{F,A},·...]}</code>.</p><p>If·this·option·is·written·in·the·source·code,·as·a·<code·class="inline">-compile</code>·directive,·the | 975 | in·the·call,·not·<code·class="inline">{no_auto_import,[{F,A},·...]}</code>.</p><p>If·this·option·is·written·in·the·source·code,·as·a·<code·class="inline">-compile</code>·directive,·the |
| 976 | syntax·<code·class="inline">F/A</code>·can·be·used·instead·of·<code·class="inline">{F,A}</code>.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 976 | syntax·<code·class="inline">F/A</code>·can·be·used·instead·of·<code·class="inline">{F,A}</code>.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="9480398660-1">(</span><span·class="p"·data-group-id="9480398660-2">{</span><span·class="ss">no_auto_import</span><span·class="p">,</span><span·class="p"·data-group-id="9480398660-3">[</span><span·class="ss">error</span><span·class="p">/</span><span·class="[·...·truncated·by·diffoscope;·len:·159,·SHA:·1bf7cd12e72ec0a8d7eebbf9a6bbeb00e70bd73829c36b9bbbd958d8ae31a2c3·...·]-1">)</span><span·class="p">.</span></code></pre></li><li><p><strong><code·class="inline">no_auto_import</code></strong>·-·Do·not·auto-import·any·functions·from·<code·class="inline">erlang</code>·module.</p></li><li><p><strong><code·class="inline">no_line_info</code></strong>·-·Omits·line·number·information·to·produce·a·slightly |
| 977 | smaller·output·file.</p></li><li><p><strong><code·class="inline">no_lint</code></strong>·-·Skips·the·pass·that·checks·for·errors·and·warnings.·Only | 977 | smaller·output·file.</p></li><li><p><strong><code·class="inline">no_lint</code></strong>·-·Skips·the·pass·that·checks·for·errors·and·warnings.·Only |
| 978 | applicable·together·with·the·<code·class="inline">from_abstr</code>·option.·This·is·mainly·for | 978 | applicable·together·with·the·<code·class="inline">from_abstr</code>·option.·This·is·mainly·for |
| 979 | implementations·of·other·languages·on·top·of·Erlang,·which·have·already·done | 979 | implementations·of·other·languages·on·top·of·Erlang,·which·have·already·done |
| 980 | their·own·checks·to·guarantee·correctness·of·the·code.</p><p>Caveat:·When·this·option·is·used,·there·are·no·guarantees·that·the·code·output | 980 | their·own·checks·to·guarantee·correctness·of·the·code.</p><p>Caveat:·When·this·option·is·used,·there·are·no·guarantees·that·the·code·output |
| 981 | by·the·compiler·is·correct·and·safe·to·use.·The·responsibility·for·correctness | 981 | by·the·compiler·is·correct·and·safe·to·use.·The·responsibility·for·correctness |
| 982 | lies·on·the·code·or·person·generating·the·abstract·format.·If·the·code | 982 | lies·on·the·code·or·person·generating·the·abstract·format.·If·the·code |
| 983 | contains·errors,·the·compiler·may·crash·or·produce·unsafe·code.</p></li><li><p><strong><code·class="inline">{extra_chunks,·[{binary(),·binary()}]}</code></strong>·-·Pass·extra·chunks·to·be·stored | 983 | contains·errors,·the·compiler·may·crash·or·produce·unsafe·code.</p></li><li><p><strong><code·class="inline">{extra_chunks,·[{binary(),·binary()}]}</code></strong>·-·Pass·extra·chunks·to·be·stored |
| Offset 1325, 15 lines modified | Offset 1325, 15 lines modified | ||
| 1325 | ······<p·class="built-using"> | 1325 | ······<p·class="built-using"> |
| 1326 | ········Built·using | 1326 | ········Built·using |
| 1327 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1327 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1328 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1328 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1329 | ······</p> | 1329 | ······</p> |
| 1330 | <p>Copyright·©·1996-202 | 1330 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1331 | ····</footer> | 1331 | ····</footer> |
| 1332 | ··</div> | 1332 | ··</div> |
| 1333 | </main> | 1333 | </main> |
| 1334 | </div> | 1334 | </div> |
| 1335 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1335 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1336 | ··<script> | 1336 | ··<script> |
| 1337 | ··let·initialized·=·false; | 1337 | ··let·initialized·=·false; |
| Offset 169, 18 lines modified | Offset 169, 18 lines modified | ||
| 169 | </h2> | 169 | </h2> |
| 170 | <h3·id="fixed-bugs-and-malfunctions-2"·class="section-heading"> | 170 | <h3·id="fixed-bugs-and-malfunctions-2"·class="section-heading"> |
| 171 | ··<a·href="#fixed-bugs-and-malfunctions-2"·class="hover-link"> | 171 | ··<a·href="#fixed-bugs-and-malfunctions-2"·class="hover-link"> |
| 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 173 | ··</a> | 173 | ··</a> |
| 174 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 174 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 175 | </h3> | 175 | </h3> |
| 176 | <ul><li><p>Fixed·a·crash·in·the·common·sub-expression·elimination·pass.</p><p>Own·Id:·OTP-19243·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8818"·title="">GH-8818</a>,·<a·href="https://github.com/erlang/otp/pull/8838"·title="">PR-8838</a></p></li><li><p>Fixed·a·bug·where·bogus·code·was·generated·for·consecutive·calls·to·<code·class="inline">erlang:setelement/2</code>,·potentially·crashing·the·runtime·system.</p><p>Own·Id:·OTP-19270·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8783"·title="">GH-8783</a>,·<a·href="https://github.com/erlang/otp/pull/8898"·title="">PR-8898</a></p></li><li><p>When·the·<code·class="inline">line_coverage</code>·option·was·used,·exceptions·could·show·the·wrong·line·for·where·the·exception·was·raised.</p><p>Own·Id:·OTP-19282·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8907"·title="">PR-8907</a></p></li><li><p>The·<code·class="inline">line_coverage</code>·option·would·be·ignored·if·given·in·a·<code·class="inline">compile()</code>·attribute·within·a·module.</p><p>Own·Id:·OTP-19309·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8942"·title="">GH-8942</a>,·<a·href="https://github.com/erlang/otp/pull/8970"·title="">PR-8970</a></p></li><li><p>A·segment·matching·a·float·in·a·binary·generator·will·now·skip·any·invalid·float·(such·as·a·NaN)·and·continue·matching·the·rest·of·the·binary.·Before·this·correction,·the·comprehension·would·stop·as·soon·as·an·invalid·float·was·encountered.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">BadFloat</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | <ul><li><p>Fixed·a·crash·in·the·common·sub-expression·elimination·pass.</p><p>Own·Id:·OTP-19243·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8818"·title="">GH-8818</a>,·<a·href="https://github.com/erlang/otp/pull/8838"·title="">PR-8838</a></p></li><li><p>Fixed·a·bug·where·bogus·code·was·generated·for·consecutive·calls·to·<code·class="inline">erlang:setelement/2</code>,·potentially·crashing·the·runtime·system.</p><p>Own·Id:·OTP-19270·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8783"·title="">GH-8783</a>,·<a·href="https://github.com/erlang/otp/pull/8898"·title="">PR-8898</a></p></li><li><p>When·the·<code·class="inline">line_coverage</code>·option·was·used,·exceptions·could·show·the·wrong·line·for·where·the·exception·was·raised.</p><p>Own·Id:·OTP-19282·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8907"·title="">PR-8907</a></p></li><li><p>The·<code·class="inline">line_coverage</code>·option·would·be·ignored·if·given·in·a·<code·class="inline">compile()</code>·attribute·within·a·module.</p><p>Own·Id:·OTP-19309·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8942"·title="">GH-8942</a>,·<a·href="https://github.com/erlang/otp/pull/8970"·title="">PR-8970</a></p></li><li><p>A·segment·matching·a·float·in·a·binary·generator·will·now·skip·any·invalid·float·(such·as·a·NaN)·and·continue·matching·the·rest·of·the·binary.·Before·this·correction,·the·comprehension·would·stop·as·soon·as·an·invalid·float·was·encountered.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">BadFloat</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2489050057-1"><<</span><span·class="o">-</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">64</span><span·class="p"·data-group-id="2489050057-1">>></span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="p"·data-group-id=" | 177 | </span><span·class="p"·data-group-id="2489050057-2"><<</span><span·class="s">"ÿÿÿÿÿÿÿÿ"</span><span·class="p"·data-group-id="2489050057-2">>></span><span·class="gp·unselectable"> |
| 178 | 2>·</span><span·class="p"·data-group-id=" | 178 | 2>·</span><span·class="p"·data-group-id="2489050057-3">[</span><span·class="n">X</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="p"·data-group-id="2489050057-4"><<</span><span·class="n">X</span><span·class="p">:</span><span·class="mi">64</span><sp[·...·truncated·by·diffoscope;·len:·641,·SHA:·dfd2f0a6d3657351a9769190ccb52a12acd6db45db3d9e1ff45a543b4a0f2830·...·]-3">]</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p"·data-group-id=" | 179 | </span><span·class="p"·data-group-id="2489050057-6">[</span><span·class="mf">0.0</span><span·class="p">,</span><span·class="mf">42.0</span><span·class="p"·data-group-id="2489050057-6">]</span></code></pre><p>Own·Id:·OTP-19331·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8978"·title="">PR-8978</a></p></li></ul><h2·id="compiler-8-5-3"·class="section-heading"> |
| 180 | ··<a·href="#compiler-8-5-3"·class="hover-link"> | 180 | ··<a·href="#compiler-8-5-3"·class="hover-link"> |
| 181 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 181 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 182 | ··</a> | 182 | ··</a> |
| 183 | ··<span·class="text">Compiler·8.5.3</span> | 183 | ··<span·class="text">Compiler·8.5.3</span> |
| 184 | </h2> | 184 | </h2> |
| 185 | <h3·id="fixed-bugs-and-malfunctions-3"·class="section-heading"> | 185 | <h3·id="fixed-bugs-and-malfunctions-3"·class="section-heading"> |
| 186 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> | 186 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> |
| Offset 220, 61 lines modified | Offset 220, 61 lines modified | ||
| 220 | </h2> | 220 | </h2> |
| 221 | <h3·id="fixed-bugs-and-malfunctions-6"·class="section-heading"> | 221 | <h3·id="fixed-bugs-and-malfunctions-6"·class="section-heading"> |
| 222 | ··<a·href="#fixed-bugs-and-malfunctions-6"·class="hover-link"> | 222 | ··<a·href="#fixed-bugs-and-malfunctions-6"·class="hover-link"> |
| 223 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 223 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 224 | ··</a> | 224 | ··</a> |
| 225 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 225 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 226 | </h3> | 226 | </h3> |
| 227 | <ul><li><p>Generators·for·binary·comprehensions·could·be·evaluated·before·it·was·known·that·they·would·be·needed.·That·could·result·in·a·binary·comprehensions·failing·if·a·generator·that·should·not·be·evaluated·until·later·failed.</p><p>As·an·example,·consider·this·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 227 | <ul><li><p>Generators·for·binary·comprehensions·could·be·evaluated·before·it·was·known·that·they·would·be·needed.·That·could·result·in·a·binary·comprehensions·failing·if·a·generator·that·should·not·be·evaluated·until·later·failed.</p><p>As·an·example,·consider·this·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4633761555-1">(</span><span·class="ss">t</span><span·class="p"·data-group-id="4633761555-1">)</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 228 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4633761555-2">(</span><span·class="p"·data-group-id="4633761555-3">[</span><span·class="ss">f</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4633761555-3">]</span><span·class="p"·data-group-id="4633761555-2">)</span><span·class="p">.</span><span·class="w"> |
| 229 | </span><span·class="nf">f</span><span·class="p"·data-group-id=" | 229 | </span><span·class="nf">f</span><span·class="p"·data-group-id="4633761555-4">(</span><span·class="p"·data-group-id="4633761555-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 230 | ····</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="p"·data-group-id="4633761555-5"><<</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">||</span><span·class="w">·</span><span·class="p">_</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·730,·SHA:·6c9d7567bdd0b132d17400bbd66b94015533072bd0941514272a426d89f300e2·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="gt">**·exception·error:·bad·generator·ok | 231 | </span><span·class="gt">**·exception·error:·bad·generator·ok |
| 232 | ·····in·function··t:f/0·(t.erl,·line·6)</span></code></pre><p>In·Erlang/OTP·27·it·returns·an·empty·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">t</span><span·class="p">:</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 232 | ·····in·function··t:f/0·(t.erl,·line·6)</span></code></pre><p>In·Erlang/OTP·27·it·returns·an·empty·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">t</span><span·class="p">:</span><span·class="nf">f</span><span·class="p"·data-group-id="5433926702-1">(</span><span·class="p"·data-group-id="5433926702-1">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="p"·data-group-id=" | 233 | </span><span·class="p"·data-group-id="5433926702-2"><<</span><span·class="p"·data-group-id="5433926702-2">>></span></code></pre><p>Own·Id:·OTP-18703·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/7494"·title="">GH-7494</a>,·<a·href="https://github.com/erlang/otp/pull/7538"·title="">PR-7538</a></p></li><li><p>The·documentation·for·the·preprocessor·now·mentions·that·<code·class="inline">defined(Name)</code>·can·be·called·in·the·condition·for·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·directive·to·test·whether·<code·class="inline">Name</code>·is·the·name·of·a·defined·macro.·(This·feature·was·implemented·in·OTP·21.)</p><p>If·a·function·call·in·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·with·a·name·that·is·not·the·name·of·a·guard·BIF,·there·would·not·be·a·compilation·error,·but·would·instead·cause·the·lines·following·the·directive·to·be·skipped.·This·has·now·been·changed·to·be·a·compilation·error.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18784·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/7706"·title="">GH-7706</a>,·<a·href="https://github.com/erlang/otp/pull/7726"·title="">PR-7726</a></p></li></ul><h3·id="improvements-and-new-features-1"·class="section-heading"> |
| 234 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> | 234 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> |
| 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 236 | ··</a> | 236 | ··</a> |
| 237 | ··<span·class="text">Improvements·and·New·Features</span> | 237 | ··<span·class="text">Improvements·and·New·Features</span> |
| 238 | </h3> | 238 | </h3> |
| 239 | <ul><li><p>The·compiler·now·emits·nicer·error·message·for·function·head·mismatches. | 239 | <ul><li><p>The·compiler·now·emits·nicer·error·message·for·function·head·mismatches. |
| 240 | For·example,·given:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">a</span><span·class="p"·data-group-id=" | 240 | For·example,·given:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">a</span><span·class="p"·data-group-id="1864850051-1">(</span><span·class="p"·data-group-id="1864850051-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 241 | </span><span·class="nf">a</span><span·class="p"·data-group-id=" | 241 | </span><span·class="nf">a</span><span·class="p"·data-group-id="1864850051-2">(</span><span·class="p">_</span><span·class="p"·data-group-id="1864850051-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">error</span><span·class="p">.</span></code></pre><p>Erlang/OTP·26·and·earlier·would·emit·a·diagnostic·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch |
| 242 | %····6|·a(_)·->·error. | 242 | %····6|·a(_)·->·error. |
| 243 | %·····|·^</code></pre><p>while·in·Erlang/OTP·27·the·diagnostic·is·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch:·function·a·with·arities·0·and·1·is·regarded·as·two·distinct·functions.·Is·the·number·of·arguments·incorrect·or·is·the·semicolon·in·a/0·unwanted? | 243 | %·····|·^</code></pre><p>while·in·Erlang/OTP·27·the·diagnostic·is·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch:·function·a·with·arities·0·and·1·is·regarded·as·two·distinct·functions.·Is·the·number·of·arguments·incorrect·or·is·the·semicolon·in·a/0·unwanted? |
| 244 | %····6|·a(_)·->·error. | 244 | %····6|·a(_)·->·error. |
| 245 | %·····|·^</code></pre><p>Own·Id:·OTP-18648·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7383"·title="">PR-7383</a></p></li><li><p>The·compiler·now·optimizes·creation·of·binaries·that·are·known·to·be·constant.</p><p>Consider·this·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bin</span><span·class="p"·data-group-id=" | 245 | %·····|·^</code></pre><p>Own·Id:·OTP-18648·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7383"·title="">PR-7383</a></p></li><li><p>The·compiler·now·optimizes·creation·of·binaries·that·are·known·to·be·constant.</p><p>Consider·this·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bin</span><span·class="p"·data-group-id="6811115538-1">(</span><span·class="p"·data-group-id="6811115538-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 246 | ····</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">char</span><span·class="p"·data-group-id=" | 246 | ····</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">char</span><span·class="p"·data-group-id="6811115538-2">(</span><span·class="p"·data-group-id="6811115538-2">)</span><span·class="p">,</span><span·class="w"> |
| 247 | ····</span><span·class="p"·data-group-id=" | 247 | ····</span><span·class="p"·data-group-id="6811115538-3"><<</span><span·class="n">C</span><span·class="p"·data-group-id="6811115538-3">>></span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="nf">char</span><span·class="p"·data-group-id=" | 248 | </span><span·class="nf">char</span><span·class="p"·data-group-id="6811115538-4">(</span><span·class="p"·data-group-id="6811115538-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="sc">$*</span><span·class="p">.</span></code></pre><p>Essentially,·the·compiler·rewrites·the·[·...·truncated·by·diffoscope;·len:·212,·SHA:·ac389d730b7f5e23eaf2c122ce59b11c74841edffe00e71eb6cc3197e5f8582f·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 249 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">char</span><span·class="p"·data-group-id=" | 249 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">char</span><span·class="p"·data-group-id="8809650351-2">(</span><span·class="p"·data-group-id="8809650351-2">)</span><span·class="p">,</span><span·class="w"> |
| 250 | ····</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="p"·data-group-id="8809650351-3"><<</span><span·class="sc">$*</span><span·class="p"·data-group-id="8809650351-3">>></span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="nf">char</span><span·class="p"·data-group-id=" | 251 | </span><span·class="nf">char</span><span·class="p"·data-group-id="8809650351-4">(</span><span·class="p"·data-group-id="8809650351-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="sc">$*</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-18673·Aux·Id:·<a·href="http[·...·truncated·by·diffoscope;·len:·818,·SHA:·c0fcac30c48c21039d2b7e2580c09cdccc99aa63f37b2f3dc4acb810d66274a9·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="nf">update</span><span·class="p"·data-group-id=" | 252 | </span><span·class="nf">update</span><span·class="p"·data-group-id="5972368481-3">(</span><span·class="n">Value</span><span·class="p"·data-group-id="5972368481-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 253 | ····</span><span·class="n">R0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id=" | 253 | ····</span><span·class="n">R0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="5972368481-4">{</span><span·class="p"·data-group-id="5972368481-4">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ····</span><span·class="n">R1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id=" | 254 | ····</span><span·class="n">R1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="5972368481-5">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="n">Value</span><span·class="p"·data-group-id="5972368481-5">}</span><span·class="p">,</span><span·class="w"> |
| 255 | ····</span><span·class="n">R2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R1</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id=" | 255 | ····</span><span·class="n">R2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R1</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="5972368481-6">{</span><span·class="ss">b</span><span·class="o">=</span><span·class="mi">2</span><span·class="p"·data-group-id="5972368481-6">}</span><span·class="p">,</span><span·class="w"> |
| 256 | ····</span><span·class="n">R2</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id=" | 256 | ····</span><span·class="n">R2</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="5972368481-7">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="mi">3</span><span·class="p"·data-group-id="5972368481-7">}</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-18680·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7491"·title="">PR-7491</a>,·<a·href="https://github.com/erlang/otp/pull/8086"·title="">PR-8086</a>,·ERIERL-967</p></li><li><p>Improved·the·performance·of·the·alias·analysis·pass.</p><p>Own·Id:·OTP-18714·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7528"·title="">PR-7528</a>,·<a·href="https://github.com/erlang/otp/issues/7432"·title="">GH-7432</a></p></li><li><p><code·class="inline">-spec</code>·attributes·are·now·used·for·documentation.</p><p>Own·Id:·OTP-18801·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7739"·title="">PR-7739</a></p></li><li><p>Native·coverage·support·has·been·implemented·in·the·JIT.·It·will··automatically·be·used·by·the·<a·href="../../../../lib/tools-4.1.1/doc/html/cover.html"><code·class="inline">cover</code></a>·tool·to·reduce·the·execution·overhead·when·running·cover-compiled·code.</p><p>There·are·also·new·APIs·to·support·native·coverage·without·using·the·<code·class="inline">cover</code>·tool.</p><p>To·instrument·code·for·native·coverage·it·must·be·compiled·with·the·<a·href="compile.html#line_coverage"><code·class="inline">line_coverage</code></a>·option.</p><p>To·enable·native·coverage·in·the·runtime·system,·start·it·like·so:</p><pre><code·class="text">$·erl·+JPcover·true</code></pre><p>There·are·also·the·following·new·functions·for·supporting·native·coverage:</p><ul><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#coverage_support/0"><code·class="inline">code:coverage_support/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage/2"><code·class="inline">code:get_coverage/2</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#reset_coverage/1"><code·class="inline">code:reset_coverage/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/0"><code·class="inline">code:get_coverage_mode/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/1"><code·class="inline">code:get_coverage_mode/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#set_coverage_mode/1"><code·class="inline">code:set_coverage_mode/1</code></a></li></ul><p>Own·Id:·OTP-18856·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7856"·title="">PR-7856</a></p></li><li><p><a·href="https://www.erlang.org/eeps/eep-0059">EEP-59·-·Documentation·Attributes</a>·has·been·implemented.</p><p>Documentation·attributes·can·be·used·to·document·functions,·types,·callbacks,·and·modules. |
| 257 | The·keyword·<code·class="inline">-moduledoc·"Documentation·here".</code>·is·used·to·document·modules,·while·<code·class="inline">-doc·"Documentation·here".</code>·can·be·used·on·top·of·functions,·types,·and·callbacks·to·document·them,·respectively.</p><ul><li><p>Types,·callbacks,·and·function·documentation·can·be·set·to·<code·class="inline">hidden</code>·either·via·<code·class="inline">-doc·false</code>·or·<code·class="inline">-doc·hidden</code>.·When·documentation·attributes·mark·a·type·as·hidden,·they·will·not·be·part·of·the·documentation.</p></li><li><p>The·documentation·from·<code·class="inline">moduledoc</code>·and·<code·class="inline">doc</code>·gets·added·by·default·to·the·binary·beam·file,·following·the·format·of·<a·href="https://www.erlang.org/eeps/eep-0048">EEP-48</a>.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_doc</code>·will·raise·a·warning·when | 257 | The·keyword·<code·class="inline">-moduledoc·"Documentation·here".</code>·is·used·to·document·modules,·while·<code·class="inline">-doc·"Documentation·here".</code>·can·be·used·on·top·of·functions,·types,·and·callbacks·to·document·them,·respectively.</p><ul><li><p>Types,·callbacks,·and·function·documentation·can·be·set·to·<code·class="inline">hidden</code>·either·via·<code·class="inline">-doc·false</code>·or·<code·class="inline">-doc·hidden</code>.·When·documentation·attributes·mark·a·type·as·hidden,·they·will·not·be·part·of·the·documentation.</p></li><li><p>The·documentation·from·<code·class="inline">moduledoc</code>·and·<code·class="inline">doc</code>·gets·added·by·default·to·the·binary·beam·file,·following·the·format·of·<a·href="https://www.erlang.org/eeps/eep-0048">EEP-48</a>.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_doc</code>·will·raise·a·warning·when |
| 258 | <code·class="inline">-doc</code>·attributes·are·missing·in·exported·functions,·types,·and·callbacks.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_spec_documented</code>·will·raise·a·warning·when | 258 | <code·class="inline">-doc</code>·attributes·are·missing·in·exported·functions,·types,·and·callbacks.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_spec_documented</code>·will·raise·a·warning·when |
| 259 | spec·attributes·are·missing·in·documented·functions,·types,·and·callbacks.</p></li><li><p><code·class="inline">moduledoc</code>s·and·<code·class="inline">doc</code>s·may·refer·to·external·files·to·be·embedded,·such·as·<code·class="inline">-doc·{file,·"README.md"}.</code>,·which·refers·to·the·file·<code·class="inline">README.md</code>·found·in·the·current·working·directory.</p></li><li><p>The·compiler·warns·about·exported·functions·whose·specs·refer·to·hidden·types.·Thus,·there·will·be·warnings·when·a·hidden·type·(meaning,·the·type·is·not·part·of·the·documentation)·gets·used·in·an·exported·function.</p></li></ul><p>Own·Id:·OTP-18916·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7936"·title="">PR-7936</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>The·order·in·which·the·compiler·looks·up·options·has·changed.</p><p>When·there·is·a·conflict·in·the·compiler·options·given·in·the·<code·class="inline">-compile()</code>·attribute·and·options·given·to·the·compiler,·the·options·given·in·the·<code·class="inline">-compile()</code>·attribute·overrides·the·option·given·to·the·compiler,·which·in·turn·overrides·options·given·in·the·<code·class="inline">ERL_COMPILER_OPTIONS</code>·environment·variable.</p><p>Example:</p><p>If··<code·class="inline">some_module.erl</code>·has·the·following·attribute:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 259 | spec·attributes·are·missing·in·documented·functions,·types,·and·callbacks.</p></li><li><p><code·class="inline">moduledoc</code>s·and·<code·class="inline">doc</code>s·may·refer·to·external·files·to·be·embedded,·such·as·<code·class="inline">-doc·{file,·"README.md"}.</code>,·which·refers·to·the·file·<code·class="inline">README.md</code>·found·in·the·current·working·directory.</p></li><li><p>The·compiler·warns·about·exported·functions·whose·specs·refer·to·hidden·types.·Thus,·there·will·be·warnings·when·a·hidden·type·(meaning,·the·type·is·not·part·of·the·documentation)·gets·used·in·an·exported·function.</p></li></ul><p>Own·Id:·OTP-18916·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7936"·title="">PR-7936</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>The·order·in·which·the·compiler·looks·up·options·has·changed.</p><p>When·there·is·a·conflict·in·the·compiler·options·given·in·the·<code·class="inline">-compile()</code>·attribute·and·options·given·to·the·compiler,·the·options·given·in·the·<code·class="inline">-compile()</code>·attribute·overrides·the·option·given·to·the·compiler,·which·in·turn·overrides·options·given·in·the·<code·class="inline">ERL_COMPILER_OPTIONS</code>·environment·variable.</p><p>Example:</p><p>If··<code·class="inline">some_module.erl</code>·has·the·following·attribute:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="5145617348-1">(</span><span·class="p"·data-group-id="5145617348-2">[</span><span·class="ss">nowarn_missing_spec</span><span·class="p"·data-group-id="5145617348-2">]</span><span·class="p"·data-group-id="5145617348-1">)</span><span·class="p">.</span></code><[·...·truncated·by·diffoscope;·len:·1215,·SHA:·9f57f58ec5fd06f9a9ff32fe716b435ed4fc3a22af10fe064e3cb8893f18e6f3·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="nf">update</span><span·class="p"·data-group-id=" | 260 | </span><span·class="nf">update</span><span·class="p"·data-group-id="9077994004-3">(</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9077994004-4">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="ss">needs_update</span><span·class="p">,</span><span·class="ss">b</s[·...·truncated·by·diffoscope;·len:·195,·SHA:·e5a5f7fcada14a60dc3bb16f7430be7c0d16dfa74901e989dd4e41c856c0077f·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 261 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 261 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">R0</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9077994004-5">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="ss">up_to_date</span><span·class="p"·data-group-id="9077994004-5">}</span><span·class="p">,</span><span·class="w"> |
| 262 | ····</span><span·class="k">if</span><span·class="w"> | 262 | ····</span><span·class="k">if</span><span·class="w"> |
| 263 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 263 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 264 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 264 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9077994004-6">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">negative</span><span·class="p"·data-group-id="9077994004-6">}</span><span·class="p">;</span><span·class="w"> |
| 265 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 265 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 266 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 266 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9077994004-7">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">zero</span><span·class="p"·data-group-id="9077994004-7">}</span><span·class="p">;</span><span·class="w"> |
| 267 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 267 | ········</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 268 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 268 | ············</span><span·class="n">R</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="9077994004-8">{</span><span·class="ss">c</span><span·class="o">=</span><span·class="ss">positive</span><span·class="p"·data-group-id="9077994004-8">}</span><span·class="w"> |
| 269 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·record·updates·in·each·of·the·three·clauses·of·the·<code·class="inline">if</code>·can·safely·be·done·in-place,·because·variable·<code·class="inline">R</code>·is·not·used·again.</p><p>Own·Id:·OTP-18972·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8090"·title="">PR-8090</a></p></li><li><p>Improved·the·match·context·reuse·optimization·slightly,·allowing·match·contexts·to·be·passed·as-is·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#bit_size/1"><code·class="inline">bit_size/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#byte_size/1"><code·class="inline">byte_size/1</code></a>.</p><p>Own·Id:·OTP-18987</p></li><li><p><a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_lint.html"><code·class="inline">erl_lint</code></a>·(and·by·extension·the·<a·href="compile.html"><code·class="inline">compiler</code></a>)·will·now·warn·for·code·using·deprecated·callbacks.</p><p>The·only·callback·currenly·deprecated·is·<code·class="inline">format_status/2</code>·in·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#c:format_status/2"><code·class="inline">gen_server</code></a>,·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#c:format_status/2"><code·class="inline">gen_event</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#c:format_status/2"><code·class="inline">gen_statem</code></a>.</p><p>You·can·use·<code·class="inline">nowarn_deprecated_callback</code>·to·silence·the·warning.</p><p>Own·Id:·OTP-19010·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8205"·title="">PR-8205</a></p></li></ul><h2·id="compiler-8-4-3-2"·class="section-heading"> | 269 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·record·updates·in·each·of·the·three·clauses·of·the·<code·class="inline">if</code>·can·safely·be·done·in-place,·because·variable·<code·class="inline">R</code>·is·not·used·again.</p><p>Own·Id:·OTP-18972·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8090"·title="">PR-8090</a></p></li><li><p>Improved·the·match·context·reuse·optimization·slightly,·allowing·match·contexts·to·be·passed·as-is·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#bit_size/1"><code·class="inline">bit_size/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#byte_size/1"><code·class="inline">byte_size/1</code></a>.</p><p>Own·Id:·OTP-18987</p></li><li><p><a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_lint.html"><code·class="inline">erl_lint</code></a>·(and·by·extension·the·<a·href="compile.html"><code·class="inline">compiler</code></a>)·will·now·warn·for·code·using·deprecated·callbacks.</p><p>The·only·callback·currenly·deprecated·is·<code·class="inline">format_status/2</code>·in·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#c:format_status/2"><code·class="inline">gen_server</code></a>,·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_event.html#c:format_status/2"><code·class="inline">gen_event</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/gen_server.html#c:format_status/2"><code·class="inline">gen_statem</code></a>.</p><p>You·can·use·<code·class="inline">nowarn_deprecated_callback</code>·to·silence·the·warning.</p><p>Own·Id:·OTP-19010·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8205"·title="">PR-8205</a></p></li></ul><h2·id="compiler-8-4-3-2"·class="section-heading"> |
| 270 | ··<a·href="#compiler-8-4-3-2"·class="hover-link"> | 270 | ··<a·href="#compiler-8-4-3-2"·class="hover-link"> |
| 271 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 271 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 272 | ··</a> | 272 | ··</a> |
| 273 | ··<span·class="text">Compiler·8.4.3.2</span> | 273 | ··<span·class="text">Compiler·8.4.3.2</span> |
| 274 | </h2> | 274 | </h2> |
| 275 | <h3·id="fixed-bugs-and-malfunctions-7"·class="section-heading"> | 275 | <h3·id="fixed-bugs-and-malfunctions-7"·class="section-heading"> |
| Offset 3194, 15 lines modified | Offset 3194, 15 lines modified | ||
| 3194 | ······<p·class="built-using"> | 3194 | ······<p·class="built-using"> |
| 3195 | ········Built·using | 3195 | ········Built·using |
| 3196 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3196 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3197 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3197 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3198 | ······</p> | 3198 | ······</p> |
| 3199 | <p>Copyright·©·1996-202 | 3199 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3200 | ····</footer> | 3200 | ····</footer> |
| 3201 | ··</div> | 3201 | ··</div> |
| 3202 | </main> | 3202 | </main> |
| 3203 | </div> | 3203 | </div> |
| 3204 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3204 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3205 | ··<script> | 3205 | ··<script> |
| 3206 | ··let·initialized·=·false; | 3206 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 138, 50 lines modified | Offset 138, 50 lines modified | ||
| 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 139 | ··</a> | 139 | ··</a> |
| 140 | ··<span·class="text">Syntax</span> | 140 | ··<span·class="text">Syntax</span> |
| 141 | </h2> | 141 | </h2> |
| 142 | <p>SSA·checks·are·embedded·in·the·source·code·as·comments·starting·with | 142 | <p>SSA·checks·are·embedded·in·the·source·code·as·comments·starting·with |
| 143 | with·one·of·<code·class="inline">%ssa%</code>,·<code·class="inline">%%ssa%</code>·or·<code·class="inline">%%%ssa%</code>.·This·is·a·short | 143 | with·one·of·<code·class="inline">%ssa%</code>,·<code·class="inline">%%ssa%</code>·or·<code·class="inline">%%%ssa%</code>.·This·is·a·short |
| 144 | introduction·the·syntax,·for·the·full·syntax·please·refer·to·the | 144 | introduction·the·syntax,·for·the·full·syntax·please·refer·to·the |
| 145 | <code·class="inline">ssa_check_when_clause</code>·production·in·<code·class="inline">erl_parse.yrl</code>.</p><p>SSA·checks·can·be·placed·inside·any·Erlang·function,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t0</span><span·class="p"·data-group-id=" | 145 | <code·class="inline">ssa_check_when_clause</code>·production·in·<code·class="inline">erl_parse.yrl</code>.</p><p>SSA·checks·can·be·placed·inside·any·Erlang·function,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t0</span><span·class="p"·data-group-id="3188142649-1">(</span><span·class="p"·data-group-id="3188142649-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 146 | </span><span·class="c1">%ssa%·()·when·post_ssa_opt·-></span><span·class="w"> | 146 | </span><span·class="c1">%ssa%·()·when·post_ssa_opt·-></span><span·class="w"> |
| 147 | </span><span·class="c1">%ssa%···ret(#{}).</span><span·class="w"> | 147 | </span><span·class="c1">%ssa%···ret(#{}).</span><span·class="w"> |
| 148 | ··</span><span·class="p"·data-group-id=" | 148 | ··</span><span·class="p"·data-group-id="3188142649-2">#{</span><span·class="p"·data-group-id="3188142649-2">}</span><span·class="p">.</span></code></pre><p>will·check·that·<code·class="inline">t0/0</code>·returns·the·literal·<code·class="inline">#{}</code>.·If·we·want·to·check |
| 149 | that·a·function·returns·its·first·formal·parameter,·we·can·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t1</span><span·class="p"·data-group-id=" | 149 | that·a·function·returns·its·first·formal·parameter,·we·can·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t1</span><span·class="p"·data-group-id="6346587110-1">(</span><span·class="n">A</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">B</span><span·class="p"·data-group-id="6346587110-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | </span><span·class="c1">%ssa%·(X,·_)·when·post_ssa_opt·-></span><span·class="w"> | 150 | </span><span·class="c1">%ssa%·(X,·_)·when·post_ssa_opt·-></span><span·class="w"> |
| 151 | </span><span·class="c1">%ssa%···ret(X).</span><span·class="w"> | 151 | </span><span·class="c1">%ssa%···ret(X).</span><span·class="w"> |
| 152 | ··</span><span·class="n">A</span><span·class="p">.</span></code></pre><p>Note·how·we·match·the·first·formal·parameter·using·<code·class="inline">X</code>.·The·reason·for | 152 | ··</span><span·class="n">A</span><span·class="p">.</span></code></pre><p>Note·how·we·match·the·first·formal·parameter·using·<code·class="inline">X</code>.·The·reason·for |
| 153 | having·our·own·formal·parameters·for·the·SSA·check,·is·that·we·don't | 153 | having·our·own·formal·parameters·for·the·SSA·check,·is·that·we·don't |
| 154 | want·to·introduce·new·identifiers·at·the·Erlang·level·to·support | 154 | want·to·introduce·new·identifiers·at·the·Erlang·level·to·support |
| 155 | SSA-level·checks.·Consider·if·<code·class="inline">t1/2</code>·had·been·defined·as·<code·class="inline">t1([A|As],·B)</code>·we·would·have·had·to·introduce·a·new·identifier·for·the·aggregate | 155 | SSA-level·checks.·Consider·if·<code·class="inline">t1/2</code>·had·been·defined·as·<code·class="inline">t1([A|As],·B)</code>·we·would·have·had·to·introduce·a·new·identifier·for·the·aggregate |
| 156 | value·<code·class="inline">[A|As]</code>.</p><p>The·full·syntax·for·a·SSA·check·clause·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="ss">expected</span><span·class="o">-</span><span·class="ss">result</span><span·class="o">></span><span·class="o">?</span><span·class="w">·</span><span·class="p"·data-group-id=" | 156 | value·<code·class="inline">[A|As]</code>.</p><p>The·full·syntax·for·a·SSA·check·clause·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="ss">expected</span><span·class="o">-</span><span·class="ss">result</span><span·class="o">></span><span·class="o">?</span><span·class="w">·</span><span·class="p"·data-group-id="1213250055-1">(</span><span·class="o"><</span><span·class="ss">formals</span><span·class="o">></span><span·class="p"·data-group-id="1213250055-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">pipeline</span><span·class="o">-</span><span·class="ss">location</span><span·class="o">></span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="o"><</span><span·class="ss">checks</span><span·class="o">></span><span·class="w">·</span><span·class="ss">'.'</span></code></pre><p>where·<code·class="inline"><expected-result></code>·can·be·one·of·<code·class="inline">pass</code>·(the·check·must |
| 157 | succeed),·<code·class="inline">fail</code>·and·<code·class="inline">xfail</code>·(the·check·must·fail).·Omitting | 157 | succeed),·<code·class="inline">fail</code>·and·<code·class="inline">xfail</code>·(the·check·must·fail).·Omitting |
| 158 | <code·class="inline"><expected-result></code>·is·parsed·as·an·implicit·<code·class="inline">pass</code>.</p><p><code·class="inline"><formals></code>·is·a·comma-separated·list·of·variables.</p><p><code·class="inline"><pipeline-location></code>·specifies·when·in·the·compiler·pipeline·to·run | 158 | <code·class="inline"><expected-result></code>·is·parsed·as·an·implicit·<code·class="inline">pass</code>.</p><p><code·class="inline"><formals></code>·is·a·comma-separated·list·of·variables.</p><p><code·class="inline"><pipeline-location></code>·specifies·when·in·the·compiler·pipeline·to·run |
| 159 | the·checks.·For·now·the·only·supported·value·for·<code·class="inline"><pipeline-location></code> | 159 | the·checks.·For·now·the·only·supported·value·for·<code·class="inline"><pipeline-location></code> |
| 160 | is·<code·class="inline">post_ssa_opt</code>·which·runs·the·checks·after·the·<code·class="inline">ssa_opt</code>·pass.</p><p><code·class="inline"><checks></code>·is·a·comma-separated·list·of·matches·against·the·BEAM·SSA | 160 | is·<code·class="inline">post_ssa_opt</code>·which·runs·the·checks·after·the·<code·class="inline">ssa_opt</code>·pass.</p><p><code·class="inline"><checks></code>·is·a·comma-separated·list·of·matches·against·the·BEAM·SSA |
| 161 | code.·For·non-flow-control·operations·the·syntax·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="ss">variable</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">operation</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id=" | 161 | code.·For·non-flow-control·operations·the·syntax·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="ss">variable</span><span·class="o">></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">operation</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="8116028702-1">(</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">arguments</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="8116028702-1">)</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">annotation</span><span·class="o">></span><span·class="o">?</span></code></pre><p>where·<code·class="inline"><operation></code>·is·the·<code·class="inline">#b_set.op</code>·field·from·the·internal·SSA |
| 162 | representation.·BIFs·are·written·as·<code·class="inline">bif:<atom></code>.</p><p><code·class="inline"><arguments></code>·is·a·comma-separated·list·of·variables·or·literals.</p><p>For·flow·control·operations·and·labels,·the·syntax·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">br</span><span·class="p"·data-group-id=" | 162 | representation.·BIFs·are·written·as·<code·class="inline">bif:<atom></code>.</p><p><code·class="inline"><arguments></code>·is·a·comma-separated·list·of·variables·or·literals.</p><p>For·flow·control·operations·and·labels,·the·syntax·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">br</span><span·class="p"·data-group-id="2052713188-1">(</span><span·class="o"><</span><span·class="ss">bool</span><span·class="o">></span><span·class="p">,</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">true</span><span·class="o">-</span><span·class="ss">label</s[·...·truncated·by·diffoscope;·len:·256,·SHA:·8097b747ad444a78307eaaea1728ac165f9052393b16e29897de4aa7b8ac704a·...·]-1">)</span><span·class="w"> |
| 163 | </span><span·class="nf">switch</span><span·class="p"·data-group-id=" | 163 | </span><span·class="nf">switch</span><span·class="p"·data-group-id="2052713188-2">(</span><span·class="o"><</span><span·class="ss">value</span><span·class="o">></span><span·class="p">,</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">fail</span><span·class="o">-</span><span·class="ss">label</[·...·truncated·by·diffoscope;·len:·619,·SHA:·e0a0cf3bd9b17a2fe08524a0b16993f8266d006945d1aca352a1b46573d3185d·...·]-2">)</span><span·class="w"> |
| 164 | </span><span·class="nf">ret</span><span·class="p"·data-group-id=" | 164 | </span><span·class="nf">ret</span><span·class="p"·data-group-id="2052713188-5">(</span><span·class="o"><</span><span·class="ss">value</span><span·class="o">></span><span·class="p"·data-group-id="2052713188-5">)</span><span·class="w"> |
| 165 | </span><span·class="ss">label</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">value</span><span·class="o">></span></code></pre><p>where·<code·class="inline"><value></code>·is·a·literal·or·a·variable.</p><p>A·check·can·also·include·an·assertion·on·operation·annotations.·The | 165 | </span><span·class="ss">label</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">value</span><span·class="o">></span></code></pre><p>where·<code·class="inline"><value></code>·is·a·literal·or·a·variable.</p><p>A·check·can·also·include·an·assertion·on·operation·annotations.·The |
| 166 | assertion·is·written·as·a·map-like·pattern·following·the·argument | 166 | assertion·is·written·as·a·map-like·pattern·following·the·argument |
| 167 | list,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t0</span><span·class="p"·data-group-id=" | 167 | list,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t0</span><span·class="p"·data-group-id="7267120340-1">(</span><span·class="p"·data-group-id="7267120340-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | </span><span·class="c1">%ssa%·()·when·post_ssa_opt·-></span><span·class="w"> | 168 | </span><span·class="c1">%ssa%·()·when·post_ssa_opt·-></span><span·class="w"> |
| 169 | </span><span·class="c1">%ssa%·_·=·call(fun·return_int/0)·{·result_type·=>·{t_integer,{17,17}},</span><span·class="w"> | 169 | </span><span·class="c1">%ssa%·_·=·call(fun·return_int/0)·{·result_type·=>·{t_integer,{17,17}},</span><span·class="w"> |
| 170 | </span><span·class="c1">%ssa%······························location·=>·{_,32}·},</span><span·class="w"> | 170 | </span><span·class="c1">%ssa%······························location·=>·{_,32}·},</span><span·class="w"> |
| 171 | </span><span·class="c1">%ssa%·_·=·call(fun·return_tuple/0)·{</span><span·class="w"> | 171 | </span><span·class="c1">%ssa%·_·=·call(fun·return_tuple/0)·{</span><span·class="w"> |
| 172 | </span><span·class="c1">%ssa%····result_type·=>·{t_tuple,2,true,#{1·=>·{t_integer,{1,1}},</span><span·class="w"> | 172 | </span><span·class="c1">%ssa%····result_type·=>·{t_tuple,2,true,#{1·=>·{t_integer,{1,1}},</span><span·class="w"> |
| 173 | </span><span·class="c1">%ssa%·····································2·=>·{t_integer,{2,2}}}}</span><span·class="w"> | 173 | </span><span·class="c1">%ssa%·····································2·=>·{t_integer,{2,2}}}}</span><span·class="w"> |
| 174 | </span><span·class="c1">%ssa%·}.</span><span·class="w"> | 174 | </span><span·class="c1">%ssa%·}.</span><span·class="w"> |
| 175 | ····</span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_int</span><span·class="p"·data-group-id=" | 175 | ····</span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_int</span><span·class="p"·data-group-id="7267120340-2">(</span><span·class="p"·data-group-id="7267120340-2">)</span><span·class="p">,</span><span·class="w"> |
| 176 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_tuple</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">return_tuple</span><span·class="p"·data-group-id="7267120340-3">(</span><span·class="p"·data-group-id="7267120340-3">)</span><span·class="p">,</span><span·class="w"> |
| 177 | ····</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="p"·data-group-id="7267120340-4">{</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="7267120340-4">}</span><span·class="p">.</span></code></pre><h2·id="semantics"·class="section-heading"> |
| 178 | ··<a·href="#semantics"·class="hover-link"> | 178 | ··<a·href="#semantics"·class="hover-link"> |
| 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 179 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 180 | ··</a> | 180 | ··</a> |
| 181 | ··<span·class="text">Semantics</span> | 181 | ··<span·class="text">Semantics</span> |
| 182 | </h2> | 182 | </h2> |
| 183 | <p>When·an·SSA·assertion·is·matched·against·the·BEAM·SSA·for·a·function, | 183 | <p>When·an·SSA·assertion·is·matched·against·the·BEAM·SSA·for·a·function, |
| 184 | patterns·are·applied·sequentially.·If·the·current·pattern·doesn't | 184 | patterns·are·applied·sequentially.·If·the·current·pattern·doesn't |
| Offset 246, 15 lines modified | Offset 246, 15 lines modified | ||
| 246 | ······<p·class="built-using"> | 246 | ······<p·class="built-using"> |
| 247 | ········Built·using | 247 | ········Built·using |
| 248 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 248 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 249 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 249 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 250 | ······</p> | 250 | ······</p> |
| 251 | <p>Copyright·©·1996-202 | 251 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 252 | ····</footer> | 252 | ····</footer> |
| 253 | ··</div> | 253 | ··</div> |
| 254 | </main> | 254 | </main> |
| 255 | </div> | 255 | </div> |
| 256 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 256 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 257 | ··<script> | 257 | ··<script> |
| 258 | ··let·initialized·=·false; | 258 | ··let·initialized·=·false; |
| Offset 17, 15 lines modified | Offset 17, 15 lines modified | ||
| 17 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 17 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 18 | dist/lato-latin-400-normal-W7754I4D.woff2 | 18 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 19 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 19 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 20 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 20 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 21 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 21 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 22 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 22 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 23 | dist/remixicon-NKANDIL5.woff2 | 23 | dist/remixicon-NKANDIL5.woff2 |
| 24 | dist/search_data- | 24 | dist/search_data-F51EF764.js |
| 25 | dist/sidebar_items-14E9F638.js | 25 | dist/sidebar_items-14E9F638.js |
| 26 | engine_keys.html | 26 | engine_keys.html |
| 27 | engine_load.html | 27 | engine_load.html |
| 28 | fips.html | 28 | fips.html |
| 29 | index.html | 29 | index.html |
| 30 | licenses.html | 30 | licenses.html |
| 31 | new_api.html | 31 | new_api.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 315, 15 lines modified | Offset 315, 15 lines modified | ||
| 315 | ······<p·class="built-using"> | 315 | ······<p·class="built-using"> |
| 316 | ········Built·using | 316 | ········Built·using |
| 317 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 317 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 318 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 318 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 319 | ······</p> | 319 | ······</p> |
| 320 | <p>Copyright·©·1996-202 | 320 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 321 | ····</footer> | 321 | ····</footer> |
| 322 | ··</div> | 322 | ··</div> |
| 323 | </main> | 323 | </main> |
| 324 | </div> | 324 | </div> |
| 325 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 325 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 326 | ··<script> | 326 | ··<script> |
| 327 | ··let·initialized·=·false; | 327 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 591, 15 lines modified | Offset 591, 15 lines modified | ||
| 591 | ····<div·class="summary-row"> | 591 | ····<div·class="summary-row"> |
| 592 | ······<div·class="summary-signature"> | 592 | ······<div·class="summary-signature"> |
| 593 | ········<a·href="#t:rsa_params/0"·data-no-tooltip·translate="no">rsa_params()</a> | 593 | ········<a·href="#t:rsa_params/0"·data-no-tooltip·translate="no">rsa_params()</a> |
| 594 | ······</div> | 594 | ······</div> |
| 595 | ········<div·class="summary-synopsis"><pre><code·class="text">rsa_public()·=·[E,·N]</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rsa_private</span><span·class="p"·data-group-id=" | 595 | ········<div·class="summary-synopsis"><pre><code·class="text">rsa_public()·=·[E,·N]</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rsa_private</span><span·class="p"·data-group-id="5525202674-1">(</span><span·class="p"·data-group-id="5525202674-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5525202674-2">[</span><span·class="n">E</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·863,·SHA:·a8f06073a1c86d7e90e82a8a6d7f4ff052eedd5933c34a5b0d18135be06e1240·...·]-3">]</span></code></pre><p>Where·E·is·the·public·exponent,·N·is·public·modulus·and·D·is·the·private |
| 596 | exponent.·The·longer·key·format·contains·redundant·information·that·will·make | 596 | exponent.·The·longer·key·format·contains·redundant·information·that·will·make |
| 597 | the·calculation·faster.·P1·and·P2·are·first·and·second·prime·factors.·E1·and·E2 | 597 | the·calculation·faster.·P1·and·P2·are·first·and·second·prime·factors.·E1·and·E2 |
| 598 | are·first·and·second·exponents.·C·is·the·CRT·coefficient.·The·terminology·is | 598 | are·first·and·second·exponents.·C·is·the·CRT·coefficient.·The·terminology·is |
| 599 | taken·from·<a·href="http://www.ietf.org/rfc/rfc3447.txt">RFC·3447</a>.</p></div> | 599 | taken·from·<a·href="http://www.ietf.org/rfc/rfc3447.txt">RFC·3447</a>.</p></div> |
| 600 | ····</div> | 600 | ····</div> |
| Offset 3033, 15 lines modified | Offset 3033, 15 lines modified | ||
| 3033 | ······<div·class="specs"> | 3033 | ······<div·class="specs"> |
| 3034 | ··········<pre·translate="no"><span·class="attribute">-type</span>·rsa_params()·::·{ModulusSizeInBits·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·PublicExponent·::·<a·href="#t:key_integer/0">key_integer</a>()}.</pre> | 3034 | ··········<pre·translate="no"><span·class="attribute">-type</span>·rsa_params()·::·{ModulusSizeInBits·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·PublicExponent·::·<a·href="#t:key_integer/0">key_integer</a>()}.</pre> |
| 3035 | ······</div> | 3035 | ······</div> |
| 3036 | <pre><code·class="text">rsa_public()·=·[E,·N]</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rsa_private</span><span·class="p"·data-group-id=" | 3036 | <pre><code·class="text">rsa_public()·=·[E,·N]</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">rsa_private</span><span·class="p"·data-group-id="5525202674-1">(</span><span·class="p"·data-group-id="5525202674-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5525202674-2">[</span><span·class="n">E</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·863,·SHA:·a8f06073a1c86d7e90e82a8a6d7f4ff052eedd5933c34a5b0d18135be06e1240·...·]-3">]</span></code></pre><p>Where·E·is·the·public·exponent,·N·is·public·modulus·and·D·is·the·private |
| 3037 | exponent.·The·longer·key·format·contains·redundant·information·that·will·make | 3037 | exponent.·The·longer·key·format·contains·redundant·information·that·will·make |
| 3038 | the·calculation·faster.·P1·and·P2·are·first·and·second·prime·factors.·E1·and·E2 | 3038 | the·calculation·faster.·P1·and·P2·are·first·and·second·prime·factors.·E1·and·E2 |
| 3039 | are·first·and·second·exponents.·C·is·the·CRT·coefficient.·The·terminology·is | 3039 | are·first·and·second·exponents.·C·is·the·CRT·coefficient.·The·terminology·is |
| 3040 | taken·from·<a·href="http://www.ietf.org/rfc/rfc3447.txt">RFC·3447</a>.</p> | 3040 | taken·from·<a·href="http://www.ietf.org/rfc/rfc3447.txt">RFC·3447</a>.</p> |
| 3041 | ··</section> | 3041 | ··</section> |
| 3042 | </section> | 3042 | </section> |
| 3043 | <section·class="detail"·id="t:rsa_private/0"> | 3043 | <section·class="detail"·id="t:rsa_private/0"> |
| Offset 5316, 17 lines modified | Offset 5316, 17 lines modified | ||
| 5316 | ······</div> | 5316 | ······</div> |
| 5317 | <p>Create·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to | 5317 | <p>Create·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to |
| 5318 | generate·cryptographically·strong·random·numbers·(based·on·OpenSSL's | 5318 | generate·cryptographically·strong·random·numbers·(based·on·OpenSSL's |
| 5319 | <code·class="inline">BN_rand_range</code>).</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as | 5319 | <code·class="inline">BN_rand_range</code>).</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as |
| 5320 | well.·See·also·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#seed/1"><code·class="inline">rand:seed/1</code></a>·and·<a·href="#rand_seed_s/0"><code·class="inline">rand_seed_s/0</code></a>.</p><p>When·using·the·state·object·from·this·function·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html"><code·class="inline">rand</code></a>·functions·using·it | 5320 | well.·See·also·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#seed/1"><code·class="inline">rand:seed/1</code></a>·and·<a·href="#rand_seed_s/0"><code·class="inline">rand_seed_s/0</code></a>.</p><p>When·using·the·state·object·from·this·function·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html"><code·class="inline">rand</code></a>·functions·using·it |
| 5321 | may·raise·exception·<code·class="inline">error:low_entropy</code>·in·case·the·random·generator·failed·due | 5321 | may·raise·exception·<code·class="inline">error:low_entropy</code>·in·case·the·random·generator·failed·due |
| 5322 | to·lack·of·secure·"randomness".</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed</span><span·class="p"·data-group-id=" | 5322 | to·lack·of·secure·"randomness".</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed</span><span·class="p"·data-group-id="1046038775-1">(</span><span·class="p"·data-group-id="1046038775-1">)</span><span·class="p">,</span><span·class="w"> |
| 5323 | </span><span·class="p">_</span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5323 | </span><span·class="p">_</span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="1046038775-2">(</span><span·class="mi">42</span><span·class="p"·data-group-id="1046038775-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·[1;·42]</span><span·class="w"> |
| 5324 | </span><span·class="p">_</span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5324 | </span><span·class="p">_</span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="1046038775-3">(</span><span·class="p"·data-group-id="1046038775-3">)</span><span·class="p">.</span><span·class="w">·····</span><span·class="c1">%·[0.0;·1.0[</span></code></pre> |
| 5325 | ··</section> | 5325 | ··</section> |
| 5326 | </section> | 5326 | </section> |
| 5327 | <section·class="detail"·id="rand_seed/1"> | 5327 | <section·class="detail"·id="rand_seed/1"> |
| 5328 | ··<div·class="detail-header"> | 5328 | ··<div·class="detail-header"> |
| 5329 | ····<a·href="#rand_seed/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5329 | ····<a·href="#rand_seed/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 5330 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 5330 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 5380, 17 lines modified | Offset 5380, 17 lines modified | ||
| 5380 | ······</div> | 5380 | ······</div> |
| 5381 | <p>Create·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to | 5381 | <p>Create·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to |
| 5382 | generate·cryptographically·strong·random·numbers.</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as·well.·See·also | 5382 | generate·cryptographically·strong·random·numbers.</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as·well.·See·also |
| 5383 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#seed/1"><code·class="inline">rand:seed/1</code></a>·and·<a·href="#rand_seed_alg_s/1"><code·class="inline">rand_seed_alg_s/1</code></a>.</p><p>When·using·the·state·object·from·this·function·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html"><code·class="inline">rand</code></a>·functions·using·it | 5383 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#seed/1"><code·class="inline">rand:seed/1</code></a>·and·<a·href="#rand_seed_alg_s/1"><code·class="inline">rand_seed_alg_s/1</code></a>.</p><p>When·using·the·state·object·from·this·function·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html"><code·class="inline">rand</code></a>·functions·using·it |
| 5384 | may·raise·exception·<code·class="inline">error:low_entropy</code>·in·case·the·random·generator·failed·due | 5384 | may·raise·exception·<code·class="inline">error:low_entropy</code>·in·case·the·random·generator·failed·due |
| 5385 | to·lack·of·secure·"randomness".</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id=" | 5385 | to·lack·of·secure·"randomness".</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id="8430494201-1">(</span><span·class="ss">crypto_cache</span><span·class="p"·data-group-id="8430494201-1">)</span><span·class="p">,</span><span·class="w"> |
| 5386 | </span><span·class="p">_</span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5386 | </span><span·class="p">_</span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="8430494201-2">(</span><span·class="mi">42</span><span·class="p"·data-group-id="8430494201-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·[1;·42]</span><span·class="w"> |
| 5387 | </span><span·class="p">_</span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5387 | </span><span·class="p">_</span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="8430494201-3">(</span><span·class="p"·data-group-id="8430494201-3">)</span><span·class="p">.</span><span·class="w">·····</span><span·class="c1">%·[0.0;·1.0[</span></code></pre> |
| 5388 | ··</section> | 5388 | ··</section> |
| 5389 | </section> | 5389 | </section> |
| 5390 | <section·class="detail"·id="rand_seed_alg/2"> | 5390 | <section·class="detail"·id="rand_seed_alg/2"> |
| 5391 | ··<div·class="detail-header"> | 5391 | ··<div·class="detail-header"> |
| 5392 | ····<a·href="#rand_seed_alg/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5392 | ····<a·href="#rand_seed_alg/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 5393 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 5393 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 5412, 20 lines modified | Offset 5412, 20 lines modified | ||
| 5412 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·rand_seed_alg(Alg·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·Seed·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·{<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#t:alg_handler/0">rand:alg_handler</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>()·|·<a·href="#t:rand_cache_seed/0">rand_cache_seed</a>()}.</pre> | 5412 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·rand_seed_alg(Alg·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·Seed·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·{<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html#t:alg_handler/0">rand:alg_handler</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>()·|·<a·href="#t:rand_cache_seed/0">rand_cache_seed</a>()}.</pre> |
| 5413 | ······</div> | 5413 | ······</div> |
| 5414 | <p>Creates·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to | 5414 | <p>Creates·a·state·object·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/rand.html">random·number·generation</a>,·in·order·to |
| 5415 | generate·cryptographically·unpredictable·random·numbers.</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as·well.·See·also | 5415 | generate·cryptographically·unpredictable·random·numbers.</p><p>Saves·the·state·in·the·process·dictionary·before·returning·it·as·well.·See·also |
| 5416 | <a·href="#rand_seed_alg_s/2"><code·class="inline">rand_seed_alg_s/2</code></a>.</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id=" | 5416 | <a·href="#rand_seed_alg_s/2"><code·class="inline">rand_seed_alg_s/2</code></a>.</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id="9126963497-1">(</span><span·class="ss">crypto_aes</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my·seed"</span><span·class="p"·data-group-id="9126963497-1">)</span><span·class="p">,</span><span·class="w"> |
| 5417 | </span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5417 | </span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9126963497-2">(</span><span·class="mi">42</span><span·class="p"·data-group-id="9126963497-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·[1;·42]</span><span·class="w"> |
| 5418 | </span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5418 | </span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9126963497-3">(</span><span·class="p"·data-group-id="9126963497-3">)</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%·[0.0;·1.0[</span><span·class="w"> |
| 5419 | </span><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id=" | 5419 | </span><span·class="p">_</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">rand_seed_alg</span><span·class="p"·data-group-id="9126963497-4">(</span><span·class="ss">crypto_aes</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my·seed"</span><span·class="p"·data-group-id="9126963497-4">)</span><span·class="p">,</span><span·class="w"> |
| 5420 | </span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5420 | </span><span·class="n">IntegerValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9126963497-5">(</span><span·class="mi">42</span><span·class="p"·data-group-id="9126963497-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·Same·values</span><span·class="w"> |
| 5421 | </span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 5421 | </span><span·class="n">FloatValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9126963497-6">(</span><span·class="p"·data-group-id="9126963497-6">)</span><span·class="p">.</span><span·class="w">·····</span><span·class="c1">%·again</span></code></pre> |
| 5422 | ··</section> | 5422 | ··</section> |
| 5423 | </section> | 5423 | </section> |
| 5424 | <section·class="detail"·id="rand_seed_alg_s/1"> | 5424 | <section·class="detail"·id="rand_seed_alg_s/1"> |
| 5425 | ··<div·class="detail-header"> | 5425 | ··<div·class="detail-header"> |
| 5426 | ····<a·href="#rand_seed_alg_s/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5426 | ····<a·href="#rand_seed_alg_s/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 5427 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 5427 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 5886, 20 lines modified | Offset 5886, 20 lines modified | ||
| 5886 | ················cryptolib_version_compiled·=>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·undefined, | 5886 | ················cryptolib_version_compiled·=>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·undefined, |
| 5887 | ················cryptolib_version_linked·:=·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 5887 | ················cryptolib_version_linked·:=·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 5888 | ················link_type·:=·dynamic·|·static, | 5888 | ················link_type·:=·dynamic·|·static, |
| 5889 | ················otp_crypto_version·:=·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}.</pre> | 5889 | ················otp_crypto_version·:=·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}.</pre> |
| 5890 | ······</div> | 5890 | ······</div> |
| 5891 | <p>Get·information·about·crypto·and·the·OpenSSL·backend.</p><p>Returns·a·map·with·information·about·the·compilation·and·linking·of·crypto.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id=" | 5891 | <p>Get·information·about·crypto·and·the·OpenSSL·backend.</p><p>Returns·a·map·with·information·about·the·compilation·and·linking·of·crypto.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id="4837071786-1">(</span><span·class="p"·data-group-id="4837071786-1">)</span><span·class="p">.</span><span·class="w"> |
| 5892 | </span><span·class="p"·data-group-id=" | 5892 | </span><span·class="p"·data-group-id="4837071786-2">#{</span><span·class="ss">compile_type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w"> |
| 5893 | ··</span><span·class="ss">cryptolib_version_compiled</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"OpenSSL·3.0.0·7·sep·2021"</span><span·class="p">,</span><span·class="w"> | 5893 | ··</span><span·class="ss">cryptolib_version_compiled</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"OpenSSL·3.0.0·7·sep·2021"</span><span·class="p">,</span><span·class="w"> |
| 5894 | ··</span><span·class="ss">cryptolib_version_linked</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"OpenSSL·3.0.0·7·sep·2021"</span><span·class="p">,</span><span·class="w"> | 5894 | ··</span><span·class="ss">cryptolib_version_linked</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"OpenSSL·3.0.0·7·sep·2021"</span><span·class="p">,</span><span·class="w"> |
| 5895 | ··</span><span·class="ss">link_type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">dynamic</span><span·class="p">,</span><span·class="w"> | 5895 | ··</span><span·class="ss">link_type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">dynamic</span><span·class="p">,</span><span·class="w"> |
| 5896 | ··</span><span·class="ss">otp_crypto_version</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"5.0.2"</span><span·class="p"·data-group-id=" | 5896 | ··</span><span·class="ss">otp_crypto_version</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"5.0.2"</span><span·class="p"·data-group-id="4837071786-2">}</span><span·class="w"> |
| 5897 | </span><span·class="mi">2</span><span·class="o">></span></code></pre><p>More·association·types·than·documented·may·be·present·in·the·map.</p> | 5897 | </span><span·class="mi">2</span><span·class="o">></span></code></pre><p>More·association·types·than·documented·may·be·present·in·the·map.</p> |
| 5898 | ··</section> | 5898 | ··</section> |
| 5899 | </section> | 5899 | </section> |
| 5900 | <section·class="detail"·id="info_fips/0"> | 5900 | <section·class="detail"·id="info_fips/0"> |
| 5901 | ··<div·class="detail-header"> | 5901 | ··<div·class="detail-header"> |
| 5902 | ····<a·href="#info_fips/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5902 | ····<a·href="#info_fips/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 5954, 16 lines modified | Offset 5954, 16 lines modified | ||
| 5954 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·info_lib()·->·[{Name,·VerNum,·VerStr}] | 5954 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·info_lib()·->·[{Name,·VerNum,·VerStr}] |
| 5955 | ··················when·Name·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·VerNum·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·VerStr·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> | 5955 | ··················when·Name·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·VerNum·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·VerStr·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> |
| 5956 | ······</div> | 5956 | ······</div> |
| 5957 | <p>Get·the·name·and·version·of·the·libraries·used·by·crypto.</p><p><code·class="inline">Name</code>·is·the·name·of·the·library.·<code·class="inline">VerNum</code>·is·the·numeric·version·according·to | 5957 | <p>Get·the·name·and·version·of·the·libraries·used·by·crypto.</p><p><code·class="inline">Name</code>·is·the·name·of·the·library.·<code·class="inline">VerNum</code>·is·the·numeric·version·according·to |
| 5958 | the·library's·own·versioning·scheme.·<code·class="inline">VerStr</code>·contains·a·text·variant·of·the | 5958 | the·library's·own·versioning·scheme.·<code·class="inline">VerStr</code>·contains·a·text·variant·of·the |
| 5959 | version.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">info_lib</span><span·class="p"·data-group-id=" | 5959 | version.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">info_lib</span><span·class="p"·data-group-id="7578970908-1">(</span><span·class="p"·data-group-id="7578970908-1">)</span><span·class="p">.</span><span·class="w"> |
| 5960 | </span><span·class="p"·data-group-id=" | 5960 | </span><span·class="p"·data-group-id="7578970908-2">[</span><span·class="p"·data-group-id="7578970908-3">{</span><span·class="p"·data-group-id="7578970908-4"><<</span><span·class="s">"OpenSSL"</span><span·class="p"·data-group-id="7578970908-4">>></span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·367,·SHA:·d8bb0e69ebd6e7f60ea1933e56f9123f03a13b879bd38eb5dc83ef1e5bc6db0e·...·]-2">]</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>From·OTP·R16·the·<em>numeric·version</em>·represents·the·version·of·the·OpenSSL |
| 5961 | <em>header·files</em>·(<code·class="inline">openssl/opensslv.h</code>)·used·when·crypto·was·compiled.·The·text | 5961 | <em>header·files</em>·(<code·class="inline">openssl/opensslv.h</code>)·used·when·crypto·was·compiled.·The·text |
| 5962 | variant·represents·the·libcrypto·library·used·at·runtime.·In·earlier·OTP | 5962 | variant·represents·the·libcrypto·library·used·at·runtime.·In·earlier·OTP |
| 5963 | versions·both·numeric·and·text·was·taken·from·the·library.</p></section> | 5963 | versions·both·numeric·and·text·was·taken·from·the·library.</p></section> |
| 5964 | ··</section> | 5964 | ··</section> |
| 5965 | </section> | 5965 | </section> |
| 5966 | <section·class="detail"·id="mod_pow/3"> | 5966 | <section·class="detail"·id="mod_pow/3"> |
| Offset 6848, 15 lines modified | Offset 6848, 15 lines modified | ||
| Max diff block lines reached; 677/28472 bytes (2.38%) of diff not shown. | |||
| Offset 221, 15 lines modified | Offset 221, 15 lines modified | ||
| 221 | ······<p·class="built-using"> | 221 | ······<p·class="built-using"> |
| 222 | ········Built·using | 222 | ········Built·using |
| 223 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 223 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 224 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 224 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 225 | ······</p> | 225 | ······</p> |
| 226 | <p>Copyright·©·1996-202 | 226 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 227 | ····</footer> | 227 | ····</footer> |
| 228 | ··</div> | 228 | ··</div> |
| 229 | </main> | 229 | </main> |
| 230 | </div> | 230 | </div> |
| 231 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 231 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 232 | ··<script> | 232 | ··<script> |
| 233 | ··let·initialized·=·false; | 233 | ··let·initialized·=·false; |
| Offset 157, 50 lines modified | Offset 157, 50 lines modified | ||
| 157 | <h3·id="sign-with-an-engine-stored-private-key"·class="section-heading"> | 157 | <h3·id="sign-with-an-engine-stored-private-key"·class="section-heading"> |
| 158 | ··<a·href="#sign-with-an-engine-stored-private-key"·class="hover-link"> | 158 | ··<a·href="#sign-with-an-engine-stored-private-key"·class="hover-link"> |
| 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 160 | ··</a> | 160 | ··</a> |
| 161 | ··<span·class="text">Sign·with·an·engine·stored·private·key</span> | 161 | ··<span·class="text">Sign·with·an·engine·stored·private·key</span> |
| 162 | </h3> | 162 | </h3> |
| 163 | <p>This·example·shows·how·to·construct·a·key·reference·that·is·used·in·a·sign | 163 | <p>This·example·shows·how·to·construct·a·key·reference·that·is·used·in·a·sign |
| 164 | operation.·The·actual·key·is·stored·in·the·engine·that·is·loaded·at·prompt·1.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 164 | operation.·The·actual·key·is·stored·in·the·engine·that·is·loaded·at·prompt·1.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="1836499557-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EngineRef</span><span·class="p"·data-group-id="1836499557-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·276,·SHA:·70098501b5a43ce1990c02b3c868ad3e800c546230285961246cee7b0de93304·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 165 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="p"·data-group-id=" | 166 | </span><span·class="p"·data-group-id="1836499557-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2399045421</span><span·class="p">.</span><span·class="mf">3028942852.173962</span><span·[·...·truncated·by·diffoscope;·len:·62,·SHA:·ccbaa2e225dc9d104aca4acff7d72be41061fc3598123edb04f7be8959e8a212·...·]-3">}</span><span·class="gp·unselectable"> |
| 167 | 2>·</span><span·class="n">PrivKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 167 | 2>·</span><span·class="n">PrivKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1836499557-4">#{</span><span·class="ss">engine</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">EngineRef</span><span·class="p">,</span><span·class="w"> |
| 168 | ···············</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·private·key·in·Engine"</span><span·class="p"·data-group-id=" | 168 | ···············</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·private·key·in·Engine"</span><span·class="p"·data-group-id="1836499557-4">}</span><span·class="p">.</span><span·class="w"> |
| 169 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 169 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 170 | 3>·</span><span·class="n">Signature</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">sign</span><span·class="p"·data-group-id=" | 170 | 3>·</span><span·class="n">Signature</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">sign</span><span·class="p"·data-group-id="1836499557-5">(</span><span·class="ss">rsa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sha</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1836499557-6"><<</span><span·class="s">"Th[·...·truncated·by·diffoscope;·len:·201,·SHA:·792818c5b458522e61c0761ea9c1df2f6447fbc1fc03d133365822869cf8f5c0·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="p"·data-group-id=" | 171 | </span><span·class="p"·data-group-id="1836499557-7"><<</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">125</span><span·class="p">,</span><span·class="mi">254</span><span·class="p">,</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">233</span><span·class="p">,</span><span·class="mi">84</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">83</span><span·class="p">,</span><span·class="mi">63</span><span·class="p">,</span><span·class="mi">168</span><span·class="p">,</span><span·class="mi">28</span><span·class="p">,</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">214</span><span·class="p">,</span><span·class="mi">121</span><span·class="p">,</span><span·class="mi">76</span><span·class="p">,</span><span·class="w"> |
| 172 | ··</span><span·class="mi">207</span><span·class="p">,</span><span·class="mi">177</span><span·class="p">,</span><span·class="mi">124</span><span·class="p">,</span><span·class="mi">183</span><span·class="p">,</span><span·class="mi">156</span><span·class="p">,</span><span·class="mi">185</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="mi">243</span><span·class="p">,</span><span·class="mi">36</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">125</span><span·class="p">,</span><span·class="mi">230</span><span·class="p">,</span><span·class="mi">231</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 172 | ··</span><span·class="mi">207</span><span·class="p">,</span><span·class="mi">177</span><span·class="p">,</span><span·class="mi">124</span><span·class="p">,</span><span·class="mi">183</span><span·class="p">,</span><span·class="mi">156</span><span·class="p">,</span><span·class="mi">185</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="mi">243</span><span·class="p">,</span><span·class="mi">36</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">125</span><span·class="p">,</span><span·class="mi">230</span><span·class="p">,</span><span·class="mi">231</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="1836499557-7">>></span></code></pre><h3·id="verify-with-an-engine-stored-public-key"·class="section-heading"> |
| 173 | ··<a·href="#verify-with-an-engine-stored-public-key"·class="hover-link"> | 173 | ··<a·href="#verify-with-an-engine-stored-public-key"·class="hover-link"> |
| 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 175 | ··</a> | 175 | ··</a> |
| 176 | ··<span·class="text">Verify·with·an·engine·stored·public·key</span> | 176 | ··<span·class="text">Verify·with·an·engine·stored·public·key</span> |
| 177 | </h3> | 177 | </h3> |
| 178 | <p>Here·the·signature·and·message·in·the·last·example·is·verifyed·using·the·public | 178 | <p>Here·the·signature·and·message·in·the·last·example·is·verifyed·using·the·public |
| 179 | key.·The·public·key·is·stored·in·an·engine,·only·to·exemplify·that·it·is | 179 | key.·The·public·key·is·stored·in·an·engine,·only·to·exemplify·that·it·is |
| 180 | possible.·The·public·key·could·of·course·be·handled·openly·as·usual.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="n">PublicKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 180 | possible.·The·public·key·could·of·course·be·handled·openly·as·usual.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="n">PublicKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1456216823-1">#{</span><span·class="ss">engine</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">EngineRef</span><span·class="p">,</span><span·class="w"> |
| 181 | ·················</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·public·key·in·Engine"</span><span·class="p"·data-group-id=" | 181 | ·················</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·public·key·in·Engine"</span><span·class="p"·data-group-id="1456216823-1">}</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 182 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 183 | 5>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">verify</span><span·class="p"·data-group-id=" | 183 | 5>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">verify</span><span·class="p"·data-group-id="1456216823-2">(</span><span·class="ss">rsa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sha</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1456216823-3"><<</span><span·class="s">"Th[·...·truncated·by·diffoscope;·len:·283,·SHA:·ce2d7429e24f47aa9d366b3bcf3a92ba3184641426e11bed747653cadd0d0847·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="ss">true</span><span·class="w"> | 184 | </span><span·class="ss">true</span><span·class="w"> |
| 185 | </span><span·class="mi">6</span><span·class="o">></span></code></pre><h3·id="using-a-password-protected-private-key"·class="section-heading"> | 185 | </span><span·class="mi">6</span><span·class="o">></span></code></pre><h3·id="using-a-password-protected-private-key"·class="section-heading"> |
| 186 | ··<a·href="#using-a-password-protected-private-key"·class="hover-link"> | 186 | ··<a·href="#using-a-password-protected-private-key"·class="hover-link"> |
| 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 187 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 188 | ··</a> | 188 | ··</a> |
| 189 | ··<span·class="text">Using·a·password·protected·private·key</span> | 189 | ··<span·class="text">Using·a·password·protected·private·key</span> |
| 190 | </h3> | 190 | </h3> |
| 191 | <p>The·same·example·as·the·first·sign·example,·except·that·a·password·protects·the | 191 | <p>The·same·example·as·the·first·sign·example,·except·that·a·password·protects·the |
| 192 | key·down·in·the·Engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="n">PrivKeyPwd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 192 | key·down·in·the·Engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="n">PrivKeyPwd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2001745858-1">#{</span><span·class="ss">engine</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">EngineRef</span><span·class="p">,</span><span·class="w"> |
| 193 | ··················</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·pwd·protected·private·key·in·Engine"</span><span·class="p">,</span><span·class="w"> | 193 | ··················</span><span·class="ss">key_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"id·of·the·pwd·protected·private·key·in·Engine"</span><span·class="p">,</span><span·class="w"> |
| 194 | » » ··</span><span·class="ss">password</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"password"</span><span·class="p"·data-group-id=" | 194 | » » ··</span><span·class="ss">password</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"password"</span><span·class="p"·data-group-id="2001745858-1">}</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 195 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 196 | 7>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">sign</span><span·class="p"·data-group-id=" | 196 | 7>·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">sign</span><span·class="p"·data-group-id="2001745858-2">(</span><span·class="ss">rsa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sha</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2001745858-3"><<</span><span·class="s">"Th[·...·truncated·by·diffoscope;·len:·204,·SHA:·01f3eeddc5dc7af37efe153ce291c17c3813fb2fa6f18a0c17839fc0866a57a8·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="p"·data-group-id=" | 197 | </span><span·class="p"·data-group-id="2001745858-4"><<</span><span·class="mi">140</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">168</span><span·class="p">,</span><span·class="mi">101</span><span·class="p">,</span><span·class="mi">234</span><span·class="p">,</span><span·class="mi">211</span><span·class="p">,</span><span·class="mi">146</span><span·class="p">,</span><span·class="mi">183</span><span·class="p">,</span><span·class="mi">231</span><span·class="p">,</span><span·class="mi">190</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">85</span><span·class="p">,</span><span·class="mi">163</span><span·class="p">,</span><span·class="w"> |
| 198 | ··</span><span·class="mi">175</span><span·class="p">,</span><span·class="mi">106</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">241</span><span·class="p">,</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">120</span><span·class="p">,</span><span·class="mi">72</span><span·class="p">,</span><span·class="mi">149</span><span·class="p">,</span><span·class="mi">181</span><span·class="p">,</span><span·class="mi">181</span><span·class="p">,</span><span·class="mi">194</span><span·class="p">,</span><span·class="mi">154</span><span·class="p">,</span><span·class="mi">175</span><span·class="p">,</span><span·class="mi">76</span><span·class="p">,</span><span·class="w"> | 198 | ··</span><span·class="mi">175</span><span·class="p">,</span><span·class="mi">106</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">241</span><span·class="p">,</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">120</span><span·class="p">,</span><span·class="mi">72</span><span·class="p">,</span><span·class="mi">149</span><span·class="p">,</span><span·class="mi">181</span><span·class="p">,</span><span·class="mi">181</span><span·class="p">,</span><span·class="mi">194</span><span·class="p">,</span><span·class="mi">154</span><span·class="p">,</span><span·class="mi">175</span><span·class="p">,</span><span·class="mi">76</span><span·class="p">,</span><span·class="w"> |
| 199 | ··</span><span·class="mi">223</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 199 | ··</span><span·class="mi">223</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2001745858-4">>></span><span·class="w"> |
| 200 | </span><span·class="mi">8</span><span·class="o">></span></code></pre> | 200 | </span><span·class="mi">8</span><span·class="o">></span></code></pre> |
| 201 | </div> | 201 | </div> |
| 202 | <div·class="bottom-actions"·id="bottom-actions"> | 202 | <div·class="bottom-actions"·id="bottom-actions"> |
| 203 | ··<div·class="bottom-actions-item"> | 203 | ··<div·class="bottom-actions-item"> |
| 204 | ······<a·href="engine_load.html"·class="bottom-actions-button"·rel="prev"> | 204 | ······<a·href="engine_load.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 244, 15 lines modified | Offset 244, 15 lines modified | ||
| 244 | ······<p·class="built-using"> | 244 | ······<p·class="built-using"> |
| 245 | ········Built·using | 245 | ········Built·using |
| 246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 248 | ······</p> | 248 | ······</p> |
| 249 | <p>Copyright·©·1996-202 | 249 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 250 | ····</footer> | 250 | ····</footer> |
| 251 | ··</div> | 251 | ··</div> |
| 252 | </main> | 252 | </main> |
| 253 | </div> | 253 | </div> |
| 254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 255 | ··<script> | 255 | ··<script> |
| 256 | ··let·initialized·=·false; | 256 | ··let·initialized·=·false; |
| Offset 148, 64 lines modified | Offset 148, 64 lines modified | ||
| 148 | <h3·id="dynamically-load-an-engine-from-default-directory"·class="section-heading"> | 148 | <h3·id="dynamically-load-an-engine-from-default-directory"·class="section-heading"> |
| 149 | ··<a·href="#dynamically-load-an-engine-from-default-directory"·class="hover-link"> | 149 | ··<a·href="#dynamically-load-an-engine-from-default-directory"·class="hover-link"> |
| 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 151 | ··</a> | 151 | ··</a> |
| 152 | ··<span·class="text">Dynamically·load·an·engine·from·default·directory</span> | 152 | ··<span·class="text">Dynamically·load·an·engine·from·default·directory</span> |
| 153 | </h3> | 153 | </h3> |
| 154 | <p>If·the·engine·is·located·in·the·OpenSSL/LibreSSL·installation·<code·class="inline">engines</code> | 154 | <p>If·the·engine·is·located·in·the·OpenSSL/LibreSSL·installation·<code·class="inline">engines</code> |
| 155 | directory.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="2680535699-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Engine</span><span·class="p"·data-group-id="2680535699-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_load</span><span·class="p"·data-group-id="2680535699-2">(</span><span·class="p"·data-group-id="2680535699-3"><<</span><span·class="s">"otp_test_engine"</span><span·class="p"·data-group-id="2680535699-3">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680535699-4">[</span><span·class="p"·data-group-id="2680535699-4">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680535699-5">[</span><span·class="p"·data-group-id="2680535699-5">]</span><span·class="p"·data-group-id="2680535699-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 156 | 155 | directory.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="6202109012-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Engine</[·...·truncated·by·diffoscope;·len:·841,·SHA:·8fdfdb9763e23d5db3727e072cf90a346607e6e60d59a659fdb00e486f233301·...·]"> | |
| 156 | ·</span><span·class="p"·data-group-id="6202109012-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Ref</span><span·class="p"·data-group-id="6202109012-6">}</span></code></pre><h3·id="load-an-engine-with-the-dynamic-engine"·class="section-heading"> | ||
| 157 | ··<a·href="#load-an-engine-with-the-dynamic-engine"·class="hover-link"> | 157 | ··<a·href="#load-an-engine-with-the-dynamic-engine"·class="hover-link"> |
| 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 158 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 159 | ··</a> | 159 | ··</a> |
| 160 | ··<span·class="text">Load·an·engine·with·the·dynamic·engine</span> | 160 | ··<span·class="text">Load·an·engine·with·the·dynamic·engine</span> |
| 161 | </h3> | 161 | </h3> |
| 162 | <p>Load·an·engine·with·the·help·of·the·dynamic·engine·by·giving·the·path·to·the | 162 | <p>Load·an·engine·with·the·help·of·the·dynamic·engine·by·giving·the·path·to·the |
| 163 | library.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="9858547228-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Engine</span><span·class="p"·data-group-id="9858547228-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_load</span><span·class="p"·data-group-id="9858547228-2">(</span><span·class="p"·data-group-id="9858547228-3"><<</span><span·class="s">"dynamic"</span><span·class="p"·data-group-id="9858547228-3">>></span><span·class="p">,</span><span·class="w"> | ||
| 164 | 163 | library.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="1197219942-1">{</span><span·class="ss">ok</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·472,·SHA:·a7b28a00e30259a9698fb4180717e6c057fa6dbfae09384aba7bbc891503e2fb·...·]">>></span><span·class="p">,</span><span·class="w"> | |
| 164 | ······································</span><span·class="p"·data-group-id="1197219942-4">[</span><span·class="p"·data-group-id="1197219942-5">{</span><span·class="p"·data-group-id="1197219942-6"><<</span><span·class="s">"SO_PATH"</span><span·class="p"·data-group-id="1197219942-6">>></span><span·class="p">,</span><span·class="w"> | ||
| 165 | ········································</span><span·class="p"·data-group-id=" | 165 | ········································</span><span·class="p"·data-group-id="1197219942-7"><<</span><span·class="s">"/some/path/otp_test_engine.so"</span><span·class="p"·data-group-id="1197219942-7">>></span><span·class="p"·data-group-id="1197219942-5">}</span><span·class="p">,</span><span·class="w"> |
| 166 | ·······································</span><span·class="p"·data-group-id="9858547228-8">{</span><span·class="p"·data-group-id="9858547228-9"><<</span><span·class="s">"ID"</span><span·class="p"·data-group-id="9858547228-9">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9858547228-10"><<</span><span·class="s">"MD5"</span><span·class="p"·data-group-id="9858547228-10">>></span><span·class="p"·data-group-id="9858547228-8">}</span><span·class="p">,</span><span·class="w"> | ||
| 167 | ·······································</span><span·class="p"·data-group-id="9 | 166 | ·······································</span><span·class="p"·data-group-id="1197219942-8">{</span><span·class="p"·data-group-id="1197219942-9"><<</span><span·class="s">"ID"</span><span·class="p"·data-group-id="1197219942-9">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·177,·SHA:·6d4d77183d25e9cc241d833ec31512ed95201f0f893f46c3a5de25a44d0e91bd·...·]</span><span·class="p">,</span><span·class="w"> |
| 167 | ·······································</span><span·class="p"·data-group-id="1197219942-11"><<</span><span·class="s">"LOAD"</span><span·class="p"·data-group-id="1197219942-11">>></span><span·class="p"·data-group-id="1197219942-4">]</span><span·class="p">,</span><span·class="w"> | ||
| 168 | ······································</span><span·class="p"·data-group-id=" | 168 | ······································</span><span·class="p"·data-group-id="1197219942-12">[</span><span·class="p"·data-group-id="1197219942-12">]</span><span·class="p"·data-group-id="1197219942-2">)</span><span·class="p">.</span><span·class="w"> |
| 169 | ·</span><span·class="p"·data-group-id=" | 169 | ·</span><span·class="p"·data-group-id="1197219942-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Ref</span><span·class="p"·data-group-id="1197219942-13">}</span></code></pre><h3·id="load-an-engine-and-replace-some-methods"·class="section-heading"> |
| 170 | ··<a·href="#load-an-engine-and-replace-some-methods"·class="hover-link"> | 170 | ··<a·href="#load-an-engine-and-replace-some-methods"·class="hover-link"> |
| 171 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 171 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 172 | ··</a> | 172 | ··</a> |
| 173 | ··<span·class="text">Load·an·engine·and·replace·some·methods</span> | 173 | ··<span·class="text">Load·an·engine·and·replace·some·methods</span> |
| 174 | </h3> | 174 | </h3> |
| 175 | <p>Load·an·engine·with·the·help·of·the·dynamic·engine·and·just·replace·some·engine | 175 | <p>Load·an·engine·with·the·help·of·the·dynamic·engine·and·just·replace·some·engine |
| 176 | methods.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="9087582985-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Engine</span><span·class="p"·data-group-id="9087582985-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_load</span><span·class="p"·data-group-id="9087582985-2">(</span><span·class="p"·data-group-id="9087582985-3"><<</span><span·class="s">"dynamic"</span><span·class="p"·data-group-id="9087582985-3">>></span><span·class="p">,</span><span·class="w"> | ||
| 177 | 176 | methods.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="7845700631-1">{</span><span·class="ss">ok</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·472,·SHA:·d78f68d88efd592879aa9b26cf6ccc8f7ba15321ad5f5dca09fbd21ba5f29f88·...·]">>></span><span·class="p">,</span><span·class="w"> | |
| 177 | ······································</span><span·class="p"·data-group-id="7845700631-4">[</span><span·class="p"·data-group-id="7845700631-5">{</span><span·class="p"·data-group-id="7845700631-6"><<</span><span·class="s">"SO_PATH"</span><span·class="p"·data-group-id="7845700631-6">>></span><span·class="p">,</span><span·class="w"> | ||
| 178 | ········································</span><span·class="p"·data-group-id=" | 178 | ········································</span><span·class="p"·data-group-id="7845700631-7"><<</span><span·class="s">"/some/path/otp_test_engine.so"</span><span·class="p"·data-group-id="7845700631-7">>></span><span·class="p"·data-group-id="7845700631-5">}</span><span·class="p">,</span><span·class="w"> |
| 179 | ·······································</span><span·class="p"·data-group-id=" | 179 | ·······································</span><span·class="p"·data-group-id="7845700631-8">{</span><span·class="p"·data-group-id="7845700631-9"><<</span><span·class="s">"ID"</span><span·class="p"·data-group-id="7845700631-9">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·172,·SHA:·2956d3b2e1d573402d6fec8204d761f055d2bee3b4c9dac326c95e12a96b4ac3·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 180 | ·······································</span><span·class="p"·data-group-id=" | 180 | ·······································</span><span·class="p"·data-group-id="7845700631-11"><<</span><span·class="s">"LOAD"</span><span·class="p"·data-group-id="7845700631-11">>></span><span·class="p"·data-group-id="7845700631-4">]</span><span·class="p">,</span><span·class="w"> |
| 181 | ······································</span><span·class="p"·data-group-id=" | 181 | ······································</span><span·class="p"·data-group-id="7845700631-12">[</span><span·class="p"·data-group-id="7845700631-12">]</span><span·class="p"·data-group-id="7845700631-2">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="p"·data-group-id=" | 182 | </span><span·class="p"·data-group-id="7845700631-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Ref</span><span·class="p"·data-group-id="7845700631-13">}</span><span·class="gp·unselectable"> |
| 183 | 4>·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_register</span><span·class="p"·data-group-id=" | 183 | 4>·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_register</span><span·class="p"·data-group-id="7845700631-14">(</span><span·class="n">Engine</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7845700631-15">[</span><span·class="ss">engine_method_digests</span><span·class="p"·data-group-id="7845700631-15">]</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·ee3d12b541013e83bdc4099d2a01a45cbabe08d3111532a2225acd9ed5da9b15·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="ss">ok</span></code></pre><h3·id="load-with-the-ensure-loaded-function"·class="section-heading"> | 184 | </span><span·class="ss">ok</span></code></pre><h3·id="load-with-the-ensure-loaded-function"·class="section-heading"> |
| 185 | ··<a·href="#load-with-the-ensure-loaded-function"·class="hover-link"> | 185 | ··<a·href="#load-with-the-ensure-loaded-function"·class="hover-link"> |
| 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Load·with·the·ensure·loaded·function</span> | 188 | ··<span·class="text">Load·with·the·ensure·loaded·function</span> |
| 189 | </h3> | 189 | </h3> |
| 190 | <p>This·function·makes·sure·the·engine·is·loaded·just·once·and·the·ID·is·added·to | 190 | <p>This·function·makes·sure·the·engine·is·loaded·just·once·and·the·ID·is·added·to |
| 191 | the·internal·engine·list·of·OpenSSL.·The·following·calls·to·the·function·will | 191 | the·internal·engine·list·of·OpenSSL.·The·following·calls·to·the·function·will |
| 192 | check·if·the·ID·is·loaded·and·then·just·get·a·new·reference·to·the·engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id=" | 192 | check·if·the·ID·is·loaded·and·then·just·get·a·new·reference·to·the·engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="3185007764-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Engine</span><span·class="p"·data-group-id="3185007764-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·284,·SHA:·7dfb968a52a26f1aa0032f698dd6e36377adff50c28838fff30256129f77bcda·...·]-3">>></span><span·class="p">,</span><span·class="w"> |
| 193 | ···············································</span><span·class="p"·data-group-id=" | 193 | ···············································</span><span·class="p"·data-group-id="3185007764-4"><<</span><span·class="s">"/some/path/otp_test_engine.so"</span><span·class="p"·data-group-id="3185007764-4">>></span><span·class="p"·data-group-id="3185007764-2">)</span><span·class="p">.</span><span·class="w"> |
| 194 | ·</span><span·class="p"·data-group-id=" | 194 | ·</span><span·class="p"·data-group-id="3185007764-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">#</span><span·class="n">Ref</span><span·class="p"·data-group-id="3185007764-5">}</span></code></pre><p>To·remove·the·tag·from·the·OpenSSL·engine[·...·truncated·by·diffoscope;·len:·469,·SHA:·e0ff5fc83276ef5514bcc7733a0329e6cf0286377bddc72d01f854cd80ead0e7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 195 | ·</span><span·class="ss">ok</span></code></pre><p>To·unload·it·use·<a·href="crypto.html#engine_unload/1"><code·class="inline">crypto:engine_unload/1</code></a>·which·removes·the·references·to·the | 195 | ·</span><span·class="ss">ok</span></code></pre><p>To·unload·it·use·<a·href="crypto.html#engine_unload/1"><code·class="inline">crypto:engine_unload/1</code></a>·which·removes·the·references·to·the |
| 196 | engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_unload</span><span·class="p"·data-group-id="26 | 196 | engine.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_unload</span><span·class="p"·data-group-id="2610359994-1">(</span><span·class="n">Engine</span><span·class="p"·data-group-id="2610359994-1">)</span><span·class="p">.</span><span·class="w"> |
| 197 | ·</span><span·class="ss">ok</span></code></pre><h3·id="list-all-engines-currently-loaded"·class="section-heading"> | 197 | ·</span><span·class="ss">ok</span></code></pre><h3·id="list-all-engines-currently-loaded"·class="section-heading"> |
| 198 | ··<a·href="#list-all-engines-currently-loaded"·class="hover-link"> | 198 | ··<a·href="#list-all-engines-currently-loaded"·class="hover-link"> |
| 199 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 199 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 200 | ··</a> | 200 | ··</a> |
| 201 | ··<span·class="text">List·all·engines·currently·loaded</span> | 201 | ··<span·class="text">List·all·engines·currently·loaded</span> |
| 202 | </h3> | 202 | </h3> |
| 203 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_list</span><span·class="p"·data-group-id=" | 203 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">engine_list</span><span·class="p"·data-group-id="2506430925-1">(</span><span·class="p"·data-group-id="2506430925-1">)</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="p"·data-group-id=" | 204 | </span><span·class="p"·data-group-id="2506430925-2">[</span><span·class="p"·data-group-id="2506430925-3"><<</span><span·class="s">"dynamic"</span><span·class="p"·data-group-id="2506430925-3">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·175,·SHA:·b5cd7da6c768058764b75a15c333fea9070f96a2dde4a5b57d2c2a31f7310686·...·]-2">]</span></code></pre> |
| 205 | </div> | 205 | </div> |
| 206 | <div·class="bottom-actions"·id="bottom-actions"> | 206 | <div·class="bottom-actions"·id="bottom-actions"> |
| 207 | ··<div·class="bottom-actions-item"> | 207 | ··<div·class="bottom-actions-item"> |
| 208 | ······<a·href="fips.html"·class="bottom-actions-button"·rel="prev"> | 208 | ······<a·href="fips.html"·class="bottom-actions-button"·rel="prev"> |
| 209 | ········<span·class="subheader"> | 209 | ········<span·class="subheader"> |
| Offset 248, 15 lines modified | Offset 248, 15 lines modified | ||
| 248 | ······<p·class="built-using"> | 248 | ······<p·class="built-using"> |
| 249 | ········Built·using | 249 | ········Built·using |
| 250 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 250 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 251 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 251 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 252 | ······</p> | 252 | ······</p> |
| 253 | <p>Copyright·©·1996-202 | 253 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 254 | ····</footer> | 254 | ····</footer> |
| 255 | ··</div> | 255 | ··</div> |
| 256 | </main> | 256 | </main> |
| 257 | </div> | 257 | </div> |
| 258 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 258 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 259 | ··<script> | 259 | ··<script> |
| 260 | ··let·initialized·=·false; | 260 | ··let·initialized·=·false; |
| Offset 289, 15 lines modified | Offset 289, 15 lines modified | ||
| 289 | ······<p·class="built-using"> | 289 | ······<p·class="built-using"> |
| 290 | ········Built·using | 290 | ········Built·using |
| 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 293 | ······</p> | 293 | ······</p> |
| 294 | <p>Copyright·©·1996-202 | 294 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 295 | ····</footer> | 295 | ····</footer> |
| 296 | ··</div> | 296 | ··</div> |
| 297 | </main> | 297 | </main> |
| 298 | </div> | 298 | </div> |
| 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 300 | ··<script> | 300 | ··<script> |
| 301 | ··let·initialized·=·false; | 301 | ··let·initialized·=·false; |
| Offset 292, 15 lines modified | Offset 292, 15 lines modified | ||
| 292 | ······<p·class="built-using"> | 292 | ······<p·class="built-using"> |
| 293 | ········Built·using | 293 | ········Built·using |
| 294 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 294 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 295 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 295 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 296 | ······</p> | 296 | ······</p> |
| 297 | <p>Copyright·©·1996-202 | 297 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 298 | ····</footer> | 298 | ····</footer> |
| 299 | ··</div> | 299 | ··</div> |
| 300 | </main> | 300 | </main> |
| 301 | </div> | 301 | </div> |
| 302 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 302 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 303 | ··<script> | 303 | ··<script> |
| 304 | ··let·initialized·=·false; | 304 | ··let·initialized·=·false; |
| Offset 188, 111 lines modified | Offset 188, 111 lines modified | ||
| 188 | </h3> | 188 | </h3> |
| 189 | <p>The·functions·<a·href="crypto.html#crypto_init/4">crypto_init/4</a>·and | 189 | <p>The·functions·<a·href="crypto.html#crypto_init/4">crypto_init/4</a>·and |
| 190 | <a·href="crypto.html#crypto_update/2">crypto_update/2</a>·are·intended·to·be·used·for | 190 | <a·href="crypto.html#crypto_update/2">crypto_update/2</a>·are·intended·to·be·used·for |
| 191 | encrypting·or·decrypting·a·sequence·of·blocks.·First·one·call·of·<code·class="inline">crypto_init/4</code> | 191 | encrypting·or·decrypting·a·sequence·of·blocks.·First·one·call·of·<code·class="inline">crypto_init/4</code> |
| 192 | initialises·the·crypto·context.·One·or·more·calls·<code·class="inline">crypto_update/2</code>·does·the | 192 | initialises·the·crypto·context.·One·or·more·calls·<code·class="inline">crypto_update/2</code>·does·the |
| 193 | actual·encryption·or·decryption·for·each·block.</p><p>This·example·shows·first·the·encryption·of·two·blocks·and·then·decryptions·of | 193 | actual·encryption·or·decryption·for·each·block.</p><p>This·example·shows·first·the·encryption·of·two·blocks·and·then·decryptions·of |
| 194 | the·cipher·text,·but·divided·into·three·blocks·just·to·show·that·it·is·possible | 194 | the·cipher·text,·but·divided·into·three·blocks·just·to·show·that·it·is·possible |
| 195 | to·divide·the·plain·text·and·cipher·text·differently·for·some·ciphers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 195 | to·divide·the·plain·text·and·cipher·text·differently·for·some·ciphers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="1728986798-1">(</span><span·class="p"·data-group-id="1728986798-1">)</span><span·class="p">.</span><span·class="w"> |
| 196 | » </span><span·class="ss">ok</span><span·class="w"> | 196 | » </span><span·class="ss">ok</span><span·class="w"> |
| 197 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 197 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-2"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="1728986798-2">>></span><span·class="p">.</span><span·class="w"> |
| 198 | » </span><span·class="p"·data-group-id=" | 198 | » </span><span·class="p"·data-group-id="1728986798-3"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·c266eaa007f05c7a4f0fa3a69e8f7ea25c46f391a3762edc7d114efa8c036dad·...·]-3">>></span><span·class="w"> |
| 199 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 199 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-4"><<</span><span·class="mi">0</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="1728986798-4">>></span><span·class="p">.</span><span·class="w"> |
| 200 | » </span><span·class="p"·data-group-id=" | 200 | » </span><span·class="p"·data-group-id="1728986798-5"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·5238d6857977fd765fb9f2c8da22096e6600cbf395a73a890436ce1e19ddabcf·...·]-5">>></span><span·class="w"> |
| 201 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateEnc</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_init</span><span·class="p"·data-group-id=" | 201 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateEnc</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_init</span><span·class="p"·data-group-id="1728986798-6">(</span><span·class="ss">aes_128_ctr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IV</span><span·class="p">,</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·65,·SHA:·1229f59504a51497124e832becfcd035c1d3df3d688f0e5c710b32f4c4cabba2·...·]-6">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·encrypt·->·true</span><span·class="w"> |
| 202 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.3768901617</span><span·class="p">.</span><span·class="mf">1128660993.124047</span><span·class="o">></span><span·class="w"> | 202 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.3768901617</span><span·class="p">.</span><span·class="mf">1128660993.124047</span><span·class="o">></span><span·class="w"> |
| 203 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 203 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="1728986798-7">(</span><span·class="n">StateEnc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-8"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="1728986798-8">>[·...·truncated·by·diffoscope;·len:·52,·SHA:·23dbef05f9e79e4cbc1d233b3d7f3e3d320729e1a0cdf9bf401b9a80c13cbc81·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 204 | » </span><span·class="p"·data-group-id=" | 204 | » </span><span·class="p"·data-group-id="1728986798-9"><<</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">44</span><span·class="p">,</span><span·class="mi">216</span><span·class="p">,</span><span·class="mi">166</span><span·class="p">,</span><span·class="mi">25</span[·...·truncated·by·diffoscope;·len:·343,·SHA:·2ffa153af639295b478d07d0846207513e802eddef794bb81f5e9731c4ebfc42·...·]-9">>></span><span·class="w"> |
| 205 | » </span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 205 | » </span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="1728986798-10">(</span><span·class="n">StateEnc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-11"><<</span><span·class="s">"Second·bytes"</span><span·class="p"·data-group-id="1728986798-11">[·...·truncated·by·diffoscope;·len:·56,·SHA:·c2f43d2e56d9399c374d9d2f9acb0051254d608e840a6e4171535e119916156e·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 206 | » </span><span·class="p"·data-group-id=" | 206 | » </span><span·class="p"·data-group-id="1728986798-12"><<</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">115</span><span·class="p">,</span><span·class="mi">234</spa[·...·truncated·by·diffoscope;·len:·397,·SHA:·008353ff15c90274397ca49108583466fba1e76bb1aae17603f3d1473ff040e6·...·]-12">>></span><span·class="w"> |
| 207 | » </span><span·class="mi">7</span><span·class="o">></span><span·class="w"> | 207 | » </span><span·class="mi">7</span><span·class="o">></span><span·class="w"> |
| 208 | » </span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateDec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_init</span><span·class="p"·data-group-id=" | 208 | » </span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateDec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_init</span><span·class="p"·data-group-id="1728986798-13">(</span><span·class="ss">aes_128_ctr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IV</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·67,·SHA:·ed44a921cbba47e84de06b6dc469c780c0f9d1ce088d073d3ddbef88dbd155c7·...·]-13">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·decrypt·->·false</span><span·class="w"> |
| 209 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.3768901617</span><span·class="p">.</span><span·class="mf">1128660994.124255</span><span·class="o">></span><span·class="w"> | 209 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.3768901617</span><span·class="p">.</span><span·class="mf">1128660994.124255</span><span·class="o">></span><span·class="w"> |
| 210 | » </span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 210 | » </span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="1728986798-14">(</span><span·class="n">StateDec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-15"><<</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">44</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·339,·SHA:·2333840b02caafaa5d2143ea2b3c32aaa912c4c4e7bfc54c5b9ed15c457c2759·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 211 | » </span><span·class="p"·data-group-id=" | 211 | » </span><span·class="p"·data-group-id="1728986798-16"><<</span><span·class="s">"First·b"</span><span·class="p"·data-group-id="1728986798-16">>></span><span·class="w"> |
| 212 | » </span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 212 | » </span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="1728986798-17">(</span><span·class="n">StateDec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-18"><<</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">66</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">162</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">115</span><span·class="p">,</span><span·class="mi">234</span><span·class="p">,</span><span·class="mi">197</span><span·class="p">,</span><span·class="w"> |
| 213 | ········</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">253</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">144</span><span·class="p">,</span><span·class="mi">151</span><span·class="p"·data-group-id=" | 213 | ········</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">253</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">144</span><span·class="p">,</span><span·class="mi">151</span><span·class="p"·data-group-id="1728986798-18">>></span><span·class="p"·data-group-id="1728986798-17">)</span><span·class="p">.</span><span·class="w"> |
| 214 | » </span><span·class="p"·data-group-id=" | 214 | » </span><span·class="p"·data-group-id="1728986798-19"><<</span><span·class="s">"ytesSecond·byte"</span><span·class="p"·data-group-id="1728986798-19">>></span><span·class="w"> |
| 215 | » </span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 215 | » </span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="1728986798-20">(</span><span·class="n">StateDec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1728986798-21"><<</span><span·class="mi">41</span><span·class="p"·data-group-id="1728986798-21">>></span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·ee8d807038f059c5c5bf6ce6f8f9b9632ccddf92285ba04b055914af4f2915ca·...·]-20">)</span><span·class="p">.</span><span·class="w"> |
| 216 | » </span><span·class="p"·data-group-id=" | 216 | » </span><span·class="p"·data-group-id="1728986798-22"><<</span><span·class="s">"s"</span><span·class="p"·data-group-id="1728986798-22">>></span><span·class="w"> |
| 217 | » </span><span·class="mi">11</span><span·class="o">></span></code></pre><p>Note·that·the·internal·data·that·the·<code·class="inline">StateEnc</code>·and·<code·class="inline">StateDec</code>·references·are | 217 | » </span><span·class="mi">11</span><span·class="o">></span></code></pre><p>Note·that·the·internal·data·that·the·<code·class="inline">StateEnc</code>·and·<code·class="inline">StateDec</code>·references·are |
| 218 | destructivly·updated·by·the·calls·to | 218 | destructivly·updated·by·the·calls·to |
| 219 | <a·href="crypto.html#crypto_update/2">crypto_update/2</a>.·This·is·to·gain·time·in·the·calls | 219 | <a·href="crypto.html#crypto_update/2">crypto_update/2</a>.·This·is·to·gain·time·in·the·calls |
| 220 | of·the·nifs·interfacing·the·cryptolib.·In·a·loop·where·the·state·is·saved·in·the | 220 | of·the·nifs·interfacing·the·cryptolib.·In·a·loop·where·the·state·is·saved·in·the |
| 221 | loop's·state,·it·also·saves·one·update·of·the·loop·state·per·crypto·operation.</p><p>For·example,·a·simple·server·receiving·text·parts·to·encrypt·and·send·the·result | 221 | loop's·state,·it·also·saves·one·update·of·the·loop·state·per·crypto·operation.</p><p>For·example,·a·simple·server·receiving·text·parts·to·encrypt·and·send·the·result |
| 222 | back·to·the·one·who·sent·them·(the·<code·class="inline">Requester</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="nf">encode</span><span·class="p"·data-group-id=" | 222 | back·to·the·one·who·sent·them·(the·<code·class="inline">Requester</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="nf">encode</span><span·class="p"·data-group-id="3689041926-1">(</span><span·class="n">Crypto</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IV</span><span·class="p"·data-group-id="3689041926-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | » </span><span·class="nf">crypto_loop</span><span·class="p"·data-group-id=" | 223 | » </span><span·class="nf">crypto_loop</span><span·class="p"·data-group-id="3689041926-2">(</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_init</span><span·class="p"·data-group-id="3689041926-3">(</span><span·class="n">Crypto</span><span·class="p">,</span><span·class="w">·</span><span·class="n"[·...·truncated·by·diffoscope;·len:·254,·SHA:·c1380a7b6085af890c9dad1349b7bb07abf7ec60a347d2feb5fe859d8a8d4a4c·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 224 | » </span><span·class="nf">crypto_loop</span><span·class="p"·data-group-id=" | 224 | » </span><span·class="nf">crypto_loop</span><span·class="p"·data-group-id="3689041926-4">(</span><span·class="n">State</span><span·class="p"·data-group-id="3689041926-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | » </span><span·class="k">receive</span><span·class="w"> | 225 | » </span><span·class="k">receive</span><span·class="w"> |
| 226 | ········</span><span·class="p"·data-group-id=" | 226 | ········</span><span·class="p"·data-group-id="3689041926-5">{</span><span·class="n">Text</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Requester</span><span·class="p"·data-group-id="3689041926-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 227 | ········</span><span·class="n">Requester</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id=" | 227 | ········</span><span·class="n">Requester</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_update</span><span·class="p"·data-group-id="3689041926-6">(</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Text</span><span·class="p"·data-group-id="3689041926-6">)</span><span·class="p">,</span><span·class="w"> |
| 228 | » </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 228 | » </span><span·class="nf">loop</span><span·class="p"·data-group-id="3689041926-7">(</span><span·class="n">State</span><span·class="p"·data-group-id="3689041926-7">)</span><span·class="w"> |
| 229 | » </span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="example-of-crypto_one_time-5"·class="section-heading"> | 229 | » </span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="example-of-crypto_one_time-5"·class="section-heading"> |
| 230 | ··<a·href="#example-of-crypto_one_time-5"·class="hover-link"> | 230 | ··<a·href="#example-of-crypto_one_time-5"·class="hover-link"> |
| 231 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 231 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 232 | ··</a> | 232 | ··</a> |
| 233 | ··<span·class="text">Example·of·crypto_one_time/5</span> | 233 | ··<span·class="text">Example·of·crypto_one_time/5</span> |
| 234 | </h3> | 234 | </h3> |
| 235 | <p>The·same·example·as·in·the | 235 | <p>The·same·example·as·in·the |
| 236 | <a·href="new_api.html#examples-of-crypto_init-4-and-crypto_update-2">previous·section</a>, | 236 | <a·href="new_api.html#examples-of-crypto_init-4-and-crypto_update-2">previous·section</a>, |
| 237 | but·now·with·one·call·to·<a·href="crypto.html#crypto_one_time/5">crypto_one_time/5</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 237 | but·now·with·one·call·to·<a·href="crypto.html#crypto_one_time/5">crypto_one_time/5</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3739360671-1"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="3739360671-1">>></span><span·class="p">.</span><span·class="w"> |
| 238 | » </span><span·class="p"·data-group-id=" | 238 | » </span><span·class="p"·data-group-id="3739360671-2"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·c1b2a0a8cafa5305a537272ab9ecd6a6a7b898cd135110e7a48be0bbe7a8debe·...·]-2">>></span><span·class="w"> |
| 239 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 239 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3739360671-3"><<</span><span·class="mi">0</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="3739360671-3">>></span><span·class="p">.</span><span·class="w"> |
| 240 | » </span><span·class="p"·data-group-id=" | 240 | » </span><span·class="p"·data-group-id="3739360671-4"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·75ece6b3cc567627892ac3aefe0d64465668f314ac61a6460a28ac823672a0e5·...·]-4">>></span><span·class="w"> |
| 241 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">Txt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 241 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">Txt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3739360671-5">[</span><span·class="p"·data-group-id="3739360671-6"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="3739360671-6">>></span><span·class="p">,</span><span·class="p"·data-group-id="3739360671-7"[·...·truncated·by·diffoscope;·len:·164,·SHA:·c16890593774f0f35554b52e7a1b0a1c27c34ec8b2e0bac2ec6da693aa0afc44·...·]-5">]</span><span·class="p">.</span><span·class="w"> |
| 242 | » </span><span·class="p"·data-group-id=" | 242 | » </span><span·class="p"·data-group-id="3739360671-8">[</span><span·class="p"·data-group-id="3739360671-9"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="3739360671-9">>></span><span·class="p">,</span><span·class="p"·data-group-id="3739360671-10[·...·truncated·by·diffoscope;·len:·166,·SHA:·a12dd15456c415f144a2d09154d700b88e21d61abfcfbd553f94a5af402721b1·...·]-8">]</span><span·class="w"> |
| 243 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_one_time</span><span·class="p"·data-group-id=" | 243 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_one_time</span><span·class="p"·data-group-id="3739360671-11">(</span><span·class="ss">aes_128_ctr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IV</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·140,·SHA:·8d3a54549d6307cddb9414bd50f52de027e83346461a705bd6d58b7d51e0af97·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 244 | » </span><span·class="p"·data-group-id=" | 244 | » </span><span·class="p"·data-group-id="3739360671-12"><<</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">44</span><span·class="p">,</span><span·class="mi">216</span><span·class="p">,</span><span·class="mi">166</span><span·class="p">,</span><span·class="mi">25</span><span·class="p">,</span><span·class="mi">130</span><span·class="p">,</span><span·class="mi">203</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">66</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">162</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">115</span><span·class="p">,</span><span·class="mi">234</span><span·class="p">,</span><span·class="w"> |
| 245 | » </span><span·class="mi">197</span><span·class="p">,</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">253</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">144</span><span·class="p">,</span><span·class="mi">151</span><span·class="p">,</span><span·class="mi">41</span><span·class="p"·data-group-id=" | 245 | » </span><span·class="mi">197</span><span·class="p">,</span><span·class="mi">94</span><span·class="p">,</span><span·class="mi">253</span><span·class="p">,</span><span·class="mi">16</span><span·class="p">,</span><span·class="mi">144</span><span·class="p">,</span><span·class="mi">151</span><span·class="p">,</span><span·class="mi">41</span><span·class="p"·data-group-id="3739360671-12">>></span><span·class="w"> |
| 246 | » </span><span·class="mi">5</span><span·class="o">></span></code></pre><p>The·<code·class="inline">[<<"First·bytes">>,<<"Second·bytes">>]</code>·could·of·course·have·been·one | 246 | » </span><span·class="mi">5</span><span·class="o">></span></code></pre><p>The·<code·class="inline">[<<"First·bytes">>,<<"Second·bytes">>]</code>·could·of·course·have·been·one |
| 247 | single·binary:·<code·class="inline"><<"First·bytesSecond·bytes">></code>.</p><h3·id="example-of-crypto_one_time_aead-6"·class="section-heading"> | 247 | single·binary:·<code·class="inline"><<"First·bytesSecond·bytes">></code>.</p><h3·id="example-of-crypto_one_time_aead-6"·class="section-heading"> |
| 248 | ··<a·href="#example-of-crypto_one_time_aead-6"·class="hover-link"> | 248 | ··<a·href="#example-of-crypto_one_time_aead-6"·class="hover-link"> |
| 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 250 | ··</a> | 250 | ··</a> |
| 251 | ··<span·class="text">Example·of·crypto_one_time_aead/6</span> | 251 | ··<span·class="text">Example·of·crypto_one_time_aead/6</span> |
| 252 | </h3> | 252 | </h3> |
| 253 | <p>The·same·example·as·in·the | 253 | <p>The·same·example·as·in·the |
| 254 | <a·href="new_api.html#example-of-crypto_one_time-5">previous·section</a>,·but·now·with·one | 254 | <a·href="new_api.html#example-of-crypto_one_time-5">previous·section</a>,·but·now·with·one |
| 255 | call·to·<a·href="crypto.html#crypto_one_time_aead/6">crypto_one_time_aead/6</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 255 | call·to·<a·href="crypto.html#crypto_one_time_aead/6">crypto_one_time_aead/6</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6329348050-1"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="6329348050-1">>></span><span·class="p">.</span><span·class="w"> |
| 256 | » </span><span·class="p"·data-group-id="3 | 256 | » </span><span·class="p"·data-group-id="6329348050-2"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·b53e2e86a219ff583894a55174710836ab640b302fa68166a08965a04bd37b55·...·]-2">>></span><span·class="w"> |
| 257 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 257 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">IV</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6329348050-3"><<</span><span·class="mi">0</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="6329348050-3">>></span><span·class="p">.</span><span·class="w"> |
| 258 | » </span><span·class="p"·data-group-id="3 | 258 | » </span><span·class="p"·data-group-id="6329348050-4"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·efc342204619a55eead4c2458fb8f95b0e806eb623ac040b88a20fc0384e8fd8·...·]-4">>></span><span·class="w"> |
| 259 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">Txt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 259 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="n">Txt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6329348050-5">[</span><span·class="p"·data-group-id="6329348050-6"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="6329348050-6">>></span><span·class="p">,</span><span·class="p"·data-group-id="6329348050-7"[·...·truncated·by·diffoscope;·len:·164,·SHA:·cf90f09e400940106bf7116617f206bf90127ac6a2e2433637fe736cfdc01624·...·]-5">]</span><span·class="p">.</span><span·class="w"> |
| 260 | » </span><span·class="p"·data-group-id="3 | 260 | » </span><span·class="p"·data-group-id="6329348050-8">[</span><span·class="p"·data-group-id="6329348050-9"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="6329348050-9">>></span><span·class="p">,</span><span·class="p"·data-group-id="6329348050-10[·...·truncated·by·diffoscope;·len:·166,·SHA:·b34cb0e17d52e356601ce083632ebecf75ef6f9f1c73f6eb70d5be80276fea1d·...·]-8">]</span><span·class="w"> |
| 261 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="n">AAD</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 261 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="n">AAD</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6329348050-11"><<</span><span·class="s">"Some·additional·auth·data"</span><span·class="p"·data-group-id="6329348050-11">>></span><span·class="p">.</span><span·class="w"> |
| 262 | » </span><span·class="p"·data-group-id="3 | 262 | » </span><span·class="p"·data-group-id="6329348050-12"><<</span><span·class="s">"Some·additional·auth·data"</span><span·class="p"·data-group-id="6329348050-12">>></span><span·class="w"> |
| 263 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_one_time_aead</span><span·class="p"·data-group-id="3 | 263 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">crypto_one_time_aead</span><span·class="p"·data-group-id="6329348050-13">(</span><span·class="ss">aes_128_gcm</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IV</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·214,·SHA:·efacb66169dc1bc3fe5f29933373e5926463d475a8f18d6c53b07197c8c714e1·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 264 | » </span><span·class="p"·data-group-id="3 | 264 | » </span><span·class="p"·data-group-id="6329348050-14">{</span><span·class="p"·data-group-id="6329348050-15"><<</span><span·class="mi">240</span><span·class="p">,</span><span·class="mi">130</span><span·class="p">,</span><span·class="mi">38</span><span·class="p">,</span><span·class="mi">96</span><span·class="p">,</span><span·class="mi">130</span><span·class="p">,</span><span·class="mi">241</span><span·class="p">,</span><span·class="mi">189</span><span·class="p">,</span><span·class="mi">52</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">190</span><span·class="p">,</span><span·class="mi">179</span><span·class="p">,</span><span·class="mi">213</span><span·class="p">,</span><span·class="mi">132</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">72</span><span·class="p">,</span><span·class="w"> |
| 265 | » </span><span·class="mi">192</span><span·class="p">,</span><span·class="mi">103</span><span·class="p">,</span><span·class="mi">176</span><span·class="p">,</span><span·class="mi">90</span><span·class="p">,</span><span·class="mi">104</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">71</span><span·class="p">,</span><span·class="mi">158</span><span·class="p"·data-group-id="3 | 265 | » </span><span·class="mi">192</span><span·class="p">,</span><span·class="mi">103</span><span·class="p">,</span><span·class="mi">176</span><span·class="p">,</span><span·class="mi">90</span><span·class="p">,</span><span·class="mi">104</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">71</span><span·class="p">,</span><span·class="mi">158</span><span·class="p"·data-group-id="6329348050-15">>></span><span·class="p">,</span><span·class="w"> |
| 266 | » </span><span·class="p"·data-group-id="3 | 266 | » </span><span·class="p"·data-group-id="6329348050-16"><<</span><span·class="mi">131</span><span·class="p">,</span><span·class="mi">47</span><span·class="p">,</span><span·class="mi">45</span><span·class="p">,</span><span·class="mi">91</span><span·class="p">,</span><span·class="mi">142</spa[·...·truncated·by·diffoscope;·len:·657,·SHA:·0dfcc7f311a804ce2a754fb7bbb98eaf7dfef28213815d7f8f9b529b04deac5f·...·]-14">}</span><span·class="w"> |
| 267 | » </span><span·class="mi">6</span><span·class="o">></span></code></pre><p>The·<code·class="inline">[<<"First·bytes">>,<<"Second·bytes">>]</code>·could·of·course·have·been·one | 267 | » </span><span·class="mi">6</span><span·class="o">></span></code></pre><p>The·<code·class="inline">[<<"First·bytes">>,<<"Second·bytes">>]</code>·could·of·course·have·been·one |
| 268 | single·binary:·<code·class="inline"><<"First·bytesSecond·bytes">></code>.</p><h3·id="example-of-mac_init-mac_update-and-mac_final"·class="section-heading"> | 268 | single·binary:·<code·class="inline"><<"First·bytesSecond·bytes">></code>.</p><h3·id="example-of-mac_init-mac_update-and-mac_final"·class="section-heading"> |
| 269 | ··<a·href="#example-of-mac_init-mac_update-and-mac_final"·class="hover-link"> | 269 | ··<a·href="#example-of-mac_init-mac_update-and-mac_final"·class="hover-link"> |
| 270 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 270 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 271 | ··</a> | 271 | ··</a> |
| 272 | ··<span·class="text">Example·of·mac_init·mac_update·and·mac_final</span> | 272 | ··<span·class="text">Example·of·mac_init·mac_update·and·mac_final</span> |
| 273 | </h3> | 273 | </h3> |
| 274 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 274 | <pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="n">Key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9104182982-1"><<</span><span·class="mi">1</span><span·class="p">:</span><span·class="mi">128</span><span·class="p"·data-group-id="9104182982-1">>></span><span·class="p">.</span><span·class="w"> |
| 275 | » </span><span·class="p"·data-group-id=" | 275 | » </span><span·class="p"·data-group-id="9104182982-2"><<</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·[·...·truncated·by·diffoscope;·len:·574,·SHA:·4a55045dc5797b17ff1c98ed2f78e8ee520996da0716bac2e50469aa1adce5aa·...·]-2">>></span><span·class="w"> |
| 276 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateMac</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_init</span><span·class="p"·data-group-id=" | 276 | » </span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">StateMac</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_init</span><span·class="p"·data-group-id="9104182982-3">(</span><span·class="ss">cmac</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">aes_128_cbc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="9104182982-3">)</span><span·class="p">.</span><span·class="w"> |
| 277 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> | 277 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> |
| 278 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id=" | 278 | » </span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id="9104182982-4">(</span><span·class="n">StateMac</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9104182982-5"><<</span><span·class="s">"First·bytes"</span><span·class="p"·data-group-id="9104182982-5">>[·...·truncated·by·diffoscope;·len:·52,·SHA:·cf25b4bbc4192def24152cc5ae06cafc173d1931477ccba58a9edf35b87193a6·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 279 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> | 279 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> |
| 280 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id=" | 280 | » </span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id="9104182982-6">(</span><span·class="n">StateMac</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"·"</span><span·class="p"·data-group-id="9104182982-6">)</span><span·class="p">.</span><span·class="w"> |
| 281 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> | 281 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> |
| 282 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id=" | 282 | » </span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_update</span><span·class="p"·data-group-id="9104182982-7">(</span><span·class="n">StateMac</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9104182982-8"><<</span><span·class="s">"last·bytes"</span><span·class="p"·data-group-id="9104182982-8">>&[·...·truncated·by·diffoscope;·len:·51,·SHA:·0b286d82331d948f425f6cae19d31ab299e12a226e01adfe44c9ebfd7d022224·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 283 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> | 283 | » </span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.2424664121</span><span·class="p">.</span><span·class="mf">2781478916.232610</span><span·class="o">></span><span·class="w"> |
| 284 | » </span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_final</span><span·class="p"·data-group-id=" | 284 | » </span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac_final</span><span·class="p"·data-group-id="9104182982-9">(</span><span·class="n">StateMac</span><span·class="p"·data-group-id="9104182982-9">)</span><span·class="p">.</span><span·class="w"> |
| 285 | » </span><span·class="p"·data-group-id=" | 285 | » </span><span·class="p"·data-group-id="9104182982-10"><<</span><span·class="mi">68</span><span·class="p">,</span><span·class="mi">191</span><span·class="p">,</span><span·class="mi">219</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">84</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">193</span><span·class="p">,</span><span·class="mi">197</span><span·class="p">,</span><span·class="mi">238</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">214</span><span·class="p">,</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="w"> |
| 286 | » </span><span·class="mi">249</span><span·class="p"·data-group-id=" | 286 | » </span><span·class="mi">249</span><span·class="p"·data-group-id="9104182982-10">>></span><span·class="w"> |
| 287 | » </span><span·class="mi">7</span><span·class="o">></span></code></pre><p>and·compare·the·result·with·a·single·calculation·just·for·this·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac</span><span·class="p"·data-group-id="91 | 287 | » </span><span·class="mi">7</span><span·class="o">></span></code></pre><p>and·compare·the·result·with·a·single·calculation·just·for·this·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» </span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">crypto</span><span·class="p">:</span><span·class="nf">mac</span><span·class="p"·data-group-id="9153307264-1">(</span><span·class="ss">cmac</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">aes_128_cbc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·95,·SHA:·7e92b9f78de045c116cf4109ebbc5b60eb8576712ceda02807345990a358add0·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 288 | » </span><span·class="p"·data-group-id="91 | 288 | » </span><span·class="p"·data-group-id="9153307264-2"><<</span><span·class="mi">68</span><span·class="p">,</span><span·class="mi">191</span><span·class="p">,</span><span·class="mi">219</span><span·class="p">,</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">84</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">193</span><span·class="p">,</span><span·class="mi">197</span><span·class="p">,</span><span·class="mi">238</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">214</span><span·class="p">,</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">160</span><span·class="p">,</span><span·class="w"> |
| 289 | » </span><span·class="mi">249</span><span·class="p"·data-group-id="91 | 289 | » </span><span·class="mi">249</span><span·class="p"·data-group-id="9153307264-2">>></span><span·class="w"> |
| 290 | » </span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nf">v</span><span·class="p"·data-group-id="91 | 290 | » </span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nf">v</span><span·class="p"·data-group-id="9153307264-3">(</span><span·class="mi">7</span><span·class="p"·data-group-id="9153307264-3">)</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="nf">v</span><span·class="p"·data-group-id="9153307264-4">(</span><span·c[·...·truncated·by·diffoscope;·len:·59,·SHA:·43f73fa469f577af950139728cc4791bb19a4545e56340c4f502a7fc3d15b028·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 291 | » </span><span·class="ss">true</span><span·class="w"> | 291 | » </span><span·class="ss">true</span><span·class="w"> |
| 292 | » </span><span·class="mi">9</span><span·class="o">></span></code></pre><h2·id="retired-cipher-names"·class="section-heading"> | 292 | » </span><span·class="mi">9</span><span·class="o">></span></code></pre><h2·id="retired-cipher-names"·class="section-heading"> |
| 293 | ··<a·href="#retired-cipher-names"·class="hover-link"> | 293 | ··<a·href="#retired-cipher-names"·class="hover-link"> |
| 294 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 294 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 295 | ··</a> | 295 | ··</a> |
| 296 | ··<span·class="text">Retired·cipher·names</span> | 296 | ··<span·class="text">Retired·cipher·names</span> |
| 297 | </h2> | 297 | </h2> |
| Offset 341, 15 lines modified | Offset 341, 15 lines modified | ||
| 341 | ······<p·class="built-using"> | 341 | ······<p·class="built-using"> |
| 342 | ········Built·using | 342 | ········Built·using |
| 343 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 343 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 344 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 344 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 345 | ······</p> | 345 | ······</p> |
| 346 | <p>Copyright·©·1996-202 | 346 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 347 | ····</footer> | 347 | ····</footer> |
| 348 | ··</div> | 348 | ··</div> |
| 349 | </main> | 349 | </main> |
| 350 | </div> | 350 | </div> |
| 351 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 351 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 352 | ··<script> | 352 | ··<script> |
| 353 | ··let·initialized·=·false; | 353 | ··let·initialized·=·false; |
| Max diff block lines reached; -1/72807 bytes (-0.00%) of diff not shown. | |||
| Offset 2230, 15 lines modified | Offset 2230, 15 lines modified | ||
| 2230 | ······<p·class="built-using"> | 2230 | ······<p·class="built-using"> |
| 2231 | ········Built·using | 2231 | ········Built·using |
| 2232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2234 | ······</p> | 2234 | ······</p> |
| 2235 | <p>Copyright·©·1996-202 | 2235 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2236 | ····</footer> | 2236 | ····</footer> |
| 2237 | ··</div> | 2237 | ··</div> |
| 2238 | </main> | 2238 | </main> |
| 2239 | </div> | 2239 | </div> |
| 2240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2241 | ··<script> | 2241 | ··<script> |
| 2242 | ··let·initialized·=·false; | 2242 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-F51EF764.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 199, 15 lines modified | Offset 199, 15 lines modified | ||
| 199 | ······<p·class="built-using"> | 199 | ······<p·class="built-using"> |
| 200 | ········Built·using | 200 | ········Built·using |
| 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 203 | ······</p> | 203 | ······</p> |
| 204 | <p>Copyright·©·1996-202 | 204 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 205 | ····</footer> | 205 | ····</footer> |
| 206 | ··</div> | 206 | ··</div> |
| 207 | </main> | 207 | </main> |
| 208 | </div> | 208 | </div> |
| 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 210 | ··<script> | 210 | ··<script> |
| 211 | ··let·initialized·=·false; | 211 | ··let·initialized·=·false; |
| Offset 335, 15 lines modified | Offset 335, 15 lines modified | ||
| 335 | ······<p·class="built-using"> | 335 | ······<p·class="built-using"> |
| 336 | ········Built·using | 336 | ········Built·using |
| 337 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 337 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 338 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 338 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 339 | ······</p> | 339 | ······</p> |
| 340 | <p>Copyright·©·1996-202 | 340 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 341 | ····</footer> | 341 | ····</footer> |
| 342 | ··</div> | 342 | ··</div> |
| 343 | </main> | 343 | </main> |
| 344 | </div> | 344 | </div> |
| 345 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 345 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 346 | ··<script> | 346 | ··<script> |
| 347 | ··let·initialized·=·false; | 347 | ··let·initialized·=·false; |
| Offset 160, 20 lines modified | Offset 160, 20 lines modified | ||
| 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 161 | ··</a> | 161 | ··</a> |
| 162 | ··<span·class="text">Executable·Lines</span> | 162 | ··<span·class="text">Executable·Lines</span> |
| 163 | </h3> | 163 | </h3> |
| 164 | <p>To·have·an·effect,·a·breakpoint·must·be·set·at·an·<em>executable·line</em>,·which·is·a | 164 | <p>To·have·an·effect,·a·breakpoint·must·be·set·at·an·<em>executable·line</em>,·which·is·a |
| 165 | line·of·code·containing·an·executable·expression·such·as·a·matching·or·a | 165 | line·of·code·containing·an·executable·expression·such·as·a·matching·or·a |
| 166 | function·call.·A·blank·line·or·a·line·containing·a·comment,·function·head,·or | 166 | function·call.·A·blank·line·or·a·line·containing·a·comment,·function·head,·or |
| 167 | pattern·in·a·<code·class="inline">case</code>·statement·or·<code·class="inline">receive</code>·statement·is·not·executable.</p><p>In·the·following·example,·lines·2,·4,·6,·8,·and·11·are·executable·lines:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">1</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">is_loaded</span><span·class="p"·data-group-id=" | 167 | pattern·in·a·<code·class="inline">case</code>·statement·or·<code·class="inline">receive</code>·statement·is·not·executable.</p><p>In·the·following·example,·lines·2,·4,·6,·8,·and·11·are·executable·lines:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">1</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">is_loaded</span><span·class="p"·data-group-id="2691261205-1">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="n">Compiled</span><span·class="p"·data-group-id="2691261205-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | </span><span·class="mi">2</span><span·class="p">:</span><span·class="w">···</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_file</span><span·class="p"·data-group-id=" | 168 | </span><span·class="mi">2</span><span·class="p">:</span><span·class="w">···</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_file</span><span·class="p"·data-group-id="2691261205-2">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="n">Compiled</span><span·class="p"·data-group-id="2691261205-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 169 | </span><span·class="mi">3</span><span·class="p">:</span><span·class="w">·····</span><span·class="p"·data-group-id=" | 169 | </span><span·class="mi">3</span><span·class="p">:</span><span·class="w">·····</span><span·class="p"·data-group-id="2691261205-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">File</span><span·class="p"·data-group-id="2691261205-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | </span><span·class="mi">4</span><span·class="p">:</span><span·class="w">·······</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">which</span><span·class="p"·data-group-id=" | 170 | </span><span·class="mi">4</span><span·class="p">:</span><span·class="w">·······</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">which</span><span·class="p"·data-group-id="2691261205-4">(</span><span·class="n">Module</span><span·class="p"·data-group-id="2691261205-4">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 171 | </span><span·class="mi">5</span><span·class="p">:</span><span·class="w">·········</span><span·class="o">?</span><span·class="n">TAG</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 171 | </span><span·class="mi">5</span><span·class="p">:</span><span·class="w">·········</span><span·class="o">?</span><span·class="n">TAG</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | </span><span·class="mi">6</span><span·class="p">:</span><span·class="w">···········</span><span·class="p"·data-group-id=" | 172 | </span><span·class="mi">6</span><span·class="p">:</span><span·class="w">···········</span><span·class="p"·data-group-id="2691261205-5">{</span><span·class="ss">loaded</span><span·class="p">,</span><span·class="n">File</span><span·class="p"·data-group-id="2691261205-5">}</span><span·class="p">;</span><span·class="w"> |
| 173 | </span><span·class="mi">7</span><span·class="p">:</span><span·class="w">·········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 173 | </span><span·class="mi">7</span><span·class="p">:</span><span·class="w">·········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | </span><span·class="mi">8</span><span·class="p">:</span><span·class="w">···········</span><span·class="ss">unloaded</span><span·class="w"> | 174 | </span><span·class="mi">8</span><span·class="p">:</span><span·class="w">···········</span><span·class="ss">unloaded</span><span·class="w"> |
| 175 | </span><span·class="mi">9</span><span·class="p">:</span><span·class="w">·······</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 175 | </span><span·class="mi">9</span><span·class="p">:</span><span·class="w">·······</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 176 | </span><span·class="mi">10</span><span·class="p">:</span><span·class="w">····</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 176 | </span><span·class="mi">10</span><span·class="p">:</span><span·class="w">····</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | </span><span·class="mi">11</span><span·class="p">:</span><span·class="w">······</span><span·class="ss">false</span><span·class="w"> | 177 | </span><span·class="mi">11</span><span·class="p">:</span><span·class="w">······</span><span·class="ss">false</span><span·class="w"> |
| 178 | </span><span·class="mi">12</span><span·class="p">:</span><span·class="w">··</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="status-and-trigger-action"·class="section-heading"> | 178 | </span><span·class="mi">12</span><span·class="p">:</span><span·class="w">··</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="status-and-trigger-action"·class="section-heading"> |
| 179 | ··<a·href="#status-and-trigger-action"·class="hover-link"> | 179 | ··<a·href="#status-and-trigger-action"·class="hover-link"> |
| Offset 204, 21 lines modified | Offset 204, 21 lines modified | ||
| 204 | returns·<code·class="inline">true</code>,·the·process·stops.·If·the·function·call·returns·<code·class="inline">false</code>,·the | 204 | returns·<code·class="inline">true</code>,·the·process·stops.·If·the·function·call·returns·<code·class="inline">false</code>,·the |
| 205 | breakpoint·is·silently·ignored.</p><p><code·class="inline">Bindings</code>·is·a·list·of·variable·bindings.·To·retrieve·the·value·of·<code·class="inline">Variable</code> | 205 | breakpoint·is·silently·ignored.</p><p><code·class="inline">Bindings</code>·is·a·list·of·variable·bindings.·To·retrieve·the·value·of·<code·class="inline">Variable</code> |
| 206 | (given·as·an·atom),·use·function | 206 | (given·as·an·atom),·use·function |
| 207 | <a·href="int.html#get_binding/2"><code·class="inline">int:get_binding(Variable,·Bindings)</code></a>.·The·function | 207 | <a·href="int.html#get_binding/2"><code·class="inline">int:get_binding(Variable,·Bindings)</code></a>.·The·function |
| 208 | returns·<code·class="inline">unbound</code>·or·<code·class="inline">{value,Value}</code>.</p><p><img·src="assets/cond_break_dialog.jpg"·alt="Conditional·Break·Dialog·Window"·title="Conditional·Break·Dialog·Window"/></p><p>Right-click·the·<em>Module</em>·entry·to·open·a·popup·menu·from·which·the·appropriate | 208 | returns·<code·class="inline">unbound</code>·or·<code·class="inline">{value,Value}</code>.</p><p><img·src="assets/cond_break_dialog.jpg"·alt="Conditional·Break·Dialog·Window"·title="Conditional·Break·Dialog·Window"/></p><p>Right-click·the·<em>Module</em>·entry·to·open·a·popup·menu·from·which·the·appropriate |
| 209 | module·can·be·selected.</p><p><em>Example:</em></p><p>A·conditional·breakpoint·calling·<code·class="inline">c_test:c_break/1</code>·is·added·at·line·6·in·module | 209 | module·can·be·selected.</p><p><em>Example:</em></p><p>A·conditional·breakpoint·calling·<code·class="inline">c_test:c_break/1</code>·is·added·at·line·6·in·module |
| 210 | <code·class="inline">fact</code>.·Each·time·the·breakpoint·is·reached,·the·function·is·called.·When·<code·class="inline">N</code>·is | 210 | <code·class="inline">fact</code>.·Each·time·the·breakpoint·is·reached,·the·function·is·called.·When·<code·class="inline">N</code>·is |
| 211 | equal·to·3,·the·function·returns·<code·class="inline">true</code>·and·the·process·stops.</p><p>Extract·from·<code·class="inline">fact.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">5</span><span·class="p">.</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id=" | 211 | equal·to·3,·the·function·returns·<code·class="inline">true</code>·and·the·process·stops.</p><p>Extract·from·<code·class="inline">fact.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">5</span><span·class="p">.</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id="5860055449-1">(</span><span·class="mi">0</span><span·class="p"·data-group-id="5860055449-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 212 | </span><span·class="mi">6</span><span·class="p">.</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id=" | 212 | </span><span·class="mi">6</span><span·class="p">.</span><span·class="w">·</span><span·class="nf">fac</span><span·class="p"·data-group-id="5860055449-2">(</span><span·class="n">N</span><span·class="p"·data-group-id="5860055449-2">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·c[·...·truncated·by·diffoscope;·len:·961,·SHA:·0b6953a8de2fe4e5ba53ffa777696e157586c31d54ac22ce60e127a824b4dde7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 213 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3 | 213 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3083748151-2">(</span><span·class="p"·data-group-id="3083748151-3">[</span><span·class="ss">c_break</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3083748151-3">]</span><span·class="p"·data-group-id="3083748151-2">)</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="nf">c_break</span><span·class="p"·data-group-id="3 | 214 | </span><span·class="nf">c_break</span><span·class="p"·data-group-id="3083748151-4">(</span><span·class="n">Bindings</span><span·class="p"·data-group-id="3083748151-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">int</span><span·class="p">:</span><span·class="nf">get_binding</span><span·class="p"·data-group-id="3 | 215 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">int</span><span·class="p">:</span><span·class="nf">get_binding</span><span·class="p"·data-group-id="3083748151-5">(</span><span·class="ss">'N'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bindings</span><span·class="p"·data-group-id="3083748151-5">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 216 | ········</span><span·class="p"·data-group-id="3 | 216 | ········</span><span·class="p"·data-group-id="3083748151-6">{</span><span·class="ss">value</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">3</span><span·class="p"·data-group-id="3083748151-6">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ············</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 217 | ············</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 218 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 218 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 219 | ············</span><span·class="ss">false</span><span·class="w"> | 219 | ············</span><span·class="ss">false</span><span·class="w"> |
| 220 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="function-breakpoints"·class="section-heading"> | 220 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><h3·id="function-breakpoints"·class="section-heading"> |
| 221 | ··<a·href="#function-breakpoints"·class="hover-link"> | 221 | ··<a·href="#function-breakpoints"·class="hover-link"> |
| 222 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 222 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 223 | ··</a> | 223 | ··</a> |
| Offset 231, 20 lines modified | Offset 231, 20 lines modified | ||
| 231 | ··<a·href="#stack-trace"·class="hover-link"> | 231 | ··<a·href="#stack-trace"·class="hover-link"> |
| 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 233 | ··</a> | 233 | ··</a> |
| 234 | ··<span·class="text">Stack·Trace</span> | 234 | ··<span·class="text">Stack·Trace</span> |
| 235 | </h2> | 235 | </h2> |
| 236 | <p>The·Erlang·emulator·keeps·track·of·a·<em>stack·trace</em>,·information·about·recent | 236 | <p>The·Erlang·emulator·keeps·track·of·a·<em>stack·trace</em>,·information·about·recent |
| 237 | function·calls.·This·information·is·used·if·an·error·occurs,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="k">catch</span><span·class="w">·</span><span·class="ss">a</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 237 | function·calls.·This·information·is·used·if·an·error·occurs,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="k">catch</span><span·class="w">·</span><span·class="ss">a</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id=" | 238 | </span><span·class="p"·data-group-id="3737089131-1">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-2">{</span><span·class="ss">badarith</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-3">[</span><span·clas[·...·truncated·by·diffoscope;·len:·507,·SHA:·cbbdf96c4e27ab7fd7bee404ed0ded8d2bbb91f02651e99b9071cf586fb17133·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ···················</span><span·class="p"·data-group-id="5127586154-7">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">do_apply</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-8">[</span><span·class="p"·data-group-id="5127586154-9">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"erl_eval.erl"</span><span·class="p"·data-group-id="5127586154-9">}</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-10">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">573</span><span·class="p"·data-group-id="5127586154-10">}</span><span·class="p"·data-group-id="5127586154-8">]</span><span·class="p"·data-group-id="5127586154-7">}</span><span·class="p">,</span><span·class="w"> | ||
| 240 | ···················</span><span·class="p"·data-group-id="5127586154-11">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">expr</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-12">[</span><span·class="p"·data-group-id="5127586154-13">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"erl_eval.erl"</span><span·class="p"·data-group-id="5127586154-13">}</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-14">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">357</span><span·class="p"·data-group-id="5127586154-14">}</span><span·class="p"·data-group-id="5127586154-12">]</span><span·class="p"·data-group-id="5127586154-11">}</span><span·class="p">,</span><span·class="w"> | ||
| 241 | ···················</span><span·class="p"·data-group-id="5127586154-15">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">exprs</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-16">[</span><span·class="p"·data-group-id="5127586154-17">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"shell.erl"</span><span·class="p"·data-group-id="5127586154-17">}</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-18">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">674</span><span·class="p"·data-group-id="5127586154-18">}</span><span·class="p"·data-group-id="5127586154-16">]</span><span·class="p"·data-group-id="5127586154-15">}</span><span·class="p">,</span><span·class="w"> | ||
| 242 | ···················</span><span·class="p"·data-group-id="5127586154-19">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">eval_exprs</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-20">[</span><span·class="p"·data-group-id="5127586154-21">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"shell.erl"</span><span·class="p"·data-group-id="5127586154-21">}</span><span·class="p">,</span><span·class="p"·data-group-id="5127586154-22">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">629</span><span·class="p"·data-group-id="5127586154-22">}</span><span·class="p"·data-group-id="5127586154-20">]</span><span·class="p"·data-group-id="5127586154-19">}</span><span·class="p">,</span><span·class="w"> | ||
| 243 | ···················</span><span·class="p"·data-group-id=" | 239 | ···················</span><span·class="p"·data-group-id="3737089131-7">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">do_apply</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-8">[</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·542,·SHA:·2153a080d6e78a64357b34b291f9d38d6a5e01aee3b066636ed59efd3c8068fa·...·] |
| 240 | ···················</span><span·class="p"·data-group-id="3737089131-11">{</span><span·class="ss">erl_eval</span><span·class="p">,</span><span·class="ss">expr</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-12">[</span><span·class="p"·data-group-id="3737089131-13">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"erl_eval.erl"</span><span·class="p"·data-group-id="3737089131-13">}</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-14">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">357</span><span·class="p"·data-group-id="3737089131-14">}</span><span·class="p"·data-group-id="3737089131-12">]</span><span·class="p"·data-group-id="3737089131-11">}</span><span·class="p">,</span><span·class="w"> | ||
| 241 | ···················</span><span·class="p"·data-group-id="3737089131-15">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">exprs</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-16">[</span><span·class="p"·data-group-id="3737089131-17">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"shell.erl"</span><span·class="p"·data-group-id="3737089131-17">}</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-18">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">674</span><span·class="p"·data-group-id="3737089131-18">}</span><span·class="p"·data-group-id="3737089131-16">]</span><span·class="p"·data-group-id="3737089131-15">}</span><span·class="p">,</span><span·class="w"> | ||
| 242 | ···················</span><span·class="p"·data-group-id="3737089131-19">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">eval_exprs</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-20">[</span><span·class="p"·data-group-id="3737089131-21">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"shell.erl"</span><span·class="p"·data-group-id="3737089131-21">}</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-22">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">629</span><span·class="p"·data-group-id="3737089131-22">}</span><span·class="p"·data-group-id="3737089131-20">]</span><span·class="p"·data-group-id="3737089131-19">}</span><span·class="p">,</span><span·class="w"> | ||
| 243 | ···················</span><span·class="p"·data-group-id="3737089131-23">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">eval_loop</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-24">[</span><span·class="p"·data-group-id="3737089131-25">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="s">"shell.erl"</span><span·class="p"·data-group-id="3737089131-25">}</span><span·class="p">,</span><span·class="p"·data-group-id="3737089131-26">{</span><span·class="ss">line</span><span·class="p">,</span><span·class="mi">614</span><span·class="p"·data-group-id="3737089131-26">}</span><span·class="p"·data-group-id="3737089131-24">]</span><span·class="p"·data-group-id="3737089131-23">}</span><span·class="p"·data-group-id="3737089131-3">]</span><span·class="p"·data-group-id="3737089131-2">}</span><span·class="p"·data-group-id="3737089131-1">}</span></code></pre><p>For·details·about·the·stack·trace,·see·section | ||
| 244 | <a·href="../../../../doc/system/errors.html">Errors·and·Error·Handling</a>·in·the·Erlang·Reference | 244 | <a·href="../../../../doc/system/errors.html">Errors·and·Error·Handling</a>·in·the·Erlang·Reference |
| 245 | Manual.</p><p>Debugger·emulates·the·stack·trace·by·keeping·track·of·recently·called | 245 | Manual.</p><p>Debugger·emulates·the·stack·trace·by·keeping·track·of·recently·called |
| 246 | interpreted·functions.·(The·real·stack·trace·cannot·be·used,·as·it·shows·which | 246 | interpreted·functions.·(The·real·stack·trace·cannot·be·used,·as·it·shows·which |
| 247 | functions·of·Debugger·have·been·called,·rather·than·which·interpreted | 247 | functions·of·Debugger·have·been·called,·rather·than·which·interpreted |
| 248 | functions.)</p><p>This·information·can·be·used·to·traverse·the·chain·of·function·calls,·using·the | 248 | functions.)</p><p>This·information·can·be·used·to·traverse·the·chain·of·function·calls,·using·the |
| 249 | <em>Up</em>·and·<em>Down</em>·buttons·in·the | 249 | <em>Up</em>·and·<em>Down</em>·buttons·in·the |
| 250 | <a·href="debugger_chapter.html#attach">Attach·Process·window</a>.</p><p>By·default,·Debugger·only·saves·information·about·recursive·function·calls,·that | 250 | <a·href="debugger_chapter.html#attach">Attach·Process·window</a>.</p><p>By·default,·Debugger·only·saves·information·about·recursive·function·calls,·that |
| Offset 543, 15 lines modified | Offset 543, 15 lines modified | ||
| 543 | ······<p·class="built-using"> | 543 | ······<p·class="built-using"> |
| 544 | ········Built·using | 544 | ········Built·using |
| 545 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 545 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 546 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 546 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 547 | ······</p> | 547 | ······</p> |
| 548 | <p>Copyright·©·1996-202 | 548 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 549 | ····</footer> | 549 | ····</footer> |
| 550 | ··</div> | 550 | ··</div> |
| 551 | </main> | 551 | </main> |
| 552 | </div> | 552 | </div> |
| 553 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 553 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 554 | ··<script> | 554 | ··<script> |
| 555 | ··let·initialized·=·false; | 555 | ··let·initialized·=·false; |
| Offset 130, 17 lines modified | Offset 130, 17 lines modified | ||
| 130 | ····<section·id="moduledoc"> | 130 | ····<section·id="moduledoc"> |
| 131 | <p>Debugger/Interpreter·Interface.</p><p>The·<code·class="inline">i</code>·module·provides·short·forms·for·some·of·the·functions·used·by·the | 131 | <p>Debugger/Interpreter·Interface.</p><p>The·<code·class="inline">i</code>·module·provides·short·forms·for·some·of·the·functions·used·by·the |
| 132 | graphical·Debugger·and·some·of·the·functions·in·module·<a·href="int.html"><code·class="inline">int</code></a>,·the·Erlang | 132 | graphical·Debugger·and·some·of·the·functions·in·module·<a·href="int.html"><code·class="inline">int</code></a>,·the·Erlang |
| 133 | interpreter.</p><p>This·module·also·provides·facilities·for·displaying·status·information·about | 133 | interpreter.</p><p>This·module·also·provides·facilities·for·displaying·status·information·about |
| 134 | interpreted·processes·and·break·points.</p><p>It·is·possible·to·attach·to·interpreted·processes·by·only·giving·the·corresponding | 134 | interpreted·processes·and·break·points.</p><p>It·is·possible·to·attach·to·interpreted·processes·by·only·giving·the·corresponding |
| 135 | process·identity.·By·default,·an·attachment·window·is·displayed.·Processes | 135 | process·identity.·By·default,·an·attachment·window·is·displayed.·Processes |
| 136 | at·other·Erlang·nodes·can·be·attached·manually·or·automatically.</p><p>The·functions·in·this·module·are·defined·in·the·Erlang·shell.·That·is, | 136 | at·other·Erlang·nodes·can·be·attached·manually·or·automatically.</p><p>The·functions·in·this·module·are·defined·in·the·Erlang·shell.·That·is, |
| 137 | they·can·be·called·without·the·<code·class="inline">i:</code>·prefix.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">ii</span><span·class="p"·data-group-id=" | 137 | they·can·be·called·without·the·<code·class="inline">i:</code>·prefix.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">ii</span><span·class="p"·data-group-id="3165687321-1">(</span><span·class="ss">t</span><span·class="p"·data-group-id="3165687321-1">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="p"·data-group-id=" | 138 | </span><span·class="p"·data-group-id="3165687321-2">{</span><span·class="ss">module</span><span·class="p">,</span><span·class="ss">t</span><span·class="p"·data-group-id="3165687321-2">}</span><span·class="gp·unselectable"> |
| 139 | 2>·</span><span·class="nf">iaa</span><span·class="p"·data-group-id=" | 139 | 2>·</span><span·class="nf">iaa</span><span·class="p"·data-group-id="3165687321-3">(</span><span·class="p"·data-group-id="3165687321-4">[</span><span·class="ss">init</span><span·class="p"·data-group-id="3165687321-4">]</span><span·class="p"·data-group-id="3165687321-3">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="ss">true</span></code></pre> | 140 | </span><span·class="ss">true</span></code></pre> |
| 141 | ····</section> | 141 | ····</section> |
| 142 | </div> | 142 | </div> |
| 143 | ··<section·id="summary"·class="details-list"> | 143 | ··<section·id="summary"·class="details-list"> |
| 144 | ····<h1·class="section-heading"> | 144 | ····<h1·class="section-heading"> |
| Offset 1288, 15 lines modified | Offset 1288, 15 lines modified | ||
| 1288 | ······<p·class="built-using"> | 1288 | ······<p·class="built-using"> |
| 1289 | ········Built·using | 1289 | ········Built·using |
| 1290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1292 | ······</p> | 1292 | ······</p> |
| 1293 | <p>Copyright·©·1996-202 | 1293 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1294 | ····</footer> | 1294 | ····</footer> |
| 1295 | ··</div> | 1295 | ··</div> |
| 1296 | </main> | 1296 | </main> |
| 1297 | </div> | 1297 | </div> |
| 1298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1299 | ··<script> | 1299 | ··<script> |
| 1300 | ··let·initialized·=·false; | 1300 | ··let·initialized·=·false; |
| Offset 670, 15 lines modified | Offset 670, 15 lines modified | ||
| 670 | ·························Args·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> | 670 | ·························Args·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> |
| 671 | ······</div> | 671 | ······</div> |
| 672 | <p>Sets·when·and·how·to·attach·automatically·to·a·process·executing·code | 672 | <p>Sets·when·and·how·to·attach·automatically·to·a·process·executing·code |
| 673 | in·interpreted·modules.</p><p>By·default·when·the·interpreter·is·started,·automatic·attach·is·disabled.</p><p>If·<code·class="inline">Flags</code>·is·an·empty·list,·automatic·attach·is·disabled.</p><p>Otherwise·<code·class="inline">Flags</code>·should·be·a·list·containing··at·least·one·of·the·following | 673 | in·interpreted·modules.</p><p>By·default·when·the·interpreter·is·started,·automatic·attach·is·disabled.</p><p>If·<code·class="inline">Flags</code>·is·an·empty·list,·automatic·attach·is·disabled.</p><p>Otherwise·<code·class="inline">Flags</code>·should·be·a·list·containing··at·least·one·of·the·following |
| 674 | flags:</p><ul><li><code·class="inline">init</code>·-·Attach·when·a·process·for·the·first·time·calls·an·interpreted | 674 | flags:</p><ul><li><code·class="inline">init</code>·-·Attach·when·a·process·for·the·first·time·calls·an·interpreted |
| 675 | function.</li><li><code·class="inline">break</code>·-·Attach·whenever·a·process·reaches·a·breakpoint.</li><li><code·class="inline">exit</code>·-·Attach·when·a·process·terminates.</li></ul><p>When·the·specified·event·occurs,·the·function·<code·class="inline">Function</code>·is·called·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 675 | function.</li><li><code·class="inline">break</code>·-·Attach·whenever·a·process·reaches·a·breakpoint.</li><li><code·class="inline">exit</code>·-·Attach·when·a·process·terminates.</li></ul><p>When·the·specified·event·occurs,·the·function·<code·class="inline">Function</code>·is·called·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">spawn</span><span·class="p"·data-group-id="4133471656-1">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4133471656-2">[</span><span·class="n">Pid</span><sp[·...·truncated·by·diffoscope;·len:·190,·SHA:·12c5d2d7804dba27d7170a4283626c65dbfbace0ce21dba3cdd561f8827fb6d7·...·]-1">)</span></code></pre><p><code·class="inline">Pid</code>·is·the·pid·of·the·process·executing·interpreted·code.</p> |
| 676 | ··</section> | 676 | ··</section> |
| 677 | </section> | 677 | </section> |
| 678 | <section·class="detail"·id="break/2"> | 678 | <section·class="detail"·id="break/2"> |
| 679 | ··<div·class="detail-header"> | 679 | ··<div·class="detail-header"> |
| 680 | ····<a·href="#break/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 680 | ····<a·href="#break/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 681 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 681 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1399, 15 lines modified | Offset 1399, 15 lines modified | ||
| 1399 | ······<p·class="built-using"> | 1399 | ······<p·class="built-using"> |
| 1400 | ········Built·using | 1400 | ········Built·using |
| 1401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1403 | ······</p> | 1403 | ······</p> |
| 1404 | <p>Copyright·©·1996-202 | 1404 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1405 | ····</footer> | 1405 | ····</footer> |
| 1406 | ··</div> | 1406 | ··</div> |
| 1407 | </main> | 1407 | </main> |
| 1408 | </div> | 1408 | </div> |
| 1409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1410 | ··<script> | 1410 | ··<script> |
| 1411 | ··let·initialized·=·false; | 1411 | ··let·initialized·=·false; |
| Offset 188, 15 lines modified | Offset 188, 15 lines modified | ||
| 188 | ······<p·class="built-using"> | 188 | ······<p·class="built-using"> |
| 189 | ········Built·using | 189 | ········Built·using |
| 190 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 190 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 191 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 191 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 192 | ······</p> | 192 | ······</p> |
| 193 | <p>Copyright·©·1996-202 | 193 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 194 | ····</footer> | 194 | ····</footer> |
| 195 | ··</div> | 195 | ··</div> |
| 196 | </main> | 196 | </main> |
| 197 | </div> | 197 | </div> |
| 198 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 198 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 199 | ··<script> | 199 | ··<script> |
| 200 | ··let·initialized·=·false; | 200 | ··let·initialized·=·false; |
| Offset 135, 23 lines modified | Offset 135, 23 lines modified | ||
| 135 | ··<a·href="#fixed-bugs-and-malfunctions"·class="hover-link"> | 135 | ··<a·href="#fixed-bugs-and-malfunctions"·class="hover-link"> |
| 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 137 | ··</a> | 137 | ··</a> |
| 138 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 138 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 139 | </h3> | 139 | </h3> |
| 140 | <ul><li><p>Defining·a·fun·in·the·shell·using·the·syntax·<code·class="inline">fun·Name/Arity</code>·would·fail.·This·has·been·corrected·so·that·the·following·now·works:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nb">is_atom</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 140 | <ul><li><p>Defining·a·fun·in·the·shell·using·the·syntax·<code·class="inline">fun·Name/Arity</code>·would·fail.·This·has·been·corrected·so·that·the·following·now·works:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nb">is_atom</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 141 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> | 141 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> |
| 142 | >·</span><span·class="n">F</span><span·class="p"·data-group-id=" | 142 | >·</span><span·class="n">F</span><span·class="p"·data-group-id="3810148471-1">(</span><span·class="ss">a</span><span·class="p"·data-group-id="3810148471-1">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 143 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 144 | 3>·</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">id</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 144 | 3>·</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">id</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> | 145 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> |
| 146 | 4>·</span><span·class="n">Id</span><span·class="p"·data-group-id=" | 146 | 4>·</span><span·class="n">Id</span><span·class="p"·data-group-id="3810148471-2">(</span><span·class="mi">42</span><span·class="p"·data-group-id="3810148471-2">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="gt">**·exception·error:·undefined·shell·command·id/1</span><span·class="gp·unselectable"> | 147 | </span><span·class="gt">**·exception·error:·undefined·shell·command·id/1</span><span·class="gp·unselectable"> |
| 148 | 5>·</span><span·class="nf">id</span><span·class="p"·data-group-id=" | 148 | 5>·</span><span·class="nf">id</span><span·class="p"·data-group-id="3810148471-3">(</span><span·class="n">I</span><span·class="p"·data-group-id="3810148471-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">I</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 149 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 150 | 6>·</span><span·class="n">Id</span><span·class="p"·data-group-id=" | 150 | 6>·</span><span·class="n">Id</span><span·class="p"·data-group-id="3810148471-4">(</span><span·class="mi">42</span><span·class="p"·data-group-id="3810148471-4">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="mi">42</span></code></pre><p>The·Debugger·has·also·been·corrected·to·correctly·handle·this·syntax·for·a·BIF.</p><p>Own·Id:·OTP-19322·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8963"·title="">GH-8963</a>,·<a·href="https://github.com/erlang/otp/pull/8987"·title="">PR-8987</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> | 151 | </span><span·class="mi">42</span></code></pre><p>The·Debugger·has·also·been·corrected·to·correctly·handle·this·syntax·for·a·BIF.</p><p>Own·Id:·OTP-19322·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8963"·title="">GH-8963</a>,·<a·href="https://github.com/erlang/otp/pull/8987"·title="">PR-8987</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> |
| 152 | ··<a·href="#improvements-and-new-features"·class="hover-link"> | 152 | ··<a·href="#improvements-and-new-features"·class="hover-link"> |
| 153 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 153 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 154 | ··</a> | 154 | ··</a> |
| 155 | ··<span·class="text">Improvements·and·New·Features</span> | 155 | ··<span·class="text">Improvements·and·New·Features</span> |
| 156 | </h3> | 156 | </h3> |
| 157 | <ul><li><p>Erlang/OTP·type·specifications·has·been·updated·to·eliminate·overlapping·domains.</p><p>Own·Id:·OTP-19310·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8810"·title="">GH-8810</a>,·<a·href="https://github.com/erlang/otp/issues/8821"·title="">GH-8821</a>,·<a·href="https://github.com/erlang/otp/pull/8986"·title="">PR-8986</a></p></li></ul><h2·id="debugger-5-4"·class="section-heading"> | 157 | <ul><li><p>Erlang/OTP·type·specifications·has·been·updated·to·eliminate·overlapping·domains.</p><p>Own·Id:·OTP-19310·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8810"·title="">GH-8810</a>,·<a·href="https://github.com/erlang/otp/issues/8821"·title="">GH-8821</a>,·<a·href="https://github.com/erlang/otp/pull/8986"·title="">PR-8986</a></p></li></ul><h2·id="debugger-5-4"·class="section-heading"> |
| Offset 988, 15 lines modified | Offset 988, 15 lines modified | ||
| 988 | ······<p·class="built-using"> | 988 | ······<p·class="built-using"> |
| 989 | ········Built·using | 989 | ········Built·using |
| 990 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 990 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 991 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 991 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 992 | ······</p> | 992 | ······</p> |
| 993 | <p>Copyright·©·1996-202 | 993 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 994 | ····</footer> | 994 | ····</footer> |
| 995 | ··</div> | 995 | ··</div> |
| 996 | </main> | 996 | </main> |
| 997 | </div> | 997 | </div> |
| 998 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 998 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 999 | ··<script> | 999 | ··<script> |
| 1000 | ··let·initialized·=·false; | 1000 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 266, 35 lines modified | Offset 266, 35 lines modified | ||
| 266 | the·value·is·a·list,·it·is·used·as·is.·If·it·is·not·a·list,·it·is·put·into·a | 266 | the·value·is·a·list,·it·is·used·as·is.·If·it·is·not·a·list,·it·is·put·into·a |
| 267 | list.</p><p>The·list·is·appended·to·any·options·given·to·<a·href="#run/1"><code·class="inline">run/1</code></a>·or·on·the·command·line.</p><p>The·list·can·be·retrieved·with·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#env_compiler_options/0"><code·class="inline">compile:env_compiler_options/0</code></a>.</p><p>Currently·the·only·option·used·is·the | 267 | list.</p><p>The·list·is·appended·to·any·options·given·to·<a·href="#run/1"><code·class="inline">run/1</code></a>·or·on·the·command·line.</p><p>The·list·can·be·retrieved·with·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#env_compiler_options/0"><code·class="inline">compile:env_compiler_options/0</code></a>.</p><p>Currently·the·only·option·used·is·the |
| 268 | <a·href="dialyzer.html#error_location"><code·class="inline">error_location</code></a>·option.</p><p><em>Dialyzer·configuration·file:</em></p><p>Dialyzer's·configuration·file·may·also·be·used·to·augment·the·default·options | 268 | <a·href="dialyzer.html#error_location"><code·class="inline">error_location</code></a>·option.</p><p><em>Dialyzer·configuration·file:</em></p><p>Dialyzer's·configuration·file·may·also·be·used·to·augment·the·default·options |
| 269 | and·those·given·directly·to·the·Dialyzer·command.·It·is·commonly·used·to·avoid | 269 | and·those·given·directly·to·the·Dialyzer·command.·It·is·commonly·used·to·avoid |
| 270 | repeating·options·which·would·otherwise·need·to·be·given·explicitly·to·Dialyzer | 270 | repeating·options·which·would·otherwise·need·to·be·given·explicitly·to·Dialyzer |
| 271 | on·every·invocation.</p><p>The·location·of·the·configuration·file·can·be·set·via·the·<code·class="inline">DIALYZER_CONFIG</code> | 271 | on·every·invocation.</p><p>The·location·of·the·configuration·file·can·be·set·via·the·<code·class="inline">DIALYZER_CONFIG</code> |
| 272 | environment·variable,·and·defaults·to·within·the·<code·class="inline">user_config</code>·from | 272 | environment·variable,·and·defaults·to·within·the·<code·class="inline">user_config</code>·from |
| 273 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/filename.html#basedir/3"><code·class="inline">filename:basedir/3</code></a>.</p><p>An·example·configuration·file's·contents·might·be:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id=" | 273 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/filename.html#basedir/3"><code·class="inline">filename:basedir/3</code></a>.</p><p>An·example·configuration·file's·contents·might·be:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="7624117293-1">{</span><span·class="ss">incremental</span><span·class="p">,</span><span·class="w"> |
| 274 | ········</span><span·class="p"·data-group-id=" | 274 | ········</span><span·class="p"·data-group-id="7624117293-2">{</span><span·class="ss">default_apps</span><span·class="p">,</span><span·class="p"·data-group-id="7624117293-3">[</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·108,·SHA:·f2853707de1cf01a5ee7df5768edd52bf8c29d0460811d4a97ec58daa56fa7d1·...·]3-2">}</span><span·class="p">,</span><span·class="w"> |
| 275 | ········</span><span·class="p"·data-group-id=" | 275 | ········</span><span·class="p"·data-group-id="7624117293-4">{</span><span·class="ss">default_warning_apps</span><span·class="p">,</span><span·class="p"·data-group-id="7624117293-5">[</span><span·class="ss">stdlib</span><span·class="p"·data-group-id="7624117293-5">]</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·10,·SHA:·f2911ea1da5087ce67a381f53682ebc33da7543bf36fe7707df185112bc1eb08·...·]3-4">}</span><span·class="w"> |
| 276 | ······</span><span·class="p"·data-group-id=" | 276 | ······</span><span·class="p"·data-group-id="7624117293-1">}</span><span·class="p">.</span><span·class="w"> |
| 277 | ······</span><span·class="p"·data-group-id="5949549543-6">{</span><span·class="ss">warnings</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5949549543-7">[</span><span·class="ss">no_improper_lists</span><span·class="p"·data-group-id="5949549543-7">]</span><span·class="p"·data-group-id="5949549543-6">}</span><span·class="p">.</span><span·class="w"> | ||
| 278 | ······</span><span·class="p"·data-group-id="5949549543-8">{</span><span·class="ss">add_pathsa</span><span·class="p">,</span><span·class="p"·data-group-id="5949549543-9">[</span><span·class="s">"/users/samwise/potatoes/ebin"</span><span·class="p"·data-group-id="5949549543-9">]</span><span·class="p"·data-group-id="5949549543-8">}</span><span·class="p">.</span><span·class="w"> | ||
| 279 | ······</span><span·class="p"·data-group-id=" | 277 | ······</span><span·class="p"·data-group-id="7624117293-6">{</span><span·class="ss">warnings</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7624117293-7">[</span><span·class="ss">no_improper_lists</span><span·class="p"·data-group-id="7624117293-7">]</span><span·c[·...·truncated·by·diffoscope;·len:·84,·SHA:·0a798d4634c55a630bf093c85b97ffefac801a574ed4b45b1617800e041c45b5·...·]"> |
| 278 | ······</span><span·class="p"·data-group-id="7624117293-8">{</span><span·class="ss">add_pathsa</span><span·class="p">,</span><span·class="p"·data-group-id="7624117293-9">[</span><span·class="s">"/users/samwise/potatoes/ebin"</span><span·class="p"·data-group-id="7624117293-9">]</span><span·class="p"·data-group-id="7624117293-8">}</span><span·class="p">.</span><span·class="w"> | ||
| 279 | ······</span><span·class="p"·data-group-id="7624117293-10">{</span><span·class="ss">add_pathsz</span><span·class="p">,</span><span·class="p"·data-group-id="7624117293-11">[</span><span·class="s">"/users/smeagol/fish/ebin"</span><span·class="p"·data-group-id="7624117293-11">]</span><span·class="p"·data-group-id="7624117293-10">}</span><span·class="p">.</span></code></pre><p><a·href=""·id="suppression"></a></p><h2·id="module-requesting-or-suppressing-warnings-in-source-files"·class="section-heading"> | ||
| 280 | ··<a·href="#module-requesting-or-suppressing-warnings-in-source-files"·class="hover-link"> | 280 | ··<a·href="#module-requesting-or-suppressing-warnings-in-source-files"·class="hover-link"> |
| 281 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 281 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 282 | ··</a> | 282 | ··</a> |
| 283 | ··<span·class="text">Requesting·or·Suppressing·Warnings·in·Source·Files</span> | 283 | ··<span·class="text">Requesting·or·Suppressing·Warnings·in·Source·Files</span> |
| 284 | </h2> | 284 | </h2> |
| 285 | <p>Attribute·<code·class="inline">-dialyzer()</code>·can·be·used·for·turning·off·warnings·in·a·module·by | 285 | <p>Attribute·<code·class="inline">-dialyzer()</code>·can·be·used·for·turning·off·warnings·in·a·module·by |
| 286 | specifying·functions·or·warning·options.·For·example,·to·turn·off·all·warnings | 286 | specifying·functions·or·warning·options.·For·example,·to·turn·off·all·warnings |
| 287 | for·the·function·<code·class="inline">f/0</code>,·include·the·following·line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id=" | 287 | for·the·function·<code·class="inline">f/0</code>,·include·the·following·line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id="8530723630-1">(</span><span·class="p"·data-group-id="8530723630-2">{</span><span·class="ss">nowarn_function</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·74,·SHA:·d87ae35a8181b257cb3752ccced10dcb56a8f22b0ef181fe93374e9bfb7021c8·...·]-1">)</span><span·class="p">.</span></code></pre><p>To·turn·off·warnings·for·improper·lists,·add·the·following·line·to·the·source |
| 288 | file:</p><pre><code·class="text">-dialyzer(no_improper_lists).</code></pre><p>Attribute·<code·class="inline">-dialyzer()</code>·is·allowed·after·function·declarations.·Lists·of·warning | 288 | file:</p><pre><code·class="text">-dialyzer(no_improper_lists).</code></pre><p>Attribute·<code·class="inline">-dialyzer()</code>·is·allowed·after·function·declarations.·Lists·of·warning |
| 289 | options·or·functions·are·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id=" | 289 | options·or·functions·are·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id="3254447304-1">(</span><span·class="p"·data-group-id="3254447304-2">[</span><span·class="p"·data-group-id="3254447304-3">{</span><span·class="ss">nowarn_function</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3254447304[·...·truncated·by·diffoscope;·len:·1867,·SHA:·c3d47cdc2ea2becb11cbb9ee62a1017ae93bb2f4bed8d494a3d1c7cf9c1dbe3c·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·warning·option·for·underspecified·functions,·<code·class="inline">-Wunderspecs</code>,·can·result·in |
| 290 | useful·warnings,·but·often·functions·with·specifications·that·are·strictly·more | 290 | useful·warnings,·but·often·functions·with·specifications·that·are·strictly·more |
| 291 | allowing·than·the·success·typing·cannot·easily·be·modified·to·be·less·allowing. | 291 | allowing·than·the·success·typing·cannot·easily·be·modified·to·be·less·allowing. |
| 292 | To·turn·off·the·warning·for·underspecified·function·<code·class="inline">f/0</code>,·include·the·following | 292 | To·turn·off·the·warning·for·underspecified·function·<code·class="inline">f/0</code>,·include·the·following |
| 293 | line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id=" | 293 | line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">dialyzer</span><span·class="p"·data-group-id="3441511341-1">(</span><span·class="p"·data-group-id="3441511341-2">{</span><span·class="ss">no_underspecs</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·72,·SHA:·e8513c1aaed5428325852925a6020cd428f1110c90cbc004c2ee2c09e260c48e·...·]-1">)</span><span·class="p">.</span></code></pre><p>For·help·on·the·warning·options,·use·<code·class="inline">dialyzer·-Whelp</code>.·The·options·are·also |
| 294 | enumerated,·see·type·<a·href="#t:warn_option/0"><code·class="inline">warn_option/0</code></a>.</p><p>Attribute·<code·class="inline">-dialyzer()</code>·can·also·be·used·for·turning·on·warnings.·For·example, | 294 | enumerated,·see·type·<a·href="#t:warn_option/0"><code·class="inline">warn_option/0</code></a>.</p><p>Attribute·<code·class="inline">-dialyzer()</code>·can·also·be·used·for·turning·on·warnings.·For·example, |
| 295 | if·a·module·has·been·fixed·regarding·unmatched·returns,·adding·the·following | 295 | if·a·module·has·been·fixed·regarding·unmatched·returns,·adding·the·following |
| 296 | line·can·help·in·assuring·that·no·new·unmatched·return·warnings·are·introduced:</p><pre><code·class="text">-dialyzer(unmatched_returns).</code></pre> | 296 | line·can·help·in·assuring·that·no·new·unmatched·return·warnings·are·introduced:</p><pre><code·class="text">-dialyzer(unmatched_returns).</code></pre> |
| 297 | ····</section> | 297 | ····</section> |
| 298 | </div> | 298 | </div> |
| Offset 854, 15 lines modified | Offset 854, 15 lines modified | ||
| 854 | ······<p·class="built-using"> | 854 | ······<p·class="built-using"> |
| 855 | ········Built·using | 855 | ········Built·using |
| 856 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 856 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 857 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 857 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 858 | ······</p> | 858 | ······</p> |
| 859 | <p>Copyright·©·1996-202 | 859 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 860 | ····</footer> | 860 | ····</footer> |
| 861 | ··</div> | 861 | ··</div> |
| 862 | </main> | 862 | </main> |
| 863 | </div> | 863 | </div> |
| 864 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 864 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 865 | ··<script> | 865 | ··<script> |
| 866 | ··let·initialized·=·false; | 866 | ··let·initialized·=·false; |
| Offset 205, 37 lines modified | Offset 205, 37 lines modified | ||
| 205 | spec·is·invalid·with·respect·to·the·implementation.·However,·if·they·do·overlap, | 205 | spec·is·invalid·with·respect·to·the·implementation.·However,·if·they·do·overlap, |
| 206 | Dialyzer·will·proceed·under·the·assumption·that·the·correct·type·for·the·given | 206 | Dialyzer·will·proceed·under·the·assumption·that·the·correct·type·for·the·given |
| 207 | function·is·the·intersection·of·the·inferred·type·and·the·specified·type·(the | 207 | function·is·the·intersection·of·the·inferred·type·and·the·specified·type·(the |
| 208 | rationale·being·that·the·user·may·know·something·that·Dialyzer·itself·cannot | 208 | rationale·being·that·the·user·may·know·something·that·Dialyzer·itself·cannot |
| 209 | deduce).·One·implication·of·this·is·that·if·the·user·gives·a·spec·for·a·function | 209 | deduce).·One·implication·of·this·is·that·if·the·user·gives·a·spec·for·a·function |
| 210 | which·overlaps·with·Dialyzer's·inferred·type,·but·is·more·restrictive,·Dialyzer | 210 | which·overlaps·with·Dialyzer's·inferred·type,·but·is·more·restrictive,·Dialyzer |
| 211 | will·trust·those·restrictions.·This·may·then·generate·an·error·elsewhere·that | 211 | will·trust·those·restrictions.·This·may·then·generate·an·error·elsewhere·that |
| 212 | follows·from·the·erroneously·restricted·spec.</p><p><em>Examples:</em></p><p>Non-overlapping·argument:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 212 | follows·from·the·erroneously·restricted·spec.</p><p><em>Examples:</em></p><p>Non-overlapping·argument:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="0776359615-1">(</span><span·class="nf">boolean</span><span·class="p"·data-group-id="0776359615-2">(</span><span·class="p"·data-group-id="0776359615-2">)</span><span·class="p"·data-group-id="0776359615-1">)</span><span·class="w">·</span><span·class="p">->[·...·truncated·by·diffoscope;·len:·156,·SHA:·0356bdec36dc1a2bb919c3fca162251495f200e8c10858ae4a65e638b7dfc411·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 213 | </span><span·class="c1">%%·Dialyzer·will·infer:·foo(integer())·->·string().</span><span·class="w"> | 213 | </span><span·class="c1">%%·Dialyzer·will·infer:·foo(integer())·->·string().</span><span·class="w"> |
| 214 | </span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 214 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="0776359615-4">(</span><span·class="n">N</span><span·class="p"·data-group-id="0776359615-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ····</span><span·class="nf">integer_to_list</span><span·class="p"·data-group-id=" | 215 | ····</span><span·class="nf">integer_to_list</span><span·class="p"·data-group-id="0776359615-5">(</span><span·class="n">N</span><span·class="p"·data-group-id="0776359615-5">)</span><span·class="p">.</span></code></pre><p>Since·the·type·of·the·argument·in·the·spec·is·different·from·the·type·that |
| 216 | Dialyzer·inferred,·Dialyzer·will·generate·the·following·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">some_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">7</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Invalid</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">specification</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 216 | Dialyzer·inferred,·Dialyzer·will·generate·the·following·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">some_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">7</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Invalid</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">specification</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="ss">foo</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 217 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">success</span><span·class="w">·</span><span·class="ss">typing</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">foo</span><span·class="w"> | 217 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">success</span><span·class="w">·</span><span·class="ss">typing</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">foo</span><span·class="w"> |
| 218 | ··········</span><span·class="p"·data-group-id=" | 218 | ··········</span><span·class="p"·data-group-id="9424158949-1">(</span><span·class="nf">integer</span><span·class="p"·data-group-id="9424158949-2">(</span><span·class="p"·data-group-id="9424158949-2">)</span><span·class="p"·data-group-id="9424158949-1">)</span><span·class="w">·</span><span·class="p">->[·...·truncated·by·diffoscope;·len:·156,·SHA:·25e337c7d4c1e6cf9727998e8b39b9804aaaa1a4e90fdd2618b0fd8e6fb413b0·...·]-3">)</span><span·class="w"> |
| 219 | ·</span><span·class="n">But</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">spec</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">foo</span><span·class="w"> | 219 | ·</span><span·class="n">But</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">spec</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">foo</span><span·class="w"> |
| 220 | ··········</span><span·class="p"·data-group-id=" | 220 | ··········</span><span·class="p"·data-group-id="9424158949-4">(</span><span·class="nf">boolean</span><span·class="p"·data-group-id="9424158949-5">(</span><span·class="p"·data-group-id="9424158949-5">)</span><span·class="p"·data-group-id="9424158949-4">)</span><span·class="w">·</span><span·class="p">->[·...·truncated·by·diffoscope;·len:·156,·SHA:·c7dfb80f364c0e00432996a595f17552c0651fe90dd42c5ef1dd7996446a9bc2·...·]-6">)</span><span·class="w"> |
| 221 | ·</span><span·class="n">They</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">overlap</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="mi">1</span><span·class="ss">st</span><span·class="w">·</span><span·class="ss">argument</span></code></pre><p>Non-overlapping·return:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 221 | ·</span><span·class="n">They</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">overlap</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="mi">1</span><span·class="ss">st</span><span·class="w">·</span><span·class="ss">argument</span></code></pre><p>Non-overlapping·return:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">bar</span><span·class="p"·data-group-id="2039111822-1">(</span><span·class="ss">a</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">b</span><span·class="p"·data-group-id="2039111822-1">)</span><span·class="w">·</span><span·class="p">-></span><span·c[·...·truncated·by·diffoscope;·len:·139,·SHA:·88829ae5561c489061e3c630b31fd9894d9752f867b5ebe296ce39f2fb48f976·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="c1">%%·Dialyzer·will·infer:·bar(a·|·b)·->·binary().</span><span·class="w"> | 222 | </span><span·class="c1">%%·Dialyzer·will·infer:·bar(a·|·b)·->·binary().</span><span·class="w"> |
| 223 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="1221865934-3">(</span><span·class="ss">a</span><span·class="p"·data-group-id="1221865934-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="1221865934-4"><<</span><span·class="s">"a"</span><span·class="p"·data-group-id="1221865934-4">>></span><span·class="p">;</span><span·class="w"> | ||
| 224 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="2039111822-3">(</span><span·class="ss">a</span><span·class="p"·data-group-id="2039111822-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2039111822-4"><<</span><span·class="s">&quo[·...·truncated·by·diffoscope;·len:·116,·SHA:·a1d318569d4fc6b30a755cef76df665d0c6a52e8034aeaaf2919d50e5bd4862d·...·] |
| 224 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="2039111822-5">(</span><span·class="ss">b</span><span·class="p"·data-group-id="2039111822-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2039111822-6"><<</span><span·class="s">"b"</span><span·class="p"·data-group-id="2039111822-6">>></span><span·class="p">.</span></code></pre><p>Since·the·return·value·in·the·spec·and·the·return·value·inferred·by·Dialyzer·are | ||
| 225 | different,·Dialyzer·will·generate·the·following·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">some_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">11</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Invalid</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">specification</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="ss">bar</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 225 | different,·Dialyzer·will·generate·the·following·warning:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">some_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">11</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Invalid</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><span·class="ss">specification</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="ss">bar</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 226 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">success</span><span·class="w">·</span><span·class="ss">typing</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">bar</span><span·class="w"> | 226 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">success</span><span·class="w">·</span><span·class="ss">typing</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">bar</span><span·class="w"> |
| 227 | ··········</span><span·class="p"·data-group-id=" | 227 | ··········</span><span·class="p"·data-group-id="0211654129-1">(</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id="0211654129-1">)</span><span·class="w">·</span><span·class="p"[·...·truncated·by·diffoscope;·len:·211,·SHA:·1937e0b96f24a817a00560a405e1a5dadb4b2e8307a8493ed46ef32b5ca638bc·...·]-2">>></span><span·class="w"> |
| 228 | ·</span><span·class="n">But</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">spec</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">bar</span><span·class="w"> | 228 | ·</span><span·class="n">But</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">spec</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="nc">some_module</span><span·class="p">:</span><span·class="nf">bar</span><span·class="w"> |
| 229 | ··········</span><span·class="p"·data-group-id=" | 229 | ··········</span><span·class="p"·data-group-id="0211654129-3">(</span><span·class="ss">'a'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'b'</span><span·class="p"·data-group-id="0211654129-3">)</span><span·class="w">·</span><span·class="p"[·...·truncated·by·diffoscope;·len:·159,·SHA:·bf191fd2c99bdf91fb2afb970c106ea0449ab128bcfb6cd227a1900305953881·...·]-4">)</span><span·class="w"> |
| 230 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">return</span><span·class="w">·</span><span·class="ss">types</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">overlap</span></code></pre><p>Overlapping·spec·and·inferred·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">baz</span><span·class="p"·data-group-id=" | 230 | ·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">return</span><span·class="w">·</span><span·class="ss">types</span><span·class="w">·</span><span·class="ss">do</span><span·class="w">·</span><span·class="ow">not</span><span·class="w">·</span><span·class="ss">overlap</span></code></pre><p>Overlapping·spec·and·inferred·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">baz</span><span·class="p"·data-group-id="9189862670-1">(</span><span·class="ss">a</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">b</span><span·class="p"·data-group-id="9189862670-1">)</span><span·class="w">·</span><span·class="p">-></span><span·c[·...·truncated·by·diffoscope;·len:·150,·SHA:·8dfb38fcb079eddfb636da73903fd06d2d8fe208ccc7254000071eb56ecf6229·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="c1">%%·Dialyzer·will·infer:·baz(b·|·c·|·d)·->·-1·|·0·|·1.</span><span·class="w"> | 231 | </span><span·class="c1">%%·Dialyzer·will·infer:·baz(b·|·c·|·d)·->·-1·|·0·|·1.</span><span·class="w"> |
| 232 | </span><span·class="nf">baz</span><span·class="p"·data-group-id=" | 232 | </span><span·class="nf">baz</span><span·class="p"·data-group-id="9189862670-3">(</span><span·class="ss">b</span><span·class="p"·data-group-id="9189862670-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="o">-</span><span·class="mi">1</span><span·class="p">;</span><span·class="w"> |
| 233 | </span><span·class="nf">baz</span><span·class="p"·data-group-id=" | 233 | </span><span·class="nf">baz</span><span·class="p"·data-group-id="9189862670-4">(</span><span·class="ss">c</span><span·class="p"·data-group-id="9189862670-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">0</span><span·class="p">;</span><span·class="w"> |
| 234 | </span><span·class="nf">baz</span><span·class="p"·data-group-id=" | 234 | </span><span·class="nf">baz</span><span·class="p"·data-group-id="9189862670-5">(</span><span·class="ss">d</span><span·class="p"·data-group-id="9189862670-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span></code></pre><p>Dialyzer·will·"trust"·the·spec·and·using·the·intersection·of·the·spec·and |
| 235 | inferred·type:</p><pre><code·class="text">baz(b)·->·0·|·1.</code></pre><p>Notice·how·the·<code·class="inline">c</code>·and·<code·class="inline">d</code>·from·the·argument·to·<code·class="inline">baz/1</code>·and·the·<code·class="inline">-1</code>·in·the | 235 | inferred·type:</p><pre><code·class="text">baz(b)·->·0·|·1.</code></pre><p>Notice·how·the·<code·class="inline">c</code>·and·<code·class="inline">d</code>·from·the·argument·to·<code·class="inline">baz/1</code>·and·the·<code·class="inline">-1</code>·in·the |
| 236 | return·from·the·inferred·type·were·dropped·once·the·spec·and·inferred·type·were | 236 | return·from·the·inferred·type·were·dropped·once·the·spec·and·inferred·type·were |
| 237 | intersected.·This·could·result·in·warnings·being·emitted·for·later·functions.</p><p>For·example,·if·<code·class="inline">baz/1</code>·is·called·like·this:</p><pre><code·class="text">call_baz1(A)·-> | 237 | intersected.·This·could·result·in·warnings·being·emitted·for·later·functions.</p><p>For·example,·if·<code·class="inline">baz/1</code>·is·called·like·this:</p><pre><code·class="text">call_baz1(A)·-> |
| 238 | ····case·baz(A)·of | 238 | ····case·baz(A)·of |
| 239 | ········-1·->·negative; | 239 | ········-1·->·negative; |
| 240 | ········0·->·zero; | 240 | ········0·->·zero; |
| 241 | ········1·->·positive | 241 | ········1·->·positive |
| Offset 302, 15 lines modified | Offset 302, 15 lines modified | ||
| 302 | ······<p·class="built-using"> | 302 | ······<p·class="built-using"> |
| 303 | ········Built·using | 303 | ········Built·using |
| 304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 306 | ······</p> | 306 | ······</p> |
| 307 | <p>Copyright·©·1996-202 | 307 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 308 | ····</footer> | 308 | ····</footer> |
| 309 | ··</div> | 309 | ··</div> |
| 310 | </main> | 310 | </main> |
| 311 | </div> | 311 | </div> |
| 312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 313 | ··<script> | 313 | ··<script> |
| 314 | ··let·initialized·=·false; | 314 | ··let·initialized·=·false; |
| Offset 1887, 15 lines modified | Offset 1887, 15 lines modified | ||
| 1887 | ······<p·class="built-using"> | 1887 | ······<p·class="built-using"> |
| 1888 | ········Built·using | 1888 | ········Built·using |
| 1889 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1889 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1890 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1890 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1891 | ······</p> | 1891 | ······</p> |
| 1892 | <p>Copyright·©·1996-202 | 1892 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1893 | ····</footer> | 1893 | ····</footer> |
| 1894 | ··</div> | 1894 | ··</div> |
| 1895 | </main> | 1895 | </main> |
| 1896 | </div> | 1896 | </div> |
| 1897 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1897 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1898 | ··<script> | 1898 | ··<script> |
| 1899 | ··let·initialized·=·false; | 1899 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 196, 15 lines modified | Offset 196, 15 lines modified | ||
| 196 | ······<p·class="built-using"> | 196 | ······<p·class="built-using"> |
| 197 | ········Built·using | 197 | ········Built·using |
| 198 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 198 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 199 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 199 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 200 | ······</p> | 200 | ······</p> |
| 201 | <p>Copyright·©·1996-202 | 201 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 202 | ····</footer> | 202 | ····</footer> |
| 203 | ··</div> | 203 | ··</div> |
| 204 | </main> | 204 | </main> |
| 205 | </div> | 205 | </div> |
| 206 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 206 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 207 | ··<script> | 207 | ··<script> |
| 208 | ··let·initialized·=·false; | 208 | ··let·initialized·=·false; |
| Offset 28, 12 lines modified | Offset 28, 12 lines modified | ||
| 28 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 28 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 29 | dist/lato-latin-400-normal-W7754I4D.woff2 | 29 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 30 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 30 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 31 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 31 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 32 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 32 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 33 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 33 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 34 | dist/remixicon-NKANDIL5.woff2 | 34 | dist/remixicon-NKANDIL5.woff2 |
| 35 | dist/search_data- | 35 | dist/search_data-F78D76B7.js |
| 36 | dist/sidebar_items-BFA5481A.js | 36 | dist/sidebar_items-BFA5481A.js |
| 37 | index.html | 37 | index.html |
| 38 | notes.html | 38 | notes.html |
| 39 | search.html | 39 | search.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 242, 15 lines modified | Offset 242, 15 lines modified | ||
| 242 | ······<p·class="built-using"> | 242 | ······<p·class="built-using"> |
| 243 | ········Built·using | 243 | ········Built·using |
| 244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 246 | ······</p> | 246 | ······</p> |
| 247 | <p>Copyright·©·1996-202 | 247 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 248 | ····</footer> | 248 | ····</footer> |
| 249 | ··</div> | 249 | ··</div> |
| 250 | </main> | 250 | </main> |
| 251 | </div> | 251 | </div> |
| 252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 253 | ··<script> | 253 | ··<script> |
| 254 | ··let·initialized·=·false; | 254 | ··let·initialized·=·false; |
| Offset 697, 20 lines modified | Offset 697, 20 lines modified | ||
| 697 | ······</div> | 697 | ······</div> |
| 698 | <p>Invoked·when·a·request·message·is·received·from·a·peer.·The·application·in·which | 698 | <p>Invoked·when·a·request·message·is·received·from·a·peer.·The·application·in·which |
| 699 | the·callback·takes·place·(that·is,·the·callback·module·as·configured·with | 699 | the·callback·takes·place·(that·is,·the·callback·module·as·configured·with |
| 700 | <a·href="diameter.html#start_service/2"><code·class="inline">diameter:start_service/2</code></a>)·is·determined·by·the·Application·Identifier·in·the | 700 | <a·href="diameter.html#start_service/2"><code·class="inline">diameter:start_service/2</code></a>)·is·determined·by·the·Application·Identifier·in·the |
| 701 | header·of·the·incoming·request·message,·the·selected·module·being·the·one·whose | 701 | header·of·the·incoming·request·message,·the·selected·module·being·the·one·whose |
| 702 | corresponding·dictionary·declares·itself·as·defining·either·the·application·in | 702 | corresponding·dictionary·declares·itself·as·defining·either·the·application·in |
| 703 | question·or·the·Relay·application.</p><p>The·argument·<a·href="#t:packet/0">packet()</a>·has·the·following·signature.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">diameter_packet</span><span·class="p"·data-group-id=" | 703 | question·or·the·Relay·application.</p><p>The·argument·<a·href="#t:packet/0">packet()</a>·has·the·following·signature.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">diameter_packet</span><span·class="p"·data-group-id="8297114983-1">{</span><span·class="ss">header</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">diameter_header</span><span·class="p"·data-group-id="8297114983-2">{</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·9438dec084f02ccfcc26e5bf1e07ddf733714a9113eb0da0dbf32e44d6e1a20b·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 704 | ·················</span><span·class="ss">avps</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 704 | ·················</span><span·class="ss">avps</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8297114983-3">[</span><span·class="o">#</span><span·class="ss">diameter_avp</span><span·class="p"·data-group-id="8297114983-4">{</span><span·class="p"·data-group-id="8297114983-4">}</span><span·class="p"·data-group-id="8297114983-3">]</span><span·class="p">,</span><span·class="w"> |
| 705 | ·················</span><span·class="ss">msg</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record</span><span·class="p"·data-group-id=" | 705 | ·················</span><span·class="ss">msg</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record</span><span·class="p"·data-group-id="8297114983-5">(</span><span·class="p"·data-group-id="8297114983-5">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="w"> |
| 706 | ·················</span><span·class="ss">errors</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 706 | ·················</span><span·class="ss">errors</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8297114983-6">[</span><span·class="n">Unsigned32</span><span·class="p"·data-group-id="8297114983-7">(</span><span·class="p"·data-group-id="8297114983-7">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·479,·SHA:·829c2a125ea42720bc650d7eff42b41d0e17ea64777b26f62470ded841fa3b5d·...·]-6">]</span><span·class="p">,</span><span·class="w"> |
| 707 | ·················</span><span·class="ss">bin</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id=" | 707 | ·················</span><span·class="ss">bin</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="8297114983-11">(</span><span·class="p"·data-group-id="8297114983-11">)</span><span·class="p">,</span><span·class="w"> |
| 708 | ·················</span><span·class="ss">transport_data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 708 | ·················</span><span·class="ss">transport_data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="8297114983-12">(</span><span·class="p"·data-group-id="8297114983-12">)</span><span·class="p"·data-group-id="8297114983-1">}</span></code></pre><p>The·<code·class="inline">msg</code>·field·will·be·<code·class="inline">undefined</code>·in·case·the·request·has·been·received·in·the |
| 709 | relay·application.·Otherwise·it·contains·the·record·representing·the·request·as | 709 | relay·application.·Otherwise·it·contains·the·record·representing·the·request·as |
| 710 | outlined·in·<a·href="diameter_dict.html#MESSAGE_RECORDS">diameter_dict(4)</a>.</p><p>The·<code·class="inline">errors</code>·field·specifies·any·results·codes·identifying·errors·found·while | 710 | outlined·in·<a·href="diameter_dict.html#MESSAGE_RECORDS">diameter_dict(4)</a>.</p><p>The·<code·class="inline">errors</code>·field·specifies·any·results·codes·identifying·errors·found·while |
| 711 | decoding·the·request.·This·is·used·to·set·Result-Code·and/or·Failed-AVP·in·a | 711 | decoding·the·request.·This·is·used·to·set·Result-Code·and/or·Failed-AVP·in·a |
| 712 | returned·answer·unless·the·callback·returns·a·<code·class="inline">#diameter_packet{}</code>·whose | 712 | returned·answer·unless·the·callback·returns·a·<code·class="inline">#diameter_packet{}</code>·whose |
| 713 | <code·class="inline">errors</code>·field·is·set·to·either·a·non-empty·list·of·its·own,·in·which·case·this | 713 | <code·class="inline">errors</code>·field·is·set·to·either·a·non-empty·list·of·its·own,·in·which·case·this |
| 714 | list·is·used·instead,·or·the·atom·<code·class="inline">false</code>·to·disable·any·setting·of·Result-Code | 714 | list·is·used·instead,·or·the·atom·<code·class="inline">false</code>·to·disable·any·setting·of·Result-Code |
| 715 | and·Failed-AVP.·Note·that·the·errors·detected·by·diameter·are·of·the·3xxx·and | 715 | and·Failed-AVP.·Note·that·the·errors·detected·by·diameter·are·of·the·3xxx·and |
| Offset 1010, 15 lines modified | Offset 1010, 15 lines modified | ||
| 1010 | ······<p·class="built-using"> | 1010 | ······<p·class="built-using"> |
| 1011 | ········Built·using | 1011 | ········Built·using |
| 1012 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1012 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1013 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1013 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1014 | ······</p> | 1014 | ······</p> |
| 1015 | <p>Copyright·©·1996-202 | 1015 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1016 | ····</footer> | 1016 | ····</footer> |
| 1017 | ··</div> | 1017 | ··</div> |
| 1018 | </main> | 1018 | </main> |
| 1019 | </div> | 1019 | </div> |
| 1020 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1020 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1021 | ··<script> | 1021 | ··<script> |
| 1022 | ··let·initialized·=·false; | 1022 | ··let·initialized·=·false; |
| Offset 135, 15 lines modified | Offset 135, 15 lines modified | ||
| 135 | encode/decode.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>The·diameter·user·does·not·need·to·call·functions·here·explicitly·when·sending | 135 | encode/decode.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>The·diameter·user·does·not·need·to·call·functions·here·explicitly·when·sending |
| 136 | and·receiving·messages·using·<a·href="diameter.html#call/4"><code·class="inline">diameter:call/4</code></a>·and·the·callback·interface | 136 | and·receiving·messages·using·<a·href="diameter.html#call/4"><code·class="inline">diameter:call/4</code></a>·and·the·callback·interface |
| 137 | documented·in·<a·href="diameter_app.html"><code·class="inline">diameter_app</code></a>:·diameter·itself·provides·encode/decode·as·a | 137 | documented·in·<a·href="diameter_app.html"><code·class="inline">diameter_app</code></a>:·diameter·itself·provides·encode/decode·as·a |
| 138 | consequence·of·configuration·passed·to·<a·href="diameter.html#start_service/2"><code·class="inline">diameter:start_service/2</code></a>,·and·the | 138 | consequence·of·configuration·passed·to·<a·href="diameter.html#start_service/2"><code·class="inline">diameter:start_service/2</code></a>,·and·the |
| 139 | results·may·differ·from·those·returned·by·the·functions·documented·here, | 139 | results·may·differ·from·those·returned·by·the·functions·documented·here, |
| 140 | depending·on·configuration.</p></section><p>The·<a·href="diameter_codec.html#header">header()</a>·and | 140 | depending·on·configuration.</p></section><p>The·<a·href="diameter_codec.html#header">header()</a>·and |
| 141 | <a·href="diameter_codec.html#packet">packet()</a>·records·below·are·defined·in·diameter.hrl, | 141 | <a·href="diameter_codec.html#packet">packet()</a>·records·below·are·defined·in·diameter.hrl, |
| 142 | which·can·be·included·as·follows.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 142 | which·can·be·included·as·follows.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="6422672643-1">(</span><span·class="s">"diameter/include/diameter.hrl"</span><span·class="p"·data-group-id="6422672643-1">)</span><span·class="p">.</span></code></pre><p>Application-specific·records·are·defined·in·the·hrl·files·resulting·from |
| 143 | dictionary·file·compilation.</p><h2·id="module-data-types"·class="section-heading"> | 143 | dictionary·file·compilation.</p><h2·id="module-data-types"·class="section-heading"> |
| 144 | ··<a·href="#module-data-types"·class="hover-link"> | 144 | ··<a·href="#module-data-types"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">DATA·TYPES</span> | 147 | ··<span·class="text">DATA·TYPES</span> |
| 148 | </h2> | 148 | </h2> |
| 149 | <ul><li><p><strong><code·class="inline"·id="integers">uint8() ·=·0..255</code></strong></p></li><li><p><strong><code·class="inline">uint24()·=·0..16777215</code></strong></p></li><li><p><strong><code·class="inline">uint32()·=·0..4294967295</code></strong>·-·8-bit,·24-bit·and·32-bit·integers·occurring | 149 | <ul><li><p><strong><code·class="inline"·id="integers">uint8() ·=·0..255</code></strong></p></li><li><p><strong><code·class="inline">uint24()·=·0..16777215</code></strong></p></li><li><p><strong><code·class="inline">uint32()·=·0..4294967295</code></strong>·-·8-bit,·24-bit·and·32-bit·integers·occurring |
| Offset 545, 15 lines modified | Offset 545, 15 lines modified | ||
| 545 | ······<p·class="built-using"> | 545 | ······<p·class="built-using"> |
| 546 | ········Built·using | 546 | ········Built·using |
| 547 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 547 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 548 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 548 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 549 | ······</p> | 549 | ······</p> |
| 550 | <p>Copyright·©·1996-202 | 550 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 551 | ····</footer> | 551 | ····</footer> |
| 552 | ··</div> | 552 | ··</div> |
| 553 | </main> | 553 | </main> |
| 554 | </div> | 554 | </div> |
| 555 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 555 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 556 | ··<script> | 556 | ··<script> |
| 557 | ··let·initialized·=·false; | 557 | ··let·initialized·=·false; |
| Offset 305, 37 lines modified | Offset 305, 37 lines modified | ||
| 305 | ("Derived·AVP·Data·Formats")·of·RFC·6733·are·encoded·as·values·of·the·types | 305 | ("Derived·AVP·Data·Formats")·of·RFC·6733·are·encoded·as·values·of·the·types |
| 306 | defined·here.·Values·are·passed·to·<a·href="diameter.html#call/4"><code·class="inline">diameter:call/4</code></a>·in·a·request·record·when | 306 | defined·here.·Values·are·passed·to·<a·href="diameter.html#call/4"><code·class="inline">diameter:call/4</code></a>·in·a·request·record·when |
| 307 | sending·a·request,·returned·in·a·resulting·answer·record·and·passed·to·a | 307 | sending·a·request,·returned·in·a·resulting·answer·record·and·passed·to·a |
| 308 | <a·href="diameter_app.html#c:handle_request/3">handle_request/3</a>·callback·upon·reception·of | 308 | <a·href="diameter_app.html#c:handle_request/3">handle_request/3</a>·callback·upon·reception·of |
| 309 | an·incoming·request.</p><p>In·cases·in·which·there·is·a·choice·between·string()·and·binary()·types·for | 309 | an·incoming·request.</p><p>In·cases·in·which·there·is·a·choice·between·string()·and·binary()·types·for |
| 310 | OctetString()·and·derived·types,·the·representation·is·determined·by·the·value | 310 | OctetString()·and·derived·types,·the·representation·is·determined·by·the·value |
| 311 | of·<a·href="diameter.html#service_opt">diameter:service_opt()</a> | 311 | of·<a·href="diameter.html#service_opt">diameter:service_opt()</a> |
| 312 | <a·href="diameter.html#string_decode">string_decode</a>.</p><p><em>Basic·AVP·Data·Formats</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">OctetString</span><span·class="p"·data-group-id="0 | 312 | <a·href="diameter.html#string_decode">string_decode</a>.</p><p><em>Basic·AVP·Data·Formats</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">OctetString</span><span·class="p"·data-group-id="0236407177-1">(</span><span·class="p"·data-group-id="0236407177-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="0236407177-2">(</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·222,·SHA:·9b5958a268236042de62c77b5fdcf2869771d93d94235102713ef4f4c10f9940·...·]-3">)</span><span·class="w"> |
| 313 | </span><span·class="n">Integer32</span><span·class="p"·data-group-id="0 | 313 | </span><span·class="n">Integer32</span><span·class="p"·data-group-id="0236407177-4">(</span><span·class="p"·data-group-id="0236407177-4">)</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="o">-</span><span·class="mi">2147483647</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">2147483647</span><span·class="w"> |
| 314 | </span><span·class="n">Integer64</span><span·class="p"·data-group-id="0 | 314 | </span><span·class="n">Integer64</span><span·class="p"·data-group-id="0236407177-5">(</span><span·class="p"·data-group-id="0236407177-5">)</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="o">-</span><span·class="mi">9223372036854775807</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">9223372036854775807</span><span·class="w"> |
| 315 | </span><span·class="n">Unsigned32</span><span·class="p"·data-group-id="0 | 315 | </span><span·class="n">Unsigned32</span><span·class="p"·data-group-id="0236407177-6">(</span><span·class="p"·data-group-id="0236407177-6">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">4294967295</span><span·class="w"> |
| 316 | </span><span·class="n">Unsigned64</span><span·class="p"·data-group-id="0 | 316 | </span><span·class="n">Unsigned64</span><span·class="p"·data-group-id="0236407177-7">(</span><span·class="p"·data-group-id="0236407177-7">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">18446744073709551615</span><span·class="w"> |
| 317 | </span><span·class="n">Float32</span><span·class="p"·data-group-id="0 | 317 | </span><span·class="n">Float32</span><span·class="p"·data-group-id="0236407177-8">(</span><span·class="p"·data-group-id="0236407177-8">)</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'-infinity'</span><span·class="w">·</span><span·class="p">|</span><span·class="w"[·...·truncated·by·diffoscope;·len:·132,·SHA:·9ae241004435899e9ab18f46b7ccfcf765bfe57c469effe3dbf14a6b925236bb·...·]-9">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">infinity</span><span·class="w"> |
| 318 | </span><span·class="n">Float64</span><span·class="p"·data-group-id="0 | 318 | </span><span·class="n">Float64</span><span·class="p"·data-group-id="0236407177-10">(</span><span·class="p"·data-group-id="0236407177-10">)</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'-infinity'</span><span·class="w">·</span><span·class="p">|</span><span·class="[·...·truncated·by·diffoscope;·len:·135,·SHA:·7ab90d76a6c1f8023073fe59229569e052391bd9b97c423b5fdbe97ab879f7d0·...·]-11">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">infinity</span><span·class="w"> |
| 319 | </span><span·class="n">Grouped</span><span·class="p"·data-group-id="0 | 319 | </span><span·class="n">Grouped</span><span·class="p"·data-group-id="0236407177-12">(</span><span·class="p"·data-group-id="0236407177-12">)</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record</span><span·class="p"·data-group-id="0236407177-13">(</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·afb1a4cf4d6ba7aa62fb3f9c3fe2571c6a69423b3a91a7117afbba370f53544c·...·]-13">)</span></code></pre><p>On·encode,·an·OctetString()·can·be·specified·as·an·iolist(),·excessively·large |
| 320 | floats·(in·absolute·value)·are·equivalent·to·<code·class="inline">infinity</code>·or·<code·class="inline">'-infinity'</code>·and | 320 | floats·(in·absolute·value)·are·equivalent·to·<code·class="inline">infinity</code>·or·<code·class="inline">'-infinity'</code>·and |
| 321 | excessively·large·integers·result·in·encode·failure.·The·records·for·grouped | 321 | excessively·large·integers·result·in·encode·failure.·The·records·for·grouped |
| 322 | AVPs·are·as·discussed·in·the·previous·section.</p><p><em>Derived·AVP·Data·Formats</em></p><p><a·href=""·id="Address"></a></p><pre><code·class="text">Address()·=·OctetString() | 322 | AVPs·are·as·discussed·in·the·previous·section.</p><p><em>Derived·AVP·Data·Formats</em></p><p><a·href=""·id="Address"></a></p><pre><code·class="text">Address()·=·OctetString() |
| 323 | ··········|·tuple()</code></pre><p>On·encode,·an·OctetString()·IPv4·address·is·parsed·in·the·usual·x.x.x.x·format | 323 | ··········|·tuple()</code></pre><p>On·encode,·an·OctetString()·IPv4·address·is·parsed·in·the·usual·x.x.x.x·format |
| 324 | while·an·IPv6·address·is·parsed·in·any·of·the·formats·specified·by·section·2.2 | 324 | while·an·IPv6·address·is·parsed·in·any·of·the·formats·specified·by·section·2.2 |
| 325 | of·RFC·2373,·"Text·Representation·of·Addresses".·An·IPv4·tuple()·has·length·4 | 325 | of·RFC·2373,·"Text·Representation·of·Addresses".·An·IPv4·tuple()·has·length·4 |
| 326 | and·contains·values·of·type·0..255.·An·IPv6·tuple()·has·length·8·and·contains | 326 | and·contains·values·of·type·0..255.·An·IPv6·tuple()·has·length·8·and·contains |
| 327 | values·of·type·0..65535.·The·tuple·representation·is·used·on·decode.</p><p><a·href=""·id="Time"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Time</span><span·class="p"·data-group-id=" | 327 | values·of·type·0..65535.·The·tuple·representation·is·used·on·decode.</p><p><a·href=""·id="Time"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Time</span><span·class="p"·data-group-id="5555572857-1">(</span><span·class="p"·data-group-id="5555572857-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5555572857-2">{</span><span·class="nf">date</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·301,·SHA:·374b90c3342bc00ad6390db6fbece9d8002216c7b3d2258d1b23d9cfcc6d80c2·...·]-2">}</span><span·class="w"> |
| 328 | </span><span·class="ss">where</span><span·class="w"> | 328 | </span><span·class="ss">where</span><span·class="w"> |
| 329 | ··</span><span·class="nf">date</span><span·class="p"·data-group-id=" | 329 | ··</span><span·class="nf">date</span><span·class="p"·data-group-id="5555572857-5">(</span><span·class="p"·data-group-id="5555572857-5">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5555572857-6">{</span><span·class="n">Year</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·162,·SHA:·32b9283dc43ce6268a7bab99ab4b93303d635a2fa2a0e18692b138b632affbd8·...·]-6">}</span><span·class="w"> |
| 330 | ··</span><span·class="nf">time</span><span·class="p"·data-group-id=" | 330 | ··</span><span·class="nf">time</span><span·class="p"·data-group-id="5555572857-7">(</span><span·class="p"·data-group-id="5555572857-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5555572857-8">{</span><span·class="n">Hour</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·166,·SHA:·3e32dd5674eadc4237b076c42d776ed9e92907feade5339a6ab651363d45af71·...·]-8">}</span><span·class="w"> |
| 331 | ··</span><span·class="n">Year</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 331 | ··</span><span·class="n">Year</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="5555572857-9">(</span><span·class="p"·data-group-id="5555572857-9">)</span><span·class="w"> |
| 332 | ··</span><span·class="n">Month</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">12</span><span·class="w"> | 332 | ··</span><span·class="n">Month</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">12</span><span·class="w"> |
| 333 | ··</span><span·class="n">Day</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">31</span><span·class="w"> | 333 | ··</span><span·class="n">Day</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">31</span><span·class="w"> |
| 334 | ··</span><span·class="n">Hour</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">23</span><span·class="w"> | 334 | ··</span><span·class="n">Hour</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">23</span><span·class="w"> |
| 335 | ··</span><span·class="n">Minute</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">59</span><span·class="w"> | 335 | ··</span><span·class="n">Minute</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">59</span><span·class="w"> |
| 336 | ··</span><span·class="n">Second</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">59</span></code></pre><p>Additionally,·values·that·can·be·encoded·are·limited·by·way·of·their·encoding·as | 336 | ··</span><span·class="n">Second</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</span><span·class="mi">59</span></code></pre><p>Additionally,·values·that·can·be·encoded·are·limited·by·way·of·their·encoding·as |
| 337 | four·octets·as·required·by·RFC·6733·with·the·required·extension·from·RFC·2030. | 337 | four·octets·as·required·by·RFC·6733·with·the·required·extension·from·RFC·2030. |
| 338 | In·particular,·only·values·between·<code·class="inline">{{1968,1,20},{3,14,8}}</code>·and | 338 | In·particular,·only·values·between·<code·class="inline">{{1968,1,20},{3,14,8}}</code>·and |
| Offset 355, 16 lines modified | Offset 355, 16 lines modified | ||
| 355 | ··FQDN·=·OctetString() | 355 | ··FQDN·=·OctetString() |
| 356 | ··Port·=·integer() | 356 | ··Port·=·integer() |
| 357 | ··Transport·=·sctp·|·tcp | 357 | ··Transport·=·sctp·|·tcp |
| 358 | ··Protocol··=·diameter·|·radius·|·'tacacs+'</code></pre><p>On·encode,·fields·port,·transport·and·protocol·default·to·3868,·sctp·and | 358 | ··Protocol··=·diameter·|·radius·|·'tacacs+'</code></pre><p>On·encode,·fields·port,·transport·and·protocol·default·to·3868,·sctp·and |
| 359 | diameter·respectively.·The·grammar·of·an·OctetString-valued·DiameterURI()·is·as | 359 | diameter·respectively.·The·grammar·of·an·OctetString-valued·DiameterURI()·is·as |
| 360 | specified·in·section·4.3·of·RFC·6733.·The·record·representation·is·used·on | 360 | specified·in·section·4.3·of·RFC·6733.·The·record·representation·is·used·on |
| 361 | decode.</p><p><a·href=""·id="Enumerated"></a></p><pre><code·class="text">Enumerated()·=·Integer32()</code></pre><p>On·encode,·values·can·be·specified·using·the·macros·defined·in·a·dictionary's | 361 | decode.</p><p><a·href=""·id="Enumerated"></a></p><pre><code·class="text">Enumerated()·=·Integer32()</code></pre><p>On·encode,·values·can·be·specified·using·the·macros·defined·in·a·dictionary's |
| 362 | hrl·file.</p><p><a·href=""·id="IPFilterRule"></a>·<a·href=""·id="QoSFilterRule"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">IPFilterRule</span><span·class="p"·data-group-id=" | 362 | hrl·file.</p><p><a·href=""·id="IPFilterRule"></a>·<a·href=""·id="QoSFilterRule"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">IPFilterRule</span><span·class="p"·data-group-id="3661217134-1">(</span><span·class="p"·data-group-id="3661217134-1">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OctetString</span><span·class="p"·data-group-id="3661217134-2">(</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·cd3d16a460522162b63a86eaeea8d10596bf2f566738a500d0f83d074fdb46e1·...·]-2">)</span><span·class="w"> |
| 363 | </span><span·class="n">QoSFilterRule</span><span·class="p"·data-group-id=" | 363 | </span><span·class="n">QoSFilterRule</span><span·class="p"·data-group-id="3661217134-3">(</span><span·class="p"·data-group-id="3661217134-3">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OctetString</span><span·class="p"·data-group-id="3661217134-4">(</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·4c4bc686e21c951e7ff61869b684331e25c93d1d5491aefb2a65bb44b5e4fb54·...·]-4">)</span></code></pre><p>Values·of·these·types·are·not·currently·parsed·by·diameter.</p><h2·id="see-also"·class="section-heading"> |
| 364 | ··<a·href="#see-also"·class="hover-link"> | 364 | ··<a·href="#see-also"·class="hover-link"> |
| 365 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 365 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 366 | ··</a> | 366 | ··</a> |
| 367 | ··<span·class="text">SEE·ALSO</span> | 367 | ··<span·class="text">SEE·ALSO</span> |
| 368 | </h2> | 368 | </h2> |
| 369 | <p><a·href="diameterc_cmd.html">diameterc(1)</a>,·<a·href="diameter.html"><code·class="inline">diameter</code></a>,·<a·href="diameter_app.html"><code·class="inline">diameter_app</code></a>, | 369 | <p><a·href="diameterc_cmd.html">diameterc(1)</a>,·<a·href="diameter.html"><code·class="inline">diameter</code></a>,·<a·href="diameter_app.html"><code·class="inline">diameter_app</code></a>, |
| 370 | <a·href="diameter_codec.html"><code·class="inline">diameter_codec</code></a>,·<a·href="diameter_make.html"><code·class="inline">diameter_make</code></a></p> | 370 | <a·href="diameter_codec.html"><code·class="inline">diameter_codec</code></a>,·<a·href="diameter_make.html"><code·class="inline">diameter_make</code></a></p> |
| Offset 405, 15 lines modified | Offset 405, 15 lines modified | ||
| 405 | ······<p·class="built-using"> | 405 | ······<p·class="built-using"> |
| 406 | ········Built·using | 406 | ········Built·using |
| 407 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 407 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 408 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 408 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 409 | ······</p> | 409 | ······</p> |
| 410 | <p>Copyright·©·1996-202 | 410 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 411 | ····</footer> | 411 | ····</footer> |
| 412 | ··</div> | 412 | ··</div> |
| 413 | </main> | 413 | </main> |
| 414 | </div> | 414 | </div> |
| 415 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 415 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 416 | ··<script> | 416 | ··<script> |
| 417 | ··let·initialized·=·false; | 417 | ··let·initialized·=·false; |
| Offset 172, 15 lines modified | Offset 172, 15 lines modified | ||
| 172 | ······<p·class="built-using"> | 172 | ······<p·class="built-using"> |
| 173 | ········Built·using | 173 | ········Built·using |
| 174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 176 | ······</p> | 176 | ······</p> |
| 177 | <p>Copyright·©·1996-202 | 177 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 178 | ····</footer> | 178 | ····</footer> |
| 179 | ··</div> | 179 | ··</div> |
| 180 | </main> | 180 | </main> |
| 181 | </div> | 181 | </div> |
| 182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 183 | ··<script> | 183 | ··<script> |
| 184 | ··let·initialized·=·false; | 184 | ··let·initialized·=·false; |
| Offset 200, 15 lines modified | Offset 200, 15 lines modified | ||
| 200 | ······<p·class="built-using"> | 200 | ······<p·class="built-using"> |
| 201 | ········Built·using | 201 | ········Built·using |
| 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 204 | ······</p> | 204 | ······</p> |
| 205 | <p>Copyright·©·1996-202 | 205 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 206 | ····</footer> | 206 | ····</footer> |
| 207 | ··</div> | 207 | ··</div> |
| 208 | </main> | 208 | </main> |
| 209 | </div> | 209 | </div> |
| 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 211 | ··<script> | 211 | ··<script> |
| 212 | ··let·initialized·=·false; | 212 | ··let·initialized·=·false; |
| Offset 519, 15 lines modified | Offset 519, 15 lines modified | ||
| 519 | ······<p·class="built-using"> | 519 | ······<p·class="built-using"> |
| 520 | ········Built·using | 520 | ········Built·using |
| 521 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 521 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 522 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 522 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 523 | ······</p> | 523 | ······</p> |
| 524 | <p>Copyright·©·1996-202 | 524 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 525 | ····</footer> | 525 | ····</footer> |
| 526 | ··</div> | 526 | ··</div> |
| 527 | </main> | 527 | </main> |
| 528 | </div> | 528 | </div> |
| 529 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 529 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 530 | ··<script> | 530 | ··<script> |
| 531 | ··let·initialized·=·false; | 531 | ··let·initialized·=·false; |
| Offset 437, 15 lines modified | Offset 437, 15 lines modified | ||
| 437 | ······<p·class="built-using"> | 437 | ······<p·class="built-using"> |
| 438 | ········Built·using | 438 | ········Built·using |
| 439 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 439 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 440 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 440 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 441 | ······</p> | 441 | ······</p> |
| 442 | <p>Copyright·©·1996-202 | 442 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 443 | ····</footer> | 443 | ····</footer> |
| 444 | ··</div> | 444 | ··</div> |
| 445 | </main> | 445 | </main> |
| 446 | </div> | 446 | </div> |
| 447 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 447 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 448 | ··<script> | 448 | ··<script> |
| 449 | ··let·initialized·=·false; | 449 | ··let·initialized·=·false; |
| Offset 214, 15 lines modified | Offset 214, 15 lines modified | ||
| 214 | ······<p·class="built-using"> | 214 | ······<p·class="built-using"> |
| 215 | ········Built·using | 215 | ········Built·using |
| 216 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 216 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 217 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 217 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 218 | ······</p> | 218 | ······</p> |
| 219 | <p>Copyright·©·1996-202 | 219 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 220 | ····</footer> | 220 | ····</footer> |
| 221 | ··</div> | 221 | ··</div> |
| 222 | </main> | 222 | </main> |
| 223 | </div> | 223 | </div> |
| 224 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 224 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 225 | ··<script> | 225 | ··<script> |
| 226 | ··let·initialized·=·false; | 226 | ··let·initialized·=·false; |
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 472, 15 lines modified | Offset 472, 15 lines modified | ||
| 472 | ······<p·class="built-using"> | 472 | ······<p·class="built-using"> |
| 473 | ········Built·using | 473 | ········Built·using |
| 474 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 474 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 475 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 475 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 476 | ······</p> | 476 | ······</p> |
| 477 | <p>Copyright·©·1996-202 | 477 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 478 | ····</footer> | 478 | ····</footer> |
| 479 | ··</div> | 479 | ··</div> |
| 480 | </main> | 480 | </main> |
| 481 | </div> | 481 | </div> |
| 482 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 482 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 483 | ··<script> | 483 | ··<script> |
| 484 | ··let·initialized·=·false; | 484 | ··let·initialized·=·false; |
| Offset 317, 15 lines modified | Offset 317, 15 lines modified | ||
| 317 | ······<p·class="built-using"> | 317 | ······<p·class="built-using"> |
| 318 | ········Built·using | 318 | ········Built·using |
| 319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 321 | ······</p> | 321 | ······</p> |
| 322 | <p>Copyright·©·1996-202 | 322 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 323 | ····</footer> | 323 | ····</footer> |
| 324 | ··</div> | 324 | ··</div> |
| 325 | </main> | 325 | </main> |
| 326 | </div> | 326 | </div> |
| 327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 328 | ··<script> | 328 | ··<script> |
| 329 | ··let·initialized·=·false; | 329 | ··let·initialized·=·false; |
| Offset 172, 15 lines modified | Offset 172, 15 lines modified | ||
| 172 | ······<p·class="built-using"> | 172 | ······<p·class="built-using"> |
| 173 | ········Built·using | 173 | ········Built·using |
| 174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 176 | ······</p> | 176 | ······</p> |
| 177 | <p>Copyright·©·1996-202 | 177 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 178 | ····</footer> | 178 | ····</footer> |
| 179 | ··</div> | 179 | ··</div> |
| 180 | </main> | 180 | </main> |
| 181 | </div> | 181 | </div> |
| 182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 183 | ··<script> | 183 | ··<script> |
| 184 | ··let·initialized·=·false; | 184 | ··let·initialized·=·false; |
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | <p>Compile·a·diameter·dictionary·to·Erlang·source.</p><h2·id="synopsis"·class="section-heading"> | 127 | <p>Compile·a·diameter·dictionary·to·Erlang·source.</p><h2·id="synopsis"·class="section-heading"> |
| 128 | ··<a·href="#synopsis"·class="hover-link"> | 128 | ··<a·href="#synopsis"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">Synopsis</span> | 131 | ··<span·class="text">Synopsis</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">diameterc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">diameterc</span><span·class="w">·</span><span·class="p"·data-group-id="7513118965-1">[</span><span·class="o"><</span><span·class="ss">options</span><span·class="o">></span><span·class="p"·data-group-id="7513118965-1">]</span><span·class="w">·</span><span·class="o"><</span><span·class="ss">file</span><span·class="o">></span></code></pre><h2·id="description"·class="section-heading"> |
| 134 | ··<a·href="#description"·class="hover-link"> | 134 | ··<a·href="#description"·class="hover-link"> |
| 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 136 | ··</a> | 136 | ··</a> |
| 137 | ··<span·class="text">Description</span> | 137 | ··<span·class="text">Description</span> |
| 138 | </h2> | 138 | </h2> |
| 139 | <p>The·diameterc·utility·is·used·to·compile·a·diameter | 139 | <p>The·diameterc·utility·is·used·to·compile·a·diameter |
| 140 | <a·href="diameter_dict.html">dictionary·file</a>·into·Erlang·source.·The·resulting·source | 140 | <a·href="diameter_dict.html">dictionary·file</a>·into·Erlang·source.·The·resulting·source |
| Offset 199, 15 lines modified | Offset 199, 15 lines modified | ||
| 199 | ······<p·class="built-using"> | 199 | ······<p·class="built-using"> |
| 200 | ········Built·using | 200 | ········Built·using |
| 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 203 | ······</p> | 203 | ······</p> |
| 204 | <p>Copyright·©·1996-202 | 204 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 205 | ····</footer> | 205 | ····</footer> |
| 206 | ··</div> | 206 | ··</div> |
| 207 | </main> | 207 | </main> |
| 208 | </div> | 208 | </div> |
| 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 210 | ··<script> | 210 | ··<script> |
| 211 | ··let·initialized·=·false; | 211 | ··let·initialized·=·false; |
| Offset 1358, 15 lines modified | Offset 1358, 15 lines modified | ||
| 1358 | ······<p·class="built-using"> | 1358 | ······<p·class="built-using"> |
| 1359 | ········Built·using | 1359 | ········Built·using |
| 1360 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1360 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1361 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1361 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1362 | ······</p> | 1362 | ······</p> |
| 1363 | <p>Copyright·©·1996-202 | 1363 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1364 | ····</footer> | 1364 | ····</footer> |
| 1365 | ··</div> | 1365 | ··</div> |
| 1366 | </main> | 1366 | </main> |
| 1367 | </div> | 1367 | </div> |
| 1368 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1368 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1369 | ··<script> | 1369 | ··<script> |
| 1370 | ··let·initialized·=·false; | 1370 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-F78D76B7.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 139, 15 lines modified | Offset 139, 15 lines modified | ||
| 139 | ······<p·class="built-using"> | 139 | ······<p·class="built-using"> |
| 140 | ········Built·using | 140 | ········Built·using |
| 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 143 | ······</p> | 143 | ······</p> |
| 144 | <p>Copyright·©·1996-202 | 144 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 145 | ····</footer> | 145 | ····</footer> |
| 146 | ··</div> | 146 | ··</div> |
| 147 | </main> | 147 | </main> |
| 148 | </div> | 148 | </div> |
| 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 150 | ··<script> | 150 | ··<script> |
| 151 | ··let·initialized·=·false; | 151 | ··let·initialized·=·false; |
| Offset 258, 15 lines modified | Offset 258, 15 lines modified | ||
| 258 | ······<p·class="built-using"> | 258 | ······<p·class="built-using"> |
| 259 | ········Built·using | 259 | ········Built·using |
| 260 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 260 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 261 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 261 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 262 | ······</p> | 262 | ······</p> |
| 263 | <p>Copyright·©·1996-202 | 263 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 264 | ····</footer> | 264 | ····</footer> |
| 265 | ··</div> | 265 | ··</div> |
| 266 | </main> | 266 | </main> |
| 267 | </div> | 267 | </div> |
| 268 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 268 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 269 | ··<script> | 269 | ··<script> |
| 270 | ··let·initialized·=·false; | 270 | ··let·initialized·=·false; |
| Offset 833, 15 lines modified | Offset 833, 15 lines modified | ||
| 833 | ······<p·class="built-using"> | 833 | ······<p·class="built-using"> |
| 834 | ········Built·using | 834 | ········Built·using |
| 835 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 835 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 836 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 836 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 837 | ······</p> | 837 | ······</p> |
| 838 | <p>Copyright·©·1996-202 | 838 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 839 | ····</footer> | 839 | ····</footer> |
| 840 | ··</div> | 840 | ··</div> |
| 841 | </main> | 841 | </main> |
| 842 | </div> | 842 | </div> |
| 843 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 843 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 844 | ··<script> | 844 | ··<script> |
| 845 | ··let·initialized·=·false; | 845 | ··let·initialized·=·false; |
| Offset 232, 15 lines modified | Offset 232, 15 lines modified | ||
| 232 | ······<p·class="built-using"> | 232 | ······<p·class="built-using"> |
| 233 | ········Built·using | 233 | ········Built·using |
| 234 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 234 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 235 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 235 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 236 | ······</p> | 236 | ······</p> |
| 237 | <p>Copyright·©·1996-202 | 237 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 238 | ····</footer> | 238 | ····</footer> |
| 239 | ··</div> | 239 | ··</div> |
| 240 | </main> | 240 | </main> |
| 241 | </div> | 241 | </div> |
| 242 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 242 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 243 | ··<script> | 243 | ··<script> |
| 244 | ··let·initialized·=·false; | 244 | ··let·initialized·=·false; |
| Offset 1341, 15 lines modified | Offset 1341, 15 lines modified | ||
| 1341 | ······<p·class="built-using"> | 1341 | ······<p·class="built-using"> |
| 1342 | ········Built·using | 1342 | ········Built·using |
| 1343 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1343 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1344 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1344 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1345 | ······</p> | 1345 | ······</p> |
| 1346 | <p>Copyright·©·1996-202 | 1346 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1347 | ····</footer> | 1347 | ····</footer> |
| 1348 | ··</div> | 1348 | ··</div> |
| 1349 | </main> | 1349 | </main> |
| 1350 | </div> | 1350 | </div> |
| 1351 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1351 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1352 | ··<script> | 1352 | ··<script> |
| 1353 | ··let·initialized·=·false; | 1353 | ··let·initialized·=·false; |
| Offset 183, 15 lines modified | Offset 183, 15 lines modified | ||
| 183 | ······<p·class="built-using"> | 183 | ······<p·class="built-using"> |
| 184 | ········Built·using | 184 | ········Built·using |
| 185 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 185 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 186 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 186 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 187 | ······</p> | 187 | ······</p> |
| 188 | <p>Copyright·©·1996-202 | 188 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 189 | ····</footer> | 189 | ····</footer> |
| 190 | ··</div> | 190 | ··</div> |
| 191 | </main> | 191 | </main> |
| 192 | </div> | 192 | </div> |
| 193 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 193 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 194 | ··<script> | 194 | ··<script> |
| 195 | ··let·initialized·=·false; | 195 | ··let·initialized·=·false; |
| Offset 428, 15 lines modified | Offset 428, 15 lines modified | ||
| 428 | ······<p·class="built-using"> | 428 | ······<p·class="built-using"> |
| 429 | ········Built·using | 429 | ········Built·using |
| 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 432 | ······</p> | 432 | ······</p> |
| 433 | <p>Copyright·©·1996-202 | 433 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 434 | ····</footer> | 434 | ····</footer> |
| 435 | ··</div> | 435 | ··</div> |
| 436 | </main> | 436 | </main> |
| 437 | </div> | 437 | </div> |
| 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 439 | ··<script> | 439 | ··<script> |
| 440 | ··let·initialized·=·false; | 440 | ··let·initialized·=·false; |
| Offset 212, 15 lines modified | Offset 212, 15 lines modified | ||
| 212 | ······<p·class="built-using"> | 212 | ······<p·class="built-using"> |
| 213 | ········Built·using | 213 | ········Built·using |
| 214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 216 | ······</p> | 216 | ······</p> |
| 217 | <p>Copyright·©·1996-202 | 217 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 218 | ····</footer> | 218 | ····</footer> |
| 219 | ··</div> | 219 | ··</div> |
| 220 | </main> | 220 | </main> |
| 221 | </div> | 221 | </div> |
| 222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 223 | ··<script> | 223 | ··<script> |
| 224 | ··let·initialized·=·false; | 224 | ··let·initialized·=·false; |
| Offset 124, 16 lines modified | Offset 124, 16 lines modified | ||
| 124 | ····<span·translate="no">edoc_doclet_markdown</span>· | 124 | ····<span·translate="no">edoc_doclet_markdown</span>· |
| 125 | ····<small·class="app-vsn"·translate="no">(edoc·v1.3.2)</small> | 125 | ····<small·class="app-vsn"·translate="no">(edoc·v1.3.2)</small> |
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | ····<section·id="moduledoc"> | 127 | ····<section·id="moduledoc"> |
| 128 | <p>Doclet·converting·an·edoc·application·to·use·<a·href="https://www.erlang.org/eeps/eep-0059">EEP-59</a>·and·Markdown.</p><p>This·doclet·has·to·be·used·together·with·<a·href="edoc_layout_chunks.html"><code>edoc_layout_chunks</code></a>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">edoc</span><span·class="p">:</span><span·class="nf">application</span><span·class="p"·data-group-id="0342915564-1">(</span><span·class="ss">example</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0342915564-2">[</span><span·class="p"·data-group-id="0342915564-3">{</span><span·class="ss">preprocess</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="0342915564-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0342915564-4">{</span><span·class="ss">doclet</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">edoc_doclet_markdown</span><span·class="p"·data-group-id="0342915564-4">}</span><span·class="p">,</span><span·class="w"> | ||
| 129 | 128 | <p>Doclet·converting·an·edoc·application·to·use·<a·href="https://www.erlang.org/eeps/eep-0059">EEP-59</a>·and·Markdown.</p><p>This·doclet·has·to·be·used·together·with·<a·href="edoc_layout_chunks.html"><code>edoc_layout_chunks</code></a>.</p><p>Example:</p>[·...·truncated·by·diffoscope;·len:·951,·SHA:·6f139d8d3a2e7d2190cc8b20d666a50b55f888e8434c64e5dcd103745a04ca18·...·]> | |
| 129 | ·······</span><span·class="p"·data-group-id="3337701837-5">{</span><span·class="ss">layout</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">edoc_layout_chunks</span><span·class="p"·data-group-id="3337701837-5">}</span><span·class="p"·data-group-id="3337701837-2">]</span><span·class="p"·data-group-id="3337701837-1">)</span><span·class="p">.</span></code></pre><p>It·will·convert·the·overview·to·Markdown·and·any·module·documentation·to·use·<code>-doc</code>·attributes·and·Markdown.·Any·XHTML·tags·in·the·edoc·documentation·that·are·not·part·of·the·tags·supported·by·<a·href="doc_storage.html#erlang-documentation-format">Erlang·Documentation·Format</a>·will·be·added·as·HTML·tags·in·the·Markdown.</p><p>It·does·not·delete·the·old·edoc·documentation.</p><p><em>See·also:·</em><a·href="edoc_layout_chunks.html">edoc_layout_chunks</a>.</p> | ||
| 130 | ····</section> | 130 | ····</section> |
| 131 | </div> | 131 | </div> |
| 132 | ··<section·id="summary"·class="details-list"> | 132 | ··<section·id="summary"·class="details-list"> |
| 133 | ····<h1·class="section-heading"> | 133 | ····<h1·class="section-heading"> |
| 134 | ······<a·class="hover-link"·href="#summary"> | 134 | ······<a·class="hover-link"·href="#summary"> |
| Offset 213, 15 lines modified | Offset 213, 15 lines modified | ||
| 213 | ······<p·class="built-using"> | 213 | ······<p·class="built-using"> |
| 214 | ········Built·using | 214 | ········Built·using |
| 215 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 215 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 216 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 216 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 217 | ······</p> | 217 | ······</p> |
| 218 | <p>Copyright·©·1996-202 | 218 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 219 | ····</footer> | 219 | ····</footer> |
| 220 | ··</div> | 220 | ··</div> |
| 221 | </main> | 221 | </main> |
| 222 | </div> | 222 | </div> |
| 223 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 223 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 224 | ··<script> | 224 | ··<script> |
| 225 | ··let·initialized·=·false; | 225 | ··let·initialized·=·false; |
| Offset 627, 15 lines modified | Offset 627, 15 lines modified | ||
| 627 | ······<p·class="built-using"> | 627 | ······<p·class="built-using"> |
| 628 | ········Built·using | 628 | ········Built·using |
| 629 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 629 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 630 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 630 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 631 | ······</p> | 631 | ······</p> |
| 632 | <p>Copyright·©·1996-202 | 632 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 633 | ····</footer> | 633 | ····</footer> |
| 634 | ··</div> | 634 | ··</div> |
| 635 | </main> | 635 | </main> |
| 636 | </div> | 636 | </div> |
| 637 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 637 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 638 | ··<script> | 638 | ··<script> |
| 639 | ··let·initialized·=·false; | 639 | ··let·initialized·=·false; |
| Offset 213, 15 lines modified | Offset 213, 15 lines modified | ||
| 213 | ······<p·class="built-using"> | 213 | ······<p·class="built-using"> |
| 214 | ········Built·using | 214 | ········Built·using |
| 215 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 215 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 216 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 216 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 217 | ······</p> | 217 | ······</p> |
| 218 | <p>Copyright·©·1996-202 | 218 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 219 | ····</footer> | 219 | ····</footer> |
| 220 | ··</div> | 220 | ··</div> |
| 221 | </main> | 221 | </main> |
| 222 | </div> | 222 | </div> |
| 223 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 223 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 224 | ··<script> | 224 | ··<script> |
| 225 | ··let·initialized·=·false; | 225 | ··let·initialized·=·false; |
| Offset 391, 15 lines modified | Offset 391, 15 lines modified | ||
| 391 | ······<p·class="built-using"> | 391 | ······<p·class="built-using"> |
| 392 | ········Built·using | 392 | ········Built·using |
| 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 395 | ······</p> | 395 | ······</p> |
| 396 | <p>Copyright·©·1996-202 | 396 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 397 | ····</footer> | 397 | ····</footer> |
| 398 | ··</div> | 398 | ··</div> |
| 399 | </main> | 399 | </main> |
| 400 | </div> | 400 | </div> |
| 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 402 | ··<script> | 402 | ··<script> |
| 403 | ··let·initialized·=·false; | 403 | ··let·initialized·=·false; |
| Offset 716, 15 lines modified | Offset 716, 15 lines modified | ||
| 716 | ······<p·class="built-using"> | 716 | ······<p·class="built-using"> |
| 717 | ········Built·using | 717 | ········Built·using |
| 718 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 718 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 719 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 719 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 720 | ······</p> | 720 | ······</p> |
| 721 | <p>Copyright·©·1996-202 | 721 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 722 | ····</footer> | 722 | ····</footer> |
| 723 | ··</div> | 723 | ··</div> |
| 724 | </main> | 724 | </main> |
| 725 | </div> | 725 | </div> |
| 726 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 726 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 727 | ··<script> | 727 | ··<script> |
| 728 | ··let·initialized·=·false; | 728 | ··let·initialized·=·false; |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 346, 15 lines modified | Offset 346, 15 lines modified | ||
| 346 | ······<p·class="built-using"> | 346 | ······<p·class="built-using"> |
| 347 | ········Built·using | 347 | ········Built·using |
| 348 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 348 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 349 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 349 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 350 | ······</p> | 350 | ······</p> |
| 351 | <p>Copyright·©·1996-202 | 351 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 352 | ····</footer> | 352 | ····</footer> |
| 353 | ··</div> | 353 | ··</div> |
| 354 | </main> | 354 | </main> |
| 355 | </div> | 355 | </div> |
| 356 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 356 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 357 | ··<script> | 357 | ··<script> |
| 358 | ··let·initialized·=·false; | 358 | ··let·initialized·=·false; |
| Offset 852, 15 lines modified | Offset 852, 15 lines modified | ||
| 852 | ······<p·class="built-using"> | 852 | ······<p·class="built-using"> |
| 853 | ········Built·using | 853 | ········Built·using |
| 854 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 854 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 855 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 855 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 856 | ······</p> | 856 | ······</p> |
| 857 | <p>Copyright·©·1996-202 | 857 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 858 | ····</footer> | 858 | ····</footer> |
| 859 | ··</div> | 859 | ··</div> |
| 860 | </main> | 860 | </main> |
| 861 | </div> | 861 | </div> |
| 862 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 862 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 863 | ··<script> | 863 | ··<script> |
| 864 | ··let·initialized·=·false; | 864 | ··let·initialized·=·false; |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | ······<p·class="built-using"> | 137 | ······<p·class="built-using"> |
| 138 | ········Built·using | 138 | ········Built·using |
| 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 141 | ······</p> | 141 | ······</p> |
| 142 | <p>Copyright·©·1996-202 | 142 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 143 | ····</footer> | 143 | ····</footer> |
| 144 | ··</div> | 144 | ··</div> |
| 145 | </main> | 145 | </main> |
| 146 | </div> | 146 | </div> |
| 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 148 | ··<script> | 148 | ··<script> |
| 149 | ··let·initialized·=·false; | 149 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 951, 21 lines modified | Offset 951, 21 lines modified | ||
| 951 | ·················Dn·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 951 | ·················Dn·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 952 | ·················Attributes·::·[<a·href="#t:attribute/0">attribute</a>()], | 952 | ·················Attributes·::·[<a·href="#t:attribute/0">attribute</a>()], |
| 953 | ·················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, | 953 | ·················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, |
| 954 | ·················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 954 | ·················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 955 | ······</div> | 955 | ······</div> |
| 956 | <p>Add·an·entry.·The·entry·must·not·exist.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nf">add</span><span·class="p"·data-group-id="5 | 956 | <p>Add·an·entry.·The·entry·must·not·exist.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nf">add</span><span·class="p"·data-group-id="9531791177-1">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w"> |
| 957 | ······</span><span·class="s">"cn=Bill·Valentine,·ou=people,·o=Example·Org,·dc=example,·dc=com"</span><span·class="p">,</span><span·class="w"> | 957 | ······</span><span·class="s">"cn=Bill·Valentine,·ou=people,·o=Example·Org,·dc=example,·dc=com"</span><span·class="p">,</span><span·class="w"> |
| 958 | ·······</span><span·class="p"·data-group-id="5 | 958 | ·······</span><span·class="p"·data-group-id="9531791177-2">[</span><span·class="p"·data-group-id="9531791177-3">{</span><span·class="s">"objectclass"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9531791177-4">[</span><span·class="s">"person"[·...·truncated·by·diffoscope;·len:·101,·SHA:·56a02c385d8ff4ad5c6c63d42e902067a8f4208a1e4bc84ac238ee5dd640b752·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 959 | ········</span><span·class="p"·data-group-id="5 | 959 | ········</span><span·class="p"·data-group-id="9531791177-5">{</span><span·class="s">"cn"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9531791177-6">[</span><span·class="s">"Bill·Valentine"</span><span·class="p"·data-group-id="9531791177-6">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·fc0fd2e6e84de83fa64f613e92e341bf4bc248172da92c1e829bf4d9d9980cea·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 960 | ········</span><span·class="p"·data-group-id="5 | 960 | ········</span><span·class="p"·data-group-id="9531791177-7">{</span><span·class="s">"sn"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9531791177-8">[</span><span·class="s">"Valentine"</span><span·class="p"·data-group-id="9531791177-8">]</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·802f2763700290a268a68c0825f5c4d9b443b5f6a0e4f472d9ea77d2369fd2a1·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 961 | ········</span><span·class="p"·data-group-id="5 | 961 | ········</span><span·class="p"·data-group-id="9531791177-9">{</span><span·class="s">"telephoneNumber"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9531791177-10">[</span><span·class="s">"545·555·00"</span><span·class="p"·data-group-id="953179[·...·truncated·by·diffoscope;·len:·111,·SHA:·8bf7d5f54590f4ab5c8fe5cc21f4d520c9d0e59a38c8b790f0636cad81f5e569·...·]-2">]</span><span·class="w"> |
| 962 | ·····</span><span·class="p"·data-group-id="5 | 962 | ·····</span><span·class="p"·data-group-id="9531791177-1">)</span></code></pre> |
| 963 | ··</section> | 963 | ··</section> |
| 964 | </section> | 964 | </section> |
| 965 | <section·class="detail"·id="and/1"> | 965 | <section·class="detail"·id="and/1"> |
| 966 | ··<div·class="detail-header"> | 966 | ··<div·class="detail-header"> |
| 967 | ····<a·href="#and/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 967 | ····<a·href="#and/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 968 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 968 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1249, 15 lines modified | Offset 1249, 15 lines modified | ||
| 1249 | ·····························OptionalAttrs·:: | 1249 | ·····························OptionalAttrs·:: |
| 1250 | ·································[{matchingRule,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}·| | 1250 | ·································[{matchingRule,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}·| |
| 1251 | ··································{type,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}·| | 1251 | ··································{type,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()}·| |
| 1252 | ··································{dnAttributes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}].</pre> | 1252 | ··································{dnAttributes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}].</pre> |
| 1253 | ······</div> | 1253 | ······</div> |
| 1254 | <p>Creates·an·extensible·match·filter.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">extensibleMatch</span><span·class="p"·data-group-id=" | 1254 | <p>Creates·an·extensible·match·filter.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">extensibleMatch</span><span·class="p"·data-group-id="4860361474-1">(</span><span·class="s">"Bar"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4860361474-2">[</span><span·class="p"·data-group-id="4860361474-3">{</span><span·class="ss">type</span><span·class="p[·...·truncated·by·diffoscope;·len:·457,·SHA:·a538448dfcc9187569f7501ab45c7faec79ebe2c569f3db1281c4d66c9c6edad·...·]-1">)</span><span·class="p">)</span></code></pre><p>creates·a·filter·which·performs·a·<code·class="inline">caseExactMatch</code>·on·the·attribute·<code·class="inline">sn</code>·and |
| 1255 | matches·with·the·value·<code·class="inline">"Bar"</code>.·The·default·value·of·<code·class="inline">dnAttributes</code>·is·<code·class="inline">false</code>.</p> | 1255 | matches·with·the·value·<code·class="inline">"Bar"</code>.·The·default·value·of·<code·class="inline">dnAttributes</code>·is·<code·class="inline">false</code>.</p> |
| 1256 | ··</section> | 1256 | ··</section> |
| 1257 | </section> | 1257 | </section> |
| 1258 | <section·class="detail"·id="greaterOrEqual/2"> | 1258 | <section·class="detail"·id="greaterOrEqual/2"> |
| 1259 | ··<div·class="detail-header"> | 1259 | ··<div·class="detail-header"> |
| 1260 | ····<a·href="#greaterOrEqual/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1260 | ····<a·href="#greaterOrEqual/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1453, 17 lines modified | Offset 1453, 17 lines modified | ||
| 1453 | ····················Dn·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 1453 | ····················Dn·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 1454 | ····················ModifyOps·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()], | 1454 | ····················ModifyOps·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()], |
| 1455 | ····················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, | 1455 | ····················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, |
| 1456 | ····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1456 | ····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1457 | ······</div> | 1457 | ······</div> |
| 1458 | <p>Modify·an·entry.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nf">modify</span><span·class="p"·data-group-id=" | 1458 | <p>Modify·an·entry.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nf">modify</span><span·class="p"·data-group-id="8437318462-1">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"cn=Bill·Valentine,·ou=people,·o=Example·Org,·dc=example,·dc=com"</span><span·class="p">,</span><span·class="w"> |
| 1459 | ·········</span><span·class="p"·data-group-id="1203335656-2">[</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">mod_replace</span><span·class="p"·data-group-id="1203335656-3">(</span><span·class="s">"telephoneNumber"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1203335656-4">[</span><span·class="s">"555·555·00"</span><span·class="p"·data-group-id="1203335656-4">]</span><span·class="p"·data-group-id="1203335656-3">)</span><span·class="p">,</span><span·class="w"> | ||
| 1460 | 1459 | ·········</span><span·class="p"·data-group-id="8437318462-2">[</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">mod_replace</span><span·class="p"·data-group-id="8437318462-3">(</span><span·class="s">"telephoneNumber"</s[·...·truncated·by·diffoscope;·len:·295,·SHA:·f71095208de394e45000ce289fe6d018909a00a34c8034ac2b714181bc977c70·...·]> | |
| 1460 | » ··</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">mod_add</span><span·class="p"·data-group-id="8437318462-5">(</span><span·class="s">"description"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8437318462-6">[</span><span·class="s">"LDAP·Hacker"</span><span·class="p"·data-group-id="8437318462-6">]</span><span·class="p"·data-group-id="8437318462-5">)</span><span·class="w">·</span><span·class="p"·data-group-id="8437318462-2">]</span><span·class="p"·data-group-id="8437318462-1">)</span></code></pre> | ||
| 1461 | ··</section> | 1461 | ··</section> |
| 1462 | </section> | 1462 | </section> |
| 1463 | <section·class="detail"·id="modify_dn/5"> | 1463 | <section·class="detail"·id="modify_dn/5"> |
| 1464 | ··<div·class="detail-header"> | 1464 | ··<div·class="detail-header"> |
| 1465 | ····<a·href="#modify_dn/5"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1465 | ····<a·href="#modify_dn/5"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1466 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1466 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1757, 16 lines modified | Offset 1757, 16 lines modified | ||
| 1757 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·paged_result_control(PageSize)·->·{control,·ControlOID,·true,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()} | 1757 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·paged_result_control(PageSize)·->·{control,·ControlOID,·true,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()} |
| 1758 | ······························when·PageSize·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·ControlOID·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> | 1758 | ······························when·PageSize·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·ControlOID·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> |
| 1759 | ······</div> | 1759 | ······</div> |
| 1760 | <p>Paged·results·is·an·extension·to·the·LDAP·protocol·specified·by·RFC2696</p><p>This·function·creates·a·control·with·the·specified·page·size·for·use·in | 1760 | <p>Paged·results·is·an·extension·to·the·LDAP·protocol·specified·by·RFC2696</p><p>This·function·creates·a·control·with·the·specified·page·size·for·use·in |
| 1761 | <code·class="inline">search/3</code>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Control</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id=" | 1761 | <code·class="inline">search/3</code>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Control</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id="4501403366-1">(</span><span·class="mi">50</span><span·class="p"·data-group-id="4501403366-1">)</span><span·class="p">,</span><span·class="w"> |
| 1762 | </span><span·class="p"·data-group-id=" | 1762 | </span><span·class="p"·data-group-id="4501403366-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SearchResults</span><span·class="p"·data-group-id="4501403366-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·726,·SHA:·fad3fceff474c72c3e834a8b2d6b12343f196a5ce2a8aa93b1793ac5ed3099a5·...·]6-3">)</span><span·class="p">,</span></code></pre> |
| 1763 | ··</section> | 1763 | ··</section> |
| 1764 | </section> | 1764 | </section> |
| 1765 | <section·class="detail"·id="paged_result_control/2"> | 1765 | <section·class="detail"·id="paged_result_control/2"> |
| 1766 | ··<div·class="detail-header"> | 1766 | ··<div·class="detail-header"> |
| 1767 | ····<a·href="#paged_result_control/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1767 | ····<a·href="#paged_result_control/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1768 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1768 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1789, 20 lines modified | Offset 1789, 20 lines modified | ||
| 1789 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·paged_result_control(PageSize,·Cookie)·->·{control,·ControlOID,·true,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()} | 1789 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·paged_result_control(PageSize,·Cookie)·->·{control,·ControlOID,·true,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()} |
| 1790 | ······························when·PageSize·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·Cookie·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(),·ControlOID·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> | 1790 | ······························when·PageSize·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·Cookie·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(),·ControlOID·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> |
| 1791 | ······</div> | 1791 | ······</div> |
| 1792 | <p>Paged·results·is·an·extension·to·the·LDAP·protocol·specified·by·RFC2696</p><p>This·function·creates·a·control·with·the·specified·page·size·and·cookie·for·use | 1792 | <p>Paged·results·is·an·extension·to·the·LDAP·protocol·specified·by·RFC2696</p><p>This·function·creates·a·control·with·the·specified·page·size·and·cookie·for·use |
| 1793 | in·<code·class="inline">search/3</code>·to·retrieve·the·next·results·page.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">PageSize</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">50</span><span·class="p">,</span><span·class="w"> | 1793 | in·<code·class="inline">search/3</code>·to·retrieve·the·next·results·page.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">PageSize</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">50</span><span·class="p">,</span><span·class="w"> |
| 1794 | </span><span·class="n">Control1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id=" | 1794 | </span><span·class="n">Control1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id="3455525479-1">(</span><span·class="n">PageSize</span><span·class="p"·data-group-id="3455525479-1">)</span><span·class="p">,</span><span·class="w"> |
| 1795 | </span><span·class="p"·data-group-id=" | 1795 | </span><span·class="p"·data-group-id="3455525479-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SearchResults1</span><span·class="p"·data-group-id="3455525479-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·729,·SHA:·ac869563d848c96d86fcbae19fa0ff0d77803ec37dd526a0f2b55d81faba23fd·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 1796 | </span><span·class="c1">%%·retrieve·the·returned·cookie·from·the·search·results</span><span·class="w"> | 1796 | </span><span·class="c1">%%·retrieve·the·returned·cookie·from·the·search·results</span><span·class="w"> |
| 1797 | </span><span·class="p"·data-group-id=" | 1797 | </span><span·class="p"·data-group-id="3455525479-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cookie1</span><span·class="p"·data-group-id="3455525479-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·222,·SHA:·c03fa5e877eb3678aca142a2f51f351e1b8a45821358c53eac61a41790e14d97·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 1798 | </span><span·class="n">Control2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id=" | 1798 | </span><span·class="n">Control2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">paged_result_control</span><span·class="p"·data-group-id="3455525479-9">(</span><span·class="n">PageSize</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cookie1</span><span·class="p"·data-group-id="3455525479-9">)</span><span·class="p">,</span><span·class="w"> |
| 1799 | </span><span·class="p"·data-group-id=" | 1799 | </span><span·class="p"·data-group-id="3455525479-10">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SearchResults2</span><span·class="p"·data-group-id="3455525479-10">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·790,·SHA:·b199bcbd1563e90dd2e0671ec6588f99c9ca5b7b0c6ab910b468d0c6d437a71d·...·]-11">)</span><span·class="p">,</span><span·class="w"> |
| 1800 | </span><span·class="c1">%%·etc</span></code></pre> | 1800 | </span><span·class="c1">%%·etc</span></code></pre> |
| 1801 | ··</section> | 1801 | ··</section> |
| 1802 | </section> | 1802 | </section> |
| 1803 | <section·class="detail"·id="paged_result_cookie/1"> | 1803 | <section·class="detail"·id="paged_result_cookie/1"> |
| 1804 | ··<div·class="detail-header"> | 1804 | ··<div·class="detail-header"> |
| 1805 | ····<a·href="#paged_result_cookie/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1805 | ····<a·href="#paged_result_cookie/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1908, 16 lines modified | Offset 1908, 16 lines modified | ||
| 1908 | ····················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, | 1908 | ····················Refs·::·{referral,·<a·href="#t:referrals/0">referrals</a>()}, |
| 1909 | ····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1909 | ····················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1910 | ······</div> | 1910 | ······</div> |
| 1911 | <p>Search·the·directory·with·the·supplied·the·SearchOptions.</p><p>The·base·and·filter | 1911 | <p>Search·the·directory·with·the·supplied·the·SearchOptions.</p><p>The·base·and·filter |
| 1912 | options·must·be·supplied.·Default·values:·scope·is·<a·href="#wholeSubtree/0"><code·class="inline">wholeSubtree/0</code></a>,·deref·is | 1912 | options·must·be·supplied.·Default·values:·scope·is·<a·href="#wholeSubtree/0"><code·class="inline">wholeSubtree/0</code></a>,·deref·is |
| 1913 | <a·href="#derefAlways/0"><code·class="inline">derefAlways/0</code></a>,·types_only·is·<code·class="inline">false</code>·and·timeout·is·<code·class="inline">0</code>·(meaning·infinity).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">substrings</span><span·class="p"·data-group-id=" | 1913 | <a·href="#derefAlways/0"><code·class="inline">derefAlways/0</code></a>,·types_only·is·<code·class="inline">false</code>·and·timeout·is·<code·class="inline">0</code>·(meaning·infinity).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">eldap</span><span·class="p">:</span><span·class="nf">substrings</span><span·class="p"·data-group-id="4240249811-1">(</span><span·class="s">"cn"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4240249811-2">[</span><span·class="p"·data-group-id="4240249811-3">{</span><span·class="ss">any</span><span·class="p">[·...·truncated·by·diffoscope;·len:·191,·SHA:·35c55eea80d1278945ef16c7dc9fe2b35a4ae2228ab2b40510be8ea9381e1255·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 1914 | ··</span><span·class="nf">search</span><span·class="p"·data-group-id=" | 1914 | ··</span><span·class="nf">search</span><span·class="p"·data-group-id="4240249811-4">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4240249811-5">[</span><span·class="p"·data-group-id="4240249811-6">{</span><span·class="ss">base</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·865,·SHA:·df2492eaeb8a2916874295bd60c735a1de406fa5f0d2e0fab22c804063e65b82·...·]-4">)</span><span·class="p">,</span></code></pre><p>The·<code·class="inline">timeout</code>·option·in·the·<code·class="inline">SearchOptions</code>·is·for·the·ldap·server,·while·the |
| 1915 | timeout·in·<a·href="#open/2">eldap:open/2</a>·is·used·for·each·individual·request·in·the | 1915 | timeout·in·<a·href="#open/2">eldap:open/2</a>·is·used·for·each·individual·request·in·the |
| 1916 | search·operation.</p> | 1916 | search·operation.</p> |
| 1917 | ··</section> | 1917 | ··</section> |
| 1918 | </section> | 1918 | </section> |
| 1919 | <section·class="detail"·id="simple_bind/3"> | 1919 | <section·class="detail"·id="simple_bind/3"> |
| 1920 | ··<div·class="detail-header"> | 1920 | ··<div·class="detail-header"> |
| Offset 2137, 15 lines modified | Offset 2137, 15 lines modified | ||
| 2137 | ······<p·class="built-using"> | 2137 | ······<p·class="built-using"> |
| 2138 | ········Built·using | 2138 | ········Built·using |
| 2139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2141 | ······</p> | 2141 | ······</p> |
| 2142 | <p>Copyright·©·1996-202 | 2142 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2143 | ····</footer> | 2143 | ····</footer> |
| 2144 | ··</div> | 2144 | ··</div> |
| 2145 | </main> | 2145 | </main> |
| 2146 | </div> | 2146 | </div> |
| 2147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2148 | ··<script> | 2148 | ··<script> |
| 2149 | ··let·initialized·=·false; | 2149 | ··let·initialized·=·false; |
| Max diff block lines reached; -1/30665 bytes (-0.00%) of diff not shown. | |||
| Offset 523, 15 lines modified | Offset 523, 15 lines modified | ||
| 523 | ······<p·class="built-using"> | 523 | ······<p·class="built-using"> |
| 524 | ········Built·using | 524 | ········Built·using |
| 525 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 525 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 526 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 526 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 527 | ······</p> | 527 | ······</p> |
| 528 | <p>Copyright·©·1996-202 | 528 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 529 | ····</footer> | 529 | ····</footer> |
| 530 | ··</div> | 530 | ··</div> |
| 531 | </main> | 531 | </main> |
| 532 | </div> | 532 | </div> |
| 533 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 533 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 534 | ··<script> | 534 | ··<script> |
| 535 | ··let·initialized·=·false; | 535 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 131, 15 lines modified | Offset 131, 15 lines modified | ||
| 131 | ······<p·class="built-using"> | 131 | ······<p·class="built-using"> |
| 132 | ········Built·using | 132 | ········Built·using |
| 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 135 | ······</p> | 135 | ······</p> |
| 136 | <p>Copyright·©·1996-202 | 136 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 137 | ····</footer> | 137 | ····</footer> |
| 138 | ··</div> | 138 | ··</div> |
| 139 | </main> | 139 | </main> |
| 140 | </div> | 140 | </div> |
| 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 142 | ··<script> | 142 | ··<script> |
| 143 | ··let·initialized·=·false; | 143 | ··let·initialized·=·false; |
| Offset 1023, 15 lines modified | Offset 1023, 15 lines modified | ||
| 1023 | ······<p·class="built-using"> | 1023 | ······<p·class="built-using"> |
| 1024 | ········Built·using | 1024 | ········Built·using |
| 1025 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1025 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1026 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1026 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1027 | ······</p> | 1027 | ······</p> |
| 1028 | <p>Copyright·©·1996-202 | 1028 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1029 | ····</footer> | 1029 | ····</footer> |
| 1030 | ··</div> | 1030 | ··</div> |
| 1031 | </main> | 1031 | </main> |
| 1032 | </div> | 1032 | </div> |
| 1033 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1033 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1034 | ··<script> | 1034 | ··<script> |
| 1035 | ··let·initialized·=·false; | 1035 | ··let·initialized·=·false; |
| Offset 871, 15 lines modified | Offset 871, 15 lines modified | ||
| 871 | ······<p·class="built-using"> | 871 | ······<p·class="built-using"> |
| 872 | ········Built·using | 872 | ········Built·using |
| 873 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 873 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 874 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 874 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 875 | ······</p> | 875 | ······</p> |
| 876 | <p>Copyright·©·1996-202 | 876 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 877 | ····</footer> | 877 | ····</footer> |
| 878 | ··</div> | 878 | ··</div> |
| 879 | </main> | 879 | </main> |
| 880 | </div> | 880 | </div> |
| 881 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 881 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 882 | ··<script> | 882 | ··<script> |
| 883 | ··let·initialized·=·false; | 883 | ··let·initialized·=·false; |
| Offset 200, 15 lines modified | Offset 200, 15 lines modified | ||
| 200 | ······<p·class="built-using"> | 200 | ······<p·class="built-using"> |
| 201 | ········Built·using | 201 | ········Built·using |
| 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 202 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 203 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 204 | ······</p> | 204 | ······</p> |
| 205 | <p>Copyright·©·1996-202 | 205 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 206 | ····</footer> | 206 | ····</footer> |
| 207 | ··</div> | 207 | ··</div> |
| 208 | </main> | 208 | </main> |
| 209 | </div> | 209 | </div> |
| 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 210 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 211 | ··<script> | 211 | ··<script> |
| 212 | ··let·initialized·=·false; | 212 | ··let·initialized·=·false; |
| Offset 425, 15 lines modified | Offset 425, 15 lines modified | ||
| 425 | ······<p·class="built-using"> | 425 | ······<p·class="built-using"> |
| 426 | ········Built·using | 426 | ········Built·using |
| 427 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 427 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 428 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 428 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 429 | ······</p> | 429 | ······</p> |
| 430 | <p>Copyright·©·1996-202 | 430 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 431 | ····</footer> | 431 | ····</footer> |
| 432 | ··</div> | 432 | ··</div> |
| 433 | </main> | 433 | </main> |
| 434 | </div> | 434 | </div> |
| 435 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 435 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 436 | ··<script> | 436 | ··<script> |
| 437 | ··let·initialized·=·false; | 437 | ··let·initialized·=·false; |
| Offset 247, 16 lines modified | Offset 247, 16 lines modified | ||
| 247 | ·{<madonna@chivas.du.etx.ericsson.se,17,0>, | 247 | ·{<madonna@chivas.du.etx.ericsson.se,17,0>, |
| 248 | ··················{registered_name,code_server}}, | 248 | ··················{registered_name,code_server}}, |
| 249 | ·{<madonna@chivas.du.etx.ericsson.se,20,0>, | 249 | ·{<madonna@chivas.du.etx.ericsson.se,20,0>, |
| 250 | ··················{registered_name,user}}, | 250 | ··················{registered_name,user}}, |
| 251 | ·{<madonna@chivas.du.etx.ericsson.se,38,0>, | 251 | ·{<madonna@chivas.du.etx.ericsson.se,38,0>, |
| 252 | ··················[]}]</code></pre><p>To·forward·standard·output·without·printing·the·result·term·(<em>again,·the·input | 252 | ··················[]}]</code></pre><p>To·forward·standard·output·without·printing·the·result·term·(<em>again,·the·input |
| 253 | ends·with·EOF·(Control-D)</em>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">erl_call</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">s</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">e</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">sname</span><span·class="w">·</span><span·class="ss">madonna</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">fetch_stdout</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">no_result_term</span><span·class="w"> | 253 | ends·with·EOF·(Control-D)</em>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">erl_call</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">s</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">e</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">sname</span><span·class="w">·</span><span·class="ss">madonna</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">fetch_stdout</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">no_result_term</span><span·class="w"> |
| 254 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 254 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6223949697-1">(</span><span·class="s">"Number·of·schedulers:·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6223949697-2">[</span><[·...·truncated·by·diffoscope;·len:·322,·SHA:·ee633a1385379efe29d19a5050918d7c922f08034974ab779f5abffe73265199·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 255 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 255 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="6223949697-4">(</span><span·class="s">"Number·of·logical·cores:·</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6223949697-5">[</spa[·...·truncated·by·diffoscope;·len:·343,·SHA:·25dddbdcf6184a21de4541431abf8c60df3430e2277366f3f91ffda7ad401e35·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 256 | </span><span·class="err">^</span><span·class="n">D</span><span·class="w"> | 256 | </span><span·class="err">^</span><span·class="n">D</span><span·class="w"> |
| 257 | </span><span·class="n">Number</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="nc">schedulers</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">8</span><span·class="w"> | 257 | </span><span·class="n">Number</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="nc">schedulers</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">8</span><span·class="w"> |
| 258 | </span><span·class="n">Number</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">logical</span><span·class="w">·</span><span·class="nc">cores</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">8</span></code></pre> | 258 | </span><span·class="n">Number</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">logical</span><span·class="w">·</span><span·class="nc">cores</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">8</span></code></pre> |
| 259 | </div> | 259 | </div> |
| 260 | <div·class="bottom-actions"·id="bottom-actions"> | 260 | <div·class="bottom-actions"·id="bottom-actions"> |
| 261 | ··<div·class="bottom-actions-item"> | 261 | ··<div·class="bottom-actions-item"> |
| Offset 302, 15 lines modified | Offset 302, 15 lines modified | ||
| 302 | ······<p·class="built-using"> | 302 | ······<p·class="built-using"> |
| 303 | ········Built·using | 303 | ········Built·using |
| 304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 306 | ······</p> | 306 | ······</p> |
| 307 | <p>Copyright·©·1996-202 | 307 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 308 | ····</footer> | 308 | ····</footer> |
| 309 | ··</div> | 309 | ··</div> |
| 310 | </main> | 310 | </main> |
| 311 | </div> | 311 | </div> |
| 312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 313 | ··<script> | 313 | ··<script> |
| 314 | ··let·initialized·=·false; | 314 | ··let·initialized·=·false; |
| Offset 1803, 15 lines modified | Offset 1803, 15 lines modified | ||
| 1803 | ······<p·class="built-using"> | 1803 | ······<p·class="built-using"> |
| 1804 | ········Built·using | 1804 | ········Built·using |
| 1805 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1805 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1806 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1806 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1807 | ······</p> | 1807 | ······</p> |
| 1808 | <p>Copyright·©·1996-202 | 1808 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1809 | ····</footer> | 1809 | ····</footer> |
| 1810 | ··</div> | 1810 | ··</div> |
| 1811 | </main> | 1811 | </main> |
| 1812 | </div> | 1812 | </div> |
| 1813 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1813 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1814 | ··<script> | 1814 | ··<script> |
| 1815 | ··let·initialized·=·false; | 1815 | ··let·initialized·=·false; |
| Offset 131, 15 lines modified | Offset 131, 15 lines modified | ||
| 131 | ······<p·class="built-using"> | 131 | ······<p·class="built-using"> |
| 132 | ········Built·using | 132 | ········Built·using |
| 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 133 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 134 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 135 | ······</p> | 135 | ······</p> |
| 136 | <p>Copyright·©·1996-202 | 136 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 137 | ····</footer> | 137 | ····</footer> |
| 138 | ··</div> | 138 | ··</div> |
| 139 | </main> | 139 | </main> |
| 140 | </div> | 140 | </div> |
| 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 141 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 142 | ··<script> | 142 | ··<script> |
| 143 | ··let·initialized·=·false; | 143 | ··let·initialized·=·false; |
| Offset 26, 15 lines modified | Offset 26, 15 lines modified | ||
| 26 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 26 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 27 | dist/lato-latin-400-normal-W7754I4D.woff2 | 27 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 28 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 28 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 29 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 29 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 30 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 30 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 31 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 31 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 32 | dist/remixicon-NKANDIL5.woff2 | 32 | dist/remixicon-NKANDIL5.woff2 |
| 33 | dist/search_data- | 33 | dist/search_data-C01CA0BB.js |
| 34 | dist/sidebar_items-639C3385.js | 34 | dist/sidebar_items-639C3385.js |
| 35 | et.html | 35 | et.html |
| 36 | et_collector.html | 36 | et_collector.html |
| 37 | et_desc.html | 37 | et_desc.html |
| 38 | et_examples.html | 38 | et_examples.html |
| 39 | et_intro.html | 39 | et_intro.html |
| 40 | et_selector.html | 40 | et_selector.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 208, 15 lines modified | Offset 208, 15 lines modified | ||
| 208 | ······<p·class="built-using"> | 208 | ······<p·class="built-using"> |
| 209 | ········Built·using | 209 | ········Built·using |
| 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 212 | ······</p> | 212 | ······</p> |
| 213 | <p>Copyright·©·1996-202 | 213 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 214 | ····</footer> | 214 | ····</footer> |
| 215 | ··</div> | 215 | ··</div> |
| 216 | </main> | 216 | </main> |
| 217 | </div> | 217 | </div> |
| 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 219 | ··<script> | 219 | ··<script> |
| 220 | ··let·initialized·=·false; | 220 | ··let·initialized·=·false; |
| Offset 536, 15 lines modified | Offset 536, 15 lines modified | ||
| 536 | ······<p·class="built-using"> | 536 | ······<p·class="built-using"> |
| 537 | ········Built·using | 537 | ········Built·using |
| 538 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 538 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 539 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 539 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 540 | ······</p> | 540 | ······</p> |
| 541 | <p>Copyright·©·1996-202 | 541 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 542 | ····</footer> | 542 | ····</footer> |
| 543 | ··</div> | 543 | ··</div> |
| 544 | </main> | 544 | </main> |
| 545 | </div> | 545 | </div> |
| 546 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 546 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 547 | ··<script> | 547 | ··<script> |
| 548 | ··let·initialized·=·false; | 548 | ··let·initialized·=·false; |
| Offset 1473, 15 lines modified | Offset 1473, 15 lines modified | ||
| 1473 | ······<p·class="built-using"> | 1473 | ······<p·class="built-using"> |
| 1474 | ········Built·using | 1474 | ········Built·using |
| 1475 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1475 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1476 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1476 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1477 | ······</p> | 1477 | ······</p> |
| 1478 | <p>Copyright·©·1996-202 | 1478 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1479 | ····</footer> | 1479 | ····</footer> |
| 1480 | ··</div> | 1480 | ··</div> |
| 1481 | </main> | 1481 | </main> |
| 1482 | </div> | 1482 | </div> |
| 1483 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1483 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1484 | ··<script> | 1484 | ··<script> |
| 1485 | ··let·initialized·=·false; | 1485 | ··let·initialized·=·false; |
| Offset 134, 41 lines modified | Offset 134, 41 lines modified | ||
| 134 | <p>The·two·major·components·of·the·<code·class="inline">Event·Tracer·(ET)</code>·tool·is·a·graphical·sequence | 134 | <p>The·two·major·components·of·the·<code·class="inline">Event·Tracer·(ET)</code>·tool·is·a·graphical·sequence |
| 135 | chart·viewer·(<code·class="inline">et_viewer</code>)·and·its·backing·storage·(<code·class="inline">et_collector</code>).·One | 135 | chart·viewer·(<code·class="inline">et_viewer</code>)·and·its·backing·storage·(<code·class="inline">et_collector</code>).·One |
| 136 | <code·class="inline">Collector</code>·may·be·used·as·backing·storage·for·several·simultaneous·<code·class="inline">Viewers</code> | 136 | <code·class="inline">Collector</code>·may·be·used·as·backing·storage·for·several·simultaneous·<code·class="inline">Viewers</code> |
| 137 | where·each·one·may·display·a·different·view·of·the·same·trace·data.</p><p>The·interface·between·the·<code·class="inline">Collector</code>·and·its·<code·class="inline">Viewers</code>·is·public·in·order·to | 137 | where·each·one·may·display·a·different·view·of·the·same·trace·data.</p><p>The·interface·between·the·<code·class="inline">Collector</code>·and·its·<code·class="inline">Viewers</code>·is·public·in·order·to |
| 138 | enable·other·types·of·<code·class="inline">Viewers</code>.·However·in·the·following·text·we·will·focus·on | 138 | enable·other·types·of·<code·class="inline">Viewers</code>.·However·in·the·following·text·we·will·focus·on |
| 139 | usage·of·the·<code·class="inline">et_viewer</code>.</p><p>The·main·start·function·is·<a·href="et_viewer.html#start/1"><code·class="inline">et_viewer:start/1</code></a>.·By·default·it·will·start·both·an | 139 | usage·of·the·<code·class="inline">et_viewer</code>.</p><p>The·main·start·function·is·<a·href="et_viewer.html#start/1"><code·class="inline">et_viewer:start/1</code></a>.·By·default·it·will·start·both·an |
| 140 | <code·class="inline">et_collector</code>·and·an·<code·class="inline">et_viewer</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-pa·et/examples</span><span·class="w"> | 140 | <code·class="inline">et_collector</code>·and·an·<code·class="inline">et_viewer</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-pa·et/examples</span><span·class="w"> |
| 141 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R13B03</span><span·class="w">·</span><span·class="p"·data-group-id=" | 141 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R13B03</span><span·class="w">·</span><span·class="p"·data-group-id="2257994722-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.7</span><span·class="p">.</span><span·class="mi">4</span><span·class="p"·data-group-id="2257994722-1">)</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·1129,·SHA:·f1a2f0f22dad7dc6a5b830e7902eb50e3081c808e19b70e6508cdd676ffb1919·...·]2-6">]</span><span·class="w"> |
| 142 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.4</span><span·class="w">··</span><span·class="p"·data-group-id=" | 142 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.4</span><span·class="w">··</span><span·class="p"·data-group-id="2257994722-7">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="2257994722-7">)</span><span·class="gp·unselectable"> |
| 143 | 1>·</span><span·class="p"·data-group-id=" | 143 | 1>·</span><span·class="p"·data-group-id="2257994722-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Viewer</span><span·class="p"·data-group-id="2257994722-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·281,·SHA:·301e595ec29defa98dcc804e67293653291f9924b8c9524c95a2205cb6141181·...·]2-9">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="p"·data-group-id=" | 144 | </span><span·class="p"·data-group-id="2257994722-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.40</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="2257994722-11">}</span></code></pre><p>A·<code·class="inline">Viewer</code>·gets·trace·<code·class="inline">Events</code>·from·its·<code·class="inline">Collector</code>·by·polling·it·regularly·for |
| 145 | more·<code·class="inline">Events</code>·to·display.·<code·class="inline">Events</code>·are·for·example·reported·to·the·<code·class="inline">Collector</code> | 145 | more·<code·class="inline">Events</code>·to·display.·<code·class="inline">Events</code>·are·for·example·reported·to·the·<code·class="inline">Collector</code> |
| 146 | with·<a·href="et_collector.html#report_event/6"><code·class="inline">et_collector:report_event/6</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="n">Collector</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id=" | 146 | with·<a·href="et_collector.html#report_event/6"><code·class="inline">et_collector:report_event/6</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="n">Collector</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id="7313972654-1">(</span><span·class="n">Viewer</span><span·class="p"·data-group-id="7313972654-1">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="o"><</span><span·class="mf">0.39</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 147 | </span><span·class="o"><</span><span·class="mf">0.39</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 148 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 148 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-2">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_outer</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 149 | 3>·</span><span·class="w">··························</span><span·class="s">"Start·outer·transaction"</span><span·class="p"·data-group-id=" | 149 | 3>·</span><span·class="w">··························</span><span·class="s">"Start·outer·transaction"</span><span·class="p"·data-group-id="7313972654-2">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 150 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 150 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-3">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">40</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">new_tid</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 151 | 3>·</span><span·class="w">··························</span><span·class="s">"New·transaction·id·is·4711"</span><span·class="p"·data-group-id=" | 151 | 3>·</span><span·class="w">··························</span><span·class="s">"New·transaction·id·is·4711"</span><span·class="p"·data-group-id="7313972654-3">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 152 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 152 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-4">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">try_write_lock</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 153 | 3>·</span><span·class="w">··························</span><span·class="s">"Acquire·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id=" | 153 | 3>·</span><span·class="w">··························</span><span·class="s">"Acquire·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id="7313972654-4">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 154 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 154 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-5">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">10</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">granted</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 155 | 3>·</span><span·class="w">··························</span><span·class="s">"You·got·the·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id=" | 155 | 3>·</span><span·class="w">··························</span><span·class="s">"You·got·the·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id="7313972654-5">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 156 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 156 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-6">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">do_commit</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 157 | 3>·</span><span·class="w">··························</span><span·class="s">"Perform··transaction·commit"</span><span·class="p"·data-group-id=" | 157 | 3>·</span><span·class="w">··························</span><span·class="s">"Perform··transaction·commit"</span><span·class="p"·data-group-id="7313972654-6">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 158 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 158 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-7">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">40</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">release_tid</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 159 | 3>·</span><span·class="w">··························</span><span·class="s">"Release·all·locks·for·transaction·4711"</span><span·class="p"·data-group-id=" | 159 | 3>·</span><span·class="w">··························</span><span·class="s">"Release·all·locks·for·transaction·4711"</span><span·class="p"·data-group-id="7313972654-7">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 160 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 160 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-8">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete_transaction</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 161 | 3>·</span><span·class="w">··························</span><span·class="s">"End·of·outer·transaction"</span><span·class="p"·data-group-id=" | 161 | 3>·</span><span·class="w">··························</span><span·class="s">"End·of·outer·transaction"</span><span·class="p"·data-group-id="7313972654-8">)</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 162 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 162 | 3>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="7313972654-9">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_outer</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 163 | 3>·</span><span·class="w">··························</span><span·class="s">"Transaction·returned·{atomic,·ok}"</span><span·class="p"·data-group-id=" | 163 | 3>·</span><span·class="w">··························</span><span·class="s">"Transaction·returned·{atomic,·ok}"</span><span·class="p"·data-group-id="7313972654-9">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="p"·data-group-id=" | 164 | </span><span·class="p"·data-group-id="7313972654-10">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7313972654-11">{</span><span·class="ss">table_handle</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.39</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="mi">16402</span><span·class="p">,</span><span·class="ss">trace_ts</span><span·class="p">,</span><span·class="w"> |
| 165 | ·····</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">et_collector</span><span·class="p">.</span><span·class="mf">0.62831470</span><span·class="o">></span><span·class="p"·data-group-id=" | 165 | ·····</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">et_collector</span><span·class="p">.</span><span·class="mf">0.62831470</span><span·class="o">></span><span·class="p"·data-group-id="7313972654-11">}</span><span·class="p"·data-group-id="7313972654-10">}</span></code></pre><p>This·actually·is·a·simulation·of·the·process·<code·class="inline">Events</code>·caused·by·a·<code·class="inline">Mnesia</code> |
| 166 | transaction·that·writes·a·record·in·a·local·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 166 | transaction·that·writes·a·record·in·a·local·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="4162755804-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="4162755804-2">(</span><span·class="p"·data-group-id="4162755804-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</[·...·truncated·by·diffoscope;·len:·541,·SHA:·e2f5af480c00d5648b872bd28dd6015c59292f1058ed2b98284e143f7c212290·...·]-1">)</span><span·class="p">.</span></code></pre><p>At·this·stage·when·we·have·a·couple·of·<code·class="inline">Events</code>,·it·is·time·to·show·how·it·looks |
| 167 | like·in·the·graphical·interface·of·<code·class="inline">et_viewer</code>:</p><p><img·src="assets/sim_trans.png"·alt="A·simulated·Mnesia·transaction·which·writes·one·record"·title="A·simulated·Mnesia·transaction·which·writes·one·record"/></p><p>In·the·sequence·chart,·the·actors·(which·symbolically·has·performed·the·<code·class="inline">Event</code>) | 167 | like·in·the·graphical·interface·of·<code·class="inline">et_viewer</code>:</p><p><img·src="assets/sim_trans.png"·alt="A·simulated·Mnesia·transaction·which·writes·one·record"·title="A·simulated·Mnesia·transaction·which·writes·one·record"/></p><p>In·the·sequence·chart,·the·actors·(which·symbolically·has·performed·the·<code·class="inline">Event</code>) |
| 168 | are·shown·as·named·vertical·bars.·The·order·of·the·actors·may·be·altered·by | 168 | are·shown·as·named·vertical·bars.·The·order·of·the·actors·may·be·altered·by |
| 169 | dragging·(hold·mouse·button·1·pressed·during·the·operation)·the·name·tag·of·an | 169 | dragging·(hold·mouse·button·1·pressed·during·the·operation)·the·name·tag·of·an |
| 170 | actor·and·drop·it·elsewhere:</p><p><img·src="assets/sim_trans_move_actor.png"·alt="Two·actors·has·switched·places"·title="Two·actors·has·switched·places"/></p><p>An·<code·class="inline">Event</code>·may·be·an·action·performed·by·one·single·actor·(blue·text·label)·or | 170 | actor·and·drop·it·elsewhere:</p><p><img·src="assets/sim_trans_move_actor.png"·alt="Two·actors·has·switched·places"·title="Two·actors·has·switched·places"/></p><p>An·<code·class="inline">Event</code>·may·be·an·action·performed·by·one·single·actor·(blue·text·label)·or |
| 171 | it·may·involve·two·actors·and·is·then·depicted·as·an·arrow·directed·from·one | 171 | it·may·involve·two·actors·and·is·then·depicted·as·an·arrow·directed·from·one |
| 172 | actor·to·another·(red·text·label).·Details·of·an·<code·class="inline">Event</code>·can·be·shown·by | 172 | actor·to·another·(red·text·label).·Details·of·an·<code·class="inline">Event</code>·can·be·shown·by |
| 173 | clicking·(press·and·release·the·mouse·button·1)·on·the·event·label·text·or·on | 173 | clicking·(press·and·release·the·mouse·button·1)·on·the·event·label·text·or·on |
| Offset 177, 19 lines modified | Offset 177, 19 lines modified | ||
| 177 | ··<a·href="#filters-and-dictionary"·class="hover-link"> | 177 | ··<a·href="#filters-and-dictionary"·class="hover-link"> |
| 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 178 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 179 | ··</a> | 179 | ··</a> |
| 180 | ··<span·class="text">Filters·and·dictionary</span> | 180 | ··<span·class="text">Filters·and·dictionary</span> |
| 181 | </h2> | 181 | </h2> |
| 182 | <p>The·<code·class="inline">Event·Tracer·(ET)</code>·uses·named·filters·in·various·contexts.·An·Event·Trace | 182 | <p>The·<code·class="inline">Event·Tracer·(ET)</code>·uses·named·filters·in·various·contexts.·An·Event·Trace |
| 183 | filter·is·an·<code·class="inline">Erlang·fun</code>·that·takes·some·trace·data·as·input·and·returns·a | 183 | filter·is·an·<code·class="inline">Erlang·fun</code>·that·takes·some·trace·data·as·input·and·returns·a |
| 184 | possibly·modified·version·of·it:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">filter</span><span·class="p"·data-group-id=" | 184 | possibly·modified·version·of·it:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">filter</span><span·class="p"·data-group-id="6485322879-1">(</span><span·class="n">TraceData</span><span·class="p"·data-group-id="6485322879-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">|</s[·...·truncated·by·diffoscope;·len:·328,·SHA:·7c6412d42745fd3092ba0a801599a5723f68eaf52eb4f9b8a25a70f4c99d2025·...·]9-2">}</span><span·class="w"> |
| 185 | </span><span·class="n">TraceData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">erlang_trace_data</span><span·class="p"·data-group-id=" | 185 | </span><span·class="n">TraceData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">erlang_trace_data</span><span·class="p"·data-group-id="6485322879-3">(</span><span·class="p"·data-group-id="6485322879-3">)</span><span·class="w"> |
| 186 | </span><span·class="n">Event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id=" | 186 | </span><span·class="n">Event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="6485322879-4">{</span><span·class="p"·data-group-id="6485322879-4">}</span><span·class="w"> |
| 187 | </span><span·class="n">NewEvent</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id=" | 187 | </span><span·class="n">NewEvent</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="6485322879-5">{</span><span·class="p"·data-group-id="6485322879-5">}</span></code></pre><p>The·interface·of·the·filter·function·is·the·same·as·the·the·filter·functions·for |
| 188 | the·good·old·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#filtermap/2"><code·class="inline">lists:filtermap/2</code></a>.·If·the·filter·returns·<code·class="inline">false</code>·it·means·that | 188 | the·good·old·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#filtermap/2"><code·class="inline">lists:filtermap/2</code></a>.·If·the·filter·returns·<code·class="inline">false</code>·it·means·that |
| 189 | the·trace·data·should·silently·be·dropped.·<code·class="inline">true</code>·means·that·the·trace·data·data | 189 | the·trace·data·should·silently·be·dropped.·<code·class="inline">true</code>·means·that·the·trace·data·data |
| 190 | already·is·an·<code·class="inline">Event·Record</code>·and·that·it·should·be·kept·as·it·is.·<code·class="inline">true</code>·means | 190 | already·is·an·<code·class="inline">Event·Record</code>·and·that·it·should·be·kept·as·it·is.·<code·class="inline">true</code>·means |
| 191 | that·the·<code·class="inline">TraceData</code>·already·is·an·<code·class="inline">Event·Record</code>·and·that·it·should·be·kept·as | 191 | that·the·<code·class="inline">TraceData</code>·already·is·an·<code·class="inline">Event·Record</code>·and·that·it·should·be·kept·as |
| 192 | it·is.·<code·class="inline">{true,·NewEvent}</code>·means·that·the·original·trace·data·should·be·replaced | 192 | it·is.·<code·class="inline">{true,·NewEvent}</code>·means·that·the·original·trace·data·should·be·replaced |
| 193 | with·<code·class="inline">Event</code>.·This·provides·means·to·get·rid·of·unwanted·<code·class="inline">Events</code>·as·well·as | 193 | with·<code·class="inline">Event</code>.·This·provides·means·to·get·rid·of·unwanted·<code·class="inline">Events</code>·as·well·as |
| 194 | enabling·alternate·views·of·an·<code·class="inline">Event</code>.</p><p>The·first·filter·that·the·trace·data·is·exposed·for·is·the·<code·class="inline">Collector·Filter</code>. | 194 | enabling·alternate·views·of·an·<code·class="inline">Event</code>.</p><p>The·first·filter·that·the·trace·data·is·exposed·for·is·the·<code·class="inline">Collector·Filter</code>. |
| Offset 208, 29 lines modified | Offset 208, 29 lines modified | ||
| 208 | When·a·<code·class="inline">Viewer</code>·is·started·it·is·registered·as·a·subscriber·of·dictionary | 208 | When·a·<code·class="inline">Viewer</code>·is·started·it·is·registered·as·a·subscriber·of·dictionary |
| 209 | updates.</p><p>In·each·<code·class="inline">Viewer</code>·there·is·only·one·filter·that·is·active·and·all·trace·<code·class="inline">Events</code> | 209 | updates.</p><p>In·each·<code·class="inline">Viewer</code>·there·is·only·one·filter·that·is·active·and·all·trace·<code·class="inline">Events</code> |
| 210 | that·the·<code·class="inline">Viewer</code>·gets·from·the·<code·class="inline">Collector</code>·will·pass·thru·that·filter.·By | 210 | that·the·<code·class="inline">Viewer</code>·gets·from·the·<code·class="inline">Collector</code>·will·pass·thru·that·filter.·By |
| 211 | writing·clever·filters·it·is·possible·to·customize·how·the·<code·class="inline">Events</code>·looks·like | 211 | writing·clever·filters·it·is·possible·to·customize·how·the·<code·class="inline">Events</code>·looks·like |
| 212 | in·the·viewer.·The·following·filter·in·<code·class="inline">et/examples/et_demo.erl</code>·replaces·the | 212 | in·the·viewer.·The·following·filter·in·<code·class="inline">et/examples/et_demo.erl</code>·replaces·the |
| 213 | actor·names·<code·class="inline">mnesia_tm</code>·and·<code·class="inline">mnesia_locker</code>·and·leaves·everything·else·in·the | 213 | actor·names·<code·class="inline">mnesia_tm</code>·and·<code·class="inline">mnesia_locker</code>·and·leaves·everything·else·in·the |
| 214 | record·as·it·was:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 214 | record·as·it·was:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 215 | </span><span·class="nf">mgr_actors</span><span·class="p"·data-group-id=" | 215 | </span><span·class="nf">mgr_actors</span><span·class="p"·data-group-id="0105039523-1">(</span><span·class="n">E</span><span·class="p"·data-group-id="0105039523-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="0105039523-2">(</s[·...·truncated·by·diffoscope;·len:·146,·SHA:·5fbc3cf3f74f1554b746c5ad37a87fd9e70517d7ad19dc00a74769609bb08f9a·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | ····</span><span·class="n">Actor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 216 | ····</span><span·class="n">Actor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0105039523-3">(</span><span·class="n">A</span><span·class="p"·data-group-id="0105039523-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ···············</span><span·class="k">case</span><span·class="w">·</span><span·class="n">A</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 217 | ···············</span><span·class="k">case</span><span·class="w">·</span><span·class="n">A</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 218 | ···················</span><span·class="ss">mnesia_tm</span><span·class="w">·····</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">trans_mgr</span><span·class="p">;</span><span·class="w"> | 218 | ···················</span><span·class="ss">mnesia_tm</span><span·class="w">·····</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">trans_mgr</span><span·class="p">;</span><span·class="w"> |
| 219 | ···················</span><span·class="ss">mnesia_locker</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">lock_mgr</span><span·class="p">;</span><span·class="w"> | 219 | ···················</span><span·class="ss">mnesia_locker</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">lock_mgr</span><span·class="p">;</span><span·class="w"> |
| 220 | ···················</span><span·class="p">_</span><span·class="w">·············</span><span·class="p">-></span><span·class="w">·</span><span·class="n">A</span><span·class="w"> | 220 | ···················</span><span·class="p">_</span><span·class="w">·············</span><span·class="p">-></span><span·class="w">·</span><span·class="n">A</span><span·class="w"> |
| 221 | ···············</span><span·class="k">end</span><span·class="w"> | 221 | ···············</span><span·class="k">end</span><span·class="w"> |
| 222 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 222 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 223 | ····</span><span·class="p"·data-group-id=" | 223 | ····</span><span·class="p"·data-group-id="0105039523-4">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="0105039523-5">{</span><span·class="ss">from</span>[·...·truncated·by·diffoscope;·len:·323,·SHA:·7a45770378f9cac08847a5d8e7025057cc6760c774809c863fc13f6ca5f05179·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 224 | ···················</span><span·class="ss">to</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Actor</span><span·class="p"·data-group-id=" | 224 | ···················</span><span·class="ss">to</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Actor</span><span·class="p"·data-group-id="0105039523-7">(</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">to</span><span·class="p"·data-group-id="0105039523-7">)</span><span·class="p">,</span><span·class="w"> |
| 225 | ···················</span><span·class="ss">contents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 225 | ···················</span><span·class="ss">contents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0105039523-8">[</span><span·class="p"·data-group-id="0105039523-9">{</span><span·class="ss">orig_from</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span[·...·truncated·by·diffoscope;·len:·70,·SHA:·16d80c2dbb62d48c581c4416a8acb64291b8f1cf0c453a8b308468919a451f90·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 226 | ·······························</span><span·class="p"·data-group-id=" | 226 | ·······························</span><span·class="p"·data-group-id="0105039523-10">{</span><span·class="ss">orig_to</span><span·class="p">,</span><span·class="w">···</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">to</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·7905dff282f0e86f693bb191afead334d599d26677b56680c74fcda3d624f588·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 227 | ·······························</span><span·class="p"·data-group-id=" | 227 | ·······························</span><span·class="p"·data-group-id="0105039523-11">{</span><span·class="ss">orig_contents</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">contents</span><span·class="p"[·...·truncated·by·diffoscope;·len:·947,·SHA:·aab28bfa643e2f574507c2691f8ff3a9fd473aa350de4c034e39baa62294a65f·...·]96-2">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">6.13229925</span><span·class="o">></span><span·class="gp·unselectable"> | 228 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="p">.</span><span·class="mf">6.13229925</span><span·class="o">></span><span·class="gp·unselectable"> |
| 229 | 5>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">dict_insert</span><span·class="p"·data-group-id=" | 229 | 5>·</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">dict_insert</span><span·class="p"·data-group-id="7467806096-3">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7467806096-4">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mgr_ac[·...·truncated·by·diffoscope;·len:·177,·SHA:·ddde62226b11e2dc0687b0433a63cc3e1e3d9b2890e67a374a9cc16279a3c4a5·...·]96-3">)</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="ss">ok</span></code></pre><p>you·will·see·that·the·<code·class="inline">Filter</code>·menu·in·all·viewers·have·got·a·new·entry·called | 230 | </span><span·class="ss">ok</span></code></pre><p>you·will·see·that·the·<code·class="inline">Filter</code>·menu·in·all·viewers·have·got·a·new·entry·called |
| 231 | <code·class="inline">mgr_actors</code>.·Select·it,·and·a·new·<code·class="inline">Viewer</code>·window·will·pop·up:</p><p><img·src="assets/sim_trans_mgr_actors.png"·alt="The·same·trace·data·in·a·different·view"·title="The·same·trace·data·in·a·different·view"/></p><p>In·order·to·see·the·nitty·gritty·details·of·an·<code·class="inline">Event</code>·you·may·click·on·the | 231 | <code·class="inline">mgr_actors</code>.·Select·it,·and·a·new·<code·class="inline">Viewer</code>·window·will·pop·up:</p><p><img·src="assets/sim_trans_mgr_actors.png"·alt="The·same·trace·data·in·a·different·view"·title="The·same·trace·data·in·a·different·view"/></p><p>In·order·to·see·the·nitty·gritty·details·of·an·<code·class="inline">Event</code>·you·may·click·on·the |
| 232 | <code·class="inline">Event</code>·in·order·to·start·a·<code·class="inline">Contents·Viewer</code>·for·that·<code·class="inline">Event</code>.·In·the | 232 | <code·class="inline">Event</code>·in·order·to·start·a·<code·class="inline">Contents·Viewer</code>·for·that·<code·class="inline">Event</code>.·In·the |
| 233 | <code·class="inline">Contents·Viewer</code>·there·also·is·a·filter·menu·that·enables·inspection·of·the | 233 | <code·class="inline">Contents·Viewer</code>·there·also·is·a·filter·menu·that·enables·inspection·of·the |
| 234 | <code·class="inline">Event</code>·from·other·views·than·the·one·selected·in·the·viewer.·A·click·on·the | 234 | <code·class="inline">Event</code>·from·other·views·than·the·one·selected·in·the·viewer.·A·click·on·the |
| 235 | <code·class="inline">new_tid</code>·<code·class="inline">Event</code>·will·cause·a·<code·class="inline">Contents·Viewer</code>·window·to·pop·up,·showing·the | 235 | <code·class="inline">new_tid</code>·<code·class="inline">Event</code>·will·cause·a·<code·class="inline">Contents·Viewer</code>·window·to·pop·up,·showing·the |
| 236 | <code·class="inline">Event</code>·in·the·<code·class="inline">mgr_actors</code>·view:</p><p><img·src="assets/sim_trans_contents_viewer_mgr_actors.png"·alt="The·trace·Event·in·the·mgr_actors·view"·title="The·trace·Event·in·the·mgr_actors·view"/></p><p>Select·the·<code·class="inline">all</code>·entry·in·the·<code·class="inline">Filters</code>·menu·and·a·new·<code·class="inline">Contents·Viewer·window</code> | 236 | <code·class="inline">Event</code>·in·the·<code·class="inline">mgr_actors</code>·view:</p><p><img·src="assets/sim_trans_contents_viewer_mgr_actors.png"·alt="The·trace·Event·in·the·mgr_actors·view"·title="The·trace·Event·in·the·mgr_actors·view"/></p><p>Select·the·<code·class="inline">all</code>·entry·in·the·<code·class="inline">Filters</code>·menu·and·a·new·<code·class="inline">Contents·Viewer·window</code> |
| Offset 419, 15 lines modified | Offset 419, 15 lines modified | ||
| 419 | ······<p·class="built-using"> | 419 | ······<p·class="built-using"> |
| 420 | ········Built·using | 420 | ········Built·using |
| 421 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 421 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 422 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 422 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 423 | ······</p> | 423 | ······</p> |
| 424 | <p>Copyright·©·1996-202 | 424 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 425 | ····</footer> | 425 | ····</footer> |
| 426 | ··</div> | 426 | ··</div> |
| 427 | </main> | 427 | </main> |
| 428 | </div> | 428 | </div> |
| 429 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 429 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 430 | ··<script> | 430 | ··<script> |
| 431 | ··let·initialized·=·false; | 431 | ··let·initialized·=·false; |
| Offset 129, 178 lines modified | Offset 129, 178 lines modified | ||
| 129 | ··<a·href="#a-simulated-mnesia-transaction"·class="hover-link"> | 129 | ··<a·href="#a-simulated-mnesia-transaction"·class="hover-link"> |
| 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 131 | ··</a> | 131 | ··</a> |
| 132 | ··<span·class="text">A·simulated·Mnesia·transaction</span> | 132 | ··<span·class="text">A·simulated·Mnesia·transaction</span> |
| 133 | </h2> | 133 | </h2> |
| 134 | <p>The·Erlang·code·for·running·the·simulated·<code·class="inline">Mnesia</code>·transaction·example·in·the | 134 | <p>The·Erlang·code·for·running·the·simulated·<code·class="inline">Mnesia</code>·transaction·example·in·the |
| 135 | previous·chapter·is·included·in·the·<code·class="inline">et/examples/et_demo.erl</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 135 | previous·chapter·is·included·in·the·<code·class="inline">et/examples/et_demo.erl</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 136 | </span><span·class="nf">sim_trans</span><span·class="p"·data-group-id=" | 136 | </span><span·class="nf">sim_trans</span><span·class="p"·data-group-id="3795461255-1">(</span><span·class="p"·data-group-id="3795461255-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="nf">sim_trans</span><span·class="p"·data-group-id=" | 137 | ····</span><span·class="nf">sim_trans</span><span·class="p"·data-group-id="3795461255-2">(</span><span·class="p"·data-group-id="3795461255-3">[</span><span·class="p"·data-group-id="3795461255-3">]</span><span·class="p"·data-group-id="3795461255-2">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="nf">sim_trans</span><span·class="p"·data-group-id=" | 138 | </span><span·class="nf">sim_trans</span><span·class="p"·data-group-id="3795461255-4">(</span><span·class="n">ExtraOptions</span><span·class="p"·data-group-id="3795461255-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2151814162-5">[</span><span·class="p"·data-group-id="2151814162-6">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2151814162-7">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mgr_actors</span><span·class="p"·data-group-id="2151814162-7">}</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">mgr_actors</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="2151814162-6">}</span><span·class="p"·data-group-id="2151814162-5">]</span><span·class="p">,</span><span·class="w"> | ||
| 140 | ····</span><span·class=" | 139 | ····</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3795461255-5">[</span><span·class="p"·data-group-id="3795461255-6">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·520,·SHA:·57edda13a69a09df9eac39bcacdbf2e9c408c23c2d45d643236c1cb692f5663a·...·]</span><span·class="p">,</span><span·class="w"> |
| 140 | ····</span><span·class="p"·data-group-id="3795461255-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Viewer</span><span·class="p"·data-group-id="3795461255-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="3795461255-9">(</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">ExtraOptions</span><span·class="p"·data-group-id="3795461255-9">)</span><span·class="p">,</span><span·class="w"> | ||
| 141 | ····</span><span·class="n">Collector</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="n">Collector</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id="3795461255-10">(</span><span·class="n">Viewer</span><span·class="p"·data-group-id="3795461255-10">)</span><span·class="p">,</span><span·class="w"> |
| 142 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 142 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-11">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start_outer</span><span·class="p">,</span><span·class="w"> |
| 143 | ······························</span><span·class="s">"Start·outer·transaction"</span><span·class="p"·data-group-id=" | 143 | ······························</span><span·class="s">"Start·outer·transaction"</span><span·class="p"·data-group-id="3795461255-11">)</span><span·class="p">,</span><span·class="w"> |
| 144 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 144 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-12">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">40</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">new_tid</span><span·class="p">,</span><span·class="w"> |
| 145 | ······························</span><span·class="s">"New·transaction·id·is·4711"</span><span·class="p"·data-group-id=" | 145 | ······························</span><span·class="s">"New·transaction·id·is·4711"</span><span·class="p"·data-group-id="3795461255-12">)</span><span·class="p">,</span><span·class="w"> |
| 146 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 146 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-13">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">try_write_lock</span><span·class="p">,</span><span·class="w"> |
| 147 | ······························</span><span·class="s">"Acquire·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id=" | 147 | ······························</span><span·class="s">"Acquire·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id="3795461255-13">)</span><span·class="p">,</span><span·class="w"> |
| 148 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 148 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-14">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">10</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">granted</span><span·class="p">,</span><span·class="w"> |
| 149 | ······························</span><span·class="s">"You·got·the·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id=" | 149 | ······························</span><span·class="s">"You·got·the·write·lock·for·{my_tab,·key}"</span><span·class="p"·data-group-id="3795461255-14">)</span><span·class="p">,</span><span·class="w"> |
| 150 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 150 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-15">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">do_commit</span><span·class="p">,</span><span·class="w"> |
| 151 | ······························</span><span·class="s">"Perform··transaction·commit"</span><span·class="p"·data-group-id=" | 151 | ······························</span><span·class="s">"Perform··transaction·commit"</span><span·class="p"·data-group-id="3795461255-15">)</span><span·class="p">,</span><span·class="w"> |
| 152 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 152 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-16">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">40</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_locker</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">release_tid</span><span·class="p">,</span><span·class="w"> |
| 153 | ······························</span><span·class="s">"Release·all·locks·for·transaction·4711"</span><span·class="p"·data-group-id=" | 153 | ······························</span><span·class="s">"Release·all·locks·for·transaction·4711"</span><span·class="p"·data-group-id="3795461255-16">)</span><span·class="p">,</span><span·class="w"> |
| 154 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 154 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-17">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">60</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_tm</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete_transaction</span><span·class="p">,</span><span·class="w"> |
| 155 | ······························</span><span·class="s">"End·of·outer·transaction"</span><span·class="p"·data-group-id=" | 155 | ······························</span><span·class="s">"End·of·outer·transaction"</span><span·class="p"·data-group-id="3795461255-17">)</span><span·class="p">,</span><span·class="w"> |
| 156 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 156 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="3795461255-18">(</span><span·class="n">Collector</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_shell</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">end_outer</span><span·class="p">,</span><span·class="w"> |
| 157 | ······························</span><span·class="s">"Transaction·returned·{atomic,·ok}"</span><span·class="p"·data-group-id=" | 157 | ······························</span><span·class="s">"Transaction·returned·{atomic,·ok}"</span><span·class="p"·data-group-id="3795461255-18">)</span><span·class="p">,</span><span·class="w"> |
| 158 | ····</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="p"·data-group-id="3795461255-19">{</span><span·class="ss">collector</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Collector</span><span·class="p"·data-group-id="3795461255-19">}</span><span·class="p">.</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 159 | </span><span·class="nf">mgr_actors</span><span·class="p"·data-group-id="7 | 159 | </span><span·class="nf">mgr_actors</span><span·class="p"·data-group-id="7043125681-1">(</span><span·class="n">E</span><span·class="p"·data-group-id="7043125681-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="7043125681-2">(</sp[·...·truncated·by·diffoscope;·len:·145,·SHA:·0555f8a043e9500421a0ebaa6536e90490c1dae5c1af42fde3b02d2a6fc6cff4·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ····</span><span·class="n">Actor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7 | 160 | ····</span><span·class="n">Actor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7043125681-3">(</span><span·class="n">A</span><span·class="p"·data-group-id="7043125681-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ···············</span><span·class="k">case</span><span·class="w">·</span><span·class="n">A</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 161 | ···············</span><span·class="k">case</span><span·class="w">·</span><span·class="n">A</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 162 | ···················</span><span·class="ss">mnesia_tm</span><span·class="w">·····</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">trans_mgr</span><span·class="p">;</span><span·class="w"> | 162 | ···················</span><span·class="ss">mnesia_tm</span><span·class="w">·····</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">trans_mgr</span><span·class="p">;</span><span·class="w"> |
| 163 | ···················</span><span·class="ss">mnesia_locker</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">lock_mgr</span><span·class="p">;</span><span·class="w"> | 163 | ···················</span><span·class="ss">mnesia_locker</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">lock_mgr</span><span·class="p">;</span><span·class="w"> |
| 164 | ···················</span><span·class="p">_</span><span·class="w">·············</span><span·class="p">-></span><span·class="w">·</span><span·class="n">A</span><span·class="w"> | 164 | ···················</span><span·class="p">_</span><span·class="w">·············</span><span·class="p">-></span><span·class="w">·</span><span·class="n">A</span><span·class="w"> |
| 165 | ···············</span><span·class="k">end</span><span·class="w"> | 165 | ···············</span><span·class="k">end</span><span·class="w"> |
| 166 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 166 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 167 | ····</span><span·class="p"·data-group-id="7 | 167 | ····</span><span·class="p"·data-group-id="7043125681-4">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="7043125681-5">{</span><span·class="ss">from</span><[·...·truncated·by·diffoscope;·len:·322,·SHA:·e74b830a11778f32c230a77929882dd64428fd5d7a92dd368625e8a8f9371eba·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 168 | ···················</span><span·class="ss">to</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Actor</span><span·class="p"·data-group-id="7 | 168 | ···················</span><span·class="ss">to</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Actor</span><span·class="p"·data-group-id="7043125681-7">(</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">to</span><span·class="p"·data-group-id="7043125681-7">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ···················</span><span·class="ss">contents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 169 | ···················</span><span·class="ss">contents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7043125681-8">[</span><span·class="p"·data-group-id="7043125681-9">{</span><span·class="ss">orig_from</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span>[·...·truncated·by·diffoscope;·len:·69,·SHA:·2bee86b7a41dca9c6253f4f7730bf471bdc0a83a223efeffe416bc8ee8c13ce5·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 170 | ·······························</span><span·class="p"·data-group-id="7 | 170 | ·······························</span><span·class="p"·data-group-id="7043125681-10">{</span><span·class="ss">orig_to</span><span·class="p">,</span><span·class="w">···</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">to</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·800fb7295f53a37a3e810a0bb97593b6bffb9e2b73c723da796f9784c5691150·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 171 | ·······························</span><span·class="p"·data-group-id="7 | 171 | ·······························</span><span·class="p"·data-group-id="7043125681-11">{</span><span·class="ss">orig_contents</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">contents</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·185,·SHA:·1ccc386fcf64faecd18017cc8408ec0bde180b619328730ba5e688e3ccbd761a·...·]-4">}</span><span·class="p">.</span></code></pre><p>If·you·invoke·the·<code·class="inline">et_demo:sim_trans()</code>·function,·a·<code·class="inline">Viewer</code>·window·will·pop·up |
| 172 | and·the·sequence·trace·will·be·almost·the·same·as·if·the·following·<code·class="inline">Mnesia</code> | 172 | and·the·sequence·trace·will·be·almost·the·same·as·if·the·following·<code·class="inline">Mnesia</code> |
| 173 | transaction·would·have·been·run:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 173 | transaction·would·have·been·run:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="9024190890-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9024190890-2">(</span><span·class="p"·data-group-id="9024190890-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</[·...·truncated·by·diffoscope;·len:·2205,·SHA:·efa9e53fac6799464d38f6156fc530b115a35b75e4916d25f29e0c8f641657d2·...·]-6">]</span><span·class="w"> |
| 174 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.4</span><span·class="w">··</span><span·class="p"·data-group-id=" | 174 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">7.4</span><span·class="w">··</span><span·class="p"·data-group-id="1696823980-7">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="1696823980-7">)</span><span·class="gp·unselectable"> |
| 175 | 1>·</span><span·class="p"·data-group-id=" | 175 | 1>·</span><span·class="p"·data-group-id="1696823980-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Viewer</span><span·class="p"·data-group-id="1696823980-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·282,·SHA:·9e8aef595713623076bc96fba9406247726fe029a00e857524f23a14567815d6·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="p"·data-group-id=" | 176 | </span><span·class="p"·data-group-id="1696823980-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.40</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">;</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·9ec3ebbbfbc6294cbaef0fffbcb7b3e0699936a2ecb28a82029bb96bc83ce917·...·]-11">}</span><span·class="gp·unselectable"> |
| 177 | 2>·</span><span·class="nc">et_demo</span><span·class="p">:</span><span·class="nf">sim_trans</span><span·class="p"·data-group-id=" | 177 | 2>·</span><span·class="nc">et_demo</span><span·class="p">:</span><span·class="nf">sim_trans</span><span·class="p"·data-group-id="1696823980-12">(</span><span·class="p"·data-group-id="1696823980-12">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="p"·data-group-id=" | 178 | </span><span·class="p"·data-group-id="1696823980-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="1696823980-14">{</span><span·class="ss">table_handle</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.45</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="mi">24596</span><span·class="p">,</span><span·class="ss">trace_ts</span><span·class="p">,</span><span·class="w"> |
| 179 | ·····</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">et_collector</span><span·class="p">.</span><span·class="mf">0.62831470</span><span·class="o">></span><span·class="p"·data-group-id=" | 179 | ·····</span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">et_collector</span><span·class="p">.</span><span·class="mf">0.62831470</span><span·class="o">></span><span·class="p"·data-group-id="1696823980-14">}</span><span·class="p"·data-group-id="1696823980-13">}</span></code></pre><p><img·src="assets/sim_trans.png"·alt="A·simulated·Mnesia·transaction·which·writes·one·record"·title="A·simulated·Mnesia·transaction·which·writes·one·record"/></p><h2·id="some-convenient-functions-used-in-the-mnesia-transaction-example"·class="section-heading"> |
| 180 | ··<a·href="#some-convenient-functions-used-in-the-mnesia-transaction-example"·class="hover-link"> | 180 | ··<a·href="#some-convenient-functions-used-in-the-mnesia-transaction-example"·class="hover-link"> |
| 181 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 181 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 182 | ··</a> | 182 | ··</a> |
| 183 | ··<span·class="text">Some·convenient·functions·used·in·the·Mnesia·transaction·example</span> | 183 | ··<span·class="text">Some·convenient·functions·used·in·the·Mnesia·transaction·example</span> |
| 184 | </h2> | 184 | </h2> |
| 185 | <p>The·<code·class="inline">module_as_actor</code>·filter·converts·the·<code·class="inline">Event·Records</code>·so·the·module·names | 185 | <p>The·<code·class="inline">module_as_actor</code>·filter·converts·the·<code·class="inline">Event·Records</code>·so·the·module·names |
| 186 | becomes·actors·and·the·invoked·functions·becomes·labels.·If·the·information | 186 | becomes·actors·and·the·invoked·functions·becomes·labels.·If·the·information |
| 187 | about·who·the·caller·was·it·will·be·displayed·as·an·arrow·directed·from·the | 187 | about·who·the·caller·was·it·will·be·displayed·as·an·arrow·directed·from·the |
| 188 | caller·to·the·callee.·The·<code·class="inline">[{message,·{caller}},·{return_trace}]</code>·options·to | 188 | caller·to·the·callee.·The·<code·class="inline">[{message,·{caller}},·{return_trace}]</code>·options·to |
| 189 | <a·href="../../../../lib/runtime_tools-2.1.1/doc/html/dbg.html#tpl/2"><code·class="inline">dbg:tpl/2</code></a>·function·will·imply·the·necessary·information·in·the·Erlang·traces. | 189 | <a·href="../../../../lib/runtime_tools-2.1.1/doc/html/dbg.html#tpl/2"><code·class="inline">dbg:tpl/2</code></a>·function·will·imply·the·necessary·information·in·the·Erlang·traces. |
| 190 | Here·follows·the·<code·class="inline">module_as_actor</code>·filter:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 190 | Here·follows·the·<code·class="inline">module_as_actor</code>·filter:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 191 | </span><span·class="nf">module_as_actor</span><span·class="p"·data-group-id=" | 191 | </span><span·class="nf">module_as_actor</span><span·class="p"·data-group-id="7357186612-1">(</span><span·class="n">E</span><span·class="p"·data-group-id="7357186612-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="7357186612-2">(</s[·...·truncated·by·diffoscope;·len:·146,·SHA:·56faf4c158358825b208d7d1393edd5726e5bbaf439daea68da53ccaa77ad317·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keysearch</span><span·class="p"·data-group-id=" | 192 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keysearch</span><span·class="p"·data-group-id="7357186612-3">(</span><span·class="ss">mfa</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·cla[·...·truncated·by·diffoscope;·len:·88,·SHA:·1ae581c87e6cf93aee7c9cc426c7d57ceb610519be9f0995e917a706d443f4b0·...·]-3">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 193 | ········</span><span·class="p"·data-group-id=" | 193 | ········</span><span·class="p"·data-group-id="7357186612-4">{</span><span·class="ss">value</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7357186612-5">{</span><span·class="ss">mfa</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·363,·SHA:·4229525bc6c55bd4756e368294c3facd8a1893262ad5b83cfbeccbfd0047cd7f·...·]-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keysearch</span><span·class="p"·data-group-id=" | 194 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keysearch</span><span·class="p"·data-group-id="7357186612-7">(</span><span·class="ss">pam_result</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><s[·...·truncated·by·diffoscope;·len:·95,·SHA:·cfa30cefcd10aec0532ef7a2bd50fb1a73148d1737a0ed38252e5be567ecdc59·...·]-7">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 195 | ················</span><span·class="p"·data-group-id=" | 195 | ················</span><span·class="p"·data-group-id="7357186612-8">{</span><span·class="ss">value</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7357186612-9">{</span><span·class="ss">pam_result</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·399,·SHA:·42afdb8606fc203410f9c3c0bfb32070657785a2365d4730ed08ee44358cb3c8·...·]-8">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 196 | ····················</span><span·class="p"·data-group-id=" | 196 | ····················</span><span·class="p"·data-group-id="7357186612-11">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="7357186612-12">{</span><span·class="ss">label</sp[·...·truncated·by·diffoscope;·len:·537,·SHA:·6372953eabd2743d32561df47b4d35358ae4dae9f2e97f5fcb1becd9328efccf·...·]-11">}</span><span·class="p">;</span><span·class="w"> |
| 197 | ················</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 197 | ················</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 198 | ····················</span><span·class="p"·data-group-id=" | 198 | ····················</span><span·class="p"·data-group-id="7357186612-13">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p"·data-group-id="7357186612-14">{</span><span·class="ss">label</sp[·...·truncated·by·diffoscope;·len:·536,·SHA:·21ad0448e177109d4fc76a6085b165a32ac55c4941d4dd6bf77151a60bd1ca9e·...·]-13">}</span><span·class="w"> |
| 199 | ············</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 199 | ············</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 200 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 200 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ············</span><span·class="ss">false</span><span·class="w"> | 201 | ············</span><span·class="ss">false</span><span·class="w"> |
| 202 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">plain_process_info</code>·filter·does·not·alter·the·<code·class="inline">Event·Records</code>.·It·merely | 202 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">plain_process_info</code>·filter·does·not·alter·the·<code·class="inline">Event·Records</code>.·It·merely |
| 203 | ensures·that·the·event·not·related·to·processes·are·skipped:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 203 | ensures·that·the·event·not·related·to·processes·are·skipped:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 204 | </span><span·class="nf">plain_process_info</span><span·class="p"·data-group-id=" | 204 | </span><span·class="nf">plain_process_info</span><span·class="p"·data-group-id="0412065230-1">(</span><span·class="n">E</span><span·class="p"·data-group-id="0412065230-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="0412065230-2">(</s[·...·truncated·by·diffoscope;·len:·146,·SHA:·b9988949044947d6e687cd01501374b4fafb39f623faad8f2c09130e2a9864a3·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 205 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">label</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 205 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">label</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 206 | ········</span><span·class="nb">send</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 206 | ········</span><span·class="nb">send</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 207 | ········</span><span·class="ss">send_to_non_existing_process</span><span·class="w">··</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 207 | ········</span><span·class="ss">send_to_non_existing_process</span><span·class="w">··</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 208 | ········</span><span·class="ss">'receive'</span><span·class="w">·····················</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 208 | ········</span><span·class="ss">'receive'</span><span·class="w">·····················</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 209 | ········</span><span·class="nb">spawn</span><span·class="w">·························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 209 | ········</span><span·class="nb">spawn</span><span·class="w">·························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 210 | ········</span><span·class="nb">exit</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 210 | ········</span><span·class="nb">exit</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 211 | ········</span><span·class="nb">link</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 211 | ········</span><span·class="nb">link</span><span·class="w">··························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 212 | ········</span><span·class="nb">unlink</span><span·class="w">························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 212 | ········</span><span·class="nb">unlink</span><span·class="w">························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 213 | ········</span><span·class="ss">getting_linked</span><span·class="w">················</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> | 213 | ········</span><span·class="ss">getting_linked</span><span·class="w">················</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 214 | ········</span><span·class="p"·data-group-id=" | 214 | ········</span><span·class="p"·data-group-id="0412065230-3">{</span><span·class="ss">seq_send</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Label</span><span·class="p"·data-group-id="0412065230-3">}</span><span·class="w">············</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 215 | ········</span><span·class="p"·data-group-id=" | 215 | ········</span><span·class="p"·data-group-id="0412065230-4">{</span><span·class="ss">seq_receive</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Label</span><span·class="p"·data-group-id="0412065230-4">}</span><span·class="w">·········</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 216 | ········</span><span·class="p"·data-group-id=" | 216 | ········</span><span·class="p"·data-group-id="0412065230-5">{</span><span·class="ss">seq_print</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Label</span><span·class="p"·data-group-id="0412065230-5">}</span><span·class="w">···········</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 217 | ········</span><span·class="p"·data-group-id=" | 217 | ········</span><span·class="p"·data-group-id="0412065230-6">{</span><span·class="ss">drop</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">N</span><span·class="p"·data-group-id="0412065230-6">}</span><span·class="w">····················</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 218 | ········</span><span·class="p">_</span><span·class="w">·····························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> | 218 | ········</span><span·class="p">_</span><span·class="w">·····························</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> |
| 219 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">plain_process_info_nolink</code>·filter·does·not·alter·the·<code·class="inline">Event·Records</code>.·It·do | 219 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">plain_process_info_nolink</code>·filter·does·not·alter·the·<code·class="inline">Event·Records</code>.·It·do |
| 220 | makes·use·of·the·<code·class="inline">plain_process_info</code>·,·but·do·also·ensure·that·the·process·info | 220 | makes·use·of·the·<code·class="inline">plain_process_info</code>·,·but·do·also·ensure·that·the·process·info |
| 221 | related·to·linking·and·unlinking·is·skipped:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 221 | related·to·linking·and·unlinking·is·skipped:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 222 | </span><span·class="nf">plain_process_info_nolink</span><span·class="p"·data-group-id=" | 222 | </span><span·class="nf">plain_process_info_nolink</span><span·class="p"·data-group-id="2053101572-1">(</span><span·class="n">E</span><span·class="p"·data-group-id="2053101572-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_record</span><span·class="p"·data-group-id="2053101572-2">(</s[·...·truncated·by·diffoscope;·len:·146,·SHA:·096e59caad0c48b0011f9f5bced6472ab6a8edb0fb2f47bde8410395dcefe9cb·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ····</span><span·class="p"·data-group-id=" | 223 | ····</span><span·class="p"·data-group-id="2053101572-3">(</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">label</span><span·class="w">·</span><span·class="o">/=</span><span·class="w">·</span><span·class="nb">link</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·eb8ba90708c2e1279dbd25ee61c0c4d32c82427134d96e2121c7a467270ba319·...·]-3">)</span><span·class="w">·</span><span·class="nf">and</span><span·class="w"> |
| 224 | ····</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="p"·data-group-id="2053101572-4">(</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">label</span><span·class="w">·</span><span·class="o">/=</span><span·class="w">·</span><span·class="nb">unlink</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·ef729c22a20c6b7cf47ca4d674750dcc82515b00fc3e52a29e48835d664bf073·...·]-4">)</span><span·class="w">·</span><span·class="nf">and</span><span·class="w"> |
| 225 | ····</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="p"·data-group-id="2053101572-5">(</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">event</span><span·class="p">.</span><span·class="ss">label</span><span·class="w">·</span><span·class="o">/=</span><span·class="w">·</span><span·class="ss">getting_linked[·...·truncated·by·diffoscope;·len:·48,·SHA:·19f6f52900fc65daadcadd5553b6f8ca80c91240c9991594622b3ca66479e61c·...·]-5">)</span><span·class="w">·</span><span·class="ow">and</span><span·class="w"> |
| 226 | ····</span><span·class="nf">plain_process_info</span><span·class="p"·data-group-id=" | 226 | ····</span><span·class="nf">plain_process_info</span><span·class="p"·data-group-id="2053101572-6">(</span><span·class="n">E</span><span·class="p"·data-group-id="2053101572-6">)</span><span·class="p">.</span></code></pre><p>In·order·to·simplify·the·startup·of·an·<code·class="inline">et_viewer</code>·process·with·the·filters |
| 227 | mentioned·above,·plus·some·others·(that·also·are·found·in | 227 | mentioned·above,·plus·some·others·(that·also·are·found·in |
| 228 | <code·class="inline">et/examples/et_demo.erl</code>·src/et_collector.erl·the·<code·class="inline">et_demo:start/0,1</code>·functions | 228 | <code·class="inline">et/examples/et_demo.erl</code>·src/et_collector.erl·the·<code·class="inline">et_demo:start/0,1</code>·functions |
| 229 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 229 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 230 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 230 | </span><span·class="nf">start</span><span·class="p"·data-group-id="6974642975-1">(</span><span·class="p"·data-group-id="6974642975-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 231 | ····</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 231 | ····</span><span·class="nf">start</span><span·class="p"·data-group-id="6974642975-2">(</span><span·class="p"·data-group-id="6974642975-3">[</span><span·class="p"·data-group-id="6974642975-3">]</span><span·class="p"·data-group-id="6974642975-2">)</span><span·class="p">.</span><span·class="w"> |
| 232 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 232 | </span><span·class="nf">start</span><span·class="p"·data-group-id="6974642975-4">(</span><span·class="n">ExtraOptions</span><span·class="p"·data-group-id="6974642975-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 233 | ····</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 233 | ····</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6974642975-5">[</span><span·class="p"·data-group-id="6974642975-6">{</span><span·class="ss">trace_global</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="6974642975-6">}</span><span·class="p">,</span><span·class="w"> |
| 234 | ···············</span><span·class="p"·data-group-id=" | 234 | ···············</span><span·class="p"·data-group-id="6974642975-7">{</span><span·class="ss">parent_pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p"·data-group-id="6974642975-7">}</span><span·class="p">,</span><span·class="w"> |
| 235 | ···············</span><span·class="p"·data-group-id=" | 235 | ···············</span><span·class="p"·data-group-id="6974642975-8">{</span><span·class="ss">max_actors</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">infinity</span><span·class="p"·data-group-id="6974642975-8">}</span><span·class="p">,</span><span·class="w"> |
| 236 | ···············</span><span·class="p"·data-group-id=" | 236 | ···············</span><span·class="p"·data-group-id="6974642975-9">{</span><span·class="ss">max_events</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1000</span><span·class="p"·data-group-id="6974642975-9">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ···············</span><span·class="p"·data-group-id=" | 237 | ···············</span><span·class="p"·data-group-id="6974642975-10">{</span><span·class="ss">active_filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">module_as_actor</span><span·class="p"·data-group-id="6974642975-10">}</span><span·class="p"·data-group-id="6974642975-5">]</span><span·class="p">,</span><span·class="w"> |
| 238 | ····</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 238 | ····</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="6974642975-11">(</span><span·class="nf">filters</span><span·class="p"·data-group-id="6974642975-12">(</span><span·class="p"·data-group-id="6974642975-12">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">Optio[·...·truncated·by·diffoscope;·len:·158,·SHA:·24b441c6f13b4607afef5c325e945083150f76eebffd15d3e8fa057bf2f0efe0·...·]-11">)</span><span·class="p">.</span></code></pre><p>A·simple·one-liner·starts·the·tool:</p><pre><code·class="text">··········erl·-pa·../examples·-s·et_demo</code></pre><p>The·filters·are·included·by·the·following·parameters:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 239 | </span><span·class="nf">filters</span><span·class="p"·data-group-id=" | 239 | </span><span·class="nf">filters</span><span·class="p"·data-group-id="3755431938-1">(</span><span·class="p"·data-group-id="3755431938-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 240 | ····</span><span·class="p"·data-group-id=" | 240 | ····</span><span·class="p"·data-group-id="3755431938-2">[</span><span·class="p"·data-group-id="3755431938-3">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-4">{</span><span·class="ss">filter</span><span·class="p"[·...·truncated·by·diffoscope;·len:·113,·SHA:·f3f1345878e7bd7917a62f34a0162f168684abdee30a8a6b0f6454f10bbadf1e·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 241 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">module_as_actor</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 241 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">module_as_actor</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-3">}</span><span·class="p">,</span><span·class="w"> |
| 242 | ·····</span><span·class="p"·data-group-id=" | 242 | ·····</span><span·class="p"·data-group-id="3755431938-5">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-6">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pla[·...·truncated·by·diffoscope;·len:·63,·SHA:·9040acbf4487207445a60f53a5fa492c21181a9cb0f30616b9db6db2927a280e·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">plain_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 243 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">plain_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-5">}</span><span·class="p">,</span><span·class="w"> |
| 244 | ·····</span><span·class="p"·data-group-id=" | 244 | ·····</span><span·class="p"·data-group-id="3755431938-7">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-8">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pla[·...·truncated·by·diffoscope;·len:·70,·SHA:·ffae02aa3106bf76667e8c6f7fffa9ae924e2d4c1344b5aa7654865850ea9c23·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 245 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">plain_process_info_nolink</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 245 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">plain_process_info_nolink</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-7">}</span><span·class="p">,</span><span·class="w"> |
| 246 | ·····</span><span·class="p"·data-group-id=" | 246 | ·····</span><span·class="p"·data-group-id="3755431938-9">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-10">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">na[·...·truncated·by·diffoscope;·len:·64,·SHA:·6340e531fe7d16dd303e90b688190a2c63a93fa074601af317cc0ecd92a6c90c·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 247 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">named_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 247 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">named_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-9">}</span><span·class="p">,</span><span·class="w"> |
| 248 | ·····</span><span·class="p"·data-group-id=" | 248 | ·····</span><span·class="p"·data-group-id="3755431938-11">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-12">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">n[·...·truncated·by·diffoscope;·len:·72,·SHA:·0576fbf256724c53a6ff46628bfc40ca69853e735b50d655e097be998d9c0941·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 249 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">named_process_info_nolink</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 249 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">named_process_info_nolink</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-11">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ·····</span><span·class="p"·data-group-id=" | 250 | ·····</span><span·class="p"·data-group-id="3755431938-13">{</span><span·class="ss">dict_insert</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3755431938-14">{</span><span·class="ss">filter</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">n[·...·truncated·by·diffoscope;·len:·64,·SHA:·f0574082eb2913456c20c42d658ffae5f89b8a034e686e10cdc8a5d5c012a47c·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 251 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">node_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 251 | ···················</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">node_process_info</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="3755431938-13">}</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 97595/176908 bytes (55.17%) of diff not shown. | |||
| Offset 211, 15 lines modified | Offset 211, 15 lines modified | ||
| 211 | ······<p·class="built-using"> | 211 | ······<p·class="built-using"> |
| 212 | ········Built·using | 212 | ········Built·using |
| 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 215 | ······</p> | 215 | ······</p> |
| 216 | <p>Copyright·©·1996-202 | 216 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 217 | ····</footer> | 217 | ····</footer> |
| 218 | ··</div> | 218 | ··</div> |
| 219 | </main> | 219 | </main> |
| 220 | </div> | 220 | </div> |
| 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 222 | ··<script> | 222 | ··<script> |
| 223 | ··let·initialized·=·false; | 223 | ··let·initialized·=·false; |
| Offset 415, 15 lines modified | Offset 415, 15 lines modified | ||
| 415 | ······<p·class="built-using"> | 415 | ······<p·class="built-using"> |
| 416 | ········Built·using | 416 | ········Built·using |
| 417 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 417 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 418 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 418 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 419 | ······</p> | 419 | ······</p> |
| 420 | <p>Copyright·©·1996-202 | 420 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 421 | ····</footer> | 421 | ····</footer> |
| 422 | ··</div> | 422 | ··</div> |
| 423 | </main> | 423 | </main> |
| 424 | </div> | 424 | </div> |
| 425 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 425 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 426 | ··<script> | 426 | ··<script> |
| 427 | ··let·initialized·=·false; | 427 | ··let·initialized·=·false; |
| Offset 129, 49 lines modified | Offset 129, 49 lines modified | ||
| 129 | ··<a·href="#visualizing-message-sequence-charts"·class="hover-link"> | 129 | ··<a·href="#visualizing-message-sequence-charts"·class="hover-link"> |
| 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 131 | ··</a> | 131 | ··</a> |
| 132 | ··<span·class="text">Visualizing·Message·Sequence·Charts</span> | 132 | ··<span·class="text">Visualizing·Message·Sequence·Charts</span> |
| 133 | </h2> | 133 | </h2> |
| 134 | <p>The·easiest·way·of·using·<code·class="inline">ET</code>,·is·to·just·use·it·as·a·graphical·tool·for | 134 | <p>The·easiest·way·of·using·<code·class="inline">ET</code>,·is·to·just·use·it·as·a·graphical·tool·for |
| 135 | displaying·message·sequence·charts.·In·order·to·do·that·you·need·to·first·start | 135 | displaying·message·sequence·charts.·In·order·to·do·that·you·need·to·first·start |
| 136 | a·<code·class="inline">Viewer</code>·(which·by·default·starts·a·<code·class="inline">Collector</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id=" | 136 | a·<code·class="inline">Viewer</code>·(which·by·default·starts·a·<code·class="inline">Collector</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="5253165061-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ViewerPid</span><span·class="p"·data-group-id="5253165061-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·489,·SHA:·f150d7a18854f79bc824838be48a290b5fb8e872ac5002e961d1bf3004f3d5b2·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 137 | ······</span><span·class="n">CollectorPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id=" | 137 | ······</span><span·class="n">CollectorPid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id="5253165061-5">(</span><span·class="n">ViewerPid</span><span·class="p"·data-group-id="5253165061-5">)</span><span·class="p">.</span></code></pre><p><a·href=""·id="report_event"></a></p><p>Then·you·send·events·to·the·<code·class="inline">Collector</code>·with·the·function |
| 138 | <a·href="et_collector.html#report_event/6"><code·class="inline">et_collector:report_event/6</code></a>·like·this:</p><pre><code·class="text">······et_collector:report_event(CollectorPid,85,from,to,message,extra_stuff).</code></pre><p>The·<code·class="inline">Viewer</code>·will·automatically·pull·events·from·the·<code·class="inline">Collector</code>·and·display | 138 | <a·href="et_collector.html#report_event/6"><code·class="inline">et_collector:report_event/6</code></a>·like·this:</p><pre><code·class="text">······et_collector:report_event(CollectorPid,85,from,to,message,extra_stuff).</code></pre><p>The·<code·class="inline">Viewer</code>·will·automatically·pull·events·from·the·<code·class="inline">Collector</code>·and·display |
| 139 | them·on·the·screen.</p><p>The·number·(in·this·case·85)·is·an·integer·from·1·to·100·that·specifies·the | 139 | them·on·the·screen.</p><p>The·number·(in·this·case·85)·is·an·integer·from·1·to·100·that·specifies·the |
| 140 | "detail·level"·of·the·message.·The·higher·the·number,·the·more·important·it·is. | 140 | "detail·level"·of·the·message.·The·higher·the·number,·the·more·important·it·is. |
| 141 | This·provides·a·crude·form·of·priority·filtering.</p><p>The·<code·class="inline">from</code>,·<code·class="inline">to</code>,·and·<code·class="inline">message</code>·parameters·are·exactly·what·they·sound·like. | 141 | This·provides·a·crude·form·of·priority·filtering.</p><p>The·<code·class="inline">from</code>,·<code·class="inline">to</code>,·and·<code·class="inline">message</code>·parameters·are·exactly·what·they·sound·like. |
| 142 | <code·class="inline">from</code>·and·<code·class="inline">to</code>·are·visualized·in·the·<code·class="inline">Viewer</code>·as·"lifelines",·with·the·message | 142 | <code·class="inline">from</code>·and·<code·class="inline">to</code>·are·visualized·in·the·<code·class="inline">Viewer</code>·as·"lifelines",·with·the·message |
| 143 | passing·from·one·to·the·other.·If·<code·class="inline">from</code>·and·<code·class="inline">to</code>·are·the·same·value,·then·it·is | 143 | passing·from·one·to·the·other.·If·<code·class="inline">from</code>·and·<code·class="inline">to</code>·are·the·same·value,·then·it·is |
| 144 | displayed·next·to·the·lifeline·as·an·"action".·The·<code·class="inline">extra_stuff</code>value·is·simply | 144 | displayed·next·to·the·lifeline·as·an·"action".·The·<code·class="inline">extra_stuff</code>value·is·simply |
| 145 | data·that·you·can·attach·that·will·be·displayed·when·someone·actually·clicks·on | 145 | data·that·you·can·attach·that·will·be·displayed·when·someone·actually·clicks·on |
| 146 | the·action·or·message·in·the·<code·class="inline">Viewer</code>·window.</p><p>The·module·<code·class="inline">et/examples/et_display_demo.erl</code>·illustrates·how·it·can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 146 | the·action·or·message·in·the·<code·class="inline">Viewer</code>·window.</p><p>The·module·<code·class="inline">et/examples/et_display_demo.erl</code>·illustrates·how·it·can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 147 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 147 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8125730315-1">(</span><span·class="ss">et_display_demo</span><span·class="p"·data-group-id="8125730315-1">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="w"> | 148 | </span><span·class="w"> |
| 149 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 149 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8125730315-2">(</span><span·class="p"·data-group-id="8125730315-3">[</span><span·class="ss">test</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="8125730315-3">]</span><span·class="p"·data-group-id="8125730315-2">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="nf">test</span><span·class="p"·data-group-id=" | 150 | </span><span·class="nf">test</span><span·class="p"·data-group-id="8125730315-4">(</span><span·class="p"·data-group-id="8125730315-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 151 | ····</span><span·class="p"·data-group-id=" | 151 | ····</span><span·class="p"·data-group-id="8125730315-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Viewer</span><span·class="p"·data-group-id="8125730315-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·724,·SHA:·a363918393e6d64ce44f4d78812ce461715a61e155f12625cc26dc374157ee3f·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 152 | ····</span><span·class="n">Drink</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 152 | ····</span><span·class="n">Drink</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8125730315-10">{</span><span·class="ss">drink</span><span·class="p">,</span><span·class="ss">iced_chai_latte</span><span·class="p"·data-group-id="8125730315-10">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ····</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 153 | ····</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8125730315-11">{</span><span·class="nb">size</span><span·class="p">,</span><span·class="ss">grande</span><span·class="p"·data-group-id="8125730315-11">}</span><span·class="p">,</span><span·class="w"> |
| 154 | ····</span><span·class="n">Milk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 154 | ····</span><span·class="n">Milk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8125730315-12">{</span><span·class="ss">milk</span><span·class="p">,</span><span·class="ss">whole</span><span·class="p"·data-group-id="8125730315-12">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ····</span><span·class="n">Flavor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 155 | ····</span><span·class="n">Flavor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8125730315-13">{</span><span·class="ss">flavor</span><span·class="p">,</span><span·class="ss">vanilla</span><span·class="p"·data-group-id="8125730315-13">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ····</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id=" | 156 | ····</span><span·class="n">C</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">get_collector_pid</span><span·class="p"·data-group-id="8125730315-14">(</span><span·class="n">Viewer</span><span·class="p"·data-group-id="8125730315-14">)</span><span·class="p">,</span><span·class="w"> |
| 157 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 157 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-15">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">99</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">place[·...·truncated·by·diffoscope;·len:·369,·SHA:·5c67031d036ef5984cc0fe0070f295909c2ba4f6abd2401a91122a4f09d0720e·...·]-15">)</span><span·class="p">,</span><span·class="w"> |
| 158 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-17">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="nb">register</span><span·class="p">,</span><span·class="ss">enter[·...·truncated·by·diffoscope;·len:·318,·SHA:·e8522747f90890015331ff66edba385265fb7c13887e0d22d31701bcbc51b052·...·]-17">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 159 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-19">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="nb">register</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">give_[·...·truncated·by·diffoscope;·len:·114,·SHA:·e6bd7bdf80a79d72cad117fd3d0fdd635a7c0944bdd83e7a64c1a0cc4ef63e53·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 160 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 160 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-20">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">get_[·...·truncated·by·diffoscope;·len:·262,·SHA:·dd51e8538d82222cb0ad54e04d6db0e7c55db11f440ee1940b37381ff4e0890e·...·]-20">)</span><span·class="p">,</span><span·class="w"> |
| 161 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 161 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-22">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">give[·...·truncated·by·diffoscope;·len:·184,·SHA:·1a2b40b11a8ab71f06df469c44b848b27f2f077420b2e0a5501c52e59ae9ff17·...·]-22">)</span><span·class="p">,</span><span·class="w"> |
| 162 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-24">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">90</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">reque[·...·truncated·by·diffoscope;·len:·117,·SHA:·96f7e954058d11b1513bb79e259afc5fabc0d90bb57487c09655330376dd386e·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 163 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 163 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-25">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">90</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">pay_m[·...·truncated·by·diffoscope;·len:·113,·SHA:·36a4f282ad5254d76c675b3d1187521d6c49fc246692f45198bc7a25b223a578·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 164 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-26">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">get_[·...·truncated·by·diffoscope;·len:·188,·SHA:·b1901e0432328e40796c0e6fc8d23fd644d60c2e426f3abbe5b8eee27af237b8·...·]-26">)</span><span·class="p">,</span><span·class="w"> |
| 165 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 165 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-28">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_[·...·truncated·by·diffoscope;·len:·215,·SHA:·9d5cd7eb1b28081e57ebbad2b4682def9cccb242794e001fa60e5b772e5a66f8·...·]-28">)</span><span·class="p">,</span><span·class="w"> |
| 166 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-30">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_[·...·truncated·by·diffoscope;·len:·211,·SHA:·28fdab0a210d89c0e2174f7cf67bb85b9024bc7ade268d219d29b543aa7f717f·...·]-30">)</span><span·class="p">,</span><span·class="w"> |
| 167 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-32">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_[·...·truncated·by·diffoscope;·len:·183,·SHA:·79fd42437a0e9be97fda5fb5881f92668e03074281b4e16a5982719bb790b7c5·...·]-32">)</span><span·class="p">,</span><span·class="w"> |
| 168 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 168 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-34">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">swir[·...·truncated·by·diffoscope;·len:·181,·SHA:·22027766839dd769e71947b3cc9c18de5a0210705ed7ca8b551474aa545839b7·...·]-34">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id=" | 169 | ····</span><span·class="nc">et_collector</span><span·class="p">:</span><span·class="nf">report_event</span><span·class="p"·data-group-id="8125730315-36">(</span><span·class="n">C</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">give_[·...·truncated·by·diffoscope;·len:·273,·SHA:·de48d83a9cec6558343569529e9579d99039cf6f1ee79c47c22e34fd9dcfe502·...·]-36">)</span><span·class="p">,</span><span·class="w"> |
| 170 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>When·you·run·the·<code·class="inline">et_display_demo:test().</code>·function·in·the·example·above,·the | 170 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>When·you·run·the·<code·class="inline">et_display_demo:test().</code>·function·in·the·example·above,·the |
| 171 | <code·class="inline">Viewer</code>·window·will·look·like·this:</p><p><img·src="assets/coffee_order.png"·alt="Screenshot·of·the·Viewer·window"·title="Screenshot·of·the·Viewer·window"/></p><h2·id="four-modules"·class="section-heading"> | 171 | <code·class="inline">Viewer</code>·window·will·look·like·this:</p><p><img·src="assets/coffee_order.png"·alt="Screenshot·of·the·Viewer·window"·title="Screenshot·of·the·Viewer·window"/></p><h2·id="four-modules"·class="section-heading"> |
| 172 | ··<a·href="#four-modules"·class="hover-link"> | 172 | ··<a·href="#four-modules"·class="hover-link"> |
| 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 174 | ··</a> | 174 | ··</a> |
| 175 | ··<span·class="text">Four·Modules</span> | 175 | ··<span·class="text">Four·Modules</span> |
| 176 | </h2> | 176 | </h2> |
| Offset 195, 15 lines modified | Offset 195, 15 lines modified | ||
| 195 | <code·class="inline">Tracer</code>·of·the·<code·class="inline">Raw·Trace·Data</code>.</p><p>Erlang·tracing·is·a·seething·pile·of·pain·that·involves·reasonably·complex | 195 | <code·class="inline">Tracer</code>·of·the·<code·class="inline">Raw·Trace·Data</code>.</p><p>Erlang·tracing·is·a·seething·pile·of·pain·that·involves·reasonably·complex |
| 196 | knowledge·of·clever·ports,·tracing·return·formats,·and·specialized·tracing | 196 | knowledge·of·clever·ports,·tracing·return·formats,·and·specialized·tracing |
| 197 | <code·class="inline">MatchSpecs</code>·(which·are·really·their·own·special·kind·of·hell).·The·tracing | 197 | <code·class="inline">MatchSpecs</code>·(which·are·really·their·own·special·kind·of·hell).·The·tracing |
| 198 | mechanism·is·very·powerful·indeed,·but·it·can·be·hard·to·grasp.</p><p>Luckily·there·is·a·simplified·way·to·start·tracing·of·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function | 198 | mechanism·is·very·powerful·indeed,·but·it·can·be·hard·to·grasp.</p><p>Luckily·there·is·a·simplified·way·to·start·tracing·of·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function |
| 199 | calls.·The·idea·is·that·you·should·instrument·your·code·with·calls·to | 199 | calls.·The·idea·is·that·you·should·instrument·your·code·with·calls·to |
| 200 | <a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·in·strategic·places·where·you·have·interesting·information | 200 | <a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·in·strategic·places·where·you·have·interesting·information |
| 201 | available·in·your·program.·Then·you·just·start·the·<code·class="inline">Collector</code>·with·global | 201 | available·in·your·program.·Then·you·just·start·the·<code·class="inline">Collector</code>·with·global |
| 202 | tracing·enabled:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 202 | tracing·enabled:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5705681070-1">(</span><span·class="p"·data-group-id="5705681070-2">[</span><span·class="p"·data-group-id="5705681070-3">{</span><span·class="ss">trace_global</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·553,·SHA:·1c202bf02140cc57c6a1d61790e2fadc586cb088cc3a4e309ccecc93e39579aa·...·]-1">)</span><span·class="p">.</span></code></pre><p>This·will·start·a·<code·class="inline">Collector</code>,·a·<code·class="inline">Viewer</code>·and·also·start·the·tracing·of |
| 203 | <a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function·calls.·The·<code·class="inline">Raw·Trace·Data</code>·is·collected·by·the | 203 | <a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function·calls.·The·<code·class="inline">Raw·Trace·Data</code>·is·collected·by·the |
| 204 | <code·class="inline">Collector</code>·and·a·view·of·it·is·displayed·on·the·screen·by·the·<code·class="inline">Viewer</code>.·You·can | 204 | <code·class="inline">Collector</code>·and·a·view·of·it·is·displayed·on·the·screen·by·the·<code·class="inline">Viewer</code>.·You·can |
| 205 | define·your·own·"views"·of·the·data·by·implementing·your·own·<code·class="inline">Filter</code>·functions | 205 | define·your·own·"views"·of·the·data·by·implementing·your·own·<code·class="inline">Filter</code>·functions |
| 206 | and·register·them·in·the·<code·class="inline">Viewer</code>.</p><h2·id="the-collector-and-viewer"·class="section-heading"> | 206 | and·register·them·in·the·<code·class="inline">Viewer</code>.</p><h2·id="the-collector-and-viewer"·class="section-heading"> |
| 207 | ··<a·href="#the-collector-and-viewer"·class="hover-link"> | 207 | ··<a·href="#the-collector-and-viewer"·class="hover-link"> |
| 208 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 208 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 209 | ··</a> | 209 | ··</a> |
| Offset 251, 44 lines modified | Offset 251, 44 lines modified | ||
| 251 | ··</a> | 251 | ··</a> |
| 252 | ··<span·class="text">How·To·Put·It·Together</span> | 252 | ··<span·class="text">How·To·Put·It·Together</span> |
| 253 | </h2> | 253 | </h2> |
| 254 | <p>The·<code·class="inline">Collector</code>·automatically·registers·itself·to·listen·for·trace·<code·class="inline">Events</code>,·so | 254 | <p>The·<code·class="inline">Collector</code>·automatically·registers·itself·to·listen·for·trace·<code·class="inline">Events</code>,·so |
| 255 | all·you·have·to·do·is·enable·them.</p><p>For·those·people·who·want·to·do·general·tracing,·consult·the·<code·class="inline">dbg</code>·module·on·how | 255 | all·you·have·to·do·is·enable·them.</p><p>For·those·people·who·want·to·do·general·tracing,·consult·the·<code·class="inline">dbg</code>·module·on·how |
| 256 | to·trace·whatever·you're·interested·in·and·let·it·work·its·magic.·If·you·just | 256 | to·trace·whatever·you're·interested·in·and·let·it·work·its·magic.·If·you·just |
| 257 | want·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·to·work,·do·the·following:</p><ol><li>Create·a·<code·class="inline">Collector</code></li><li>Create·a·<code·class="inline">Viewer</code>·(this·can·do·step·#1·for·you)</li><li>Turn·on·and·pare·down·debugging</li></ol><p>The·module·<code·class="inline">et/examples/et_trace_demo.erl</code>·achieves·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> | 257 | want·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·to·work,·do·the·following:</p><ol><li>Create·a·<code·class="inline">Collector</code></li><li>Create·a·<code·class="inline">Viewer</code>·(this·can·do·step·#1·for·you)</li><li>Turn·on·and·pare·down·debugging</li></ol><p>The·module·<code·class="inline">et/examples/et_trace_demo.erl</code>·achieves·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w"> |
| 258 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 258 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9911591258-1">(</span><span·class="ss">et_trace_demo</span><span·class="p"·data-group-id="9911591258-1">)</span><span·class="p">.</span><span·class="w"> |
| 259 | </span><span·class="w"> | 259 | </span><span·class="w"> |
| 260 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 260 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9911591258-2">(</span><span·class="p"·data-group-id="9911591258-3">[</span><span·class="ss">test</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="9911591258-3">]</span><span·class="p"·data-group-id="9911591258-2">)</span><span·class="p">.</span><span·class="w"> |
| 261 | </span><span·class="nf">test</span><span·class="p"·data-group-id=" | 261 | </span><span·class="nf">test</span><span·class="p"·data-group-id="9911591258-4">(</span><span·class="p"·data-group-id="9911591258-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 262 | ····</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 262 | ····</span><span·class="nc">et_viewer</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9911591258-5">(</span><span·class="p"·data-group-id="9911591258-6">[</span><span·class="w"> |
| 263 | ········</span><span·class="p"·data-group-id=" | 263 | ········</span><span·class="p"·data-group-id="9911591258-7">{</span><span·class="ss">title</span><span·class="p">,</span><span·class="s">"Coffee·Order"</span><span·class="p"·data-group-id="9911591258-7">}</span><span·class="p">,</span><span·class="w"> |
| 264 | ········</span><span·class="p"·data-group-id=" | 264 | ········</span><span·class="p"·data-group-id="9911591258-8">{</span><span·class="ss">trace_global</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="9911591258-8">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ········</span><span·class="p"·data-group-id=" | 265 | ········</span><span·class="p"·data-group-id="9911591258-9">{</span><span·class="nb">trace_pattern</span><span·class="p">,</span><span·class="p"·data-group-id="9911591258-10">{</span><span·class="ss">et</span><span·class="p">,</span><span·class="ss">max</span><span·class="p"·data-group-id="9911591258-[·...·truncated·by·diffoscope;·len:·53,·SHA:·dd4edd42c9890ec74ede6425e1a69f8e49503c7778abd33dc43537e5df9ac0f5·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 266 | ········</span><span·class="p"·data-group-id=" | 266 | ········</span><span·class="p"·data-group-id="9911591258-11">{</span><span·class="ss">max_actors</span><span·class="p">,</span><span·class="mi">10</span><span·class="p"·data-group-id="9911591258-11">}</span><span·class="w"> |
| 267 | ······</span><span·class="p"·data-group-id=" | 267 | ······</span><span·class="p"·data-group-id="9911591258-6">]</span><span·class="p"·data-group-id="9911591258-5">)</span><span·class="p">,</span><span·class="w"> |
| 268 | ······</span><span·class="c1">%%·dbg:p(all,call),</span><span·class="w"> | 268 | ······</span><span·class="c1">%%·dbg:p(all,call),</span><span·class="w"> |
| 269 | ······</span><span·class="c1">%%·dbg:tpl(et,·trace_me,·5,·[]),</span><span·class="w"> | 269 | ······</span><span·class="c1">%%·dbg:tpl(et,·trace_me,·5,·[]),</span><span·class="w"> |
| 270 | ······</span><span·class="n">Drink</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 270 | ······</span><span·class="n">Drink</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9911591258-12">{</span><span·class="ss">drink</span><span·class="p">,</span><span·class="ss">iced_chai_latte</span><span·class="p"·data-group-id="9911591258-12">}</span><span·class="p">,</span><span·class="w"> |
| 271 | ······</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 271 | ······</span><span·class="n">Size</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9911591258-13">{</span><span·class="nb">size</span><span·class="p">,</span><span·class="ss">grande</span><span·class="p"·data-group-id="9911591258-13">}</span><span·class="p">,</span><span·class="w"> |
| 272 | ······</span><span·class="n">Milk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 272 | ······</span><span·class="n">Milk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9911591258-14">{</span><span·class="ss">milk</span><span·class="p">,</span><span·class="ss">whole</span><span·class="p"·data-group-id="9911591258-14">}</span><span·class="p">,</span><span·class="w"> |
| 273 | ······</span><span·class="n">Flavor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 273 | ······</span><span·class="n">Flavor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9911591258-15">{</span><span·class="ss">flavor</span><span·class="p">,</span><span·class="ss">vanilla</span><span·class="p"·data-group-id="9911591258-15">}</span><span·class="p">,</span><span·class="w"> |
| 274 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 274 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-16">(</span><span·class="mi">99</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">place_order</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·321,·SHA:·b35d83f61782686be95f87e3e2ad631848c7a673710ad0da507960adc4d4c070·...·]-16">)</span><span·class="p">,</span><span·class="w"> |
| 275 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 275 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-18">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="nb">register</span><span·class="p">,</span><span·class="ss">enter_order</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·270,·SHA:·376a039fb8b55f2dba956f2bfced0d2b14e3ca989befde655973694d496e66c2·...·]-18">)</span><span·class="p">,</span><span·class="w"> |
| 276 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 276 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-20">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="nb">register</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">give_total</span><span·class="p">,</span><span·class=[·...·truncated·by·diffoscope;·len:·66,·SHA:·0e16be877126f22e73578c811c348a765d54e0ec08c9928fd32632948ea91e0c·...·]-20">)</span><span·class="p">,</span><span·class="w"> |
| 277 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 277 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-21">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">get_cup</span><span·class="p">,</span><span·class="p[·...·truncated·by·diffoscope;·len:·214,·SHA:·3b520962cb8a847c5f6502d88ee81a17b16efc9c37c1969f694f422ec2fa058e·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 278 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 278 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-23">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">give_cup</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·136,·SHA:·6ddcd19eab3e6fbb228d79a52251f64f38c8272e5d6057c1c4e399c4cfa9c1b2·...·]-23">)</span><span·class="p">,</span><span·class="w"> |
| 279 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 279 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-25">(</span><span·class="mi">90</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">request_money</span><span·class="p">,</span><span·cla[·...·truncated·by·diffoscope;·len:·69,·SHA:·0e182c0abb8b350892ef887158b505bcc491fb1a206180f48ac44b2da65126a7·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 280 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 280 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-26">(</span><span·class="mi">90</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">barrista1</span><span·class="p">,</span><span·class="ss">pay_money</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·65,·SHA:·2f82c76bc60ddca800651ad1b4c7737efb6f1d0a87c26d33a215a57d6916b6cc·...·]-26">)</span><span·class="p">,</span><span·class="w"> |
| 281 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 281 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-27">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">get_chai_mix</span><span·class="p">,</span><span·cla[·...·truncated·by·diffoscope;·len:·140,·SHA:·1ee852576d9cfb23f03ef0357a8084073033f079064b57a8e97a08e4d09af877·...·]-27">)</span><span·class="p">,</span><span·class="w"> |
| 282 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 282 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-29">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_flavor</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·167,·SHA:·be29aefdb9850f041e7ab4c7602828accc42b5a1538ccfa8e20f6d830838221f·...·]-29">)</span><span·class="p">,</span><span·class="w"> |
| 283 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 283 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-31">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_milk</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·163,·SHA:·b3e7c410960f99ec86bb3d2cfee60fb008fb85a090e4aa7e51c9fd8ce2798e50·...·]-31">)</span><span·class="p">,</span><span·class="w"> |
| 284 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 284 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-33">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">add_ice</span><span·class="p">,</span><span·class="p[·...·truncated·by·diffoscope;·len:·135,·SHA:·2bf63e3da4a6bb50f7d0206b2f490acfa72e9319e86f9d0e4e53585394e27d56·...·]-33">)</span><span·class="p">,</span><span·class="w"> |
| 285 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 285 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-35">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">swirl</span><span·class="p">,</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·133,·SHA:·51ffd1169fd9828ee191ccc3de30f5b00ba657736123633ce62c0bded6f6f2db·...·]-35">)</span><span·class="p">,</span><span·class="w"> |
| 286 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id=" | 286 | ······</span><span·class="nc">et</span><span·class="p">:</span><span·class="nf">trace_me</span><span·class="p"·data-group-id="9911591258-37">(</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">barrista2</span><span·class="p">,</span><span·class="ss">customer</span><span·class="p">,</span><span·class="ss">give_tasty_beverage</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·225,·SHA:·0a7dd768df4da5d448377ebe02ba9dc69358eb899d64307f2cea352466835255·...·]-37">)</span><span·class="p">,</span><span·class="w"> |
| 287 | ······</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>Running·through·the·above,·the·most·important·points·are:</p><ul><li>Turn·on·global·tracing</li><li>Set·a·<code·class="inline">Trace·Pattern</code></li><li>Tell·<code·class="inline">dbg</code>·to·trace·function·Calls</li><li>Tell·it·specifically·to·trace·the·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function</li></ul><p>When·you·run·the·<code·class="inline">et_trace_demo:test()</code>·function·above,·the·<code·class="inline">Viewer</code>·window·will | 287 | ······</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>Running·through·the·above,·the·most·important·points·are:</p><ul><li>Turn·on·global·tracing</li><li>Set·a·<code·class="inline">Trace·Pattern</code></li><li>Tell·<code·class="inline">dbg</code>·to·trace·function·Calls</li><li>Tell·it·specifically·to·trace·the·<a·href="et.html#trace_me/5"><code·class="inline">et:trace_me/5</code></a>·function</li></ul><p>When·you·run·the·<code·class="inline">et_trace_demo:test()</code>·function·above,·the·<code·class="inline">Viewer</code>·window·will |
| 288 | look·like·this·screenshot:</p><p><img·src="assets/coffee_order.png"·alt="Screenshot·of·the·Viewer·window"·title="Screenshot·of·the·Viewer·window"/></p> | 288 | look·like·this·screenshot:</p><p><img·src="assets/coffee_order.png"·alt="Screenshot·of·the·Viewer·window"·title="Screenshot·of·the·Viewer·window"/></p> |
| 289 | </div> | 289 | </div> |
| 290 | <div·class="bottom-actions"·id="bottom-actions"> | 290 | <div·class="bottom-actions"·id="bottom-actions"> |
| 291 | ··<div·class="bottom-actions-item"> | 291 | ··<div·class="bottom-actions-item"> |
| Offset 333, 15 lines modified | Offset 333, 15 lines modified | ||
| 333 | ······<p·class="built-using"> | 333 | ······<p·class="built-using"> |
| 334 | ········Built·using | 334 | ········Built·using |
| 335 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 335 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 336 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 336 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 337 | ······</p> | 337 | ······</p> |
| 338 | <p>Copyright·©·1996-202 | 338 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 339 | ····</footer> | 339 | ····</footer> |
| 340 | ··</div> | 340 | ··</div> |
| 341 | </main> | 341 | </main> |
| 342 | </div> | 342 | </div> |
| 343 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 343 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 344 | ··<script> | 344 | ··<script> |
| 345 | ··let·initialized·=·false; | 345 | ··let·initialized·=·false; |
| Offset 549, 15 lines modified | Offset 549, 15 lines modified | ||
| 549 | ······<p·class="built-using"> | 549 | ······<p·class="built-using"> |
| 550 | ········Built·using | 550 | ········Built·using |
| 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 553 | ······</p> | 553 | ······</p> |
| 554 | <p>Copyright·©·1996-202 | 554 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 555 | ····</footer> | 555 | ····</footer> |
| 556 | ··</div> | 556 | ··</div> |
| 557 | </main> | 557 | </main> |
| 558 | </div> | 558 | </div> |
| 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 560 | ··<script> | 560 | ··<script> |
| 561 | ··let·initialized·=·false; | 561 | ··let·initialized·=·false; |
| Offset 546, 15 lines modified | Offset 546, 15 lines modified | ||
| 546 | ······<p·class="built-using"> | 546 | ······<p·class="built-using"> |
| 547 | ········Built·using | 547 | ········Built·using |
| 548 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 548 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 549 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 549 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 550 | ······</p> | 550 | ······</p> |
| 551 | <p>Copyright·©·1996-202 | 551 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 552 | ····</footer> | 552 | ····</footer> |
| 553 | ··</div> | 553 | ··</div> |
| 554 | </main> | 554 | </main> |
| 555 | </div> | 555 | </div> |
| 556 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 556 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 557 | ··<script> | 557 | ··<script> |
| 558 | ··let·initialized·=·false; | 558 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-C01CA0BB.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 191, 15 lines modified | Offset 191, 15 lines modified | ||
| 191 | ······<p·class="built-using"> | 191 | ······<p·class="built-using"> |
| 192 | ········Built·using | 192 | ········Built·using |
| 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 195 | ······</p> | 195 | ······</p> |
| 196 | <p>Copyright·©·1996-202 | 196 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 197 | ····</footer> | 197 | ····</footer> |
| 198 | ··</div> | 198 | ··</div> |
| 199 | </main> | 199 | </main> |
| 200 | </div> | 200 | </div> |
| 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 202 | ··<script> | 202 | ··<script> |
| 203 | ··let·initialized·=·false; | 203 | ··let·initialized·=·false; |
| Offset 790, 15 lines modified | Offset 790, 15 lines modified | ||
| 790 | ······<p·class="built-using"> | 790 | ······<p·class="built-using"> |
| 791 | ········Built·using | 791 | ········Built·using |
| 792 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 792 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 793 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 793 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 794 | ······</p> | 794 | ······</p> |
| 795 | <p>Copyright·©·1996-202 | 795 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 796 | ····</footer> | 796 | ····</footer> |
| 797 | ··</div> | 797 | ··</div> |
| 798 | </main> | 798 | </main> |
| 799 | </div> | 799 | </div> |
| 800 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 800 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 801 | ··<script> | 801 | ··<script> |
| 802 | ··let·initialized·=·false; | 802 | ··let·initialized·=·false; |
| Offset 338, 15 lines modified | Offset 338, 15 lines modified | ||
| 338 | ······<p·class="built-using"> | 338 | ······<p·class="built-using"> |
| 339 | ········Built·using | 339 | ········Built·using |
| 340 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 340 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 341 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 341 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 342 | ······</p> | 342 | ······</p> |
| 343 | <p>Copyright·©·1996-202 | 343 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 344 | ····</footer> | 344 | ····</footer> |
| 345 | ··</div> | 345 | ··</div> |
| 346 | </main> | 346 | </main> |
| 347 | </div> | 347 | </div> |
| 348 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 348 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 349 | ··<script> | 349 | ··<script> |
| 350 | ··let·initialized·=·false; | 350 | ··let·initialized·=·false; |
| Offset 154, 15 lines modified | Offset 154, 15 lines modified | ||
| 154 | ······<p·class="built-using"> | 154 | ······<p·class="built-using"> |
| 155 | ········Built·using | 155 | ········Built·using |
| 156 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 156 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 157 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 157 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 158 | ······</p> | 158 | ······</p> |
| 159 | <p>Copyright·©·1996-202 | 159 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 160 | ····</footer> | 160 | ····</footer> |
| 161 | ··</div> | 161 | ··</div> |
| 162 | </main> | 162 | </main> |
| 163 | </div> | 163 | </div> |
| 164 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 164 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 165 | ··<script> | 165 | ··<script> |
| 166 | ··let·initialized·=·false; | 166 | ··let·initialized·=·false; |
| Offset 769, 15 lines modified | Offset 769, 15 lines modified | ||
| 769 | ······<p·class="built-using"> | 769 | ······<p·class="built-using"> |
| 770 | ········Built·using | 770 | ········Built·using |
| 771 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 771 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 772 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 772 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 773 | ······</p> | 773 | ······</p> |
| 774 | <p>Copyright·©·1996-202 | 774 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 775 | ····</footer> | 775 | ····</footer> |
| 776 | ··</div> | 776 | ··</div> |
| 777 | </main> | 777 | </main> |
| 778 | </div> | 778 | </div> |
| 779 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 779 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 780 | ··<script> | 780 | ··<script> |
| 781 | ··let·initialized·=·false; | 781 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 1840, 15 lines modified | Offset 1840, 15 lines modified | ||
| 1840 | ······<p·class="built-using"> | 1840 | ······<p·class="built-using"> |
| 1841 | ········Built·using | 1841 | ········Built·using |
| 1842 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1842 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1843 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1843 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1844 | ······</p> | 1844 | ······</p> |
| 1845 | <p>Copyright·©·1996-202 | 1845 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1846 | ····</footer> | 1846 | ····</footer> |
| 1847 | ··</div> | 1847 | ··</div> |
| 1848 | </main> | 1848 | </main> |
| 1849 | </div> | 1849 | </div> |
| 1850 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1850 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1851 | ··<script> | 1851 | ··<script> |
| 1852 | ··let·initialized·=·false; | 1852 | ··let·initialized·=·false; |
| Offset 122, 33 lines modified | Offset 122, 33 lines modified | ||
| 122 | ······</a> | 122 | ······</a> |
| 123 | ····<span>Examples</span> | 123 | ····<span>Examples</span> |
| 124 | ··</h1> | 124 | ··</h1> |
| 125 | <p>The·following·is·a·simple·example·of·an·FTP·session,·where·the·user·<code·class="inline">guest</code>·with | 125 | <p>The·following·is·a·simple·example·of·an·FTP·session,·where·the·user·<code·class="inline">guest</code>·with |
| 126 | password·<code·class="inline">password</code>·logs·on·to·the·remote·host·<code·class="inline">erlang.org</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 126 | password·<code·class="inline">password</code>·logs·on·to·the·remote·host·<code·class="inline">erlang.org</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9940426710-1">(</span><span·class="p"·data-group-id="9940426710-1">)</span><span·class="p">.</span><span·class="w"> |
| 127 | ······</span><span·class="ss">ok</span><span·class="w"> | 127 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 128 | ······</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id=" | 128 | ······</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="9940426710-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="9940426710-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·497,·SHA:·def0bef0178ce5bfc4c4842b986fbfb5e2168b0d2e92c62c8b9f1775a53b4086·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 129 | ······</span><span·class="p"·data-group-id=" | 129 | ······</span><span·class="p"·data-group-id="9940426710-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.22</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="9940426710-6">}</span><span·class="w"> |
| 130 | ······</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">user</span><span·class="p"·data-group-id=" | 130 | ······</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">user</span><span·class="p"·data-group-id="9940426710-7">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"guest"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"password"</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·4dbf9427a13fd87848acde207739f2dd66915671302c09c9878f072732327d5c·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 131 | ······</span><span·class="ss">ok</span><span·class="w"> | 131 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 132 | ······</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">pwd</span><span·class="p"·data-group-id=" | 132 | ······</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">pwd</span><span·class="p"·data-group-id="9940426710-8">(</span><span·class="n">Pid</span><span·class="p"·data-group-id="9940426710-8">)</span><span·class="p">.</span><span·class="w"> |
| 133 | ······</span><span·class="p"·data-group-id=" | 133 | ······</span><span·class="p"·data-group-id="9940426710-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/guest"</span><span·class="p"·data-group-id="9940426710-9">}</span><span·class="w"> |
| 134 | ······</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">cd</span><span·class="p"·data-group-id=" | 134 | ······</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">cd</span><span·class="p"·data-group-id="9940426710-10">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"appl/examples"</span><span·class="p"·data-group-id="9940426710-10">)</span><span·class="p">.</span><span·class="w"> |
| 135 | ······</span><span·class="ss">ok</span><span·class="w"> | 135 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 136 | ······</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">lpwd</span><span·class="p"·data-group-id=" | 136 | ······</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">lpwd</span><span·class="p"·data-group-id="9940426710-11">(</span><span·class="n">Pid</span><span·class="p"·data-group-id="9940426710-11">)</span><span·class="p">.</span><span·class="w"> |
| 137 | ······</span><span·class="p"·data-group-id=" | 137 | ······</span><span·class="p"·data-group-id="9940426710-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/fred"</span><span·class="p"·data-group-id="9940426710-12">}</span><span·class="p">.</span><span·class="w"> |
| 138 | ······</span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">lcd</span><span·class="p"·data-group-id=" | 138 | ······</span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">lcd</span><span·class="p"·data-group-id="9940426710-13">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/eproj/examples"</span><span·class="p"·data-group-id="9940426710-13">)</span><span·class="p">.</span><span·class="w"> |
| 139 | ······</span><span·class="ss">ok</span><span·class="w"> | 139 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 140 | ······</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 140 | ······</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="9940426710-14">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"appl.erl"</span><span·class="p"·data-group-id="9940426710-14">)</span><span·class="p">.</span><span·class="w"> |
| 141 | ······</span><span·class="ss">ok</span><span·class="w"> | 141 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 142 | ······</span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 142 | ······</span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9940426710-15">(</span><span·class="n">Pid</span><span·class="p"·data-group-id="9940426710-15">)</span><span·class="p">.</span><span·class="w"> |
| 143 | ······</span><span·class="ss">ok</span><span·class="w"> | 143 | ······</span><span·class="ss">ok</span><span·class="w"> |
| 144 | ······</span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 144 | ······</span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ftp</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="9940426710-16">(</span><span·class="p"·data-group-id="9940426710-16">)</span><span·class="p">.</span><span·class="w"> |
| 145 | ······</span><span·class="ss">ok</span></code></pre><p>The·file·<code·class="inline">appl.erl</code>·is·transferred·from·the·remote·to·the·local·host.·When·the | 145 | ······</span><span·class="ss">ok</span></code></pre><p>The·file·<code·class="inline">appl.erl</code>·is·transferred·from·the·remote·to·the·local·host.·When·the |
| 146 | session·is·opened,·the·current·directory·at·the·remote·host·is·<code·class="inline">/home/guest</code>, | 146 | session·is·opened,·the·current·directory·at·the·remote·host·is·<code·class="inline">/home/guest</code>, |
| 147 | and·<code·class="inline">/home/fred</code>·at·the·local·host.·Before·transferring·the·file,·the·current | 147 | and·<code·class="inline">/home/fred</code>·at·the·local·host.·Before·transferring·the·file,·the·current |
| 148 | local·directory·is·changed·to·<code·class="inline">/home/eproj/examples</code>,·and·the·remote·directory | 148 | local·directory·is·changed·to·<code·class="inline">/home/eproj/examples</code>,·and·the·remote·directory |
| 149 | is·set·to·<code·class="inline">/home/guest/appl/examples</code>.</p> | 149 | is·set·to·<code·class="inline">/home/guest/appl/examples</code>.</p> |
| 150 | </div> | 150 | </div> |
| Offset 187, 15 lines modified | Offset 187, 15 lines modified | ||
| 187 | ······<p·class="built-using"> | 187 | ······<p·class="built-using"> |
| 188 | ········Built·using | 188 | ········Built·using |
| 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 191 | ······</p> | 191 | ······</p> |
| 192 | <p>Copyright·©·1996-202 | 192 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 193 | ····</footer> | 193 | ····</footer> |
| 194 | ··</div> | 194 | ··</div> |
| 195 | </main> | 195 | </main> |
| 196 | </div> | 196 | </div> |
| 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 198 | ··<script> | 198 | ··<script> |
| 199 | ··let·initialized·=·false; | 199 | ··let·initialized·=·false; |
| Offset 177, 15 lines modified | Offset 177, 15 lines modified | ||
| 177 | ······<p·class="built-using"> | 177 | ······<p·class="built-using"> |
| 178 | ········Built·using | 178 | ········Built·using |
| 179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 181 | ······</p> | 181 | ······</p> |
| 182 | <p>Copyright·©·1996-202 | 182 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 183 | ····</footer> | 183 | ····</footer> |
| 184 | ··</div> | 184 | ··</div> |
| 185 | </main> | 185 | </main> |
| 186 | </div> | 186 | </div> |
| 187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 188 | ··<script> | 188 | ··<script> |
| 189 | ··let·initialized·=·false; | 189 | ··let·initialized·=·false; |
| Offset 452, 15 lines modified | Offset 452, 15 lines modified | ||
| 452 | ······<p·class="built-using"> | 452 | ······<p·class="built-using"> |
| 453 | ········Built·using | 453 | ········Built·using |
| 454 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 454 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 455 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 455 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 456 | ······</p> | 456 | ······</p> |
| 457 | <p>Copyright·©·1996-202 | 457 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 458 | ····</footer> | 458 | ····</footer> |
| 459 | ··</div> | 459 | ··</div> |
| 460 | </main> | 460 | </main> |
| 461 | </div> | 461 | </div> |
| 462 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 462 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 463 | ··<script> | 463 | ··<script> |
| 464 | ··let·initialized·=·false; | 464 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | ······<p·class="built-using"> | 273 | ······<p·class="built-using"> |
| 274 | ········Built·using | 274 | ········Built·using |
| 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 277 | ······</p> | 277 | ······</p> |
| 278 | <p>Copyright·©·1996-202 | 278 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 279 | ····</footer> | 279 | ····</footer> |
| 280 | ··</div> | 280 | ··</div> |
| 281 | </main> | 281 | </main> |
| 282 | </div> | 282 | </div> |
| 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 284 | ··<script> | 284 | ··<script> |
| 285 | ··let·initialized·=·false; | 285 | ··let·initialized·=·false; |
| Offset 134, 40 lines modified | Offset 134, 40 lines modified | ||
| 134 | <p>The·HTTP·client·default·profile·is·started·when·the·<code·class="inline">Inets</code>·application·is | 134 | <p>The·HTTP·client·default·profile·is·started·when·the·<code·class="inline">Inets</code>·application·is |
| 135 | started·and·is·then·available·to·all·processes·on·that·Erlang·node.·Other | 135 | started·and·is·then·available·to·all·processes·on·that·Erlang·node.·Other |
| 136 | profiles·can·also·be·started·at·application·startup,·or·profiles·can·be·started | 136 | profiles·can·also·be·started·at·application·startup,·or·profiles·can·be·started |
| 137 | and·stopped·dynamically·in·runtime.·Each·client·profile·spawns·a·new·process·to | 137 | and·stopped·dynamically·in·runtime.·Each·client·profile·spawns·a·new·process·to |
| 138 | handle·each·request,·unless·a·persistent·connection·can·be·used·with·or·without | 138 | handle·each·request,·unless·a·persistent·connection·can·be·used·with·or·without |
| 139 | pipelining.·The·client·adds·a·<code·class="inline">host</code>·header·and·an·empty·<code·class="inline">te</code>·header·if·there | 139 | pipelining.·The·client·adds·a·<code·class="inline">host</code>·header·and·an·empty·<code·class="inline">te</code>·header·if·there |
| 140 | are·no·such·headers·present·in·the·request.</p><p>The·client·supports·IPv6·as·long·as·the·underlying·mechanisms·also·do·so.</p><p>The·following·is·to·be·put·in·the·Erlang·node·application·configuration·file·to | 140 | are·no·such·headers·present·in·the·request.</p><p>The·client·supports·IPv6·as·long·as·the·underlying·mechanisms·also·do·so.</p><p>The·following·is·to·be·put·in·the·Erlang·node·application·configuration·file·to |
| 141 | start·a·profile·at·application·startup:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 141 | start·a·profile·at·application·startup:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8749572826-1">[</span><span·class="p"·data-group-id="8749572826-2">{</span><span·class="ss">inets</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8749572826-3">[</span><span·class="p"·data-group-id="8749572826-4">{</spa[·...·truncated·by·diffoscope;·len:·606,·SHA:·4cfe7647b7033df275635f0e9a519cf66124e778779ea75e1d4f7ab884920e02·...·]-1">]</span></code></pre><p>For·valid·properties,·see·<a·href="httpc.html"><code·class="inline">httpc</code></a>.</p><h2·id="getting-started"·class="section-heading"> |
| 142 | ··<a·href="#getting-started"·class="hover-link"> | 142 | ··<a·href="#getting-started"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text">Getting·Started</span> | 145 | ··<span·class="text">Getting·Started</span> |
| 146 | </h2> | 146 | </h2> |
| 147 | <p>Start·<code·class="inline">Inets</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 147 | <p>Start·<code·class="inline">Inets</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9073125142-1">(</span><span·class="p"·data-group-id="9073125142-1">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="ss">ok</span></code></pre><p>The·following·calls·use·the·default·client·profile.·Use·the·proxy | 148 | </span><span·class="ss">ok</span></code></pre><p>The·following·calls·use·the·default·client·profile.·Use·the·proxy |
| 149 | <code·class="inline">"www-proxy.mycompany.com:8000"</code>,·except·from·requests·to·localhost.·This | 149 | <code·class="inline">"www-proxy.mycompany.com:8000"</code>,·except·from·requests·to·localhost.·This |
| 150 | applies·to·all·the·following·requests.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">set_options</span><span·class="p"·data-group-id=" | 150 | applies·to·all·the·following·requests.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">set_options</span><span·class="p"·data-group-id="5761014038-1">(</span><span·class="p"·data-group-id="5761014038-2">[</span><span·class="p"·data-group-id="5761014038-3">{</span><span·class="ss">proxy</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5761014038-4">{</spa[·...·truncated·by·diffoscope;·len:·230,·SHA:·f162a54ef0901031204a48f7fe6939479974173280492e9ba0d4270409aee6da·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 151 | </span><span·class="p"·data-group-id="0681186529-6">[</span><span·class="s">"localhost"</span><span·class="p"·data-group-id="0681186529-6">]</span><span·class="p"·data-group-id="0681186529-4">}</span><span·class="p"·data-group-id="0681186529-3">}</span><span·class="p"·data-group-id="0681186529-2">]</span><span·class="p"·data-group-id="0681186529-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 152 | </span><span·class="ss">ok</span></code></pre><p>The·following·is·an·ordinary·synchronous·request:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="p"·data-group-id="1606363019-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1606363019-2">{</span><span·class="p"·data-group-id="1606363019-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="1606363019-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="1606363019-2">}</span><span·class="p"·data-group-id="1606363019-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 153 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="1606363019-4">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1606363019-5">{</span><span·class="s">"http://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1606363019-6">[</span><span·class="p"·data-group-id="1606363019-6">]</span><span·class="p"·data-group-id="1606363019-5">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1606363019-7">[</span><span·class="p"·data-group-id="1606363019-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1606363019-8">[</span><span·class="p"·data-group-id="1606363019-8">]</span><span·class="p"·data-group-id="1606363019-4">)</span><span·class="p">.</span></code></pre><p>With·all·the·default·values·presented,·a·get·request·can·also·be·written·as | ||
| 154 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="p"·data-group-id="4869472814-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4869472814-2">{</span><span·class="p"·data-group-id="4869472814-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="4869472814-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="4869472814-2">}</span><span·class="p"·data-group-id="4869472814-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 155 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="4869472814-4">(</span><span·class="s">"http://www.erlang.org"</span><span·class="p"·data-group-id="4869472814-4">)</span><span·class="p">.</span></code></pre><p>The·following·is·a·https·request·and·with·verification·of·the·host:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="p"·data-group-id="2121882477-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2121882477-2">{</span><span·class="p"·data-group-id="2121882477-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="2121882477-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="2121882477-2">}</span><span·class="p"·data-group-id="2121882477-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 156 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="2121882477-4">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2121882477-5">{</span><span·class="s">"https://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2121882477-6">[</span><span·class="p"·data-group-id="2121882477-6">]</span><span·class="p"·data-group-id="2121882477-5">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2121882477-7">[</span><span·class="p"·data-group-id="2121882477-8">{</span><span·class="ss">ssl</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">ssl_verify_host_options</span><span·class="p"·data-group-id="2121882477-9">(</span><span·class="ss">true</span><span·class="p"·data-group-id="2121882477-9">)</span><span·class="p"·data-group-id="2121882477-8">}</span><span·class="p"·data-group-id="2121882477-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2121882477-10">[</span><span·class="p"·data-group-id="2121882477-10">]</span><span·class="p"·data-group-id="2121882477-4">)</span><span·class="p">.</span></code></pre><p>The·following·is·an·ordinary·asynchronous·request:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="p"·data-group-id="9650871819-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RequestId</span><span·class="p"·data-group-id="9650871819-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 157 | </span><span·class="p" | 151 | </span><span·class="p"·data-group-id="5761014038-6">[</span><span·class="s">"localhost"</span><span·class="p"·data-group-id="5761014038-6">]</span><span·class="p"·data-group-id="5761014038-4">}</span><span·class="p"·data-group-id="5761014038-3">}</span><span·class="p"[·...·truncated·by·diffoscope;·len:·131,·SHA:·da4361af51a22d9950866df7984d4c2c3d3d3fe4b11b60720595888ec9ab70f4·...·] |
| 152 | </span><span·class="ss">ok</span></code></pre><p>The·following·is·an·ordinary·synchronous·request:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="p"·data-group-id="0785092215-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0785092215-2">{</span><span·class="p"·data-group-id="0785092215-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="0785092215-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="0785092215-2">}</span><span·class="p"·data-group-id="0785092215-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 153 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="0785092215-4">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0785092215-5">{</span><span·class="s">"http://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0785092215-6">[</span><span·class="p"·data-group-id="0785092215-6">]</span><span·class="p"·data-group-id="0785092215-5">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0785092215-7">[</span><span·class="p"·data-group-id="0785092215-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0785092215-8">[</span><span·class="p"·data-group-id="0785092215-8">]</span><span·class="p"·data-group-id="0785092215-4">)</span><span·class="p">.</span></code></pre><p>With·all·the·default·values·presented,·a·get·request·can·also·be·written·as | ||
| 154 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="p"·data-group-id="0222541738-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0222541738-2">{</span><span·class="p"·data-group-id="0222541738-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="0222541738-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="0222541738-2">}</span><span·class="p"·data-group-id="0222541738-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 155 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="0222541738-4">(</span><span·class="s">"http://www.erlang.org"</span><span·class="p"·data-group-id="0222541738-4">)</span><span·class="p">.</span></code></pre><p>The·following·is·a·https·request·and·with·verification·of·the·host:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="p"·data-group-id="9991448500-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9991448500-2">{</span><span·class="p"·data-group-id="9991448500-3">{</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">200</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReasonPhrase</span><span·class="p"·data-group-id="9991448500-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Body</span><span·class="p"·data-group-id="9991448500-2">}</span><span·class="p"·data-group-id="9991448500-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 156 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="9991448500-4">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9991448500-5">{</span><span·class="s">"https://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9991448500-6">[</span><span·class="p"·data-group-id="9991448500-6">]</span><span·class="p"·data-group-id="9991448500-5">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9991448500-7">[</span><span·class="p"·data-group-id="9991448500-8">{</span><span·class="ss">ssl</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">ssl_verify_host_options</span><span·class="p"·data-group-id="9991448500-9">(</span><span·class="ss">true</span><span·class="p"·data-group-id="9991448500-9">)</span><span·class="p"·data-group-id="9991448500-8">}</span><span·class="p"·data-group-id="9991448500-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9991448500-10">[</span><span·class="p"·data-group-id="9991448500-10">]</span><span·class="p"·data-group-id="9991448500-4">)</span><span·class="p">.</span></code></pre><p>The·following·is·an·ordinary·asynchronous·request:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="p"·data-group-id="2120760900-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RequestId</span><span·class="p"·data-group-id="2120760900-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | ||
| 157 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="2120760900-2">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2120760900-3">{</span><span·class="s">"http://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2120760900-4">[</span><span·class="p"·data-group-id="2120760900-4">]</span><span·class="p"·data-group-id="2120760900-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2120760900-5">[</span><span·class="p"·data-group-id="2120760900-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2120760900-6">[</span><span·class="p"·data-group-id="2120760900-7">{</span><span·class="ss">sync</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="2120760900-7">}</span><span·class="p"·data-group-id="2120760900-6">]</span><span·class="p"·data-group-id="2120760900-2">)</span><span·class="p">.</span></code></pre><p>The·result·is·sent·to·the·calling·process·as·<code·class="inline">{http,·{ReqestId,·Result}}</code>.</p><p>In·this·case,·the·calling·process·is·the·shell,·so·the·following·result·is | ||
| 158 | received:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id=" | 158 | received:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id="3852411027-1">{</span><span·class="ss">http</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3852411027-2">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</s[·...·truncated·by·diffoscope;·len:·98,·SHA:·f4de1edae486ac2221084020e3a78cb2312164c5c423189b7bcf969ccf71e83a·...·]-1">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">500</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">error</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="ss">ok</span></code></pre><p>This·sends·a·request·with·a·specified·connection·header:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="p"·data-group-id=" | 159 | </span><span·class="ss">ok</span></code></pre><p>This·sends·a·request·with·a·specified·connection·header:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="p"·data-group-id="7439197772-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7439197772-2">{</span><span·class="p"·data-group-id="7439197772-3">{</span><span·class="n">NewVersion</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·445,·SHA:·8acf714690746fe57585b1311a69c9cd2c0d592c6725a96cdf0142f98f059203·...·]2-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 160 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id=" | 160 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="7439197772-4">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7439197772-5">{</span><span·class="s">"http://www.erlang.org"</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·383,·SHA:·59a0c3b392ce8948e874ed0ec1f15a80586a36ccca7274e923594f82d831ef0c·...·]2-5">}</span><span·class="p">,</span><span·class="w"> |
| 161 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id=" | 161 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="7439197772-8">[</span><span·class="p"·data-group-id="7439197772-8">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7439197772-9">[</span><span·class="p"·data-group-id="7439197772-9">]</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·1013,·SHA:·fcd3af463f1ecfd47e01b32572cdfc82503339de919a0be1eeeaea3892e74b2d·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 162 | 10>·</span><span·class="p"·data-group-id=" | 162 | 10>·</span><span·class="p"·data-group-id="7030517481-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7030517481-6">{</span><span·class="p"·data-group-id="7030517481-7">{</span><span·class="n">NewVersion</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·446,·SHA:·eef029667ec08546950506718031ea0911afe55736e6816df2a0801c93588332·...·]-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 163 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id=" | 163 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="nc">httpc</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="7030517481-8">(</span><span·class="nb">put</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7030517481-9">{</span><span·class="s">"http:///v1/kv/foo"</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·1778,·SHA:·0ab696c246231b26119986b50974750572dc0b62ff6fef0c0033af005308b1c6·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="p"·data-group-id=" | 164 | </span><span·class="p"·data-group-id="8646533573-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.45</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·513,·SHA:·a33e5444ad8e98f2af419467762e5efac6ee0251fc2ebbfba6b21ff8776dade2·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p"·data-group-id=" | 165 | </span><span·class="p"·data-group-id="3121457916-2">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">econnrefused</span><span·class="p"·data-group-id="3121457916-2">}</span></code></pre><p>Stop·the·HTTP·client·profile:</p><pre><code·class="m[·...·truncated·by·diffoscope;·len:·352,·SHA:·1469a51b7be04075dd2cffff3574bcf6f51e5357a3c285630c221a51296ec145·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="ss">ok</span></code></pre><p>Alternative·way·to·stop·the·HTTP·client·profile:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">13>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 166 | </span><span·class="ss">ok</span></code></pre><p>Alternative·way·to·stop·the·HTTP·client·profile:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">13>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="5039723208-1">(</span><span·class="ss">httpc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="5039723208-1">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="ss">ok</span></code></pre> | 167 | </span><span·class="ss">ok</span></code></pre> |
| 168 | </div> | 168 | </div> |
| 169 | <div·class="bottom-actions"·id="bottom-actions"> | 169 | <div·class="bottom-actions"·id="bottom-actions"> |
| 170 | ··<div·class="bottom-actions-item"> | 170 | ··<div·class="bottom-actions-item"> |
| 171 | ······<a·href="inets_services.html"·class="bottom-actions-button"·rel="prev"> | 171 | ······<a·href="inets_services.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 211, 15 lines modified | Offset 211, 15 lines modified | ||
| 211 | ······<p·class="built-using"> | 211 | ······<p·class="built-using"> |
| 212 | ········Built·using | 212 | ········Built·using |
| 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 215 | ······</p> | 215 | ······</p> |
| 216 | <p>Copyright·©·1996-202 | 216 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 217 | ····</footer> | 217 | ····</footer> |
| 218 | ··</div> | 218 | ··</div> |
| 219 | </main> | 219 | </main> |
| 220 | </div> | 220 | </div> |
| 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 222 | ··<script> | 222 | ··<script> |
| 223 | ··let·initialized·=·false; | 223 | ··let·initialized·=·false; |
| Offset 137, 54 lines modified | Offset 137, 54 lines modified | ||
| 137 | underlying·mechanisms·also·do·so.</p><p>The·server·implements·numerous·features,·such·as:</p><ul><li>Secure·Sockets·Layer·(SSL)</li><li>Erlang·Scripting·Interface·(ESI)</li><li>Common·Gateway·Interface·(CGI)</li><li>User·Authentication·(using·Mnesia,·Dets·or·plain·text·database)</li><li>Common·Logfile·Format·(with·or·without·disk_log(3)·support)</li><li>URL·Aliasing</li><li>Action·Mappings</li><li>Directory·Listings</li></ul><p>The·configuration·of·the·server·is·provided·as·an·Erlang·property·list.</p><p>As·of·<code·class="inline">Inets</code>·5.0·the·HTTP·server·is·an·easy·to·start/stop·and·customize·web | 137 | underlying·mechanisms·also·do·so.</p><p>The·server·implements·numerous·features,·such·as:</p><ul><li>Secure·Sockets·Layer·(SSL)</li><li>Erlang·Scripting·Interface·(ESI)</li><li>Common·Gateway·Interface·(CGI)</li><li>User·Authentication·(using·Mnesia,·Dets·or·plain·text·database)</li><li>Common·Logfile·Format·(with·or·without·disk_log(3)·support)</li><li>URL·Aliasing</li><li>Action·Mappings</li><li>Directory·Listings</li></ul><p>The·configuration·of·the·server·is·provided·as·an·Erlang·property·list.</p><p>As·of·<code·class="inline">Inets</code>·5.0·the·HTTP·server·is·an·easy·to·start/stop·and·customize·web |
| 138 | server·providing·the·most·basic·web·server·functionality.·Inets·is·designed·for | 138 | server·providing·the·most·basic·web·server·functionality.·Inets·is·designed·for |
| 139 | embedded·systems·and·if·you·want·a·full-fledged·web·server·there·are·other | 139 | embedded·systems·and·if·you·want·a·full-fledged·web·server·there·are·other |
| 140 | erlang·open·source·alternatives.</p><p>Almost·all·server·functionality·has·been·implemented·using·an·especially·crafted | 140 | erlang·open·source·alternatives.</p><p>Almost·all·server·functionality·has·been·implemented·using·an·especially·crafted |
| 141 | server·API,·which·is·described·in·the·Erlang·Web·Server·API.·This·API·can·be | 141 | server·API,·which·is·described·in·the·Erlang·Web·Server·API.·This·API·can·be |
| 142 | used·to·enhance·the·core·server·functionality,·for·example·with·custom·logging | 142 | used·to·enhance·the·core·server·functionality,·for·example·with·custom·logging |
| 143 | and·authentication.</p><p>The·following·is·to·be·put·in·the·Erlang·node·application·configuration·file·to | 143 | and·authentication.</p><p>The·following·is·to·be·put·in·the·Erlang·node·application·configuration·file·to |
| 144 | start·an·HTTP·server·at·application·startup:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4512928013-1">[</span><span·class="p"·data-group-id="4512928013-2">{</span><span·class="ss">inets</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4512928013-3">[</span><span·class="p"·data-group-id="4512928013-4">{</span><span·class="ss">services</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4512928013-5">[</span><span·class="p"·data-group-id="4512928013-6">{</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4512928013-7">[</span><span·class="p"·data-group-id="4512928013-8">{</span><span·class="ss">proplist_file</span><span·class="p">,</span><span·class="w"> | ||
| 145 | 144 | start·an·HTTP·server·at·application·startup:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0210868243-1">[</span><span·class="p"·data-group-id="0210868243-2">{</span><span·class="ss">inets</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·528,·SHA:·b0c3f81bf2d80f9606aeed38b9ec909705ae61fad7e0a63dce5795bc7b56d85d·...·]</span><span·class="p">,</span><span·class="w"> | |
| 145 | ···········</span><span·class="s">"/var/tmp/server_root/conf/8888_props.conf"</span><span·class="p"·data-group-id="0210868243-8">}</span><span·class="p"·data-group-id="0210868243-7">]</span><span·class="p"·data-group-id="0210868243-6">}</span><span·class="p">,</span><span·class="w"> | ||
| 146 | ··········</span><span·class="p"·data-group-id=" | 146 | ··········</span><span·class="p"·data-group-id="0210868243-9">{</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0210868243-10">[</span><span·class="p"·data-group-id="0210868243-11">{</span><span·class="ss">proplist_file</span><span·class="p">,</span><span·class="w"> |
| 147 | ···········</span><span·class="s">"/var/tmp/server_root/conf/8080_props.conf"</span><span·class="p"·data-group-id="4512928013-11">}</span><span·class="p"·data-group-id="4512928013-10">]</span><span·class="p"·data-group-id="4512928013-9">}</span><span·class="p"·data-group-id="4512928013-5">]</span><span·class="p"·data-group-id="4512928013-4">}</span><span·class="p"·data-group-id="4512928013-3">]</span><span·class="p"·data-group-id="4512928013-2">}</span><span·class="p"·data-group-id="4512928013-1">]</span><span·class="p">.</span></code></pre><p>The·server·is·configured·using·an·Erlang·property·list.·For·the·available | ||
| 148 | properties,·see·<a·href="httpd.html"><code·class="inline">httpd</code></a>.</p><p>The·available·configuration·properties·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">httpd_service</span><span·class="p"·data-group-id="2502868597-1">(</span><span·class="p"·data-group-id="2502868597-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2502868597-2">{</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">httpd</span><span·class="p"·data-group-id="2502868597-3">(</span><span·class="p"·data-group-id="2502868597-3">)</span><span·class="p"·data-group-id="2502868597-2">}</span><span·class="w"> | ||
| 149 | </span><span·class=" | 147 | ···········</span><span·class="s">"/var/tmp/server_root/conf/8080_props.conf"</span><span·class="p"·data-group-id="0210868243-11">}</span><span·class="p"·data-group-id="0210868243-10">]</span><span·class="p"·data-group-id="0210868243-9">}</span><[·...·truncated·by·diffoscope;·len:·377,·SHA:·60fc84c612219a647327af70c88ac931c491613301e1732dddfef31c0a8e3939·...·] |
| 148 | properties,·see·<a·href="httpd.html"><code·class="inline">httpd</code></a>.</p><p>The·available·configuration·properties·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">httpd_service</span><span·class="p"·data-group-id="0498374010-1">(</span><span·class="p"·data-group-id="0498374010-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-2">{</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">httpd</span><span·class="p"·data-group-id="0498374010-3">(</span><span·class="p"·data-group-id="0498374010-3">)</span><span·class="p"·data-group-id="0498374010-2">}</span><span·class="w"> | ||
| 149 | </span><span·class="nf">httpd</span><span·class="p"·data-group-id="0498374010-4">(</span><span·class="p"·data-group-id="0498374010-4">)</span><span·class="w">·········</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-5">[</span><span·class="nf">httpd_config</span><span·class="p"·data-group-id="0498374010-6">(</span><span·class="p"·data-group-id="0498374010-6">)</span><span·class="p"·data-group-id="0498374010-5">]</span><span·class="w"> | ||
| 150 | </span><span·class="nf">httpd_config</span><span·class="p"·data-group-id=" | 150 | </span><span·class="nf">httpd_config</span><span·class="p"·data-group-id="0498374010-7">(</span><span·class="p"·data-group-id="0498374010-7">)</span><span·class="w">··</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-8">{</span><span·class="ss">proplist_file</span><span·class="p[·...·truncated·by·diffoscope;·len:·209,·SHA:·f6dd1ae7baf549ff7b992ea0f014b013e0107a70164d27b49affb8a7e9b9930a·...·]-8">}</span><span·class="w"> |
| 151 | ···················</span><span·class="p"·data-group-id=" | 151 | ···················</span><span·class="p"·data-group-id="0498374010-10">{</span><span·class="ss">debug</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">debug</span><span·class="p"·data-group-id="0498374010-11">(</span><span·class="p"·data-group-id="0498374010-11">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·1a121bac8cf37c43c7f0a45d1e8c1fee657c241d3d926d96992ae6a208a9a8a7·...·]-10">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 152 | ···················</span><span·class="p"·data-group-id="2502868597-12">{</span><span·class="ss">accept_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="2502868597-13">(</span><span·class="p"·data-group-id="2502868597-13">)</span><span·class="p"·data-group-id="2502868597-12">}</span><span·class="w"> | ||
| 153 | 152 | ···················</span><span·class="p"·data-group-id="0498374010-12">{</span><span·class="ss">accept_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="0498374010-13">(</span><span[·...·truncated·by·diffoscope;·len:·96,·SHA:·40c0918a53451302824ac7f9628a25c29ae93072d7dbfb9413cf89889766a72a·...·]</span><span·class="w"> | |
| 153 | </span><span·class="nf">debug</span><span·class="p"·data-group-id="0498374010-14">(</span><span·class="p"·data-group-id="0498374010-14">)</span><span·class="w">·········</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">disable</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-15">[</span><span·class="nf">debug_options</span><span·class="p"·data-group-id="0498374010-16">(</span><span·class="p"·data-group-id="0498374010-16">)</span><span·class="p"·data-group-id="0498374010-15">]</span><span·class="w"> | ||
| 154 | </span><span·class="nf">debug_options</span><span·class="p"·data-group-id=" | 154 | </span><span·class="nf">debug_options</span><span·class="p"·data-group-id="0498374010-17">(</span><span·class="p"·data-group-id="0498374010-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-18">{</span><span·class="ss">all_functions</span><span·class=[·...·truncated·by·diffoscope;·len:·216,·SHA:·ec5057abb873b423acbad0d0f3d2407a36076288803279634485b5a11718874b·...·]-18">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 155 | ···················</span><span·class="p"·data-group-id=" | 155 | ···················</span><span·class="p"·data-group-id="0498374010-20">{</span><span·class="ss">exported_functions</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id="0498374010-21">(</span><span·class="p"·data-group-id="0498374010-21">)</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·3008dac8a64adfc3f31c73253befb3e25b94acbc770903fa2e08fe0548a4fb3e·...·]-20">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 156 | ···················</span><span·class="p"·data-group-id=" | 156 | ···················</span><span·class="p"·data-group-id="0498374010-22">{</span><span·class="ss">disable</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id="0498374010-23">(</span><span·class="p"·data-group-id="0498374010-23">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·4401743f25f62ad93721092c512a6af017bfcfbe807e38608f06080a12879565·...·]-22">}</span><span·class="w"> |
| 157 | </span><span·class="nf">modules</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">modules</span><span·class="p"·data-group-id="0498374010-24">(</span><span·class="p"·data-group-id="0498374010-24">)</span><span·class="w">·······</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0498374010-25">[</span><span·class="nf">atom</span><span·class="p"[·...·truncated·by·diffoscope;·len:·134,·SHA:·82187c3520507f8400c4515165dc359e21cce33f007923ff40b50971610f26f8·...·]-25">]</span></code></pre><p>Here:</p><ul><li><p><strong><code·class="inline">{proplist_file,·file()}</code></strong>·-·File·containing·an·Erlang·property·list, |
| 158 | followed·by·a·full·stop,·describing·the·HTTP·server·configuration.</p></li><li><p><strong><code·class="inline">{debug,·debug()}</code></strong>·-·Can·enable·trace·on·all·functions·or·only·exported | 158 | followed·by·a·full·stop,·describing·the·HTTP·server·configuration.</p></li><li><p><strong><code·class="inline">{debug,·debug()}</code></strong>·-·Can·enable·trace·on·all·functions·or·only·exported |
| 159 | functions·on·chosen·modules.</p></li><li><p><strong><code·class="inline">{accept_timeout,·integer()}</code></strong>·-·Sets·the·wanted·time-out·value·for·the | 159 | functions·on·chosen·modules.</p></li><li><p><strong><code·class="inline">{accept_timeout,·integer()}</code></strong>·-·Sets·the·wanted·time-out·value·for·the |
| 160 | server·to·set·up·a·request·connection.</p></li></ul><h2·id="getting-started"·class="section-heading"> | 160 | server·to·set·up·a·request·connection.</p></li></ul><h2·id="getting-started"·class="section-heading"> |
| 161 | ··<a·href="#getting-started"·class="hover-link"> | 161 | ··<a·href="#getting-started"·class="hover-link"> |
| 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 162 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 163 | ··</a> | 163 | ··</a> |
| 164 | ··<span·class="text">Getting·Started</span> | 164 | ··<span·class="text">Getting·Started</span> |
| 165 | </h2> | 165 | </h2> |
| 166 | <p><a·href=""·id="using_http_server_api"></a></p><p>Start·<code·class="inline">Inets</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 166 | <p><a·href=""·id="using_http_server_api"></a></p><p>Start·<code·class="inline">Inets</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="8292979122-1">(</span><span·class="p"·data-group-id="8292979122-1">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="ss">ok</span></code></pre><p>Start·an·HTTP·server·with·minimal·required·configuration.·If·you·specify·port | 167 | </span><span·class="ss">ok</span></code></pre><p>Start·an·HTTP·server·with·minimal·required·configuration.·If·you·specify·port |
| 168 | <code·class="inline">0</code>,·an·arbitrary·available·port·is·used,·and·you·can·use·function·<code·class="inline">info</code>·to | 168 | <code·class="inline">0</code>,·an·arbitrary·available·port·is·used,·and·you·can·use·function·<code·class="inline">info</code>·to |
| 169 | find·which·port·number·that·was·picked:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="p"·data-group-id=" | 169 | find·which·port·number·that·was·picked:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="p"·data-group-id="9583639162-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="9583639162-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·703,·SHA:·e3ea48ce9f3b145a3f3bba3993ff6d668fbb45f626c7e16841a06e3766d9e0fc·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 170 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id=" | 170 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="9583639162-6">{</span><span·class="ss">document_root</span><span·class="p">,</span><span·class="s">"/tmp/htdocs"</span><span·class="p"·data-group-id="9583639162-6">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·302,·SHA:·f7d8039fc4e05914463556241ed4ce0e31915822f860e3ef61a6e40d7dbee41a·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="p"·data-group-id=" | 171 | </span><span·class="p"·data-group-id="9583639162-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="mf">0.79</span><span·class="p">.</span><span·class="mi">0</span><span·class="p"·data-group-id="9583639162-8">}</span></code></pre><p>Call·<code·cla[·...·truncated·by·diffoscope;·len:·320,·SHA:·2764160eb26d1651bb2e18edd037df04cad0069d530d83ff6db0822ac39a878d·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 172 | </span><span·class="p"·data-group-id=" | 172 | </span><span·class="p"·data-group-id="0635694471-2">[</span><span·class="p"·data-group-id="0635694471-3">{</span><span·class="ss">mime_types</span><span·class="p">,</span><span·class="p"·data-group-id="0635694471-4">[</span><span·class="p"·data-group-id="0635694471-5">{</span><span·class="s">&[·...·truncated·by·diffoscope;·len:·473,·SHA:·c5ba5ddc8d60a7908c5399750eb1f2fed6b309ecde3a1fdc3f1df7cd06b8157b·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 173 | ·</span><span·class="p"·data-group-id=" | 173 | ·</span><span·class="p"·data-group-id="0635694471-7">{</span><span·class="ss">server_name</span><span·class="p">,</span><span·class="s">"machine.local"</span><span·class="p"·data-group-id="0635694471-7">}</span><span·class="p">,</span><span·class="w"> |
| 174 | ·</span><span·class="p"·data-group-id=" | 174 | ·</span><span·class="p"·data-group-id="0635694471-8">{</span><span·class="ss">bind_address</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0635694471-9">{</span><span·class="mi">127</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·171,·SHA:·47e77f39b1372f413e30ee27eebb2590e0200a01a75bb9a740ab58b3f8c2f144·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 175 | ·</span><span·class="p"·data-group-id=" | 175 | ·</span><span·class="p"·data-group-id="0635694471-10">{</span><span·class="ss">server_root</span><span·class="p">,</span><span·class="s">"/tmp"</span><span·class="p"·data-group-id="0635694471-10">}</span><span·class="p">,</span><span·class="w"> |
| 176 | ·</span><span·class="p"·data-group-id=" | 176 | ·</span><span·class="p"·data-group-id="0635694471-11">{</span><span·class="ss">port</span><span·class="p">,</span><span·class="mi">59408</span><span·class="p"·data-group-id="0635694471-11">}</span><span·class="p">,</span><span·class="w"> |
| 177 | ·</span><span·class="p"·data-group-id=" | 177 | ·</span><span·class="p"·data-group-id="0635694471-12">{</span><span·class="ss">document_root</span><span·class="p">,</span><span·class="s">"/tmp/htdocs"</span><span·class="p"·data-group-id="0635694471-12">}</span><span·class="p">,</span><span·class="w"> |
| 178 | ·</span><span·class="p"·data-group-id=" | 178 | ·</span><span·class="p"·data-group-id="0635694471-13">{</span><span·class="ss">ipfamily</span><span·class="p">,</span><span·class="ss">inet</span><span·class="p"·data-group-id="0635694471-13">}</span><span·class="p"·data-group-id="0635694471-2">]</span></code></pre><p>Reload·the·configuration·w[·...·truncated·by·diffoscope;·len:·519,·SHA:·7ce700779bbfc7d6e1fe713554b0c87b4094d807c4bbd2eaecc6bfa12dc825cf·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 179 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="1 | 179 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="1790689951-4">{</span><span·class="ss">server_root</span><span·class="p">,</span><span·class="s">"/tmp/www_test"</span><span·class="p"·data-group-id="1790689951-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·183,·SHA:·3453239d0725842b49f944ede3eb73ec31542e12227534382888556139c4a6de·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 180 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="1 | 180 | </span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="1790689951-6">{</span><span·class="ss">bind_address</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"localhost"</span><span·class="p"·data-group-id="1790689951-6">}</span><span·class="p"·data-group-id="1790689951-2">]</span><[·...·truncated·by·diffoscope;·len:·126,·SHA:·17ef3a2d05ec0b46d5a90731204ac87c88bc375ebf2b79f8c930ead83f2a884e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">port</code>·and·<code·class="inline">bind_address</code>·cannot·be·changed.·Clients·trying·to·access·the | 181 | </span><span·class="ss">ok</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">port</code>·and·<code·class="inline">bind_address</code>·cannot·be·changed.·Clients·trying·to·access·the |
| 182 | server·during·the·reload·get·a·service·temporary·unavailable·answer.</p></section><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">httpd</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id="3280472189-1">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3280472189-2">[</span><span·class="ss">server_root</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">document_root</span><span·class="p"·data-group-id="3280472189-2">]</span><span·class="p"·data-group-id="3280472189-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 183 | 182 | server·during·the·reload·get·a·service·temporary·unavailable·answer.</p></section><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">httpd</span><span·class="p">:</span><span·class="nf">info</span><s[·...·truncated·by·diffoscope;·len:·443,·SHA:·61e9a2f29e996a9487d93bec9f604769d91286ee7caed4549e5bb0f45e5be712·...·]> | |
| 183 | </span><span·class="p"·data-group-id="7087930246-3">[</span><span·class="p"·data-group-id="7087930246-4">{</span><span·class="ss">server_root</span><span·class="p">,</span><span·class="s">"/tmp/www_test"</span><span·class="p"·data-group-id="7087930246-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="7087930246-5">{</span><span·class="ss">document_root</span><span·class="p">,</span><span·class="s">"/tmp/www_test/htdocs"</span><span·class="p"·data-group-id="7087930246-5">}</span><span·class="p"·data-group-id="7087930246-3">]</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="7218849060-1">(</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="7218849060-1">)</span><span·class="p">.</span></code></pre><p>Alternative:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">inets</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="0681365746-1">(</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0681365746-2">{</span><span·class="p"·data-group-id="0681365746-3">{</span><span·class="mi">127</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0681365746-3">}</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">59408</span><span·class="p"·data-group-id="0681365746-2">}</span><span·class="p"·data-group-id="0681365746-1">)</span><span·class="p">.</span></code></pre><p>Notice·that·<code·class="inline">bind_address</code>·must·be·the·IP·address·reported·by·function·<code·class="inline">info</code> | ||
| 184 | and·cannot·be·the·hostname·that·is·allowed·when·putting·in·<code·class="inline">bind_address</code>.</p><h2·id="dynamic-web-pages"·class="section-heading"> | 184 | and·cannot·be·the·hostname·that·is·allowed·when·putting·in·<code·class="inline">bind_address</code>.</p><h2·id="dynamic-web-pages"·class="section-heading"> |
| 185 | ··<a·href="#dynamic-web-pages"·class="hover-link"> | 185 | ··<a·href="#dynamic-web-pages"·class="hover-link"> |
| 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Dynamic·Web·Pages</span> | 188 | ··<span·class="text">Dynamic·Web·Pages</span> |
| 189 | </h2> | 189 | </h2> |
| 190 | <p><a·href=""·id="dynamic_we_pages"></a></p><p><code·class="inline">Inets</code>·HTTP·server·provides·two·ways·of·creating·dynamic·web·pages,·each·with | 190 | <p><a·href=""·id="dynamic_we_pages"></a></p><p><code·class="inline">Inets</code>·HTTP·server·provides·two·ways·of·creating·dynamic·web·pages,·each·with |
| Offset 301, 36 lines modified | Offset 301, 36 lines modified | ||
| 301 | files,·Dets·databases·as·well·as·Mnesia·databases.</p><p>Uses·the·following·Erlang·Web·Server·API·interaction·data:</p><ul><li><code·class="inline">real_name</code>·-·from·<a·href="mod_alias.html"><code·class="inline">mod_alias</code></a></li></ul><p>Exports·the·following·Erlang·Web·Server·API·interaction·data:</p><ul><li><strong><code·class="inline">{remote_user,·User}</code></strong>·-·The·username·used·for·authentication.</li></ul><h4>Mnesia·As·Authentication·Database</h4><p>If·Mnesia·is·used·as·storage·method,·Mnesia·must·be·started·before·the·HTTP | 301 | files,·Dets·databases·as·well·as·Mnesia·databases.</p><p>Uses·the·following·Erlang·Web·Server·API·interaction·data:</p><ul><li><code·class="inline">real_name</code>·-·from·<a·href="mod_alias.html"><code·class="inline">mod_alias</code></a></li></ul><p>Exports·the·following·Erlang·Web·Server·API·interaction·data:</p><ul><li><strong><code·class="inline">{remote_user,·User}</code></strong>·-·The·username·used·for·authentication.</li></ul><h4>Mnesia·As·Authentication·Database</h4><p>If·Mnesia·is·used·as·storage·method,·Mnesia·must·be·started·before·the·HTTP |
| 302 | server.·The·first·time·Mnesia·is·started,·the·schema·and·the·tables·must·be | 302 | server.·The·first·time·Mnesia·is·started,·the·schema·and·the·tables·must·be |
| 303 | created·before·Mnesia·is·started.·A·simple·example·of·a·module·with·two | 303 | created·before·Mnesia·is·started.·A·simple·example·of·a·module·with·two |
| 304 | functions·that·creates·and·start·Mnesia·is·provided·here.·Function | 304 | functions·that·creates·and·start·Mnesia·is·provided·here.·Function |
| 305 | <code·class="inline">first_start/0</code>·is·to·be·used·the·first·time.·It·creates·the·schema·and·the | 305 | <code·class="inline">first_start/0</code>·is·to·be·used·the·first·time.·It·creates·the·schema·and·the |
| 306 | tables.·<code·class="inline">start/0</code>·is·to·be·used·in·consecutive·startups.·<code·class="inline">start/0</code>·starts·Mnesia | 306 | tables.·<code·class="inline">start/0</code>·is·to·be·used·in·consecutive·startups.·<code·class="inline">start/0</code>·starts·Mnesia |
| 307 | and·waits·for·the·tables·to·be·initiated.·This·function·must·only·be·used·when | 307 | and·waits·for·the·tables·to·be·initiated.·This·function·must·only·be·used·when |
| 308 | the·schema·and·the·tables·are·already·created.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 308 | the·schema·and·the·tables·are·already·created.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7628403673-1">(</span><span·class="ss">mnesia_test</span><span·class="p"·data-group-id="7628403673-1">)</span><span·class="p">.</span><span·class="w"> |
| 309 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 309 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7628403673-2">(</span><span·class="p"·data-group-id="7628403673-3">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="ss">load_data</span><span·class="p">/</span><span·class="mi">0</sp[·...·truncated·by·diffoscope;·len:·97,·SHA:·80e9bca9af00d47a7220c768b5e99303b22d55c3a085cb3c0f22352fa891cd81·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 310 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 310 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7628403673-4">(</span><span·class="s">"mod_auth.hrl"</span><span·class="p"·data-group-id="7628403673-4">)</span><span·class="p">.</span><span·class="w"> |
| 311 | </span><span·class="nf">first_start</span><span·class="p"·data-group-id=" | 311 | </span><span·class="nf">first_start</span><span·class="p"·data-group-id="7628403673-5">(</span><span·class="p"·data-group-id="7628403673-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 312 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id=" | 312 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id="7628403673-6">(</span><span·class="p"·data-group-id="7628403673-7">[</span><span·class="nf">node</span><span·class="p"·data-group-id="7628403673-8">(</span><span·class="p"·data-group-id="7628403673-8">)</span><span·class="p"·data-group-id="7628403673-7">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·473846165f6c33b72c17beba912fdde84ad337cf5aebbe0a4fd4e66b566c3b30·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 313 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 313 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7628403673-9">(</span><span·class="p"·data-group-id="7628403673-9">)</span><span·class="p">,</span><span·class="w"> |
| 314 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 314 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="7628403673-10">(</span><span·class="ss">httpd_user</span><span·class="p">,</span><span·class="w"> |
| 315 | ························</span><span·class="p"·data-group-id=" | 315 | ························</span><span·class="p"·data-group-id="7628403673-11">[</span><span·class="p"·data-group-id="7628403673-12">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bag</span><span·class="p"·data-group-id="7628403673-12">}</span><span·class="p">,</span><span·class="w"> |
| 316 | ·························</span><span·class="p"·data-group-id=" | 316 | ·························</span><span·class="p"·data-group-id="7628403673-13">{</span><span·class="ss">disc_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7628403673-14">[</span><span·class="nf">node</span><span·class="p"·data-group-id="7628403673-15">(</span><span·class="p[·...·truncated·by·diffoscope;·len:·135,·SHA:·60e4317011eb40a149307e10be5bff2d2e927955464f276b9f3186d76f3c8799·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 317 | ·························</span><span·class="p"·data-group-id=" | 317 | ·························</span><span·class="p"·data-group-id="7628403673-16">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="7628403673-17">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w"> |
| 318 | ··················································</span><span·class="ss">httpd_user</span><span·class="p"·data-group-id=" | 318 | ··················································</span><span·class="ss">httpd_user</span><span·class="p"·data-group-id="7628403673-17">)</span><span·class="p"·data-group-id="7628403673-16">}</span><span·class="p"·data-group-id="7628403673-11">]</span><span·class="p"·data-group-id="7628403673-10">)</span><span·class="p">,</span><span·class="w"> |
| 319 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 319 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="7628403673-18">(</span><span·class="ss">httpd_group</span><span·class="p">,</span><span·class="w"> |
| 320 | ························</span><span·class="p"·data-group-id=" | 320 | ························</span><span·class="p"·data-group-id="7628403673-19">[</span><span·class="p"·data-group-id="7628403673-20">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bag</span><span·class="p"·data-group-id="7628403673-20">}</span><span·class="p">,</span><span·class="w"> |
| 321 | ·························</span><span·class="p"·data-group-id=" | 321 | ·························</span><span·class="p"·data-group-id="7628403673-21">{</span><span·class="ss">disc_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7628403673-22">[</span><span·class="nf">node</span><span·class="p"·data-group-id="7628403673-23">(</span><span·class="p[·...·truncated·by·diffoscope;·len:·135,·SHA:·ccc7363c69e8abf7d7c0da0d1f29be63283e916ac105fc2c66ba4208adadcd96·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 322 | ·························</span><span·class="p"·data-group-id=" | 322 | ·························</span><span·class="p"·data-group-id="7628403673-24">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="7628403673-25">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w"> |
| 323 | ··················································</span><span·class="ss">httpd_group</span><span·class="p"·data-group-id=" | 323 | ··················································</span><span·class="ss">httpd_group</span><span·class="p"·data-group-id="7628403673-25">)</span><span·class="p"·data-group-id="7628403673-24">}</span><span·class="p"·data-group-id="7628403673-19">]</span><span·class="p"·data-group-id="7628403673-18">)</span><span·class="p">,</span><span·class="w"> |
| 324 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id=" | 324 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id="7628403673-26">(</span><span·class="p"·data-group-id="7628403673-27">[</span><span·class="ss">httpd_user</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">httpd_group</span><span·class="p"·data-group-id="7628403673-27">]</span><span·cl[·...·truncated·by·diffoscope;·len:·110,·SHA:·a86293c593bd505f991e81771f5e039bd2a77381f0cf31e628b92a93c63005b8·...·]-26">)</span><span·class="p">.</span><span·class="w"> |
| 325 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 325 | </span><span·class="nf">start</span><span·class="p"·data-group-id="7628403673-28">(</span><span·class="p"·data-group-id="7628403673-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 326 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 326 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7628403673-29">(</span><span·class="p"·data-group-id="7628403673-29">)</span><span·class="p">,</span><span·class="w"> |
| 327 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id=" | 327 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id="7628403673-30">(</span><span·class="p"·data-group-id="7628403673-31">[</span><span·class="ss">httpd_user</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">httpd_group</span><span·class="p"·data-group-id="7628403673-31">]</span><span·cl[·...·truncated·by·diffoscope;·len:·110,·SHA:·a86293c593bd505f991e81771f5e039bd2a77381f0cf31e628b92a93c63005b8·...·]-30">)</span><span·class="p">.</span></code></pre><p>To·create·the·Mnesia·tables,·we·use·two·records·defined·in·<code·class="inline">mod_auth.hrl</code>,·so |
| 328 | that·file·must·be·included.·<code·class="inline">first_start/0</code>·creates·a·schema·that·specifies·on | 328 | that·file·must·be·included.·<code·class="inline">first_start/0</code>·creates·a·schema·that·specifies·on |
| 329 | which·nodes·the·database·is·to·reside.·Then·it·starts·Mnesia·and·creates·the | 329 | which·nodes·the·database·is·to·reside.·Then·it·starts·Mnesia·and·creates·the |
| 330 | tables.·The·first·argument·is·the·name·of·the·tables,·the·second·argument·is·a | 330 | tables.·The·first·argument·is·the·name·of·the·tables,·the·second·argument·is·a |
| 331 | list·of·options·of·how·to·create·the·table,·see·<a·href="../../../../lib/mnesia-4.23.5/doc/html/mnesia.html"><code·class="inline">mnesia</code></a>,·documentation·for | 331 | list·of·options·of·how·to·create·the·table,·see·<a·href="../../../../lib/mnesia-4.23.5/doc/html/mnesia.html"><code·class="inline">mnesia</code></a>,·documentation·for |
| 332 | more·information.·As·the·implementation·of·the·<code·class="inline">mod_auth_mnesia</code>·saves·one·row | 332 | more·information.·As·the·implementation·of·the·<code·class="inline">mod_auth_mnesia</code>·saves·one·row |
| 333 | for·each·user,·the·type·must·be·<code·class="inline">bag</code>.·When·the·schema·and·the·tables·are | 333 | for·each·user,·the·type·must·be·<code·class="inline">bag</code>.·When·the·schema·and·the·tables·are |
| 334 | created,·function·<a·href="../../../../lib/mnesia-4.23.5/doc/html/mnesia.html#start/0"><code·class="inline">mnesia:start/0</code></a>·is·used·to·start·Mnesia·and·waits·for·the | 334 | created,·function·<a·href="../../../../lib/mnesia-4.23.5/doc/html/mnesia.html#start/0"><code·class="inline">mnesia:start/0</code></a>·is·used·to·start·Mnesia·and·waits·for·the |
| Offset 481, 15 lines modified | Offset 481, 15 lines modified | ||
| 481 | ······<p·class="built-using"> | 481 | ······<p·class="built-using"> |
| 482 | ········Built·using | 482 | ········Built·using |
| 483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 485 | ······</p> | 485 | ······</p> |
| 486 | <p>Copyright·©·1996-202 | 486 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 487 | ····</footer> | 487 | ····</footer> |
| 488 | ··</div> | 488 | ··</div> |
| 489 | </main> | 489 | </main> |
| 490 | </div> | 490 | </div> |
| 491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 492 | ··<script> | 492 | ··<script> |
| 493 | ··let·initialized·=·false; | 493 | ··let·initialized·=·false; |
| Offset 277, 15 lines modified | Offset 277, 15 lines modified | ||
| 277 | ······<p·class="built-using"> | 277 | ······<p·class="built-using"> |
| 278 | ········Built·using | 278 | ········Built·using |
| 279 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 279 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 280 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 280 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 281 | ······</p> | 281 | ······</p> |
| 282 | <p>Copyright·©·1996-202 | 282 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 283 | ····</footer> | 283 | ····</footer> |
| 284 | ··</div> | 284 | ··</div> |
| 285 | </main> | 285 | </main> |
| 286 | </div> | 286 | </div> |
| 287 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 287 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 288 | ··<script> | 288 | ··<script> |
| 289 | ··let·initialized·=·false; | 289 | ··let·initialized·=·false; |
| Offset 1037, 21 lines modified | Offset 1037, 21 lines modified | ||
| 1037 | options.</p></section><p>By·default·the·socket·options·set·by·function | 1037 | options.</p></section><p>By·default·the·socket·options·set·by·function |
| 1038 | <a·href="#set_options/1">set_options/1,2</a>·are·used·when·establishing·a·connection.</p></li><li><p><strong><code·class="inline">receiver</code></strong>·-·Defines·how·the·client·delivers·the·result·of·an·asynchronous | 1038 | <a·href="#set_options/1">set_options/1,2</a>·are·used·when·establishing·a·connection.</p></li><li><p><strong><code·class="inline">receiver</code></strong>·-·Defines·how·the·client·delivers·the·result·of·an·asynchronous |
| 1039 | request·(<code·class="inline">sync</code>·has·the·value·<code·class="inline">false</code>).</p><ul><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0"><code·class="inline">pid/0</code></a></strong>·-·Messages·are·sent·to·this·process·in·the·format | 1039 | request·(<code·class="inline">sync</code>·has·the·value·<code·class="inline">false</code>).</p><ul><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0"><code·class="inline">pid/0</code></a></strong>·-·Messages·are·sent·to·this·process·in·the·format |
| 1040 | <code·class="inline">{http,·ReplyInfo}</code>.</p></li><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#alias/0"><code·class="inline">alias/0</code></a></strong>·-·Messages·are·sent·to·this·special·reference·in·the·format | 1040 | <code·class="inline">{http,·ReplyInfo}</code>.</p></li><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#alias/0"><code·class="inline">alias/0</code></a></strong>·-·Messages·are·sent·to·this·special·reference·in·the·format |
| 1041 | <code·class="inline">{http,·ReplyInfo}</code>.</p></li><li><p><strong><code·class="inline">function/1</code></strong>·-·Information·is·delivered·to·the·receiver·through·calls·to | 1041 | <code·class="inline">{http,·ReplyInfo}</code>.</p></li><li><p><strong><code·class="inline">function/1</code></strong>·-·Information·is·delivered·to·the·receiver·through·calls·to |
| 1042 | the·provided·fun·<code·class="inline">Receiver(ReplyInfo)</code>.</p></li><li><p><strong><code·class="inline">{Module,·Function,·Args}</code></strong>·-·Information·is·delivered·to·the·receiver | 1042 | the·provided·fun·<code·class="inline">Receiver(ReplyInfo)</code>.</p></li><li><p><strong><code·class="inline">{Module,·Function,·Args}</code></strong>·-·Information·is·delivered·to·the·receiver |
| 1043 | through·calls·to·the·callback·function | 1043 | through·calls·to·the·callback·function |
| 1044 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(Module,·Function,·[ReplyInfo·|·Args])</code></a>.</p></li></ul><p>In·all·of·these·cases,·<code·class="inline">ReplyInfo</code>·has·the·following·structure:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p"·data-group-id="4 | 1044 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(Module,·Function,·[ReplyInfo·|·Args])</code></a>.</p></li></ul><p>In·all·of·these·cases,·<code·class="inline">ReplyInfo</code>·has·the·following·structure:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p"·data-group-id="4498107991-1">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">saved_to_file</span><span·class="p"·data-group-id="4498107991-1">}</span><span·class="w"> |
| 1045 | ·</span><span·class="p"·data-group-id="4 | 1045 | ·</span><span·class="p"·data-group-id="4498107991-2">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4498107991-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</s[·...·truncated·by·diffoscope;·len:·98,·SHA:·ce5b6f4274006047aca3a009db1e66e7bbfc63cc7914d98398bffaa2067fa45f·...·]-2">}</span><span·class="w"> |
| 1046 | ·</span><span·class="p"·data-group-id="4 | 1046 | ·</span><span·class="p"·data-group-id="4498107991-4">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Result</span><span·class="p"·data-group-id="4498107991-4">}</span><span·class="w"> |
| 1047 | ·</span><span·class="p"·data-group-id="4275077818-5">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stream_start</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p"·data-group-id="4275077818-5">}</span><span·class="w"> | ||
| 1048 | ·</span><span·class="p"·data-group-id="4 | 1047 | ·</span><span·class="p"·data-group-id="4498107991-5">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stream_start</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p"·data-group-id="4498107991[·...·truncated·by·diffoscope;·len:·2,·SHA:·37aa1ccf80e481832b2db282d4d4f895ee1e31219b7d0f6aee8dc8968828341b·...·]">}</span><span·class="w"> |
| 1048 | ·</span><span·class="p"·data-group-id="4498107991-6">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stream_start</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HandlerPid</span><span·class="p"·data-group-id="4498107991-6">}</span><span·class="w"> | ||
| 1049 | ·</span><span·class="p"·data-group-id="4 | 1049 | ·</span><span·class="p"·data-group-id="4498107991-7">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stream</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BinBodyPart</span><span·class="p"·data-group-id="4498107991-7">}</span><span·class="w"> |
| 1050 | ·</span><span·class="p"·data-group-id="4 | 1050 | ·</span><span·class="p"·data-group-id="4498107991-8">{</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stream_end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Headers</span><span·class="p"·data-group-id="4498107991-8">}</span></code></pre><p>Default·is·the·<code·class="inline">pid</code>·of·the·process·calling·the·request·function·(<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>).</p><p><a·href=""·id="ipv6_host_with_brackets"></a></p></li><li><p><strong><code·class="inline">ipv6_host_with_brackets</code></strong>·-·Defines·when·parsing·the·Host-Port·part·of·an |
| 1051 | URI·with·an·IPv6·address·with·brackets,·if·those·brackets·are·to·be·retained | 1051 | URI·with·an·IPv6·address·with·brackets,·if·those·brackets·are·to·be·retained |
| 1052 | (<code·class="inline">true</code>)·or·stripped·(<code·class="inline">false</code>).</p><p>Default·is·<code·class="inline">false</code>.</p></li></ul> | 1052 | (<code·class="inline">true</code>)·or·stripped·(<code·class="inline">false</code>).</p><p>Default·is·<code·class="inline">false</code>.</p></li></ul> |
| 1053 | ··</section> | 1053 | ··</section> |
| 1054 | </section> | 1054 | </section> |
| 1055 | <section·class="detail"·id="reset_cookies/0"> | 1055 | <section·class="detail"·id="reset_cookies/0"> |
| 1056 | ··<div·class="detail-header"> | 1056 | ··<div·class="detail-header"> |
| Offset 1561, 15 lines modified | Offset 1561, 15 lines modified | ||
| 1561 | ······<p·class="built-using"> | 1561 | ······<p·class="built-using"> |
| 1562 | ········Built·using | 1562 | ········Built·using |
| 1563 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1563 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1564 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1564 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1565 | ······</p> | 1565 | ······</p> |
| 1566 | <p>Copyright·©·1996-202 | 1566 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1567 | ····</footer> | 1567 | ····</footer> |
| 1568 | ··</div> | 1568 | ··</div> |
| 1569 | </main> | 1569 | </main> |
| 1570 | </div> | 1570 | </div> |
| 1571 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1571 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1572 | ··<script> | 1572 | ··<script> |
| 1573 | ··let·initialized·=·false; | 1573 | ··let·initialized·=·false; |
| Offset 246, 57 lines modified | Offset 246, 57 lines modified | ||
| 246 | }</code></pre><p>An·example·of·a·log·entry·with·only·default·settings·of·logger</p><pre><code·class="text">=ERROR·REPORT====·9-Oct-2019::09:33:27.350235·=== | 246 | }</code></pre><p>An·example·of·a·log·entry·with·only·default·settings·of·logger</p><pre><code·class="text">=ERROR·REPORT====·9-Oct-2019::09:33:27.350235·=== |
| 247 | ···Server:·My·Server | 247 | ···Server:·My·Server |
| 248 | ·Protocol:·HTTP | 248 | ·Protocol:·HTTP |
| 249 | Transport:·TLS | 249 | Transport:·TLS |
| 250 | ······URI:·/not_there | 250 | ······URI:·/not_there |
| 251 | ·····Host:·127.0.1.1:80 | 251 | ·····Host:·127.0.1.1:80 |
| 252 | ·····Peer:·127.0.0.1:45253 | 252 | ·····Peer:·127.0.0.1:45253 |
| 253 | ···Reason:·[{statuscode,404},{description,"Object·Not·Found"}]</code></pre><p>Using·this·option·makes·mod_log·and·mod_disk_log·error·logs·redundant.</p><p>Add·the·filter</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 253 | ···Reason:·[{statuscode,404},{description,"Object·Not·Found"}]</code></pre><p>Using·this·option·makes·mod_log·and·mod_disk_log·error·logs·redundant.</p><p>Add·the·filter</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4081894632-1">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 254 | ····</span><span·class="p"·data-group-id=" | 254 | ····</span><span·class="p"·data-group-id="4081894632-2">{</span><span·class="ss">log</span><span·class="p">,</span><span·class="ss">equal</span><span·class="p">,</span><span·class="p"·data-group-id="4081894632-3">[</span><span·class="ss">otp</span><span·class="p">,</span><span·class="ss">inets</sp[·...·truncated·by·diffoscope;·len:·330,·SHA:·b75fd199b1cd49137215ee0e8709c74593d1292a412e23575a154518a7f52119·...·]-2">}</span></code></pre><p>to·appropriate·logger·handler·to·handle·the·events.·For·example·to·write·the |
| 255 | error·log·from·an·httpd·server·with·a·<code·class="inline">ServerID</code>·of·<code·class="inline">my_server</code>·to·a·file | 255 | error·log·from·an·httpd·server·with·a·<code·class="inline">ServerID</code>·of·<code·class="inline">my_server</code>·to·a·file |
| 256 | you·can·use·the·following·sys.config:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 256 | you·can·use·the·following·sys.config:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8901012371-1">[</span><span·class="p"·data-group-id="8901012371-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 257 | ·</span><span·class="p"·data-group-id=" | 257 | ·</span><span·class="p"·data-group-id="8901012371-3">[</span><span·class="p"·data-group-id="8901012371-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 258 | ··</span><span·class="p"·data-group-id=" | 258 | ··</span><span·class="p"·data-group-id="8901012371-5">[</span><span·class="p"·data-group-id="8901012371-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">http_error_test</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 259 | ····</span><span·class="p"·data-group-id=" | 259 | ····</span><span·class="p"·data-group-id="8901012371-7">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8901012371-8">#{</span><span·class="w">·</span><span·class="ss">file</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·173,·SHA:·6947bf7021a0339168b935d3f7af2661bb2f13c5d2d8e2eb91527517c008015d·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 260 | ······</span><span·class="ss">filters</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 260 | ······</span><span·class="ss">filters</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8901012371-9">[</span><span·class="p"·data-group-id="8901012371-10">{</span><span·class="ss">inets_httpd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8901012371-11">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 261 | ·································</span><span·class="p"·data-group-id=" | 261 | ·································</span><span·class="p"·data-group-id="8901012371-12">{</span><span·class="ss">log</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">equal</span><span·class="p">,</span><span·class="w"> |
| 262 | ··································</span><span·class="p"·data-group-id=" | 262 | ··································</span><span·class="p"·data-group-id="8901012371-13">[</span><span·class="ss">otp</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">inets</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·147,·SHA:·5e90506fa9c1bae656234caf3e6a724e762b878c58865b79d9571e09cf11abaf·...·]-13">]</span><span·class="w"> |
| 263 | ·································</span><span·class="p"·data-group-id=" | 263 | ·································</span><span·class="p"·data-group-id="8901012371-12">}</span><span·class="p"·data-group-id="8901012371-11">}</span><span·class="p"·data-group-id="8901012371-10">}</span><span·class="p"·data-group-id="8901012371-9">]</span><span·class="p">,</span><span·class="w"> |
| 264 | ······</span><span·class="ss">filter_default</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">stop</span><span·class="w">·</span><span·class="p"·data-group-id=" | 264 | ······</span><span·class="ss">filter_default</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">stop</span><span·class="w">·</span><span·class="p"·data-group-id="8901012371-7">}</span><span·class="p"·data-group-id="8901012371-6">}</span><span·class="p"·data-group-id="8901012371-5">]</span><span·class="p"·data-group-id="8901012371-4">}</span><span·class="p"·data-group-id="8901012371-3">]</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·371,·SHA:·9c9868700e0bdee6e80cf8e82b6b73f2b4ad427f22e9b32cc4305d29fa0b2035·...·]-1">(</span><span·class="ss">default</span><span·class="p">,</span><span·class="w"> |
| 265 | ··························</span><span·class="ss">inets_httpd</span><span·class="p">,</span><span·class="w"> | 265 | ··························</span><span·class="ss">inets_httpd</span><span·class="p">,</span><span·class="w"> |
| 266 | ··························</span><span·class="p"·data-group-id=" | 266 | ··························</span><span·class="p"·data-group-id="2447001314-2">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 267 | ···························</span><span·class="p"·data-group-id=" | 267 | ···························</span><span·class="p"·data-group-id="2447001314-3">{</span><span·class="ss">log</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">equal</span><span·class="p">,</span><span·class="w"> |
| 268 | ····························</span><span·class="p"·data-group-id=" | 268 | ····························</span><span·class="p"·data-group-id="2447001314-4">[</span><span·class="ss">otp</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">inets</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">httpd</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·305,·SHA:·3d0ad283bf11331fec9ca9c586383eeb09047369d334486c99fe9513ce708c44·...·]-1">)</span><span·class="p">.</span></code></pre></li></ul></li><li><p><a·href=""·id="prop_log_format"></a>·<strong><code·class="inline">{log_format,·common·|·combined}</code></strong><br/>Defines·if·access·logs·are·to·be·written·according·to·the·<code·class="inline">common</code>·log·format |
| 269 | or·the·extended·common·log·format.·The·<code·class="inline">common</code>·format·is·one·line·looking | 269 | or·the·extended·common·log·format.·The·<code·class="inline">common</code>·format·is·one·line·looking |
| 270 | like·this:·<code·class="inline">remotehost·rfc931·authuser·[date]·"request"·status·bytes</code>.</p><p>Here:</p><ul><li><p><strong><code·class="inline">remotehost</code></strong>·-·Remote.</p></li><li><p><strong><code·class="inline">rfc931</code></strong>·-·The·remote·username·of·the·client | 270 | like·this:·<code·class="inline">remotehost·rfc931·authuser·[date]·"request"·status·bytes</code>.</p><p>Here:</p><ul><li><p><strong><code·class="inline">remotehost</code></strong>·-·Remote.</p></li><li><p><strong><code·class="inline">rfc931</code></strong>·-·The·remote·username·of·the·client |
| 271 | (<a·href="http://www.ietf.org/rfc/rfc931.txt">RFC·931</a>).</p></li><li><p><strong><code·class="inline">authuser</code></strong>·-·The·username·used·for·authentication.</p></li><li><p><strong><code·class="inline">[date]</code></strong>·-·Date·and·time·of·the·request | 271 | (<a·href="http://www.ietf.org/rfc/rfc931.txt">RFC·931</a>).</p></li><li><p><strong><code·class="inline">authuser</code></strong>·-·The·username·used·for·authentication.</p></li><li><p><strong><code·class="inline">[date]</code></strong>·-·Date·and·time·of·the·request |
| 272 | (<a·href="http://www.ietf.org/rfc/rfc1123.txt">RFC·1123</a>).</p></li><li><p><strong><code·class="inline">"request"</code></strong>·-·The·request·line·as·it·came·from·the·client | 272 | (<a·href="http://www.ietf.org/rfc/rfc1123.txt">RFC·1123</a>).</p></li><li><p><strong><code·class="inline">"request"</code></strong>·-·The·request·line·as·it·came·from·the·client |
| 273 | (<a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>).</p></li><li><p><strong><code·class="inline">status</code></strong>·-·The·HTTP·status·code·returned·to·the·client | 273 | (<a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>).</p></li><li><p><strong><code·class="inline">status</code></strong>·-·The·HTTP·status·code·returned·to·the·client |
| 274 | (<a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>).</p></li><li><p><strong><code·class="inline">bytes</code></strong>·-·The·content-length·of·the·document·transferred.</p></li></ul><p>The·<code·class="inline">combined</code>·format·is·one·line·looking·like·this: | 274 | (<a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>).</p></li><li><p><strong><code·class="inline">bytes</code></strong>·-·The·content-length·of·the·document·transferred.</p></li></ul><p>The·<code·class="inline">combined</code>·format·is·one·line·looking·like·this: |
| 275 | <code·class="inline">remotehost·rfc931·authuser·[date]·"request"·status·bytes·"referer"·"user_agent"</code></p><p>In·addition·to·the·earlier:</p><ul><li><p><strong><code·class="inline">"referer"</code></strong>·-·The·URL·the·client·was·on·before·requesting·the·URL·(if·it | 275 | <code·class="inline">remotehost·rfc931·authuser·[date]·"request"·status·bytes·"referer"·"user_agent"</code></p><p>In·addition·to·the·earlier:</p><ul><li><p><strong><code·class="inline">"referer"</code></strong>·-·The·URL·the·client·was·on·before·requesting·the·URL·(if·it |
| 276 | could·not·be·determined,·a·minus·sign·is·placed·in·this·field).</p></li><li><p><strong><code·class="inline">"user_agent"</code></strong>·-·The·software·the·client·claims·to·be·using·(if·it·could | 276 | could·not·be·determined,·a·minus·sign·is·placed·in·this·field).</p></li><li><p><strong><code·class="inline">"user_agent"</code></strong>·-·The·software·the·client·claims·to·be·using·(if·it·could |
| 277 | not·be·determined,·a·minus·sign·is·placed·in·this·field).</p></li></ul><p>This·affects·the·access·logs·written·by·<code·class="inline">mod_log</code>·and·<code·class="inline">mod_disk_log</code>.</p></li><li><p><a·href=""·id="prop_elog_format"></a>·<strong><code·class="inline">{error_log_format,·pretty·|·compact}</code></strong><br/>Default·is·<code·class="inline">pretty</code>.·If·the·error·log·is·meant·to·be·read·directly·by·a·human, | 277 | not·be·determined,·a·minus·sign·is·placed·in·this·field).</p></li></ul><p>This·affects·the·access·logs·written·by·<code·class="inline">mod_log</code>·and·<code·class="inline">mod_disk_log</code>.</p></li><li><p><a·href=""·id="prop_elog_format"></a>·<strong><code·class="inline">{error_log_format,·pretty·|·compact}</code></strong><br/>Default·is·<code·class="inline">pretty</code>.·If·the·error·log·is·meant·to·be·read·directly·by·a·human, |
| 278 | <code·class="inline">pretty</code>·is·the·best·option.</p><p><code·class="inline">pretty</code>·has·a·format·corresponding·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 278 | <code·class="inline">pretty</code>·is·the·best·option.</p><p><code·class="inline">pretty</code>·has·a·format·corresponding·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0348661685-1">(</span><span·class="s">"[</span><span·class="si">~s</span><span·class="s">]·</span><span·class="si">~s</span><span·class="s">,·reason:·</span><span·class="si">~n</span><span·class="s">·</span><span·class="si">~p</span><span·class="s">·<[·...·truncated·by·diffoscope;·len:·1380,·SHA:·7168ae7472fef79f35d079f5d44d4d29bc0d94e81989bb07639ded961bff4b59·...·]6-1">)</span><span·class="p">.</span></code></pre><p>This·affects·the·error·logs·written·by·<code·class="inline">mod_log</code>·and·<code·class="inline">mod_disk_log</code>.</p></li></ul><p><a·href=""·id="props_alias"></a></p><h3·id="module-url-aliasing-properties-requires-mod_alias"·class="section-heading"> |
| 279 | ··<a·href="#module-url-aliasing-properties-requires-mod_alias"·class="hover-link"> | 279 | ··<a·href="#module-url-aliasing-properties-requires-mod_alias"·class="hover-link"> |
| 280 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 280 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 281 | ··</a> | 281 | ··</a> |
| 282 | ··<span·class="text">URL·Aliasing·Properties·-·Requires·mod_alias</span> | 282 | ··<span·class="text">URL·Aliasing·Properties·-·Requires·mod_alias</span> |
| 283 | </h3> | 283 | </h3> |
| 284 | <ul><li><p><a·href=""·id="prop_alias"></a>·<strong><code·class="inline">{alias,·{Alias,·RealName}}</code></strong><br/><code·class="inline">Alias·=·string()</code>·and·<code·class="inline">RealName·=·string()</code>.·<code·class="inline">alias</code>·allows·documents·to·be | 284 | <ul><li><p><a·href=""·id="prop_alias"></a>·<strong><code·class="inline">{alias,·{Alias,·RealName}}</code></strong><br/><code·class="inline">Alias·=·string()</code>·and·<code·class="inline">RealName·=·string()</code>.·<code·class="inline">alias</code>·allows·documents·to·be |
| 285 | stored·in·the·local·file·system·instead·of·the·<code·class="inline">document_root</code>·location.·URLs | 285 | stored·in·the·local·file·system·instead·of·the·<code·class="inline">document_root</code>·location.·URLs |
| 286 | with·a·path·beginning·with·url-path·is·mapped·to·local·files·beginning·with | 286 | with·a·path·beginning·with·url-path·is·mapped·to·local·files·beginning·with |
| 287 | directory-filename,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 287 | directory-filename,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5238874744-1">{</span><span·class="ss">alias</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5238874744-2">{</span><span·class="s">"/image"</span><span·class="p">,</span><span·class="w">·</span><span·class="s"[·...·truncated·by·diffoscope;·len:·126,·SHA:·a5a2b91f3b0a806f6f0592f650ad359c24da6b2b37ca1eb619f6ef90420fa927·...·]44-1">}</span></code></pre><p>Access·to·<a·href="http://your.server.org/image/foo.gif">http://your.server.org/image/foo.gif</a>·would·refer·to·the·file |
| 288 | /ftp/pub/image/foo.gif.</p></li><li><p><a·href=""·id="prop_re_write"></a>·<strong><code·class="inline">{re_write,·{Re,·Replacement}}</code></strong><br/><code·class="inline">Re·=·string()</code>·and·<code·class="inline">Replacement·=·string()</code>.·<code·class="inline">re_write</code>·allows·documents·to | 288 | /ftp/pub/image/foo.gif.</p></li><li><p><a·href=""·id="prop_re_write"></a>·<strong><code·class="inline">{re_write,·{Re,·Replacement}}</code></strong><br/><code·class="inline">Re·=·string()</code>·and·<code·class="inline">Replacement·=·string()</code>.·<code·class="inline">re_write</code>·allows·documents·to |
| 289 | be·stored·in·the·local·file·system·instead·of·the·<code·class="inline">document_root</code>·location. | 289 | be·stored·in·the·local·file·system·instead·of·the·<code·class="inline">document_root</code>·location. |
| 290 | URLs·are·rewritten·by·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/re.html#replace/3"><code·class="inline">re:replace/3</code></a>·to·produce·a·path·in·the·local | 290 | URLs·are·rewritten·by·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/re.html#replace/3"><code·class="inline">re:replace/3</code></a>·to·produce·a·path·in·the·local |
| 291 | file-system,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 291 | file-system,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9784612161-1">{</span><span·class="ss">re_write</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9784612161-2">{</span><span·class="s">"^/[~]([^/]+)(.*)$"</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·147,·SHA:·fbfe73af482bdb89322e0b1ee23abbc3ea15f866f46dca950ce5f82e34ab5f05·...·]-1">}</span></code></pre><p>Access·to·<a·href="http://your.server.org/~bob/foo.gif">http://your.server.org/~bob/foo.gif</a>·would·refer·to·the·file |
| 292 | /home/bob/public/foo.gif.</p></li><li><p><a·href=""·id="prop_dir_idx"></a>·<strong><code·class="inline">{directory_index,·[string()]}</code></strong><br/><code·class="inline">directory_index</code>·specifies·a·list·of·resources·to·look·for·if·a·client | 292 | /home/bob/public/foo.gif.</p></li><li><p><a·href=""·id="prop_dir_idx"></a>·<strong><code·class="inline">{directory_index,·[string()]}</code></strong><br/><code·class="inline">directory_index</code>·specifies·a·list·of·resources·to·look·for·if·a·client |
| 293 | requests·a·directory·using·a·<code·class="inline">/</code>·at·the·end·of·the·directory·name.·<code·class="inline">file</code> | 293 | requests·a·directory·using·a·<code·class="inline">/</code>·at·the·end·of·the·directory·name.·<code·class="inline">file</code> |
| 294 | depicts·the·name·of·a·file·in·the·directory.·Several·files·can·be·given,·in | 294 | depicts·the·name·of·a·file·in·the·directory.·Several·files·can·be·given,·in |
| 295 | which·case·the·server·returns·the·first·it·finds,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 295 | which·case·the·server·returns·the·first·it·finds,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6978561068-1">{</span><span·class="ss">directory_index</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6978561068-2">[</span><span·class="s">"index.html"</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·140,·SHA:·01e1bc575978ab8e885e5da413f8cfc0cd01188e48e61fa3322e1b6f4eb965af·...·]-1">}</span></code></pre><p>Access·to·<a·href="http://your.server.org/docs/">http://your.server.org/docs/</a>·would·return |
| 296 | <a·href="http://your.server.org/docs/index.html">http://your.server.org/docs/index.html</a>·or | 296 | <a·href="http://your.server.org/docs/index.html">http://your.server.org/docs/index.html</a>·or |
| 297 | <a·href="http://your.server.org/docs/welcome.html">http://your.server.org/docs/welcome.html</a>·if·index.html·does·not·exist.</p></li></ul><p><a·href=""·id="props_cgi"></a></p><h3·id="module-cgi-properties-requires-mod_cgi"·class="section-heading"> | 297 | <a·href="http://your.server.org/docs/welcome.html">http://your.server.org/docs/welcome.html</a>·if·index.html·does·not·exist.</p></li></ul><p><a·href=""·id="props_cgi"></a></p><h3·id="module-cgi-properties-requires-mod_cgi"·class="section-heading"> |
| 298 | ··<a·href="#module-cgi-properties-requires-mod_cgi"·class="hover-link"> | 298 | ··<a·href="#module-cgi-properties-requires-mod_cgi"·class="hover-link"> |
| 299 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 299 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 300 | ··</a> | 300 | ··</a> |
| 301 | ··<span·class="text">CGI·Properties·-·Requires·mod_cgi</span> | 301 | ··<span·class="text">CGI·Properties·-·Requires·mod_cgi</span> |
| 302 | </h3> | 302 | </h3> |
| Offset 316, 23 lines modified | Offset 316, 23 lines modified | ||
| 316 | activating·a·CGI·script·whenever·a·file·of·a·certain·MIME·type·is·requested. | 316 | activating·a·CGI·script·whenever·a·file·of·a·certain·MIME·type·is·requested. |
| 317 | It·propagates·the·URL·and·file·path·of·the·requested·document·using·the | 317 | It·propagates·the·URL·and·file·path·of·the·requested·document·using·the |
| 318 | standard·CGI·PATH_INFO·and·PATH_TRANSLATED·environment·variables.</p><p>Example:</p><pre><code·class="text">{action,·{"text/plain",·"/cgi-bin/log_and_deliver_text"}}</code></pre></li><li><p><a·href=""·id="prop_script"></a>·<strong><code·class="inline">{script,·{Method,·CgiScript}}</code></strong>·-·requires·<code·class="inline">mod_actions</code><br/><code·class="inline">Method·=·string()</code>·and·<code·class="inline">CgiScript·=·string()</code>.·<code·class="inline">script</code>·adds·an·action | 318 | standard·CGI·PATH_INFO·and·PATH_TRANSLATED·environment·variables.</p><p>Example:</p><pre><code·class="text">{action,·{"text/plain",·"/cgi-bin/log_and_deliver_text"}}</code></pre></li><li><p><a·href=""·id="prop_script"></a>·<strong><code·class="inline">{script,·{Method,·CgiScript}}</code></strong>·-·requires·<code·class="inline">mod_actions</code><br/><code·class="inline">Method·=·string()</code>·and·<code·class="inline">CgiScript·=·string()</code>.·<code·class="inline">script</code>·adds·an·action |
| 319 | activating·a·CGI·script·whenever·a·file·is·requested·using·a·certain·HTTP | 319 | activating·a·CGI·script·whenever·a·file·is·requested·using·a·certain·HTTP |
| 320 | method.·The·method·is·either·GET·or·POST,·as·defined·in | 320 | method.·The·method·is·either·GET·or·POST,·as·defined·in |
| 321 | <a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>.·It·propagates·the·URL·and | 321 | <a·href="http://www.ietf.org/rfc/rfc1945.txt">RFC·1945</a>.·It·propagates·the·URL·and |
| 322 | file·path·of·the·requested·document·using·the·standard·CGI·PATH_INFO·and | 322 | file·path·of·the·requested·document·using·the·standard·CGI·PATH_INFO·and |
| 323 | PATH_TRANSLATED·environment·variables.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 323 | PATH_TRANSLATED·environment·variables.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1892841695-1">{</span><span·class="ss">script</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1892841695-2">{</span><span·class="s">"PUT"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">&[·...·truncated·by·diffoscope;·len:·124,·SHA:·193dae2453dac6480f20b2c4451fbf1e11cc85a73eddc48d2d20fe3c880a6bf5·...·]-1">}</span></code></pre></li></ul><p><a·href=""·id="props_esi"></a></p><h3·id="module-esi-properties-requires-mod_esi"·class="section-heading"> |
| 324 | ··<a·href="#module-esi-properties-requires-mod_esi"·class="hover-link"> | 324 | ··<a·href="#module-esi-properties-requires-mod_esi"·class="hover-link"> |
| 325 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 325 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 326 | ··</a> | 326 | ··</a> |
| 327 | ··<span·class="text">ESI·Properties·-·Requires·mod_esi</span> | 327 | ··<span·class="text">ESI·Properties·-·Requires·mod_esi</span> |
| 328 | </h3> | 328 | </h3> |
| 329 | <ul><li><p><a·href=""·id="prop_esi_alias"></a>·<strong><code·class="inline">{erl_script_alias,·{URLPath,·[AllowedModule]}}</code></strong><br/><code·class="inline">URLPath·=·string()</code>·and·<code·class="inline">AllowedModule·=·atom()</code>.·<code·class="inline">erl_script_alias</code>·marks | 329 | <ul><li><p><a·href=""·id="prop_esi_alias"></a>·<strong><code·class="inline">{erl_script_alias,·{URLPath,·[AllowedModule]}}</code></strong><br/><code·class="inline">URLPath·=·string()</code>·and·<code·class="inline">AllowedModule·=·atom()</code>.·<code·class="inline">erl_script_alias</code>·marks |
| 330 | all·URLs·matching·url-path·as·erl·scheme·scripts.·A·matching·URL·is·mapped | 330 | all·URLs·matching·url-path·as·erl·scheme·scripts.·A·matching·URL·is·mapped |
| 331 | into·a·specific·module·and·function,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 331 | into·a·specific·module·and·function,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0773376439-1">{</span><span·class="ss">erl_script_alias</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0773376439-2">{</span><span·class="s">"/cgi-bin/example"</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·243,·SHA:·9a6f46bb9509f67760a73cfad7dcda553ef9913c99427ddba6c926aa19cda0a5·...·]-1">}</span></code></pre><p>A·request·to·<a·href="http://your.server.org/cgi-bin/example/httpd_example:yahoo">http://your.server.org/cgi-bin/example/httpd_example:yahoo</a>·would |
| 332 | refer·to·httpd_example:yahoo/3·or,·if·that·does·not·exist, | 332 | refer·to·httpd_example:yahoo/3·or,·if·that·does·not·exist, |
| 333 | httpd_example:yahoo/2·and·<a·href="http://your.server.org/cgi-bin/example/other:yahoo">http://your.server.org/cgi-bin/example/other:yahoo</a> | 333 | httpd_example:yahoo/2·and·<a·href="http://your.server.org/cgi-bin/example/other:yahoo">http://your.server.org/cgi-bin/example/other:yahoo</a> |
| 334 | would·not·be·allowed·to·execute.</p></li><li><p><a·href=""·id="prop_esi_nocache"></a>·<strong><code·class="inline">{erl_script_nocache,·boolean()}</code></strong><br/>If·<code·class="inline">erl_script_nocache</code>·is·set·to·<code·class="inline">true</code>,·the·server·adds·HTTP·header·fields | 334 | would·not·be·allowed·to·execute.</p></li><li><p><a·href=""·id="prop_esi_nocache"></a>·<strong><code·class="inline">{erl_script_nocache,·boolean()}</code></strong><br/>If·<code·class="inline">erl_script_nocache</code>·is·set·to·<code·class="inline">true</code>,·the·server·adds·HTTP·header·fields |
| 335 | preventing·proxies·from·caching·the·page.·This·is·generally·a·good·idea·for | 335 | preventing·proxies·from·caching·the·page.·This·is·generally·a·good·idea·for |
| 336 | dynamic·content,·as·the·content·often·varies·between·each·request.·Default·is | 336 | dynamic·content,·as·the·content·often·varies·between·each·request.·Default·is |
| 337 | <code·class="inline">false</code>.</p></li><li><p><a·href=""·id="prop_esi_timeout"></a>·<strong><code·class="inline">{erl_script_timeout,·integer()}</code></strong><br/>If·<code·class="inline">erl_script_timeout</code>·sets·the·time·in·seconds·the·server·waits·between·each | 337 | <code·class="inline">false</code>.</p></li><li><p><a·href=""·id="prop_esi_timeout"></a>·<strong><code·class="inline">{erl_script_timeout,·integer()}</code></strong><br/>If·<code·class="inline">erl_script_timeout</code>·sets·the·time·in·seconds·the·server·waits·between·each |
| 338 | chunk·of·data·to·be·delivered·through·<a·href="mod_esi.html#deliver/2"><code·class="inline">mod_esi:deliver/2</code></a>.·Default·is·<code·class="inline">15</code>. | 338 | chunk·of·data·to·be·delivered·through·<a·href="mod_esi.html#deliver/2"><code·class="inline">mod_esi:deliver/2</code></a>.·Default·is·<code·class="inline">15</code>. |
| Offset 374, 15 lines modified | Offset 374, 15 lines modified | ||
| 374 | is·written·to·each·file·and·max·files·is·used·before·the·first·file·is | 374 | is·written·to·each·file·and·max·files·is·used·before·the·first·file·is |
| 375 | truncated·and·reused.</p></li></ul><p><a·href=""·id="props_auth"></a></p><h3·id="module-authentication-properties-requires-mod_auth"·class="section-heading"> | 375 | truncated·and·reused.</p></li></ul><p><a·href=""·id="props_auth"></a></p><h3·id="module-authentication-properties-requires-mod_auth"·class="section-heading"> |
| 376 | ··<a·href="#module-authentication-properties-requires-mod_auth"·class="hover-link"> | 376 | ··<a·href="#module-authentication-properties-requires-mod_auth"·class="hover-link"> |
| 377 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 377 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 378 | ··</a> | 378 | ··</a> |
| 379 | ··<span·class="text">Authentication·Properties·-·Requires·mod_auth</span> | 379 | ··<span·class="text">Authentication·Properties·-·Requires·mod_auth</span> |
| 380 | </h3> | 380 | </h3> |
| 381 | <p><a·href=""·id="prop_dri"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 381 | <p><a·href=""·id="prop_dri"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2289368553-1">{</span><span·class="ss">directory</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2289368553-2">{</span><span·class="nf">path</span><span·class="p"·data-group-id="2289368553-3">(</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·1510,·SHA:·8702cc56c0f046e37ade725477198a452ba55be2d3b6dc73a52cf4631ba94f2b·...·]-1">}</span></code></pre><p>The·host·<code·class="inline">123.34.56.11</code>·and·all·machines·on·the·<code·class="inline">150.100.23</code>·subnet·are |
| 382 | allowed·access.</p></li><li><p><a·href=""·id="prop_deny_from"></a>·<strong><code·class="inline">{deny_from,·all·|·[RegxpHostString]}</code></strong><br/>Defines·a·set·of·hosts·to·be·denied·access·to·a·given·directory,·for·example:</p><pre><code·class="text">{deny_from,·["123.34.56.11",·"150.100.23"]}</code></pre><p>The·host·<code·class="inline">123.34.56.11</code>·and·all·machines·on·the·<code·class="inline">150.100.23</code>·subnet·are·not | 382 | allowed·access.</p></li><li><p><a·href=""·id="prop_deny_from"></a>·<strong><code·class="inline">{deny_from,·all·|·[RegxpHostString]}</code></strong><br/>Defines·a·set·of·hosts·to·be·denied·access·to·a·given·directory,·for·example:</p><pre><code·class="text">{deny_from,·["123.34.56.11",·"150.100.23"]}</code></pre><p>The·host·<code·class="inline">123.34.56.11</code>·and·all·machines·on·the·<code·class="inline">150.100.23</code>·subnet·are·not |
| 383 | allowed·access.</p></li><li><p><a·href=""·id="prop_auth_type"></a>·<strong><code·class="inline">{auth_type,·plain·|·dets·|·mnesia}</code></strong><br/>Sets·the·type·of·authentication·database·that·is·used·for·the·directory.·The | 383 | allowed·access.</p></li><li><p><a·href=""·id="prop_auth_type"></a>·<strong><code·class="inline">{auth_type,·plain·|·dets·|·mnesia}</code></strong><br/>Sets·the·type·of·authentication·database·that·is·used·for·the·directory.·The |
| 384 | key·difference·between·the·different·methods·is·that·dynamic·data·can·be·saved | 384 | key·difference·between·the·different·methods·is·that·dynamic·data·can·be·saved |
| 385 | when·Mnesia·and·Dets·are·used.</p></li><li><p><a·href=""·id="prop_auth_user_file"></a>·<strong><code·class="inline">{auth_user_file,·path()}</code></strong><br/>Sets·the·name·of·a·file·containing·the·list·of·users·and·passwords·for·user | 385 | when·Mnesia·and·Dets·are·used.</p></li><li><p><a·href=""·id="prop_auth_user_file"></a>·<strong><code·class="inline">{auth_user_file,·path()}</code></strong><br/>Sets·the·name·of·a·file·containing·the·list·of·users·and·passwords·for·user |
| 386 | authentication.·The·filename·can·be·either·absolute·or·relative·to·the | 386 | authentication.·The·filename·can·be·either·absolute·or·relative·to·the |
| 387 | <code·class="inline">server_root</code>.·If·using·the·plain·storage·method,·this·file·is·a·plain·text | 387 | <code·class="inline">server_root</code>.·If·using·the·plain·storage·method,·this·file·is·a·plain·text |
| 388 | file·where·each·line·contains·a·username·followed·by·a·colon,·followed·by·the | 388 | file·where·each·line·contains·a·username·followed·by·a·colon,·followed·by·the |
| Offset 409, 15 lines modified | Offset 409, 15 lines modified | ||
| 409 | changed·after·the·web·server·is·started.·Otherwise·it·is·written·in·clear·text | 409 | changed·after·the·web·server·is·started.·Otherwise·it·is·written·in·clear·text |
| 410 | in·the·configuration·file.</p></li><li><p><a·href=""·id="prop_req_user"></a>·<strong><code·class="inline">{require_user,·[string()]}</code></strong><br/>Defines·users·to·grant·access·to·a·given·directory·using·a·secret·password.</p></li><li><p><a·href=""·id="prop_req_grp"></a>·<strong><code·class="inline">{require_group,·[string()]}</code></strong><br/>Defines·users·to·grant·access·to·a·given·directory·using·a·secret·password.</p></li></ul><p><a·href=""·id="props_sec"></a></p><h3·id="module-security-properties-requires-mod_security"·class="section-heading"> | 410 | in·the·configuration·file.</p></li><li><p><a·href=""·id="prop_req_user"></a>·<strong><code·class="inline">{require_user,·[string()]}</code></strong><br/>Defines·users·to·grant·access·to·a·given·directory·using·a·secret·password.</p></li><li><p><a·href=""·id="prop_req_grp"></a>·<strong><code·class="inline">{require_group,·[string()]}</code></strong><br/>Defines·users·to·grant·access·to·a·given·directory·using·a·secret·password.</p></li></ul><p><a·href=""·id="props_sec"></a></p><h3·id="module-security-properties-requires-mod_security"·class="section-heading"> |
| 411 | ··<a·href="#module-security-properties-requires-mod_security"·class="hover-link"> | 411 | ··<a·href="#module-security-properties-requires-mod_security"·class="hover-link"> |
| 412 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 412 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 413 | ··</a> | 413 | ··</a> |
| 414 | ··<span·class="text">Security·Properties·-·Requires·mod_security</span> | 414 | ··<span·class="text">Security·Properties·-·Requires·mod_security</span> |
| 415 | </h3> | 415 | </h3> |
| 416 | <p><a·href=""·id="prop_sec_dir"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 416 | <p><a·href=""·id="prop_sec_dir"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9836132300-1">{</span><span·class="ss">security_directory</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9836132300-2">{</span><span·class="nf">path</span><span·class="p"·data-group-id="9836132300-3">(</span><span·clas[·...·truncated·by·diffoscope;·len:·717,·SHA:·60d9b415cab4b009441a35c1f586c6d570a40986bb865ae722f5dde373969700·...·]-1">}</span></code></pre><p><a·href=""·id="props_sdir"></a></p><p>The·properties·for·the·security·directories·are·as·follows:</p><ul><li><p><a·href=""·id="prop_data_file"></a>·<strong><code·class="inline">{data_file,·path()}</code></strong><br/>Name·of·the·security·data·file.·The·filename·can·either·be·absolute·or |
| 417 | relative·to·the·<code·class="inline">server_root</code>.·This·file·is·used·to·store·persistent·data·for | 417 | relative·to·the·<code·class="inline">server_root</code>.·This·file·is·used·to·store·persistent·data·for |
| 418 | module·<code·class="inline">mod_security</code>.</p></li><li><p><a·href=""·id="prop_max_retries"></a>·<strong><code·class="inline">{max_retries,·integer()}</code></strong><br/>Specifies·the·maximum·number·of·attempts·to·authenticate·a·user·before·the | 418 | module·<code·class="inline">mod_security</code>.</p></li><li><p><a·href=""·id="prop_max_retries"></a>·<strong><code·class="inline">{max_retries,·integer()}</code></strong><br/>Specifies·the·maximum·number·of·attempts·to·authenticate·a·user·before·the |
| 419 | user·is·blocked·out.·If·a·user·successfully·authenticates·while·blocked,·the | 419 | user·is·blocked·out.·If·a·user·successfully·authenticates·while·blocked,·the |
| 420 | user·receives·a·403·(Forbidden)·response·from·the·server.·If·the·user·makes·a | 420 | user·receives·a·403·(Forbidden)·response·from·the·server.·If·the·user·makes·a |
| 421 | failed·attempt·while·blocked,·the·server·returns·401·(Unauthorized),·for | 421 | failed·attempt·while·blocked,·the·server·returns·401·(Unauthorized),·for |
| 422 | security·reasons.·Default·is·<code·class="inline">3</code>.·Can·be·set·to·infinity.</p></li><li><p><a·href=""·id="prop_block_time"></a>·<strong><code·class="inline">{block_time,·integer()}</code></strong><br/>Specifies·the·number·of·minutes·a·user·is·blocked.·After·this·time·has·passed, | 422 | security·reasons.·Default·is·<code·class="inline">3</code>.·Can·be·set·to·infinity.</p></li><li><p><a·href=""·id="prop_block_time"></a>·<strong><code·class="inline">{block_time,·integer()}</code></strong><br/>Specifies·the·number·of·minutes·a·user·is·blocked.·After·this·time·has·passed, |
| 423 | the·user·automatically·regains·access.·Default·is·<code·class="inline">60</code>.</p></li><li><p><a·href=""·id="prop_fail_exp_time"></a>·<strong><code·class="inline">{fail_expire_time,·integer()}</code></strong><br/>Specifies·the·number·of·minutes·a·failed·user·authentication·is·remembered.·If | 423 | the·user·automatically·regains·access.·Default·is·<code·class="inline">60</code>.</p></li><li><p><a·href=""·id="prop_fail_exp_time"></a>·<strong><code·class="inline">{fail_expire_time,·integer()}</code></strong><br/>Specifies·the·number·of·minutes·a·failed·user·authentication·is·remembered.·If |
| Offset 426, 30 lines modified | Offset 426, 30 lines modified | ||
| 426 | remembered.·After·this·time·has·passed,·the·authentication·is·no·longer | 426 | remembered.·After·this·time·has·passed,·the·authentication·is·no·longer |
| 427 | reported.·Default·is·<code·class="inline">30</code>.</p></li></ul><h2·id="module-web-server-api-data-types"·class="section-heading"> | 427 | reported.·Default·is·<code·class="inline">30</code>.</p></li></ul><h2·id="module-web-server-api-data-types"·class="section-heading"> |
| 428 | ··<a·href="#module-web-server-api-data-types"·class="hover-link"> | 428 | ··<a·href="#module-web-server-api-data-types"·class="hover-link"> |
| 429 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 429 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 430 | ··</a> | 430 | ··</a> |
| 431 | ··<span·class="text">Web·server·API·data·types</span> | 431 | ··<span·class="text">Web·server·API·data·types</span> |
| 432 | </h2> | 432 | </h2> |
| 433 | <p>The·Erlang·web·server·API·data·types·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ModData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">mod</span><span·class="p"·data-group-id=" | 433 | <p>The·Erlang·web·server·API·data·types·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ModData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">mod</span><span·class="p"·data-group-id="7595607048-1">{</span><span·class="p"·data-group-id="7595607048-1">}</span><span·class="w"> |
| 434 | </span><span·class="w"> | 434 | </span><span·class="w"> |
| 435 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 435 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7595607048-2">(</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7595607048-3">{</span><span·class="w"> |
| 436 | ····</span><span·class="ss">data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 436 | ····</span><span·class="ss">data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7595607048-4">[</span><span·class="p"·data-group-id="7595607048-4">]</span><span·class="p">,</span><span·class="w"> |
| 437 | ····</span><span·class="ss">socket_type</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">ip_comm</span><span·class="p">,</span><span·class="w"> | 437 | ····</span><span·class="ss">socket_type</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">ip_comm</span><span·class="p">,</span><span·class="w"> |
| 438 | ····</span><span·class="ss">socket</span><span·class="p">,</span><span·class="w"> | 438 | ····</span><span·class="ss">socket</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 4530/50188 bytes (9.03%) of diff not shown. | |||
| Offset 309, 15 lines modified | Offset 309, 15 lines modified | ||
| 309 | ······<p·class="built-using"> | 309 | ······<p·class="built-using"> |
| 310 | ········Built·using | 310 | ········Built·using |
| 311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 313 | ······</p> | 313 | ······</p> |
| 314 | <p>Copyright·©·1996-202 | 314 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 315 | ····</footer> | 315 | ····</footer> |
| 316 | ··</div> | 316 | ··</div> |
| 317 | </main> | 317 | </main> |
| 318 | </div> | 318 | </div> |
| 319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 320 | ··<script> | 320 | ··<script> |
| 321 | ··let·initialized·=·false; | 321 | ··let·initialized·=·false; |
| Offset 311, 15 lines modified | Offset 311, 15 lines modified | ||
| 311 | ······<p·class="built-using"> | 311 | ······<p·class="built-using"> |
| 312 | ········Built·using | 312 | ········Built·using |
| 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 315 | ······</p> | 315 | ······</p> |
| 316 | <p>Copyright·©·1996-202 | 316 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 317 | ····</footer> | 317 | ····</footer> |
| 318 | ··</div> | 318 | ··</div> |
| 319 | </main> | 319 | </main> |
| 320 | </div> | 320 | </div> |
| 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 322 | ··<script> | 322 | ··<script> |
| 323 | ··let·initialized·=·false; | 323 | ··let·initialized·=·false; |
| Offset 949, 15 lines modified | Offset 949, 15 lines modified | ||
| 949 | ······<p·class="built-using"> | 949 | ······<p·class="built-using"> |
| 950 | ········Built·using | 950 | ········Built·using |
| 951 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 951 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 952 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 952 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 953 | ······</p> | 953 | ······</p> |
| 954 | <p>Copyright·©·1996-202 | 954 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 955 | ····</footer> | 955 | ····</footer> |
| 956 | ··</div> | 956 | ··</div> |
| 957 | </main> | 957 | </main> |
| 958 | </div> | 958 | </div> |
| 959 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 959 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 960 | ··<script> | 960 | ··<script> |
| 961 | ··let·initialized·=·false; | 961 | ··let·initialized·=·false; |
| Offset 653, 15 lines modified | Offset 653, 15 lines modified | ||
| 653 | ······<p·class="built-using"> | 653 | ······<p·class="built-using"> |
| 654 | ········Built·using | 654 | ········Built·using |
| 655 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 655 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 656 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 656 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 657 | ······</p> | 657 | ······</p> |
| 658 | <p>Copyright·©·1996-202 | 658 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 659 | ····</footer> | 659 | ····</footer> |
| 660 | ··</div> | 660 | ··</div> |
| 661 | </main> | 661 | </main> |
| 662 | </div> | 662 | </div> |
| 663 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 663 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 664 | ··<script> | 664 | ··<script> |
| 665 | ··let·initialized·=·false; | 665 | ··let·initialized·=·false; |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | takeover,·configure·the·services·to·be·started·at·application·startup.·When | 137 | takeover,·configure·the·services·to·be·started·at·application·startup.·When |
| 138 | starting·the·<code·class="inline">Inets</code>·application,·the·<code·class="inline">Inets</code>·top·supervisor·starts·a·number·of | 138 | starting·the·<code·class="inline">Inets</code>·application,·the·<code·class="inline">Inets</code>·top·supervisor·starts·a·number·of |
| 139 | subsupervisors·and·worker·processes·for·handling·the·provided·services.·When | 139 | subsupervisors·and·worker·processes·for·handling·the·provided·services.·When |
| 140 | starting·services·dynamically,·new·children·are·added·to·the·supervision·tree, | 140 | starting·services·dynamically,·new·children·are·added·to·the·supervision·tree, |
| 141 | unless·the·service·is·started·with·the·standalone·option.·In·this·case·the | 141 | unless·the·service·is·started·with·the·standalone·option.·In·this·case·the |
| 142 | service·is·linked·to·the·calling·process·and·all·OTP·application·features,·such | 142 | service·is·linked·to·the·calling·process·and·all·OTP·application·features,·such |
| 143 | as·soft·upgrade,·are·lost.</p><p>Services·to·be·configured·for·startup·at·application·startup·are·to·be·put·into | 143 | as·soft·upgrade,·are·lost.</p><p>Services·to·be·configured·for·startup·at·application·startup·are·to·be·put·into |
| 144 | the·Erlang·node·configuration·file·on·the·following·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 144 | the·Erlang·node·configuration·file·on·the·following·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7933883979-1">[</span><span·class="p"·data-group-id="7933883979-2">{</span><span·class="ss">inets</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7933883979-3">[</span><span·class="p"·data-group-id="7933883979-4">{</spa[·...·truncated·by·diffoscope;·len:·329,·SHA:·594223b01c58caffc7fc80434bc63593154ddbb5d40f3179909963687a8c0f12·...·]-1">]</span><span·class="p">.</span></code></pre><p>For·details·of·what·to·put·in·the·list·of·configured·services,·see·the |
| 145 | documentation·for·the·services·to·be·configured.</p> | 145 | documentation·for·the·services·to·be·configured.</p> |
| 146 | </div> | 146 | </div> |
| 147 | <div·class="bottom-actions"·id="bottom-actions"> | 147 | <div·class="bottom-actions"·id="bottom-actions"> |
| 148 | ··<div·class="bottom-actions-item"> | 148 | ··<div·class="bottom-actions-item"> |
| 149 | ······<a·href="introduction.html"·class="bottom-actions-button"·rel="prev"> | 149 | ······<a·href="introduction.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 189, 15 lines modified | Offset 189, 15 lines modified | ||
| 189 | ······<p·class="built-using"> | 189 | ······<p·class="built-using"> |
| 190 | ········Built·using | 190 | ········Built·using |
| 191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 193 | ······</p> | 193 | ······</p> |
| 194 | <p>Copyright·©·1996-202 | 194 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 195 | ····</footer> | 195 | ····</footer> |
| 196 | ··</div> | 196 | ··</div> |
| 197 | </main> | 197 | </main> |
| 198 | </div> | 198 | </div> |
| 199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 200 | ··<script> | 200 | ··<script> |
| 201 | ··let·initialized·=·false; | 201 | ··let·initialized·=·false; |
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 401, 15 lines modified | Offset 401, 15 lines modified | ||
| 401 | ······<p·class="built-using"> | 401 | ······<p·class="built-using"> |
| 402 | ········Built·using | 402 | ········Built·using |
| 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 405 | ······</p> | 405 | ······</p> |
| 406 | <p>Copyright·©·1996-202 | 406 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 407 | ····</footer> | 407 | ····</footer> |
| 408 | ··</div> | 408 | ··</div> |
| 409 | </main> | 409 | </main> |
| 410 | </div> | 410 | </div> |
| 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 412 | ··<script> | 412 | ··<script> |
| 413 | ··let·initialized·=·false; | 413 | ··let·initialized·=·false; |
| Offset 1625, 15 lines modified | Offset 1625, 15 lines modified | ||
| 1625 | ······<p·class="built-using"> | 1625 | ······<p·class="built-using"> |
| 1626 | ········Built·using | 1626 | ········Built·using |
| 1627 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1627 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1628 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1628 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1629 | ······</p> | 1629 | ······</p> |
| 1630 | <p>Copyright·©·1996-202 | 1630 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1631 | ····</footer> | 1631 | ····</footer> |
| 1632 | ··</div> | 1632 | ··</div> |
| 1633 | </main> | 1633 | </main> |
| 1634 | </div> | 1634 | </div> |
| 1635 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1635 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1636 | ··<script> | 1636 | ··<script> |
| 1637 | ··let·initialized·=·false; | 1637 | ··let·initialized·=·false; |
| Offset 393, 15 lines modified | Offset 393, 15 lines modified | ||
| 393 | ······<p·class="built-using"> | 393 | ······<p·class="built-using"> |
| 394 | ········Built·using | 394 | ········Built·using |
| 395 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 395 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 396 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 396 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 397 | ······</p> | 397 | ······</p> |
| 398 | <p>Copyright·©·1996-202 | 398 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 399 | ····</footer> | 399 | ····</footer> |
| 400 | ··</div> | 400 | ··</div> |
| 401 | </main> | 401 | </main> |
| 402 | </div> | 402 | </div> |
| 403 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 403 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 404 | ··<script> | 404 | ··<script> |
| 405 | ··let·initialized·=·false; | 405 | ··let·initialized·=·false; |
| Offset 767, 15 lines modified | Offset 767, 15 lines modified | ||
| 767 | ······<p·class="built-using"> | 767 | ······<p·class="built-using"> |
| 768 | ········Built·using | 768 | ········Built·using |
| 769 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 769 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 770 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 770 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 771 | ······</p> | 771 | ······</p> |
| 772 | <p>Copyright·©·1996-202 | 772 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 773 | ····</footer> | 773 | ····</footer> |
| 774 | ··</div> | 774 | ··</div> |
| 775 | </main> | 775 | </main> |
| 776 | </div> | 776 | </div> |
| 777 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 777 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 778 | ··<script> | 778 | ··<script> |
| 779 | ··let·initialized·=·false; | 779 | ··let·initialized·=·false; |
| Offset 2491, 15 lines modified | Offset 2491, 15 lines modified | ||
| 2491 | ······<p·class="built-using"> | 2491 | ······<p·class="built-using"> |
| 2492 | ········Built·using | 2492 | ········Built·using |
| 2493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2495 | ······</p> | 2495 | ······</p> |
| 2496 | <p>Copyright·©·1996-202 | 2496 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2497 | ····</footer> | 2497 | ····</footer> |
| 2498 | ··</div> | 2498 | ··</div> |
| 2499 | </main> | 2499 | </main> |
| 2500 | </div> | 2500 | </div> |
| 2501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2502 | ··<script> | 2502 | ··<script> |
| 2503 | ··let·initialized·=·false; | 2503 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | ······<p·class="built-using"> | 127 | ······<p·class="built-using"> |
| 128 | ········Built·using | 128 | ········Built·using |
| 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 131 | ······</p> | 131 | ······</p> |
| 132 | <p>Copyright·©·1996-202 | 132 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 133 | ····</footer> | 133 | ····</footer> |
| 134 | ··</div> | 134 | ··</div> |
| 135 | </main> | 135 | </main> |
| 136 | </div> | 136 | </div> |
| 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 138 | ··<script> | 138 | ··<script> |
| 139 | ··let·initialized·=·false; | 139 | ··let·initialized·=·false; |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>All·Classes·and·Interfaces·(Java-Erlang·Interface·Library)</title> | 5 | <title>All·Classes·and·Interfaces·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="class·index"> | 9 | <meta·name="description"·content="class·index"> |
| 10 | <meta·name="generator"·content="javadoc/AllClassesIndexWriter"> | 10 | <meta·name="generator"·content="javadoc/AllClassesIndexWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>All·Packages·(Java-Erlang·Interface·Library)</title> | 5 | <title>All·Packages·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="package·index"> | 9 | <meta·name="description"·content="package·index"> |
| 10 | <meta·name="generator"·content="javadoc/AllPackagesIndexWriter"> | 10 | <meta·name="generator"·content="javadoc/AllPackagesIndexWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>AbstractConnection·(Java-Erlang·Interface·Library)</title> | 5 | <title>AbstractConnection·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·AbstractConnection"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·AbstractConnection"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>AbstractNode·(Java-Erlang·Interface·Library)</title> | 5 | <title>AbstractNode·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·AbstractNode"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·AbstractNode"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>GenericQueue·(Java-Erlang·Interface·Library)</title> | 5 | <title>GenericQueue·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·GenericQueue"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·GenericQueue"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpAuthException·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpAuthException·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpAuthException"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpAuthException"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpConnection·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpConnection·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpConnection"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpConnection"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpCookedConnection·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpCookedConnection·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpCookedConnection"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpCookedConnection"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpEpmd·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpEpmd·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpEpmd"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpEpmd"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangAtom·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangAtom·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangAtom"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangAtom"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangBinary·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangBinary·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBinary"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBinary"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangBitstr·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangBitstr·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBitstr"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBitstr"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangBoolean·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangBoolean·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBoolean"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangBoolean"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangByte·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangByte·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangByte"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangByte"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangChar·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangChar·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangChar"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangChar"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangDecodeException·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangDecodeException·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangDecodeException"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangDecodeException"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangDouble·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangDouble·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangDouble"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangDouble"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangException·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangException·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangException"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangException"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangExit·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangExit·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangExit"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangExit"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangExternalFun·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangExternalFun·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangExternalFun"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangExternalFun"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangFloat·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangFloat·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangFloat"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangFloat"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangFun·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangFun·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangFun"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangFun"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangInt·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangInt·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangInt"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangInt"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangList.SubList·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangList.SubList·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangList,·class:·SubList"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangList,·class:·SubList"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangList·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangList·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangList"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangList"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangLong·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangLong·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangLong"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangLong"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangMap·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangMap·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangMap"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangMap"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangObject.Hash·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangObject.Hash·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangObject,·class:·Hash"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangObject,·class:·Hash"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangObject·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangObject·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangObject"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangObject"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangPid·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangPid·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangPid"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangPid"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangPort·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangPort·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangPort"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangPort"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangRangeException·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangRangeException·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangRangeException"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangRangeException"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangRef·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangRef·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangRef"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangRef"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangShort·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangShort·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangShort"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangShort"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangString·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangString·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangString"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangString"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangTuple·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangTuple·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangTuple"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangTuple"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangUInt·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangUInt·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangUInt"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangUInt"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpErlangUShort·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpErlangUShort·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangUShort"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpErlangUShort"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpException·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpException·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpException"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpException"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpExternal·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpExternal·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpExternal"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpExternal"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpGenericTransportFactory·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpGenericTransportFactory·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpGenericTransportFactory"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpGenericTransportFactory"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpInputStream·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpInputStream·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpInputStream"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpInputStream"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpLocalNode·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpLocalNode·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpLocalNode"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpLocalNode"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpMbox·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpMbox·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpMbox"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpMbox"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpMsg·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpMsg·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpMsg"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpMsg"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpNode.Acceptor·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpNode.Acceptor·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode,·class:·Acceptor"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode,·class:·Acceptor"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpNode.Mailboxes·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpNode.Mailboxes·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode,·class:·Mailboxes"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode,·class:·Mailboxes"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpNode·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpNode·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNode"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpNodeStatus·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpNodeStatus·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNodeStatus"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpNodeStatus"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpOutputStream·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpOutputStream·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpOutputStream"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpOutputStream"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpPeer·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpPeer·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpPeer"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpPeer"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpSelf·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpSelf·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSelf"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSelf"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpServer·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpServer·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpServer"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpServer"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpServerSocketTransport·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpServerSocketTransport·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpServerSocketTransport"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpServerSocketTransport"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpServerTransport·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpServerTransport·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpServerTransport"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpServerTransport"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpSocketTransport·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpSocketTransport·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSocketTransport"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSocketTransport"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpSocketTransportFactory·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpSocketTransportFactory·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSocketTransportFactory"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·class:·OtpSocketTransportFactory"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpTransport·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpTransport·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpTransport"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpTransport"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>OtpTransportFactory·(Java-Erlang·Interface·Library)</title> | 5 | <title>OtpTransportFactory·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpTransportFactory"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang,·interface:·OtpTransportFactory"> |
| 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ClassWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>com.ericsson.otp.erlang·(Java-Erlang·Interface·Library)</title> | 5 | <title>com.ericsson.otp.erlang·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang"> | 9 | <meta·name="description"·content="declaration:·package:·com.ericsson.otp.erlang"> |
| 10 | <meta·name="generator"·content="javadoc/PackageWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/PackageWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>com.ericsson.otp.erlang·Class·Hierarchy·(Java-Erlang·Interface·Library)</title> | 5 | <title>com.ericsson.otp.erlang·Class·Hierarchy·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="tree:·package:·com.ericsson.otp.erlang"> | 9 | <meta·name="description"·content="tree:·package:·com.ericsson.otp.erlang"> |
| 10 | <meta·name="generator"·content="javadoc/PackageTreeWriter"> | 10 | <meta·name="generator"·content="javadoc/PackageTreeWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="../../../../stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="../../../../script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="../../../../script.js"></script> | 13 | <script·type="text/javascript"·src="../../../../script.js"></script> |
| 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="../../../../script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="../../../../script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Constant·Field·Values·(Java-Erlang·Interface·Library)</title> | 5 | <title>Constant·Field·Values·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="summary·of·constants"> | 9 | <meta·name="description"·content="summary·of·constants"> |
| 10 | <meta·name="generator"·content="javadoc/ConstantsSummaryWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/ConstantsSummaryWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Deprecated·List·(Java-Erlang·Interface·Library)</title> | 5 | <title>Deprecated·List·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="deprecated·elements"> | 9 | <meta·name="description"·content="deprecated·elements"> |
| 10 | <meta·name="generator"·content="javadoc/DeprecatedListWriter"> | 10 | <meta·name="generator"·content="javadoc/DeprecatedListWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>API·Help·(Java-Erlang·Interface·Library)</title> | 5 | <title>API·Help·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="help"> | 9 | <meta·name="description"·content="help"> |
| 10 | <meta·name="generator"·content="javadoc/HelpWriter"> | 10 | <meta·name="generator"·content="javadoc/HelpWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Index·(Java-Erlang·Interface·Library)</title> | 5 | <title>Index·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="index"> | 9 | <meta·name="description"·content="index"> |
| 10 | <meta·name="generator"·content="javadoc/IndexWriter"> | 10 | <meta·name="generator"·content="javadoc/IndexWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Java-Erlang·Interface·Library</title> | 5 | <title>Java-Erlang·Interface·Library</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="index·redirect"> | 9 | <meta·name="description"·content="index·redirect"> |
| 10 | <meta·name="generator"·content="javadoc/IndexRedirectWriter"> | 10 | <meta·name="generator"·content="javadoc/IndexRedirectWriter"> |
| 11 | <link·rel="canonical"·href="com/ericsson/otp/erlang/package-summary.html"> | 11 | <link·rel="canonical"·href="com/ericsson/otp/erlang/package-summary.html"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 13 | <script·type="text/javascript">window.location.replace('com/ericsson/otp/erlang/package-summary.html')</script> | 13 | <script·type="text/javascript">window.location.replace('com/ericsson/otp/erlang/package-summary.html')</script> |
| 14 | <noscript> | 14 | <noscript> |
| 15 | <meta·http-equiv="Refresh"·content="0;com/ericsson/otp/erlang/package-summary.html"> | 15 | <meta·http-equiv="Refresh"·content="0;com/ericsson/otp/erlang/package-summary.html"> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Class·Hierarchy·(Java-Erlang·Interface·Library)</title> | 5 | <title>Class·Hierarchy·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="class·tree"> | 9 | <meta·name="description"·content="class·tree"> |
| 10 | <meta·name="generator"·content="javadoc/TreeWriter"> | 10 | <meta·name="generator"·content="javadoc/TreeWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Search·(Java-Erlang·Interface·Library)</title> | 5 | <title>Search·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="search"> | 9 | <meta·name="description"·content="search"> |
| 10 | <meta·name="generator"·content="javadoc/SearchWriter"> | 10 | <meta·name="generator"·content="javadoc/SearchWriter"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 1, 15 lines modified | Offset 1, 15 lines modified | ||
| 1 | <!DOCTYPE·HTML> | 1 | <!DOCTYPE·HTML> |
| 2 | <html·lang="en"> | 2 | <html·lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <!--·Generated·by·javadoc·(21)·on· | 4 | <!--·Generated·by·javadoc·(21)·on·Mon·Aug·04·16:52:32·GMT·2025·--> |
| 5 | <title>Serialized·Form·(Java-Erlang·Interface·Library)</title> | 5 | <title>Serialized·Form·(Java-Erlang·Interface·Library)</title> |
| 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> | 6 | <meta·name="viewport"·content="width=device-width,·initial-scale=1"> |
| 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> | 7 | <meta·http-equiv="Content-Type"·content="text/html;·charset=UTF-8"> |
| 8 | <meta·name="dc.created"·content="202 | 8 | <meta·name="dc.created"·content="2025-08-04"> |
| 9 | <meta·name="description"·content="serialized·forms"> | 9 | <meta·name="description"·content="serialized·forms"> |
| 10 | <meta·name="generator"·content="javadoc/SerializedFormWriterImpl"> | 10 | <meta·name="generator"·content="javadoc/SerializedFormWriterImpl"> |
| 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> | 11 | <link·rel="stylesheet"·type="text/css"·href="stylesheet.css"·title="Style"> |
| 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> | 12 | <link·rel="stylesheet"·type="text/css"·href="script-dir/jquery-ui.min.css"·title="Style"> |
| 13 | <script·type="text/javascript"·src="script.js"></script> | 13 | <script·type="text/javascript"·src="script.js"></script> |
| 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> | 14 | <script·type="text/javascript"·src="script-dir/jquery-3.7.1.min.js"></script> |
| 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> | 15 | <script·type="text/javascript"·src="script-dir/jquery-ui.min.js"></script> |
| Offset 418, 15 lines modified | Offset 418, 15 lines modified | ||
| 418 | ······<p·class="built-using"> | 418 | ······<p·class="built-using"> |
| 419 | ········Built·using | 419 | ········Built·using |
| 420 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 420 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 421 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 421 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 422 | ······</p> | 422 | ······</p> |
| 423 | <p>Copyright·©·1996-202 | 423 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 424 | ····</footer> | 424 | ····</footer> |
| 425 | ··</div> | 425 | ··</div> |
| 426 | </main> | 426 | </main> |
| 427 | </div> | 427 | </div> |
| 428 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 428 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 429 | ··<script> | 429 | ··<script> |
| 430 | ··let·initialized·=·false; | 430 | ··let·initialized·=·false; |
| Offset 830, 15 lines modified | Offset 830, 15 lines modified | ||
| 830 | ······<p·class="built-using"> | 830 | ······<p·class="built-using"> |
| 831 | ········Built·using | 831 | ········Built·using |
| 832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 834 | ······</p> | 834 | ······</p> |
| 835 | <p>Copyright·©·1996-202 | 835 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 836 | ····</footer> | 836 | ····</footer> |
| 837 | ··</div> | 837 | ··</div> |
| 838 | </main> | 838 | </main> |
| 839 | </div> | 839 | </div> |
| 840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 841 | ··<script> | 841 | ··<script> |
| 842 | ··let·initialized·=·false; | 842 | ··let·initialized·=·false; |
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | ······<p·class="built-using"> | 127 | ······<p·class="built-using"> |
| 128 | ········Built·using | 128 | ········Built·using |
| 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 131 | ······</p> | 131 | ······</p> |
| 132 | <p>Copyright·©·1996-202 | 132 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 133 | ····</footer> | 133 | ····</footer> |
| 134 | ··</div> | 134 | ··</div> |
| 135 | </main> | 135 | </main> |
| 136 | </div> | 136 | </div> |
| 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 138 | ··<script> | 138 | ··<script> |
| 139 | ··let·initialized·=·false; | 139 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 490, 15 lines modified | Offset 490, 15 lines modified | ||
| 490 | ······<p·class="built-using"> | 490 | ······<p·class="built-using"> |
| 491 | ········Built·using | 491 | ········Built·using |
| 492 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 492 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 493 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 493 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 494 | ······</p> | 494 | ······</p> |
| 495 | <p>Copyright·©·1996-202 | 495 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 496 | ····</footer> | 496 | ····</footer> |
| 497 | ··</div> | 497 | ··</div> |
| 498 | </main> | 498 | </main> |
| 499 | </div> | 499 | </div> |
| 500 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 500 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 501 | ··<script> | 501 | ··<script> |
| 502 | ··let·initialized·=·false; | 502 | ··let·initialized·=·false; |
| Offset 140, 49 lines modified | Offset 140, 49 lines modified | ||
| 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 141 | ··</a> | 141 | ··</a> |
| 142 | ··<span·class="text">File·Syntax</span> | 142 | ··<span·class="text">File·Syntax</span> |
| 143 | </h2> | 143 | </h2> |
| 144 | <p>The·application·resource·file·is·to·be·called·<code·class="inline">Application.app</code>,·where | 144 | <p>The·application·resource·file·is·to·be·called·<code·class="inline">Application.app</code>,·where |
| 145 | <code·class="inline">Application</code>·is·the·application·name.·The·file·is·to·be·located·in·directory | 145 | <code·class="inline">Application</code>·is·the·application·name.·The·file·is·to·be·located·in·directory |
| 146 | <code·class="inline">ebin</code>·for·the·application.</p><p>The·file·must·contain·a·single·Erlang·term,·which·is·called·an·<em>application | 146 | <code·class="inline">ebin</code>·for·the·application.</p><p>The·file·must·contain·a·single·Erlang·term,·which·is·called·an·<em>application |
| 147 | specification</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 147 | specification</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1147938236-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Application</span><span·class="p">,</span><span·class="w"> |
| 148 | ··</span><span·class="p"·data-group-id=" | 148 | ··</span><span·class="p"·data-group-id="1147938236-2">[</span><span·class="p"·data-group-id="1147938236-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">··</span><span·class="n">Description</span><span·class="p"·data-group-id="1147938236-3">}</span><span·class="p">,</span><span·class="w"> |
| 149 | ···</span><span·class="p"·data-group-id=" | 149 | ···</span><span·class="p"·data-group-id="1147938236-4">{</span><span·class="ss">id</span><span·class="p">,</span><span·class="w">···········</span><span·class="n">Id</span><span·class="p"·data-group-id="1147938236-4">}</span><span·class="p">,</span><span·class="w"> |
| 150 | ···</span><span·class="p"·data-group-id=" | 150 | ···</span><span·class="p"·data-group-id="1147938236-5">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">··········</span><span·class="n">Vsn</span><span·class="p"·data-group-id="1147938236-5">}</span><span·class="p">,</span><span·class="w"> |
| 151 | ···</span><span·class="p"·data-group-id=" | 151 | ···</span><span·class="p"·data-group-id="1147938236-6">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">······</span><span·class="n">Modules</span><span·class="p"·data-group-id="1147938236-6">}</span><span·class="p">,</span><span·class="w"> |
| 152 | ···</span><span·class="p"·data-group-id=" | 152 | ···</span><span·class="p"·data-group-id="1147938236-7">{</span><span·class="ss">maxP</span><span·class="p">,</span><span·class="w">·········</span><span·class="n">MaxP</span><span·class="p"·data-group-id="1147938236-7">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ···</span><span·class="p"·data-group-id=" | 153 | ···</span><span·class="p"·data-group-id="1147938236-8">{</span><span·class="ss">maxT</span><span·class="p">,</span><span·class="w">·········</span><span·class="n">MaxT</span><span·class="p"·data-group-id="1147938236-8">}</span><span·class="p">,</span><span·class="w"> |
| 154 | ···</span><span·class="p"·data-group-id=" | 154 | ···</span><span·class="p"·data-group-id="1147938236-9">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">···</span><span·class="n">Names</span><span·class="p"·data-group-id="1147938236-9">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ···</span><span·class="p"·data-group-id=" | 155 | ···</span><span·class="p"·data-group-id="1147938236-10">{</span><span·class="ss">included_applications</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Apps</span><span·class="p"·data-group-id="1147938236-10">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ···</span><span·class="p"·data-group-id=" | 156 | ···</span><span·class="p"·data-group-id="1147938236-11">{</span><span·class="ss">optional_applications</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Apps</span><span·class="p"·data-group-id="1147938236-11">}</span><span·class="p">,</span><span·class="w"> |
| 157 | ···</span><span·class="p"·data-group-id=" | 157 | ···</span><span·class="p"·data-group-id="1147938236-12">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Apps</span><span·class="p"·data-group-id="1147938236-12">}</span><span·class="p">,</span><span·class="w"> |
| 158 | ···</span><span·class="p"·data-group-id=" | 158 | ···</span><span·class="p"·data-group-id="1147938236-13">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">··········</span><span·class="n">Env</span><span·class="p"·data-group-id="1147938236-13">}</span><span·class="p">,</span><span·class="w"> |
| 159 | ···</span><span·class="p"·data-group-id=" | 159 | ···</span><span·class="p"·data-group-id="1147938236-14">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">··········</span><span·class="n">Start</span><span·class="p"·data-group-id="1147938236-14">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ···</span><span·class="p"·data-group-id=" | 160 | ···</span><span·class="p"·data-group-id="1147938236-15">{</span><span·class="ss">start_phases</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Phases</span><span·class="p"·data-group-id="1147938236-15">}</span><span·class="p">,</span><span·class="w"> |
| 161 | ···</span><span·class="p"·data-group-id=" | 161 | ···</span><span·class="p"·data-group-id="1147938236-16">{</span><span·class="ss">runtime_dependencies</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RTDeps</span><span·class="p"·data-group-id="1147938236-16">}</span><span·class="p"·data-group-id="1147938236-2">]</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·800c374f48baa619c8d8a9baa328a71cbecaeb3313b80231a79c30438f4c7128·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 162 | ·············</span><span·class="n">Value</span><span·class="w">················</span><span·class="n">Default</span><span·class="w"> | 162 | ·············</span><span·class="n">Value</span><span·class="w">················</span><span·class="n">Default</span><span·class="w"> |
| 163 | ·············</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">················</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w"> | 163 | ·············</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">················</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w"> |
| 164 | </span><span·class="n">Application</span><span·class="w">··</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 164 | </span><span·class="n">Application</span><span·class="w">··</span><span·class="nf">atom</span><span·class="p"·data-group-id="1147938236-17">(</span><span·class="p"·data-group-id="1147938236-17">)</span><span·class="w">···············</span><span·class="o">-</span><span·class="w"> |
| 165 | </span><span·class="n">Description</span><span·class="w">··</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 165 | </span><span·class="n">Description</span><span·class="w">··</span><span·class="nf">string</span><span·class="p"·data-group-id="1147938236-18">(</span><span·class="p"·data-group-id="1147938236-18">)</span><span·class="w">·············</span><span·class="s">""</span><span·class="w"> |
| 166 | </span><span·class="n">Id</span><span·class="w">···········</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 166 | </span><span·class="n">Id</span><span·class="w">···········</span><span·class="nf">string</span><span·class="p"·data-group-id="1147938236-19">(</span><span·class="p"·data-group-id="1147938236-19">)</span><span·class="w">·············</span><span·class="s">""</span><span·class="w"> |
| 167 | </span><span·class="n">Vsn</span><span·class="w">··········</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 167 | </span><span·class="n">Vsn</span><span·class="w">··········</span><span·class="nf">string</span><span·class="p"·data-group-id="1147938236-20">(</span><span·class="p"·data-group-id="1147938236-20">)</span><span·class="w">·············</span><span·class="s">""</span><span·class="w"> |
| 168 | </span><span·class="n">Modules</span><span·class="w">······</span><span·class="p"·data-group-id=" | 168 | </span><span·class="n">Modules</span><span·class="w">······</span><span·class="p"·data-group-id="1147938236-21">[</span><span·class="n">Module</span><span·class="p"·data-group-id="1147938236-21">]</span><span·class="w">·············</span><span·class="p"·data-group-id="1147938236-22">[</span><span·class="p"·data-group-id="1147938236-22">]</span><span·class="w"> |
| 169 | </span><span·class="n">MaxP</span><span·class="w">·········</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 169 | </span><span·class="n">MaxP</span><span·class="w">·········</span><span·class="nf">int</span><span·class="p"·data-group-id="1147938236-23">(</span><span·class="p"·data-group-id="1147938236-23">)</span><span·class="w">················</span><span·class="ss">infinity</span><span·class="w"> |
| 170 | </span><span·class="n">MaxT</span><span·class="w">·········</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 170 | </span><span·class="n">MaxT</span><span·class="w">·········</span><span·class="nf">int</span><span·class="p"·data-group-id="1147938236-24">(</span><span·class="p"·data-group-id="1147938236-24">)</span><span·class="w">················</span><span·class="ss">infinity</span><span·class="w"> |
| 171 | </span><span·class="n">Names</span><span·class="w">········</span><span·class="p"·data-group-id=" | 171 | </span><span·class="n">Names</span><span·class="w">········</span><span·class="p"·data-group-id="1147938236-25">[</span><span·class="n">Name</span><span·class="p"·data-group-id="1147938236-25">]</span><span·class="w">···············</span><span·class="p"·data-group-id="1147938236-26">[</span><span·class="p"·data-group-id="1147938236-26">]</span><span·class="w"> |
| 172 | </span><span·class="n">Apps</span><span·class="w">·········</span><span·class="p"·data-group-id=" | 172 | </span><span·class="n">Apps</span><span·class="w">·········</span><span·class="p"·data-group-id="1147938236-27">[</span><span·class="n">App</span><span·class="p"·data-group-id="1147938236-27">]</span><span·class="w">················</span><span·class="p"·data-group-id="1147938236-28">[</span><span·class="p"·data-group-id="1147938236-28">]</span><span·class="w"> |
| 173 | </span><span·class="n">Env</span><span·class="w">··········</span><span·class="p"·data-group-id=" | 173 | </span><span·class="n">Env</span><span·class="w">··········</span><span·class="p"·data-group-id="1147938236-29">[</span><span·class="p"·data-group-id="1147938236-30">{</span><span·class="n">Par</span><span·class="p">,</span><span·class="n">Val</span><span·class="p"·data-group-id="1147938236-30">}</span><span·class="p"·data-group-id="1147938236-29">]</[·...·truncated·by·diffoscope;·len:·133,·SHA:·b2ffa3df131f2581dc5781138b353432c97e116151aca63e812e8265dbf2a146·...·]-31">]</span><span·class="w"> |
| 174 | </span><span·class="n">Start</span><span·class="w">········</span><span·class="p"·data-group-id=" | 174 | </span><span·class="n">Start</span><span·class="w">········</span><span·class="p"·data-group-id="1147938236-32">{</span><span·class="n">Module</span><span·class="p">,</span><span·class="n">StartArgs</span><span·class="p"·data-group-id="1147938236-32">}</span><span·class="w">···</span><span·class="p"·data-group-id="1147938236-33">[</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·a51c352f3237a7c080b978dfa0f67bcbe54d7accc27861f5f49501334d832897·...·]-33">]</span><span·class="w"> |
| 175 | </span><span·class="n">Phases</span><span·class="w">·······</span><span·class="p"·data-group-id=" | 175 | </span><span·class="n">Phases</span><span·class="w">·······</span><span·class="p"·data-group-id="1147938236-34">[</span><span·class="p"·data-group-id="1147938236-35">{</span><span·class="n">Phase</span><span·class="p">,</span><span·class="n">PhaseArgs</span><span·class="p"·data-group-id="1147938236-35">}</span><span·class="p"·data-group-id="1147938236-34">]</span><span·class="w">··</span><span·class="ss">undefined</span><span·class="w"> |
| 176 | </span><span·class="n">RTDeps</span><span·class="w">·······</span><span·class="p"·data-group-id=" | 176 | </span><span·class="n">RTDeps</span><span·class="w">·······</span><span·class="p"·data-group-id="1147938236-36">[</span><span·class="n">ApplicationVersion</span><span·class="p"·data-group-id="1147938236-36">]</span><span·class="w">·</span><span·class="p"·data-group-id="1147938236-37">[</span><span·class="p"·data-group-id="1147938236-37">]</span><span·class="w"> |
| 177 | </span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">App</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Par</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Phase</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 177 | </span><span·class="n">Module</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">App</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Par</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Phase</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1147938236-38">(</span><span·class="p"·data-group-id="1147938236-38">)</span><span·class="w"> |
| 178 | </span><span·class="n">Val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">StartArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PhaseArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 178 | </span><span·class="n">Val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">StartArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PhaseArgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1147938236-39">(</span><span·class="p"·data-group-id="1147938236-39">)</span><span·class="w"> |
| 179 | </span><span·class="n">ApplicationVersion</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 179 | </span><span·class="n">ApplicationVersion</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="1147938236-40">(</span><span·class="p"·data-group-id="1147938236-40">)</span></code></pre><ul><li><strong><code·class="inline">Application</code></strong>·-·Application·name.</li></ul><p>For·the·application·controller,·all·keys·are·optional.·The·respective·default |
| 180 | values·are·used·for·any·omitted·keys.</p><p>The·functions·in·<code·class="inline">systools</code>·require·more·information.·If·they·are·used,·the | 180 | values·are·used·for·any·omitted·keys.</p><p>The·functions·in·<code·class="inline">systools</code>·require·more·information.·If·they·are·used,·the |
| 181 | following·keys·are·mandatory:</p><ul><li><code·class="inline">description</code></li><li><code·class="inline">vsn</code></li><li><code·class="inline">modules</code></li><li><code·class="inline">registered</code></li><li><code·class="inline">applications</code></li></ul><p>The·other·keys·are·ignored·by·<code·class="inline">systools</code>.</p><ul><li><p><strong><code·class="inline">description</code></strong>·-·A·one-line·description·of·the·application.</p></li><li><p><strong><code·class="inline">id</code></strong>·-·Product·identification,·or·similar.</p></li><li><p><strong><code·class="inline">vsn</code></strong>·-·Version·of·the·application.</p></li><li><p><strong><code·class="inline">modules</code></strong>·-·All·modules·introduced·by·this·application.·<code·class="inline">systools</code>·uses | 181 | following·keys·are·mandatory:</p><ul><li><code·class="inline">description</code></li><li><code·class="inline">vsn</code></li><li><code·class="inline">modules</code></li><li><code·class="inline">registered</code></li><li><code·class="inline">applications</code></li></ul><p>The·other·keys·are·ignored·by·<code·class="inline">systools</code>.</p><ul><li><p><strong><code·class="inline">description</code></strong>·-·A·one-line·description·of·the·application.</p></li><li><p><strong><code·class="inline">id</code></strong>·-·Product·identification,·or·similar.</p></li><li><p><strong><code·class="inline">vsn</code></strong>·-·Version·of·the·application.</p></li><li><p><strong><code·class="inline">modules</code></strong>·-·All·modules·introduced·by·this·application.·<code·class="inline">systools</code>·uses |
| 182 | this·list·when·generating·start·scripts·and·tar·files.·A·module·can·only·be | 182 | this·list·when·generating·start·scripts·and·tar·files.·A·module·can·only·be |
| 183 | defined·in·one·application.</p></li><li><p><strong><code·class="inline">maxP</code></strong>·-·<em>Deprecated·-·is·ignored</em></p><p>Maximum·number·of·processes·allowed·in·the·application.</p></li><li><p><strong><code·class="inline">maxT</code></strong>·-·Maximum·time,·in·milliseconds,·that·the·application·is·allowed·to | 183 | defined·in·one·application.</p></li><li><p><strong><code·class="inline">maxP</code></strong>·-·<em>Deprecated·-·is·ignored</em></p><p>Maximum·number·of·processes·allowed·in·the·application.</p></li><li><p><strong><code·class="inline">maxT</code></strong>·-·Maximum·time,·in·milliseconds,·that·the·application·is·allowed·to |
| 184 | run.·After·the·specified·time,·the·application·terminates·automatically.</p></li><li><p><strong><code·class="inline">registered</code></strong>·-·All·names·of·registered·processes·started·in·this | 184 | run.·After·the·specified·time,·the·application·terminates·automatically.</p></li><li><p><strong><code·class="inline">registered</code></strong>·-·All·names·of·registered·processes·started·in·this |
| 185 | application.·<code·class="inline">systools</code>·uses·this·list·to·detect·name·clashes·between | 185 | application.·<code·class="inline">systools</code>·uses·this·list·to·detect·name·clashes·between |
| 186 | different·applications.</p></li><li><p><strong><code·class="inline">included_applications</code></strong>·-·All·applications·included·by·this·application. | 186 | different·applications.</p></li><li><p><strong><code·class="inline">included_applications</code></strong>·-·All·applications·included·by·this·application. |
| Offset 207, 15 lines modified | Offset 207, 15 lines modified | ||
| 207 | be·omitted·for·applications·without·processes,·typically·code·libraries,·for | 207 | be·omitted·for·applications·without·processes,·typically·code·libraries,·for |
| 208 | example,·STDLIB.</p></li><li><p><strong><code·class="inline">start_phases</code></strong>·-·A·list·of·start·phases·and·corresponding·start·arguments | 208 | example,·STDLIB.</p></li><li><p><strong><code·class="inline">start_phases</code></strong>·-·A·list·of·start·phases·and·corresponding·start·arguments |
| 209 | for·the·application.·If·this·key·is·present,·the·application·master,·in | 209 | for·the·application.·If·this·key·is·present,·the·application·master,·in |
| 210 | addition·to·the·usual·call·to·<code·class="inline">Module:start/2</code>,·also·calls | 210 | addition·to·the·usual·call·to·<code·class="inline">Module:start/2</code>,·also·calls |
| 211 | <code·class="inline">Module:start_phase(Phase,Type,PhaseArgs)</code>·for·each·start·phase·defined·by·key | 211 | <code·class="inline">Module:start_phase(Phase,Type,PhaseArgs)</code>·for·each·start·phase·defined·by·key |
| 212 | <code·class="inline">start_phases</code>.·Only·after·this·extended·start·procedure, | 212 | <code·class="inline">start_phases</code>.·Only·after·this·extended·start·procedure, |
| 213 | <code·class="inline">application:start(Application)</code>·returns.</p><p>Start·phases·can·be·used·to·synchronize·startup·of·an·application·and·its | 213 | <code·class="inline">application:start(Application)</code>·returns.</p><p>Start·phases·can·be·used·to·synchronize·startup·of·an·application·and·its |
| 214 | included·applications.·In·this·case,·key·<code·class="inline">mod</code>·must·be·specified·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 214 | included·applications.·In·this·case,·key·<code·class="inline">mod</code>·must·be·specified·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7256053578-1">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7256053578-2">{</span><span·class="ss">application_starter</span><span·class="p">,</span><span·class="p"·data-group-id="72560535[·...·truncated·by·diffoscope;·len:·246,·SHA:·e2c54b0782488a41c7eac0d982fd1388aac3e6cb7d55525f16697b74da3886a1·...·]-1">}</span></code></pre><p>The·application·master·then·calls·<code·class="inline">Module:start/2</code>·for·the·primary |
| 215 | application,·followed·by·calls·to·<code·class="inline">Module:start_phase/3</code>·for·each·start·phase | 215 | application,·followed·by·calls·to·<code·class="inline">Module:start_phase/3</code>·for·each·start·phase |
| 216 | (as·defined·for·the·primary·application),·both·for·the·primary·application·and | 216 | (as·defined·for·the·primary·application),·both·for·the·primary·application·and |
| 217 | for·each·of·its·included·applications,·for·which·the·start·phase·is·defined.</p><p>This·implies·that·for·an·included·application,·the·set·of·start·phases·must·be | 217 | for·each·of·its·included·applications,·for·which·the·start·phase·is·defined.</p><p>This·implies·that·for·an·included·application,·the·set·of·start·phases·must·be |
| 218 | a·subset·of·the·set·of·phases·defined·for·the·primary·application.·For·more | 218 | a·subset·of·the·set·of·phases·defined·for·the·primary·application.·For·more |
| 219 | information,·see·<a·href="../../../../doc/system/applications.html">OTP·Design·Principles</a>.</p></li><li><p><strong><code·class="inline"·id="runtime_dependencies">runtime_dependencies</code></strong>·-·A·list·of·application | 219 | information,·see·<a·href="../../../../doc/system/applications.html">OTP·Design·Principles</a>.</p></li><li><p><strong><code·class="inline"·id="runtime_dependencies">runtime_dependencies</code></strong>·-·A·list·of·application |
| 220 | versions·that·the·application·depends·on.·An·example·of·such·an·application | 220 | versions·that·the·application·depends·on.·An·example·of·such·an·application |
| 221 | version·is·<code·class="inline">"kernel-3.0"</code>.·Application·versions·specified·as·runtime | 221 | version·is·<code·class="inline">"kernel-3.0"</code>.·Application·versions·specified·as·runtime |
| Offset 280, 15 lines modified | Offset 280, 15 lines modified | ||
| 280 | ······<p·class="built-using"> | 280 | ······<p·class="built-using"> |
| 281 | ········Built·using | 281 | ········Built·using |
| 282 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 282 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 283 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 283 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 284 | ······</p> | 284 | ······</p> |
| 285 | <p>Copyright·©·1996-202 | 285 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 286 | ····</footer> | 286 | ····</footer> |
| 287 | ··</div> | 287 | ··</div> |
| 288 | </main> | 288 | </main> |
| 289 | </div> | 289 | </div> |
| 290 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 290 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 291 | ··<script> | 291 | ··<script> |
| 292 | ··let·initialized·=·false; | 292 | ··let·initialized·=·false; |
| Offset 1591, 15 lines modified | Offset 1591, 15 lines modified | ||
| 1591 | distributed.·The·argument·overrides·the·value·for·the·application·in·the·Kernel | 1591 | distributed.·The·argument·overrides·the·value·for·the·application·in·the·Kernel |
| 1592 | configuration·parameter·<code·class="inline">distributed</code>.·<code·class="inline">Application</code>·must·be·the·application | 1592 | configuration·parameter·<code·class="inline">distributed</code>.·<code·class="inline">Application</code>·must·be·the·application |
| 1593 | name·(same·as·in·the·first·argument).·If·a·node·crashes·and·<code·class="inline">Time</code>·is·specified, | 1593 | name·(same·as·in·the·first·argument).·If·a·node·crashes·and·<code·class="inline">Time</code>·is·specified, |
| 1594 | the·application·controller·waits·for·<code·class="inline">Time</code>·milliseconds·before·attempting·to | 1594 | the·application·controller·waits·for·<code·class="inline">Time</code>·milliseconds·before·attempting·to |
| 1595 | restart·the·application·on·another·node.·If·<code·class="inline">Time</code>·is·not·specified,·it·defaults | 1595 | restart·the·application·on·another·node.·If·<code·class="inline">Time</code>·is·not·specified,·it·defaults |
| 1596 | to·<code·class="inline">0</code>·and·the·application·is·restarted·immediately.</p><p><code·class="inline">Nodes</code>·is·a·list·of·node·names·where·the·application·can·run,·in·priority·from | 1596 | to·<code·class="inline">0</code>·and·the·application·is·restarted·immediately.</p><p><code·class="inline">Nodes</code>·is·a·list·of·node·names·where·the·application·can·run,·in·priority·from |
| 1597 | left·to·right.·Node·names·can·be·grouped·using·tuples·to·indicate·that·they·have | 1597 | left·to·right.·Node·names·can·be·grouped·using·tuples·to·indicate·that·they·have |
| 1598 | the·same·priority.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Nodes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 1598 | the·same·priority.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Nodes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3969292204-1">[</span><span·class="ss">cp1@cave</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3969292204-2">{</span><span·class="ss">cp2@cave</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">cp3@[·...·truncated·by·diffoscope;·len:·105,·SHA:·18fa349ea6d5a79cd5d289ff0c6dcb575914506a8490d0c41ed850222f6b49a7·...·]-1">]</span></code></pre><p>This·means·that·the·application·is·preferably·to·be·started·at·<code·class="inline">cp1@cave</code>.·If |
| 1599 | <code·class="inline">cp1@cave</code>·is·down,·the·application·is·to·be·started·at·<code·class="inline">cp2@cave</code>·or | 1599 | <code·class="inline">cp1@cave</code>·is·down,·the·application·is·to·be·started·at·<code·class="inline">cp2@cave</code>·or |
| 1600 | <code·class="inline">cp3@cave</code>.</p><p>If·<code·class="inline">Distributed·==·default</code>,·the·value·for·the·application·in·the·Kernel | 1600 | <code·class="inline">cp3@cave</code>.</p><p>If·<code·class="inline">Distributed·==·default</code>,·the·value·for·the·application·in·the·Kernel |
| 1601 | configuration·parameter·<code·class="inline">distributed</code>·is·used.</p> | 1601 | configuration·parameter·<code·class="inline">distributed</code>·is·used.</p> |
| 1602 | ··</section> | 1602 | ··</section> |
| 1603 | </section> | 1603 | </section> |
| 1604 | <section·class="detail"·id="loaded_applications/0"> | 1604 | <section·class="detail"·id="loaded_applications/0"> |
| Offset 2177, 15 lines modified | Offset 2177, 15 lines modified | ||
| 2177 | ······<p·class="built-using"> | 2177 | ······<p·class="built-using"> |
| 2178 | ········Built·using | 2178 | ········Built·using |
| 2179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2181 | ······</p> | 2181 | ······</p> |
| 2182 | <p>Copyright·©·1996-202 | 2182 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2183 | ····</footer> | 2183 | ····</footer> |
| 2184 | ··</div> | 2184 | ··</div> |
| 2185 | </main> | 2185 | </main> |
| 2186 | </div> | 2186 | </div> |
| 2187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2188 | ··<script> | 2188 | ··<script> |
| 2189 | ··let·initialized·=·false; | 2189 | ··let·initialized·=·false; |
| Offset 457, 15 lines modified | Offset 457, 15 lines modified | ||
| 457 | ······<p·class="built-using"> | 457 | ······<p·class="built-using"> |
| 458 | ········Built·using | 458 | ········Built·using |
| 459 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 459 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 460 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 460 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 461 | ······</p> | 461 | ······</p> |
| 462 | <p>Copyright·©·1996-202 | 462 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 463 | ····</footer> | 463 | ····</footer> |
| 464 | ··</div> | 464 | ··</div> |
| 465 | </main> | 465 | </main> |
| 466 | </div> | 466 | </div> |
| 467 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 467 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 468 | ··<script> | 468 | ··<script> |
| 469 | ··let·initialized·=·false; | 469 | ··let·initialized·=·false; |
| Offset 189, 19 lines modified | Offset 189, 19 lines modified | ||
| 189 | <a·href="#lib_dir/2"><code·class="inline">code:lib_dir/2</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erl_prim_loader.html"><code·class="inline">erl_prim_loader</code></a>.</p></section><p>The·Erlang·archives·are·<code·class="inline">ZIP</code>·files·with·extension·<code·class="inline">.ez</code>.·Erlang·archives·can | 189 | <a·href="#lib_dir/2"><code·class="inline">code:lib_dir/2</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erl_prim_loader.html"><code·class="inline">erl_prim_loader</code></a>.</p></section><p>The·Erlang·archives·are·<code·class="inline">ZIP</code>·files·with·extension·<code·class="inline">.ez</code>.·Erlang·archives·can |
| 190 | also·be·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/escript.html">enclosed·in·<code·class="inline">escript</code></a>·files·whose·file·extension·is·arbitrary.</p><p>Erlang·archive·files·can·contain·entire·Erlang·applications·or·parts·of | 190 | also·be·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/escript.html">enclosed·in·<code·class="inline">escript</code></a>·files·whose·file·extension·is·arbitrary.</p><p>Erlang·archive·files·can·contain·entire·Erlang·applications·or·parts·of |
| 191 | applications.·The·structure·in·an·archive·file·is·the·same·as·the·directory | 191 | applications.·The·structure·in·an·archive·file·is·the·same·as·the·directory |
| 192 | structure·for·an·application.·If·you,·for·example,·create·an·archive·of | 192 | structure·for·an·application.·If·you,·for·example,·create·an·archive·of |
| 193 | <code·class="inline">mnesia-4.4.7</code>,·the·archive·file·must·be·named·<code·class="inline">mnesia-4.4.7.ez</code>·and·it·must | 193 | <code·class="inline">mnesia-4.4.7</code>,·the·archive·file·must·be·named·<code·class="inline">mnesia-4.4.7.ez</code>·and·it·must |
| 194 | contain·a·top·directory·named·<code·class="inline">mnesia-4.4.7</code>.·If·the·version·part·of·the·name·is | 194 | contain·a·top·directory·named·<code·class="inline">mnesia-4.4.7</code>.·If·the·version·part·of·the·name·is |
| 195 | omitted,·it·must·also·be·omitted·in·the·archive.·That·is,·a·<code·class="inline">mnesia.ez</code>·archive | 195 | omitted,·it·must·also·be·omitted·in·the·archive.·That·is,·a·<code·class="inline">mnesia.ez</code>·archive |
| 196 | must·contain·a·<code·class="inline">mnesia</code>·top·directory.</p><p>An·archive·file·for·an·application·can,·for·example,·be·created·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id=" | 196 | must·contain·a·<code·class="inline">mnesia</code>·top·directory.</p><p>An·archive·file·for·an·application·can,·for·example,·be·created·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id="0263494994-1">(</span><span·class="s">"mnesia-4.4.7.ez"</span><span·class="p">,</span><span·class="w"> |
| 197 | » </span><span·class="p"·data-group-id=" | 197 | » </span><span·class="p"·data-group-id="0263494994-2">[</span><span·class="s">"mnesia-4.4.7"</span><span·class="p"·data-group-id="0263494994-2">]</span><span·class="p">,</span><span·class="w"> |
| 198 | » </span><span·class="p"·data-group-id=" | 198 | » </span><span·class="p"·data-group-id="0263494994-3">[</span><span·class="p"·data-group-id="0263494994-4">{</span><span·class="ss">cwd</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·124,·SHA:·c4a984da7f41ee1bd1cde1d60996b8925648380e2ff69c57c4a3df3a24bbe74c·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 199 | » ·</span><span·class="p"·data-group-id=" | 199 | » ·</span><span·class="p"·data-group-id="0263494994-6">{</span><span·class="ss">compress</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">all</span><span·class="p"·data-group-id="0263494994-6">}</span><span·class="p">,</span><span·class="w"> |
| 200 | » ·</span><span·class="p"·data-group-id=" | 200 | » ·</span><span·class="p"·data-group-id="0263494994-7">{</span><span·class="ss">uncompress</span><span·class="p">,</span><span·class="p"·data-group-id="0263494994-8">[</span><span·class="s">".beam"</span><span·class="p">,</span><span·class="s">".app"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·180,·SHA:·8b1bda1ef516ced4fa6882b39be1244f6d6bee0a32eb0cca7974b3d9a0ce954e·...·]-1">)</span><span·class="p">.</span></code></pre><p>Any·file·in·the·archive·can·be·compressed,·but·to·speed·up·the·access·of |
| 201 | frequently·read·files,·it·can·be·a·good·idea·to·store·<code·class="inline">beam</code>·and·<code·class="inline">app</code>·files | 201 | frequently·read·files,·it·can·be·a·good·idea·to·store·<code·class="inline">beam</code>·and·<code·class="inline">app</code>·files |
| 202 | uncompressed·in·the·archive.</p><p>Normally·the·top·directory·of·an·application·is·located·in·library·directory | 202 | uncompressed·in·the·archive.</p><p>Normally·the·top·directory·of·an·application·is·located·in·library·directory |
| 203 | <code·class="inline">$OTPROOT/lib</code>·or·in·a·directory·referred·to·by·environment·variable·<code·class="inline">ERL_LIBS</code>. | 203 | <code·class="inline">$OTPROOT/lib</code>·or·in·a·directory·referred·to·by·environment·variable·<code·class="inline">ERL_LIBS</code>. |
| 204 | At·startup,·when·the·initial·code·path·is·computed,·the·code·server·also·looks | 204 | At·startup,·when·the·initial·code·path·is·computed,·the·code·server·also·looks |
| 205 | for·archive·files·in·these·directories·and·possibly·adds·<code·class="inline">ebin</code>·directories·in | 205 | for·archive·files·in·these·directories·and·possibly·adds·<code·class="inline">ebin</code>·directories·in |
| 206 | archives·to·the·code·path.·The·code·path·then·contains·paths·to·directories·that | 206 | archives·to·the·code·path.·The·code·path·then·contains·paths·to·directories·that |
| 207 | look·like·<code·class="inline">$OTPROOT/lib/mnesia.ez/mnesia/ebin</code>·or | 207 | look·like·<code·class="inline">$OTPROOT/lib/mnesia.ez/mnesia/ebin</code>·or |
| Offset 1819, 18 lines modified | Offset 1819, 18 lines modified | ||
| 1819 | none·of·the·modules·are·loaded·if·there·is·a·problem·with·any·of·the | 1819 | none·of·the·modules·are·loaded·if·there·is·a·problem·with·any·of·the |
| 1820 | modules.</p><p>Loading·can·fail·for·one·the·following·reasons:</p><ul><li><p><strong><code·class="inline">badfile</code></strong>·-·The·object·code·has·an·incorrect·format·or·the·module·name·in | 1820 | modules.</p><p>Loading·can·fail·for·one·the·following·reasons:</p><ul><li><p><strong><code·class="inline">badfile</code></strong>·-·The·object·code·has·an·incorrect·format·or·the·module·name·in |
| 1821 | the·object·code·is·not·the·expected·module·name.</p></li><li><p><strong><code·class="inline">nofile</code></strong>·-·No·file·with·object·code·exists.</p></li><li><p><strong><code·class="inline">on_load_not_allowed</code></strong>·-·A·module·contains·an | 1821 | the·object·code·is·not·the·expected·module·name.</p></li><li><p><strong><code·class="inline">nofile</code></strong>·-·No·file·with·object·code·exists.</p></li><li><p><strong><code·class="inline">on_load_not_allowed</code></strong>·-·A·module·contains·an |
| 1822 | <a·href="../../../../doc/system/code_loading.html#on_load">-on_load·function</a>.</p></li><li><p><strong><code·class="inline">duplicated</code></strong>·-·A·module·is·included·more·than·once·in·<code·class="inline">Modules</code>.</p></li><li><p><strong><code·class="inline">not_purged</code></strong>·-·The·object·code·cannot·be·loaded·because·an·old·version·of | 1822 | <a·href="../../../../doc/system/code_loading.html#on_load">-on_load·function</a>.</p></li><li><p><strong><code·class="inline">duplicated</code></strong>·-·A·module·is·included·more·than·once·in·<code·class="inline">Modules</code>.</p></li><li><p><strong><code·class="inline">not_purged</code></strong>·-·The·object·code·cannot·be·loaded·because·an·old·version·of |
| 1823 | the·code·already·exists.</p></li><li><p><strong><code·class="inline">sticky_directory</code></strong>·-·The·object·code·resides·in·a·sticky·directory.</p></li><li><p><strong><code·class="inline">pending_on_load</code></strong>·-·A·previously·loaded·module·contains·an·<code·class="inline">-on_load</code> | 1823 | the·code·already·exists.</p></li><li><p><strong><code·class="inline">sticky_directory</code></strong>·-·The·object·code·resides·in·a·sticky·directory.</p></li><li><p><strong><code·class="inline">pending_on_load</code></strong>·-·A·previously·loaded·module·contains·an·<code·class="inline">-on_load</code> |
| 1824 | function·that·never·finished.</p></li></ul><p>If·it·is·important·to·minimize·the·time·that·an·application·is·inactive·while | 1824 | function·that·never·finished.</p></li></ul><p>If·it·is·important·to·minimize·the·time·that·an·application·is·inactive·while |
| 1825 | changing·code,·use·<a·href="#prepare_loading/1"><code·class="inline">prepare_loading/1</code></a>·and·<a·href="#finish_loading/1"><code·class="inline">finish_loading/1</code></a>·instead·of | 1825 | changing·code,·use·<a·href="#prepare_loading/1"><code·class="inline">prepare_loading/1</code></a>·and·<a·href="#finish_loading/1"><code·class="inline">finish_loading/1</code></a>·instead·of |
| 1826 | <a·href="#atomic_load/1"><code·class="inline">atomic_load/1</code></a>.·Here·is·an·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 1826 | <a·href="#atomic_load/1"><code·class="inline">atomic_load/1</code></a>.·Here·is·an·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5719330979-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Prepared</span><span·class="p"·data-group-id="5719330979-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span>[·...·truncated·by·diffoscope;·len:·187,·SHA:·53a41405c491edbfb1ee7f5f56b0b3f30e8e781f10b70f929161e05ffcd856fb·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 1827 | </span><span·class="c1">%%·Put·the·application·into·an·inactive·state·or·do·any</span><span·class="w"> | 1827 | </span><span·class="c1">%%·Put·the·application·into·an·inactive·state·or·do·any</span><span·class="w"> |
| 1828 | </span><span·class="c1">%%·other·preparation·needed·before·changing·the·code.</span><span·class="w"> | 1828 | </span><span·class="c1">%%·other·preparation·needed·before·changing·the·code.</span><span·class="w"> |
| 1829 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">finish_loading</span><span·class="p"·data-group-id=" | 1829 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">finish_loading</span><span·class="p"·data-group-id="5719330979-3">(</span><span·class="n">Prepared</span><span·class="p"·data-group-id="5719330979-3">)</span><span·class="p">,</span><span·class="w"> |
| 1830 | </span><span·class="c1">%%·Resume·the·application.</span></code></pre> | 1830 | </span><span·class="c1">%%·Resume·the·application.</span></code></pre> |
| 1831 | ··</section> | 1831 | ··</section> |
| 1832 | </section> | 1832 | </section> |
| 1833 | <section·class="detail"·id="clash/0"> | 1833 | <section·class="detail"·id="clash/0"> |
| 1834 | ··<div·class="detail-header"> | 1834 | ··<div·class="detail-header"> |
| 1835 | ····<a·href="#clash/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1835 | ····<a·href="#clash/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2343, 16 lines modified | Offset 2343, 16 lines modified | ||
| 2343 | ······</div> | 2343 | ······</div> |
| 2344 | <p>Returns·the·object·code·for·module·<code·class="inline">Module</code>·if·found·in·the·code·path.</p><p>Returns·<code·class="inline">{Module,·Binary,·Filename}</code>·if·successful,·otherwise | 2344 | <p>Returns·the·object·code·for·module·<code·class="inline">Module</code>·if·found·in·the·code·path.</p><p>Returns·<code·class="inline">{Module,·Binary,·Filename}</code>·if·successful,·otherwise |
| 2345 | <code·class="inline">error</code>.·<code·class="inline">Binary</code>·is·a·binary·data·object,·which·contains·the·object | 2345 | <code·class="inline">error</code>.·<code·class="inline">Binary</code>·is·a·binary·data·object,·which·contains·the·object |
| 2346 | code·for·the·module.·This·is·useful·if·code·is·to·be·loaded·on·a | 2346 | code·for·the·module.·This·is·useful·if·code·is·to·be·loaded·on·a |
| 2347 | remote·node·in·a·distributed·system.·For·example,·loading·module | 2347 | remote·node·in·a·distributed·system.·For·example,·loading·module |
| 2348 | <code·class="inline">Module</code>·on·a·node·<code·class="inline">Node</code>·is·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 2348 | <code·class="inline">Module</code>·on·a·node·<code·class="inline">Node</code>·is·done·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 2349 | </span><span·class="p"·data-group-id=" | 2349 | </span><span·class="p"·data-group-id="8223857754-1">{</span><span·class="p">_</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Binary</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Filename</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·314,·SHA:·d0d44532a57c123733f0d4673ae6cbecb049409f8f3a4a912accd6740992586b·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 2350 | </span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 2350 | </span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="8223857754-3">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">load_binary</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·332,·SHA:·d1f0b25d163ec70904164aa44dc255fba1186524208e887ac0ffadc04622b0a8·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 2351 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> | 2351 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> |
| 2352 | ··</section> | 2352 | ··</section> |
| 2353 | </section> | 2353 | </section> |
| 2354 | <section·class="detail"·id="get_path/0"> | 2354 | <section·class="detail"·id="get_path/0"> |
| 2355 | ··<div·class="detail-header"> | 2355 | ··<div·class="detail-header"> |
| 2356 | ····<a·href="#get_path/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2356 | ····<a·href="#get_path/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2455, 15 lines modified | Offset 2455, 15 lines modified | ||
| 2455 | ······<div·class="specs"> | 2455 | ······<div·class="specs"> |
| 2456 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·lib_dir()·->·<a·href="file.html#t:filename/0">file:filename</a>().</pre> | 2456 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·lib_dir()·->·<a·href="file.html#t:filename/0">file:filename</a>().</pre> |
| 2457 | ······</div> | 2457 | ······</div> |
| 2458 | <p>Returns·the·library·directory,·<code·class="inline">$OTPROOT/lib</code>,·where·<code·class="inline">$OTPROOT</code>·is·the·root | 2458 | <p>Returns·the·library·directory,·<code·class="inline">$OTPROOT/lib</code>,·where·<code·class="inline">$OTPROOT</code>·is·the·root |
| 2459 | directory·of·Erlang/OTP.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id=" | 2459 | directory·of·Erlang/OTP.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id="8858082575-1">(</span><span·class="p"·data-group-id="8858082575-1">)</span><span·class="p">.</span><span·class="w"> |
| 2460 | </span><span·class="s">"/usr/local/otp/lib"</span></code></pre> | 2460 | </span><span·class="s">"/usr/local/otp/lib"</span></code></pre> |
| 2461 | ··</section> | 2461 | ··</section> |
| 2462 | </section> | 2462 | </section> |
| 2463 | <section·class="detail"·id="lib_dir/1"> | 2463 | <section·class="detail"·id="lib_dir/1"> |
| 2464 | ··<div·class="detail-header"> | 2464 | ··<div·class="detail-header"> |
| 2465 | ····<a·href="#lib_dir/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2465 | ····<a·href="#lib_dir/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2492, 15 lines modified | Offset 2492, 15 lines modified | ||
| 2492 | an·<code·class="inline">ebin</code>·subdirectory,·the·path·to·this·directory·is·returned·(not·the·<code·class="inline">ebin</code> | 2492 | an·<code·class="inline">ebin</code>·subdirectory,·the·path·to·this·directory·is·returned·(not·the·<code·class="inline">ebin</code> |
| 2493 | directory).</p><p>If·the·directory·refers·to·a·directory·in·an·archive,·the·archive·name·is | 2493 | directory).</p><p>If·the·directory·refers·to·a·directory·in·an·archive,·the·archive·name·is |
| 2494 | stripped·away·before·the·path·is·returned.·For·example,·if·directory | 2494 | stripped·away·before·the·path·is·returned.·For·example,·if·directory |
| 2495 | <code·class="inline">/usr/local/otp/lib/mnesia-4.2.2.ez/mnesia-4.2.2/ebin</code>·is·in·the·path, | 2495 | <code·class="inline">/usr/local/otp/lib/mnesia-4.2.2.ez/mnesia-4.2.2/ebin</code>·is·in·the·path, |
| 2496 | <code·class="inline">/usr/local/otp/lib/mnesia-4.2.2/ebin</code>·is·returned.·This·means·that·the·library | 2496 | <code·class="inline">/usr/local/otp/lib/mnesia-4.2.2/ebin</code>·is·returned.·This·means·that·the·library |
| 2497 | directory·for·an·application·is·the·same,·regardless·if·the·application·resides | 2497 | directory·for·an·application·is·the·same,·regardless·if·the·application·resides |
| 2498 | in·an·archive·or·not.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Warning</h4><p>Archives·are·experimental.·In·a·future·release,·they·can·be·removed·or | 2498 | in·an·archive·or·not.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Warning</h4><p>Archives·are·experimental.·In·a·future·release,·they·can·be·removed·or |
| 2499 | their·behavior·can·change.</p></section><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id=" | 2499 | their·behavior·can·change.</p></section><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id="6894793673-1">(</span><span·class="ss">mnesia</span><span·class="p"·data-group-id="6894793673-1">)</span><span·class="p">.</span><span·class="w"> |
| 2500 | </span><span·class="s">"/usr/local/otp/lib/mnesia-4.23"</span></code></pre><p>Returns·<code·class="inline">{error,·bad_name}</code>·if·<code·class="inline">Name</code>·is·not·the·name·of·an·application·under | 2500 | </span><span·class="s">"/usr/local/otp/lib/mnesia-4.23"</span></code></pre><p>Returns·<code·class="inline">{error,·bad_name}</code>·if·<code·class="inline">Name</code>·is·not·the·name·of·an·application·under |
| 2501 | <code·class="inline">$OTPROOT/lib</code>·or·on·a·directory·referred·to·through·environment·variable | 2501 | <code·class="inline">$OTPROOT/lib</code>·or·on·a·directory·referred·to·through·environment·variable |
| 2502 | <code·class="inline">ERL_LIBS</code>.·Fails·with·an·exception·if·<code·class="inline">Name</code>·has·the·wrong·type.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>For·backward·compatibility,·<code·class="inline">Name</code>·is·also·allowed·to·be·a·string.·That·will | 2502 | <code·class="inline">ERL_LIBS</code>.·Fails·with·an·exception·if·<code·class="inline">Name</code>·has·the·wrong·type.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>For·backward·compatibility,·<code·class="inline">Name</code>·is·also·allowed·to·be·a·string.·That·will |
| 2503 | probably·change·in·a·future·release.</p></section> | 2503 | probably·change·in·a·future·release.</p></section> |
| 2504 | ··</section> | 2504 | ··</section> |
| 2505 | </section> | 2505 | </section> |
| 2506 | <section·class="detail"·id="lib_dir/2"> | 2506 | <section·class="detail"·id="lib_dir/2"> |
| Offset 2533, 15 lines modified | Offset 2533, 15 lines modified | ||
| 2533 | <p>Returns·the·path·to·a·subdirectory·directly·under·the·top·directory·of·an | 2533 | <p>Returns·the·path·to·a·subdirectory·directly·under·the·top·directory·of·an |
| 2534 | application.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>This·function·is·part·of·the·archive·support,·which·is·an·experimental | 2534 | application.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><p>This·function·is·part·of·the·archive·support,·which·is·an·experimental |
| 2535 | feature·that·will·be·changed·or·removed·in·a·future·release.</p></section><p>Normally·the·subdirectories·reside·under·the·top·directory·for·the | 2535 | feature·that·will·be·changed·or·removed·in·a·future·release.</p></section><p>Normally·the·subdirectories·reside·under·the·top·directory·for·the |
| 2536 | application,·but·when·applications·at·least·partly·reside·in·an·archive,·the | 2536 | application,·but·when·applications·at·least·partly·reside·in·an·archive,·the |
| 2537 | situation·is·different.·Some·of·the·subdirectories·can·reside·as·regular | 2537 | situation·is·different.·Some·of·the·subdirectories·can·reside·as·regular |
| 2538 | directories·while·others·reside·in·an·archive·file.·It·is·not·checked·whether | 2538 | directories·while·others·reside·in·an·archive·file.·It·is·not·checked·whether |
| 2539 | this·directory·exists.</p><p>Instead·of·using·this·function,·use·<a·href="#lib_dir/1"><code·class="inline">code:lib_dir/1</code></a> | 2539 | this·directory·exists.</p><p>Instead·of·using·this·function,·use·<a·href="#lib_dir/1"><code·class="inline">code:lib_dir/1</code></a> |
| 2540 | and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/filename.html#join/2"><code·class="inline">filename:join/2</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id=" | 2540 | and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/filename.html#join/2"><code·class="inline">filename:join/2</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="6778350974-1">(</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id="6778350974-2">(</span><span·class="ss">megaco</span><span·class="p"·data-group-id="6778350974-2">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·113,·SHA:·d2a2869fa5e5baef12e95c176c9c7c819771f0011108d01788e6f38f2ac72c4e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 2541 | </span><span·class="s">"/usr/local/otp/lib/megaco-3.9.1.1/priv"</span></code></pre><p>Fails·with·an·exception·if·<code·class="inline">Name</code>·or·<code·class="inline">SubDir</code>·has·the·wrong·type.</p> | 2541 | </span><span·class="s">"/usr/local/otp/lib/megaco-3.9.1.1/priv"</span></code></pre><p>Fails·with·an·exception·if·<code·class="inline">Name</code>·or·<code·class="inline">SubDir</code>·has·the·wrong·type.</p> |
| 2542 | ··</section> | 2542 | ··</section> |
| 2543 | </section> | 2543 | </section> |
| 2544 | <section·class="detail"·id="load_abs/1"> | 2544 | <section·class="detail"·id="load_abs/1"> |
| 2545 | ··<div·class="detail-header"> | 2545 | ··<div·class="detail-header"> |
| 2546 | ····<a·href="#load_abs/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2546 | ····<a·href="#load_abs/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2964, 15 lines modified | Offset 2964, 15 lines modified | ||
| 2964 | ······<div·class="specs"> | 2964 | ······<div·class="specs"> |
| 2965 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·root_dir()·->·<a·href="file.html#t:filename/0">file:filename</a>().</pre> | 2965 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·root_dir()·->·<a·href="file.html#t:filename/0">file:filename</a>().</pre> |
| 2966 | ······</div> | 2966 | ······</div> |
| 2967 | <p>Returns·the·root·directory·of·Erlang/OTP,·which·is·the·directory·where·it·is | 2967 | <p>Returns·the·root·directory·of·Erlang/OTP,·which·is·the·directory·where·it·is |
| 2968 | installed.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">root_dir</span><span·class="p"·data-group-id=" | 2968 | installed.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">root_dir</span><span·class="p"·data-group-id="4306620885-1">(</span><span·class="p"·data-group-id="4306620885-1">)</span><span·class="p">.</span><span·class="w"> |
| 2969 | </span><span·class="s">"/usr/local/otp"</span></code></pre> | 2969 | </span><span·class="s">"/usr/local/otp"</span></code></pre> |
| 2970 | ··</section> | 2970 | ··</section> |
| 2971 | </section> | 2971 | </section> |
| 2972 | <section·class="detail"·id="set_coverage_mode/1"> | 2972 | <section·class="detail"·id="set_coverage_mode/1"> |
| 2973 | ··<div·class="detail-header"> | 2973 | ··<div·class="detail-header"> |
| 2974 | ····<a·href="#set_coverage_mode/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2974 | ····<a·href="#set_coverage_mode/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 3240, 15 lines modified | Offset 3240, 15 lines modified | ||
| 3240 | ······<p·class="built-using"> | 3240 | ······<p·class="built-using"> |
| 3241 | ········Built·using | 3241 | ········Built·using |
| 3242 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3242 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3243 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3243 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3244 | ······</p> | 3244 | ······</p> |
| Max diff block lines reached; 164/22235 bytes (0.74%) of diff not shown. | |||
| Offset 148, 17 lines modified | Offset 148, 17 lines modified | ||
| 148 | (see·<a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erts:erl(1)</code></a>).</p><p>The·value·of·a·configuration·parameter·is·retrieved·by·calling | 148 | (see·<a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erts:erl(1)</code></a>).</p><p>The·value·of·a·configuration·parameter·is·retrieved·by·calling |
| 149 | <code·class="inline">application:get_env/1,2</code>.</p><h2·id="file-syntax"·class="section-heading"> | 149 | <code·class="inline">application:get_env/1,2</code>.</p><h2·id="file-syntax"·class="section-heading"> |
| 150 | ··<a·href="#file-syntax"·class="hover-link"> | 150 | ··<a·href="#file-syntax"·class="hover-link"> |
| 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 152 | ··</a> | 152 | ··</a> |
| 153 | ··<span·class="text">File·Syntax</span> | 153 | ··<span·class="text">File·Syntax</span> |
| 154 | </h2> | 154 | </h2> |
| 155 | <p>The·configuration·file·is·to·be·called·<code·class="inline">Name.config</code>,·where·<code·class="inline">Name</code>·is·any·name.</p><p>File·<code·class="inline">.config</code>·contains·a·single·Erlang·term·and·has·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 155 | <p>The·configuration·file·is·to·be·called·<code·class="inline">Name.config</code>,·where·<code·class="inline">Name</code>·is·any·name.</p><p>File·<code·class="inline">.config</code>·contains·a·single·Erlang·term·and·has·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8850993121-1">[</span><span·class="p"·data-group-id="8850993121-2">{</span><span·class="n">Application1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8850993121-3">[</span><span·class="p"·data-group-id="8850993121-4">[·...·truncated·by·diffoscope;·len:·379,·SHA:·436b21f7c3b397ac3d746445c067a68714d272ad0fef30f536d12a0c04e8f59d·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 156 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 157 | ·</span><span·class="p"·data-group-id=" | 157 | ·</span><span·class="p"·data-group-id="8850993121-5">{</span><span·class="n">ApplicationN</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8850993121-6">[</span><span·class="p"·data-group-id="8850993121-7">{</span><span·class="n">ParN1</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·379,·SHA:·99c8d01d1e59f816435396101aef6f7daf3d15026b68f04d17c4633de3b3fe2b·...·]-1">]</span><span·class="p">.</span></code></pre><ul><li><p><strong><code·class="inline">Application·=·atom()</code></strong>·-·Application·name.</p></li><li><p><strong><code·class="inline">Par·=·atom()</code></strong>·-·Name·of·a·configuration·parameter.</p></li><li><p><strong><code·class="inline">Val·=·term()</code></strong>·-·Value·of·a·configuration·parameter.</p></li></ul><h2·id="sys-config"·class="section-heading"> |
| 158 | ··<a·href="#sys-config"·class="hover-link"> | 158 | ··<a·href="#sys-config"·class="hover-link"> |
| 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 160 | ··</a> | 160 | ··</a> |
| 161 | ··<span·class="text">sys.config</span> | 161 | ··<span·class="text">sys.config</span> |
| 162 | </h2> | 162 | </h2> |
| 163 | <p>When·starting·Erlang·in·embedded·mode,·it·is·assumed·that·exactly·one·system | 163 | <p>When·starting·Erlang·in·embedded·mode,·it·is·assumed·that·exactly·one·system |
| 164 | configuration·file·is·used,·named·<code·class="inline">sys.config</code>.·This·file·is·to·be·located·in | 164 | configuration·file·is·used,·named·<code·class="inline">sys.config</code>.·This·file·is·to·be·located·in |
| Offset 253, 15 lines modified | Offset 253, 15 lines modified | ||
| 253 | ······<p·class="built-using"> | 253 | ······<p·class="built-using"> |
| 254 | ········Built·using | 254 | ········Built·using |
| 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 257 | ······</p> | 257 | ······</p> |
| 258 | <p>Copyright·©·1996-202 | 258 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 259 | ····</footer> | 259 | ····</footer> |
| 260 | ··</div> | 260 | ··</div> |
| 261 | </main> | 261 | </main> |
| 262 | </div> | 262 | </div> |
| 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 264 | ··<script> | 264 | ··<script> |
| 265 | ··let·initialized·=·false; | 265 | ··let·initialized·=·false; |
| Offset 2950, 15 lines modified | Offset 2950, 15 lines modified | ||
| 2950 | ······<p·class="built-using"> | 2950 | ······<p·class="built-using"> |
| 2951 | ········Built·using | 2951 | ········Built·using |
| 2952 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2952 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2953 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2953 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2954 | ······</p> | 2954 | ······</p> |
| 2955 | <p>Copyright·©·1996-202 | 2955 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2956 | ····</footer> | 2956 | ····</footer> |
| 2957 | ··</div> | 2957 | ··</div> |
| 2958 | </main> | 2958 | </main> |
| 2959 | </div> | 2959 | </div> |
| 2960 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2960 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2961 | ··<script> | 2961 | ··<script> |
| 2962 | ··let·initialized·=·false; | 2962 | ··let·initialized·=·false; |
| Offset 150, 28 lines modified | Offset 150, 28 lines modified | ||
| 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 150 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 151 | ··</a> | 151 | ··</a> |
| 152 | ··<span·class="text">The·"Docs"·format</span> | 152 | ··<span·class="text">The·"Docs"·format</span> |
| 153 | </h2> | 153 | </h2> |
| 154 | <p>In·both·storages,·the·documentation·is·written·in·the·exactly·same·format:·an | 154 | <p>In·both·storages,·the·documentation·is·written·in·the·exactly·same·format:·an |
| 155 | Erlang·term·serialized·to·binary·via | 155 | Erlang·term·serialized·to·binary·via |
| 156 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#term_to_binary/1"><code·class="inline">term_to_binary/1</code></a>.·The·term·can·be·optionally | 156 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#term_to_binary/1"><code·class="inline">term_to_binary/1</code></a>.·The·term·can·be·optionally |
| 157 | compressed·when·serialized.·It·must·follow·the·type·specification·below:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="309 | 157 | compressed·when·serialized.·It·must·follow·the·type·specification·below:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3097314578-1">{</span><span·class="ss">docs_v1</span><span·class="p">,</span><span·class="w"> |
| 158 | ·</span><span·class="n">Anno</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">erl_anno</span><span·class="p">:</span><span·class="nf">anno</span><span·class="p"·data-group-id="309 | 158 | ·</span><span·class="n">Anno</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">erl_anno</span><span·class="p">:</span><span·class="nf">anno</span><span·class="p"·data-group-id="3097314578-2">(</span><span·class="p"·data-group-id="3097314578-2">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ·</span><span·class="n">BeamLanguage</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="309 | 159 | ·</span><span·class="n">BeamLanguage</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="3097314578-3">(</span><span·class="p"·data-group-id="3097314578-3">)</span><span·class="p">,</span><span·class="w"> |
| 160 | ·</span><span·class="n">Format</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="309 | 160 | ·</span><span·class="n">Format</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="3097314578-4">(</span><span·class="p"·data-group-id="3097314578-4">)</span><span·class="p">,</span><span·class="w"> |
| 161 | ·</span><span·class="n">ModuleDoc</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="309 | 161 | ·</span><span·class="n">ModuleDoc</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="3097314578-5">#{</span><span·class="n">DocLanguage</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">DocValue</span><span·class="p"·data-group-id="3097314578-5">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">none</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">hidden</span><span·class="p">,</span><span·class="w"> |
| 162 | ·</span><span·class="n">Metadata</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">map</span><span·class="p"·data-group-id="309 | 162 | ·</span><span·class="n">Metadata</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">map</span><span·class="p"·data-group-id="3097314578-6">(</span><span·class="p"·data-group-id="3097314578-6">)</span><span·class="p">,</span><span·class="w"> |
| 163 | ·</span><span·class="n">Docs</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w"> | 163 | ·</span><span·class="n">Docs</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w"> |
| 164 | ···</span><span·class="p"·data-group-id="309 | 164 | ···</span><span·class="p"·data-group-id="3097314578-7">[</span><span·class="p"·data-group-id="3097314578-8">{</span><span·class="p"·data-group-id="3097314578-9">{</span><span·class="n">Kind</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·88,·SHA:·287285b8d6c9a897944fcdd6a0d02aa646946b58467b9b8357bea124e2fefa30·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 165 | ·····</span><span·class="n">Anno</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">erl_anno</span><span·class="p">:</span><span·class="nf">anno</span><span·class="p"·data-group-id="309 | 165 | ·····</span><span·class="n">Anno</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">erl_anno</span><span·class="p">:</span><span·class="nf">anno</span><span·class="p"·data-group-id="3097314578-10">(</span><span·class="p"·data-group-id="3097314578-10">)</span><span·class="p">,</span><span·class="w"> |
| 166 | ·····</span><span·class="n">Signature</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="309 | 166 | ·····</span><span·class="n">Signature</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="3097314578-11">[</span><span·class="nf">binary</span><span·class="p"·data-group-id="3097314578-12">(</span><span·class="p"·data-group-id="3097314578-12">)</span><span·class="p"·data-group-id="3097314578-11">]</span><span·class="p">,</span><span·class="w"> |
| 167 | ·····</span><span·class="n">Doc</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="309 | 167 | ·····</span><span·class="n">Doc</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="3097314578-13">#{</span><span·class="n">DocLanguage</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">DocValue</span><span·class="p"·data-group-id="3097314578-13">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">none</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">hidden</span><span·class="p">,</span><span·class="w"> |
| 168 | ·····</span><span·class="n">Metadata</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">map</span><span·class="p"·data-group-id="309 | 168 | ·····</span><span·class="n">Metadata</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">map</span><span·class="p"·data-group-id="3097314578-14">(</span><span·class="p"·data-group-id="3097314578-14">)</span><span·class="w"> |
| 169 | ····</span><span·class="p"·data-group-id="309 | 169 | ····</span><span·class="p"·data-group-id="3097314578-8">}</span><span·class="p"·data-group-id="3097314578-7">]</span><span·class="p"·data-group-id="3097314578-1">}</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">DocLanguage</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·199,·SHA:·ec36e8d38c8827772b417860e1ba600952218a2a9273d9c7dc3effe96fca5dab·...·]-15">)</span><span·class="p">,</span><span·class="w"> |
| 170 | ·············</span><span·class="n">DocValue</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="309 | 170 | ·············</span><span·class="n">DocValue</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="3097314578-16">(</span><span·class="p"·data-group-id="3097314578-16">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="3097314578-17">(</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·7b710ef6ced63ab0fe4884efec87ef4bd7280bfe1fa061b82183f96f7992ce93·...·]-17">)</span></code></pre><p>where·in·the·root·tuple·we·have:</p><ul><li><p><strong><code·class="inline">Anno</code></strong>·-·annotation·(line,·column,·file)·of·the·definition·itself·(see |
| 171 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_anno.html"><code·class="inline">erl_anno</code></a>)</p></li><li><p><strong><code·class="inline">BeamLanguage</code></strong>·-·an·atom·representing·the·language,·for·example:·<code·class="inline">erlang</code>, | 171 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_anno.html"><code·class="inline">erl_anno</code></a>)</p></li><li><p><strong><code·class="inline">BeamLanguage</code></strong>·-·an·atom·representing·the·language,·for·example:·<code·class="inline">erlang</code>, |
| 172 | <code·class="inline">elixir</code>,·<code·class="inline">lfe</code>,·<code·class="inline">alpaca</code>,·and·so·on</p></li><li><p><strong><code·class="inline">Format</code></strong>·-·the·mime·type·of·the·documentation,·such·as·<code·class="inline"><<"text/markdown">></code> | 172 | <code·class="inline">elixir</code>,·<code·class="inline">lfe</code>,·<code·class="inline">alpaca</code>,·and·so·on</p></li><li><p><strong><code·class="inline">Format</code></strong>·-·the·mime·type·of·the·documentation,·such·as·<code·class="inline"><<"text/markdown">></code> |
| 173 | or·<code·class="inline"><<"application/erlang+html">></code>.·For·details·of·the·format·used·by·Erlang | 173 | or·<code·class="inline"><<"application/erlang+html">></code>.·For·details·of·the·format·used·by·Erlang |
| 174 | see·the·<a·href="../../../../lib/edoc-1.3.2/doc/html/doc_storage.html"><code·class="inline">EEP-48·Chapter</code></a>·in·EDoc's·User's | 174 | see·the·<a·href="../../../../lib/edoc-1.3.2/doc/html/doc_storage.html"><code·class="inline">EEP-48·Chapter</code></a>·in·EDoc's·User's |
| 175 | Guide.</p></li><li><p><strong><code·class="inline">ModuleDoc</code></strong>·-·a·map·with·the·documentation·language·as·key,·such·as | 175 | Guide.</p></li><li><p><strong><code·class="inline">ModuleDoc</code></strong>·-·a·map·with·the·documentation·language·as·key,·such·as |
| 176 | <code·class="inline"><<"en">></code>·or·<code·class="inline"><<"pt_BR">></code>,·and·the·documentation·as·a·binary·value.·It·can | 176 | <code·class="inline"><<"en">></code>·or·<code·class="inline"><<"pt_BR">></code>,·and·the·documentation·as·a·binary·value.·It·can |
| 177 | be·atom·<code·class="inline">none</code>·if·no·documentation·exists·or·the·atom·<code·class="inline">hidden</code>·if | 177 | be·atom·<code·class="inline">none</code>·if·no·documentation·exists·or·the·atom·<code·class="inline">hidden</code>·if |
| Offset 258, 15 lines modified | Offset 258, 15 lines modified | ||
| 258 | ······<p·class="built-using"> | 258 | ······<p·class="built-using"> |
| 259 | ········Built·using | 259 | ········Built·using |
| 260 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 260 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 261 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 261 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 262 | ······</p> | 262 | ······</p> |
| 263 | <p>Copyright·©·1996-202 | 263 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 264 | ····</footer> | 264 | ····</footer> |
| 265 | ··</div> | 265 | ··</div> |
| 266 | </main> | 266 | </main> |
| 267 | </div> | 267 | </div> |
| 268 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 268 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 269 | ··<script> | 269 | ··<script> |
| 270 | ··let·initialized·=·false; | 270 | ··let·initialized·=·false; |
| Offset 399, 15 lines modified | Offset 399, 15 lines modified | ||
| 399 | ······<p·class="built-using"> | 399 | ······<p·class="built-using"> |
| 400 | ········Built·using | 400 | ········Built·using |
| 401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 401 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 402 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 403 | ······</p> | 403 | ······</p> |
| 404 | <p>Copyright·©·1996-202 | 404 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 405 | ····</footer> | 405 | ····</footer> |
| 406 | ··</div> | 406 | ··</div> |
| 407 | </main> | 407 | </main> |
| 408 | </div> | 408 | </div> |
| 409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 409 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 410 | ··<script> | 410 | ··<script> |
| 411 | ··let·initialized·=·false; | 411 | ··let·initialized·=·false; |
| Offset 1311, 15 lines modified | Offset 1311, 15 lines modified | ||
| 1311 | ······<p·class="built-using"> | 1311 | ······<p·class="built-using"> |
| 1312 | ········Built·using | 1312 | ········Built·using |
| 1313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1313 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1314 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1315 | ······</p> | 1315 | ······</p> |
| 1316 | <p>Copyright·©·1996-202 | 1316 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1317 | ····</footer> | 1317 | ····</footer> |
| 1318 | ··</div> | 1318 | ··</div> |
| 1319 | </main> | 1319 | </main> |
| 1320 | </div> | 1320 | </div> |
| 1321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1321 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1322 | ··<script> | 1322 | ··<script> |
| 1323 | ··let·initialized·=·false; | 1323 | ··let·initialized·=·false; |
| Offset 351, 16 lines modified | Offset 351, 16 lines modified | ||
| 351 | ···················Reason·::·address·|·<a·href="file.html#t:posix/0">file:posix</a>().</pre> | 351 | ···················Reason·::·address·|·<a·href="file.html#t:posix/0">file:posix</a>().</pre> |
| 352 | ······</div> | 352 | ······</div> |
| 353 | <p>Called·by·<a·href="net_adm.html"><code·class="inline">net_adm:names/0</code></a>.·<code·class="inline">Host</code>·defaults·to·the·localhost. | 353 | <p>Called·by·<a·href="net_adm.html"><code·class="inline">net_adm:names/0</code></a>.·<code·class="inline">Host</code>·defaults·to·the·localhost. |
| 354 | Returns·the·names·and·associated·port·numbers·of·the·Erlang·nodes·that·<code·class="inline">epmd</code> | 354 | Returns·the·names·and·associated·port·numbers·of·the·Erlang·nodes·that·<code·class="inline">epmd</code> |
| 355 | registered·at·the·specified·host.·Returns·<code·class="inline">{error,·address}</code>·if·<code·class="inline">epmd</code>·is·not | 355 | registered·at·the·specified·host.·Returns·<code·class="inline">{error,·address}</code>·if·<code·class="inline">epmd</code>·is·not |
| 356 | operational.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(arne@dunn)1>·</span><span·class="nc">erl_epmd</span><span·class="p">:</span><span·class="nf">names</span><span·class="p"·data-group-id="3 | 356 | operational.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(arne@dunn)1>·</span><span·class="nc">erl_epmd</span><span·class="p">:</span><span·class="nf">names</span><span·class="p"·data-group-id="3052983564-1">(</span><span·class="ss">localhost</span><span·class="p"·data-group-id="3052983564-1">)</span><span·class="p">.</span><span·class="w"> |
| 357 | </span><span·class="p"·data-group-id="3 | 357 | </span><span·class="p"·data-group-id="3052983564-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3052983564-3">[</span><span·class="p"·data-group-id="3052983564-4">{</span><span·class="s">"arne"</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·160,·SHA:·763e420bbafb1032103cfb549f5b9ce9b606e94e2dbaccf851c14578021493cc·...·]-2">}</span></code></pre> |
| 358 | ··</section> | 358 | ··</section> |
| 359 | </section> | 359 | </section> |
| 360 | <section·class="detail"·id="port_please/2"> | 360 | <section·class="detail"·id="port_please/2"> |
| 361 | ··<div·class="detail-header"> | 361 | ··<div·class="detail-header"> |
| 362 | ····<a·href="#port_please/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 362 | ····<a·href="#port_please/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 363 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 363 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 550, 15 lines modified | Offset 550, 15 lines modified | ||
| 550 | ······<p·class="built-using"> | 550 | ······<p·class="built-using"> |
| 551 | ········Built·using | 551 | ········Built·using |
| 552 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 552 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 553 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 553 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 554 | ······</p> | 554 | ······</p> |
| 555 | <p>Copyright·©·1996-202 | 555 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 556 | ····</footer> | 556 | ····</footer> |
| 557 | ··</div> | 557 | ··</div> |
| 558 | </main> | 558 | </main> |
| 559 | </div> | 559 | </div> |
| 560 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 560 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 561 | ··<script> | 561 | ··<script> |
| 562 | ··let·initialized·=·false; | 562 | ··let·initialized·=·false; |
| Offset 1183, 28 lines modified | Offset 1183, 28 lines modified | ||
| 1183 | at·the·client·side.</li></ul><p>The·call·<code·class="inline">erpc:multicall(Nodes,·Module,·Function,·Args)</code>·is·equivalent·to·the | 1183 | at·the·client·side.</li></ul><p>The·call·<code·class="inline">erpc:multicall(Nodes,·Module,·Function,·Args)</code>·is·equivalent·to·the |
| 1184 | call·<code·class="inline">erpc:multicall(Nodes,·Module,·Function,·Args,·infinity)</code>.·These·calls·are | 1184 | call·<code·class="inline">erpc:multicall(Nodes,·Module,·Function,·Args,·infinity)</code>.·These·calls·are |
| 1185 | also·equivalent·to·calling·<code·class="inline">my_multicall(Nodes,·Module,·Function,·Args)</code>·below | 1185 | also·equivalent·to·calling·<code·class="inline">my_multicall(Nodes,·Module,·Function,·Args)</code>·below |
| 1186 | if·one·disregard·performance·and·failure·behavior.·<code·class="inline">multicall()</code>·can·utilize·a | 1186 | if·one·disregard·performance·and·failure·behavior.·<code·class="inline">multicall()</code>·can·utilize·a |
| 1187 | selective·receive·optimization·which·removes·the·need·to·scan·the·message·queue | 1187 | selective·receive·optimization·which·removes·the·need·to·scan·the·message·queue |
| 1188 | from·the·beginning·in·order·to·find·a·matching·message.·The | 1188 | from·the·beginning·in·order·to·find·a·matching·message.·The |
| 1189 | <code·class="inline">send_request()/receive_response()</code>·combination·can,·however,·not·utilize·this | 1189 | <code·class="inline">send_request()/receive_response()</code>·combination·can,·however,·not·utilize·this |
| 1190 | optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_multicall</span><span·class="p"·data-group-id=" | 1190 | optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_multicall</span><span·class="p"·data-group-id="3455981909-1">(</span><span·class="n">Nodes</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·66,·SHA:·2986ad77120c4d7012b3abfc1960f932a3f449db6de32bfc479e8b00ee98132f·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1191 | ··</span><span·class="n">ReqIds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id=" | 1191 | ··</span><span·class="n">ReqIds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="3455981909-2">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="3455981909-3">(</span><span·class="n">Node</span><span·class="p"·data-group-id="3455981909-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1192 | ·······················</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id=" | 1192 | ·······················</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id="3455981909-4">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·65,·SHA:·165feda2a2ef6d52d84ebe55249b4cccff2d60b866c9245a941b28002b88cbc7·...·]-4">)</span><span·class="w"> |
| 1193 | ·····················</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 1193 | ·····················</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 1194 | ·····················</span><span·class="n">Nodes</span><span·class="p"·data-group-id=" | 1194 | ·····················</span><span·class="n">Nodes</span><span·class="p"·data-group-id="3455981909-2">)</span><span·class="p">,</span><span·class="w"> |
| 1195 | ··</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id=" | 1195 | ··</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="3455981909-5">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="3455981909-6">(</span><span·class="n">ReqId</span><span·class="p"·data-group-id="3455981909-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1196 | ··············</span><span·class="k">try</span><span·class="w"> | 1196 | ··············</span><span·class="k">try</span><span·class="w"> |
| 1197 | ················</span><span·class="p"·data-group-id=" | 1197 | ················</span><span·class="p"·data-group-id="3455981909-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">receive_response</span><span·class="p"·data-group-id="3455981909-8">(</span><span·class="n"[·...·truncated·by·diffoscope;·len:·187,·SHA:·1aba0ac57e1686c1a3c79d50d905d9992440d9cb98382187d0eb49ff0459076d·...·]-7">}</span><span·class="w"> |
| 1198 | ··············</span><span·class="k">catch</span><span·class="w"> | 1198 | ··············</span><span·class="k">catch</span><span·class="w"> |
| 1199 | ················</span><span·class="n">Class</span><span·class="p">:</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 1199 | ················</span><span·class="n">Class</span><span·class="p">:</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1200 | ··················</span><span·class="p"·data-group-id=" | 1200 | ··················</span><span·class="p"·data-group-id="3455981909-9">{</span><span·class="n">Class</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="3455981909-9">}</span><span·class="w"> |
| 1201 | ··············</span><span·class="k">end</span><span·class="w"> | 1201 | ··············</span><span·class="k">end</span><span·class="w"> |
| 1202 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 1202 | ············</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 1203 | ············</span><span·class="n">ReqIds</span><span·class="p"·data-group-id=" | 1203 | ············</span><span·class="n">ReqIds</span><span·class="p"·data-group-id="3455981909-5">)</span><span·class="p">.</span></code></pre><p>If·an·<code·class="inline">erpc</code>·operation·fails,·but·it·is·unknown·if·the·function·is/will·be |
| 1204 | applied·(that·is,·a·timeout,·connection·loss,·or·an·improper·<code·class="inline">Nodes</code>·list),·the | 1204 | applied·(that·is,·a·timeout,·connection·loss,·or·an·improper·<code·class="inline">Nodes</code>·list),·the |
| 1205 | caller·will·not·receive·any·further·information·about·the·result·if/when·the | 1205 | caller·will·not·receive·any·further·information·about·the·result·if/when·the |
| 1206 | applied·function·completes.·If·the·applied·function·communicates·with·the | 1206 | applied·function·completes.·If·the·applied·function·communicates·with·the |
| 1207 | calling·process,·such·communication·may,·of·course,·reach·the·calling·process.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the | 1207 | calling·process,·such·communication·may,·of·course,·reach·the·calling·process.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the |
| 1208 | <code·class="inline">apply()</code>.·It·may·be·the·calling·process·itself,·a·server,·or·a·freshly | 1208 | <code·class="inline">apply()</code>.·It·may·be·the·calling·process·itself,·a·server,·or·a·freshly |
| 1209 | spawned·process.</p></section> | 1209 | spawned·process.</p></section> |
| 1210 | ··</section> | 1210 | ··</section> |
| Offset 1346, 17 lines modified | Offset 1346, 17 lines modified | ||
| 1346 | exception·if/when·an·invalid·<code·class="inline">RequestId</code>·is·detected·or·if·an·invalid·<code·class="inline">Timeout</code> | 1346 | exception·if/when·an·invalid·<code·class="inline">RequestId</code>·is·detected·or·if·an·invalid·<code·class="inline">Timeout</code> |
| 1347 | is·passed.</p><p>A·call·to·the·function·<code·class="inline">my_call(Node,·Module,·Function,·Args,·Timeout)</code>·below·is | 1347 | is·passed.</p><p>A·call·to·the·function·<code·class="inline">my_call(Node,·Module,·Function,·Args,·Timeout)</code>·below·is |
| 1348 | equivalent·to·the·call | 1348 | equivalent·to·the·call |
| 1349 | <a·href="#call/5"><code·class="inline">erpc:call(Node,·Module,·Function,·Args,·Timeout)</code></a>·if·one·disregards | 1349 | <a·href="#call/5"><code·class="inline">erpc:call(Node,·Module,·Function,·Args,·Timeout)</code></a>·if·one·disregards |
| 1350 | performance.·<code·class="inline">call()</code>·can·utilize·a·selective·receive·optimization·which·removes | 1350 | performance.·<code·class="inline">call()</code>·can·utilize·a·selective·receive·optimization·which·removes |
| 1351 | the·need·to·scan·the·message·queue·from·the·beginning·in·order·to·find·a | 1351 | the·need·to·scan·the·message·queue·from·the·beginning·in·order·to·find·a |
| 1352 | matching·message.·The·<code·class="inline">send_request()/receive_response()</code>·combination·can, | 1352 | matching·message.·The·<code·class="inline">send_request()/receive_response()</code>·combination·can, |
| 1353 | however,·not·utilize·this·optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_call</span><span·class="p"·data-group-id=" | 1353 | however,·not·utilize·this·optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_call</span><span·class="p"·data-group-id="5175704855-1">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·143,·SHA:·33426eb8b051a841f92f3beafbfabfda66378714ef6f990e1d337017f0d33c21·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1354 | ··</span><span·class="n">RequestId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id=" | 1354 | ··</span><span·class="n">RequestId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id="5175704855-2">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·65,·SHA:·b448a786935f5066a7919d5adf5d35032d5a058c1ec76bbd36f7bc3ac1eb5401·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 1355 | ··</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">receive_response</span><span·class="p"·data-group-id=" | 1355 | ··</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">receive_response</span><span·class="p"·data-group-id="5175704855-3">(</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Timeout</span><span·class="p"·data-group-id="5175704855-3">)</span><span·class="p">.</span></code></pre><p>If·the·<code·class="inline">erpc</code>·operation·fails,·but·it·is·unknown·if·the·function·is/will·be |
| 1356 | applied·(that·is,·a·timeout,·or·a·connection·loss),·the·caller·will·not·receive | 1356 | applied·(that·is,·a·timeout,·or·a·connection·loss),·the·caller·will·not·receive |
| 1357 | any·further·information·about·the·result·if/when·the·applied·function·completes. | 1357 | any·further·information·about·the·result·if/when·the·applied·function·completes. |
| 1358 | If·the·applied·function·explicitly·communicates·with·the·calling·process,·such | 1358 | If·the·applied·function·explicitly·communicates·with·the·calling·process,·such |
| 1359 | communication·may,·of·course,·reach·the·calling·process.</p> | 1359 | communication·may,·of·course,·reach·the·calling·process.</p> |
| 1360 | ··</section> | 1360 | ··</section> |
| 1361 | </section> | 1361 | </section> |
| 1362 | <section·class="detail"·id="receive_response/3"> | 1362 | <section·class="detail"·id="receive_response/3"> |
| Offset 1637, 17 lines modified | Offset 1637, 17 lines modified | ||
| 1637 | about·to·save·the·request·identifier·in·a·request·identifier·collection,·you·may | 1637 | about·to·save·the·request·identifier·in·a·request·identifier·collection,·you·may |
| 1638 | want·to·consider·using·<a·href="#send_request/6"><code·class="inline">send_request/6</code></a>·instead.</p><p>A·call·to·the·function·<code·class="inline">my_call(Node,·Module,·Function,·Args,·Timeout)</code>·below·is | 1638 | want·to·consider·using·<a·href="#send_request/6"><code·class="inline">send_request/6</code></a>·instead.</p><p>A·call·to·the·function·<code·class="inline">my_call(Node,·Module,·Function,·Args,·Timeout)</code>·below·is |
| 1639 | equivalent·to·the·call | 1639 | equivalent·to·the·call |
| 1640 | <a·href="#call/5"><code·class="inline">erpc:call(Node,·Module,·Function,·Args,·Timeout)</code></a>·if·one·disregards | 1640 | <a·href="#call/5"><code·class="inline">erpc:call(Node,·Module,·Function,·Args,·Timeout)</code></a>·if·one·disregards |
| 1641 | performance.·<code·class="inline">call()</code>·can·utilize·a·selective·receive·optimization·which·removes | 1641 | performance.·<code·class="inline">call()</code>·can·utilize·a·selective·receive·optimization·which·removes |
| 1642 | the·need·to·scan·the·message·queue·from·the·beginning·in·order·to·find·a | 1642 | the·need·to·scan·the·message·queue·from·the·beginning·in·order·to·find·a |
| 1643 | matching·message.·The·<code·class="inline">send_request()/receive_response()</code>·combination·can, | 1643 | matching·message.·The·<code·class="inline">send_request()/receive_response()</code>·combination·can, |
| 1644 | however,·not·utilize·this·optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_call</span><span·class="p"·data-group-id=" | 1644 | however,·not·utilize·this·optimization.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_call</span><span·class="p"·data-group-id="8881950935-1">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·142,·SHA:·2c7ad44dc3519a16e541258fbca3ed692beeac4f09114edfc715d41ee0eb3d77·...·]5-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1645 | ··</span><span·class="n">RequestId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id=" | 1645 | ··</span><span·class="n">RequestId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">send_request</span><span·class="p"·data-group-id="8881950935-2">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·64,·SHA:·9e1fca2a841e08dc8db6522c3ec056ea47c0a08bdfb5d9778477b2141281d43d·...·]5-2">)</span><span·class="p">,</span><span·class="w"> |
| 1646 | ··</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">receive_response</span><span·class="p"·data-group-id=" | 1646 | ··</span><span·class="nc">erpc</span><span·class="p">:</span><span·class="nf">receive_response</span><span·class="p"·data-group-id="8881950935-3">(</span><span·class="n">RequestId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Timeout</span><span·class="p"·data-group-id="8881950935-3">)</span><span·class="p">.</span></code></pre><p>Fails·with·an·<code·class="inline">{erpc,·badarg}</code>·<code·class="inline">error</code>·exception·if:</p><ul><li><code·class="inline">Node</code>·is·not·an·atom.</li><li><code·class="inline">Module</code>·is·not·an·atom.</li><li><code·class="inline">Function</code>·is·not·an·atom.</li><li><code·class="inline">Args</code>·is·not·a·list.·Note·that·the·list·is·not·verified·to·be·a·proper·list |
| 1647 | at·the·client·side.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the | 1647 | at·the·client·side.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the |
| 1648 | <code·class="inline">apply()</code>.·It·may·be·a·server,·or·a·freshly·spawned·process.</p></section><p>Equivalent·to | 1648 | <code·class="inline">apply()</code>.·It·may·be·a·server,·or·a·freshly·spawned·process.</p></section><p>Equivalent·to |
| 1649 | <a·href="#send_request/6"><code·class="inline">erpc:send_request(Node,·erlang,·apply,·[Fun,[]]),·Label,·RequestIdCollection)</code></a>.</p><p>Fails·with·an·<code·class="inline">{erpc,·badarg}</code>·<code·class="inline">error</code>·exception·if:</p><ul><li><code·class="inline">Node</code>·is·not·an·atom.</li><li><code·class="inline">Fun</code>·is·not·a·fun·of·zero·arity.</li><li><code·class="inline">RequestIdCollection</code>·is·detected·not·to·be·request·identifier·collection.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the | 1649 | <a·href="#send_request/6"><code·class="inline">erpc:send_request(Node,·erlang,·apply,·[Fun,[]]),·Label,·RequestIdCollection)</code></a>.</p><p>Fails·with·an·<code·class="inline">{erpc,·badarg}</code>·<code·class="inline">error</code>·exception·if:</p><ul><li><code·class="inline">Node</code>·is·not·an·atom.</li><li><code·class="inline">Fun</code>·is·not·a·fun·of·zero·arity.</li><li><code·class="inline">RequestIdCollection</code>·is·detected·not·to·be·request·identifier·collection.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the |
| 1650 | <code·class="inline">apply()</code>.·It·may·be·a·server,·or·a·freshly·spawned·process.</p></section> | 1650 | <code·class="inline">apply()</code>.·It·may·be·a·server,·or·a·freshly·spawned·process.</p></section> |
| 1651 | ··</section> | 1651 | ··</section> |
| 1652 | </section> | 1652 | </section> |
| 1653 | <section·class="detail"·id="send_request/6"> | 1653 | <section·class="detail"·id="send_request/6"> |
| Offset 1869, 15 lines modified | Offset 1869, 15 lines modified | ||
| 1869 | ······<p·class="built-using"> | 1869 | ······<p·class="built-using"> |
| 1870 | ········Built·using | 1870 | ········Built·using |
| 1871 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1871 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1872 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1872 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1873 | ······</p> | 1873 | ······</p> |
| 1874 | <p>Copyright·©·1996-202 | 1874 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1875 | ····</footer> | 1875 | ····</footer> |
| 1876 | ··</div> | 1876 | ··</div> |
| 1877 | </main> | 1877 | </main> |
| 1878 | </div> | 1878 | </div> |
| 1879 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1879 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1880 | ··<script> | 1880 | ··<script> |
| 1881 | ··let·initialized·=·false; | 1881 | ··let·initialized·=·false; |
| Offset 325, 15 lines modified | Offset 325, 15 lines modified | ||
| 325 | ······<p·class="built-using"> | 325 | ······<p·class="built-using"> |
| 326 | ········Built·using | 326 | ········Built·using |
| 327 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 327 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 328 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 328 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 329 | ······</p> | 329 | ······</p> |
| 330 | <p>Copyright·©·1996-202 | 330 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 331 | ····</footer> | 331 | ····</footer> |
| 332 | ··</div> | 332 | ··</div> |
| 333 | </main> | 333 | </main> |
| 334 | </div> | 334 | </div> |
| 335 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 335 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 336 | ··<script> | 336 | ··<script> |
| 337 | ··let·initialized·=·false; | 337 | ··let·initialized·=·false; |
| Offset 1204, 15 lines modified | Offset 1204, 15 lines modified | ||
| 1204 | ······<p·class="built-using"> | 1204 | ······<p·class="built-using"> |
| 1205 | ········Built·using | 1205 | ········Built·using |
| 1206 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1206 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1207 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1207 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1208 | ······</p> | 1208 | ······</p> |
| 1209 | <p>Copyright·©·1996-202 | 1209 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1210 | ····</footer> | 1210 | ····</footer> |
| 1211 | ··</div> | 1211 | ··</div> |
| 1212 | </main> | 1212 | </main> |
| 1213 | </div> | 1213 | </div> |
| 1214 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1214 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1215 | ··<script> | 1215 | ··<script> |
| 1216 | ··let·initialized·=·false; | 1216 | ··let·initialized·=·false; |
| Offset 176, 39 lines modified | Offset 176, 39 lines modified | ||
| 176 | running·its·file·server·as·slave·to·the·file·server·of·another·node,·and·the | 176 | running·its·file·server·as·slave·to·the·file·server·of·another·node,·and·the |
| 177 | other·node·runs·on·some·other·host·machine,·they·can·have·different·file | 177 | other·node·runs·on·some·other·host·machine,·they·can·have·different·file |
| 178 | systems.·However,·this·is·seldom·a·problem.</p></section><p><a·href="#open/2"><code·class="inline">open/2</code></a>·can·be·given·the·options·<code·class="inline">delayed_write</code>·and·<code·class="inline">read_ahead</code>·to·turn·on | 178 | systems.·However,·this·is·seldom·a·problem.</p></section><p><a·href="#open/2"><code·class="inline">open/2</code></a>·can·be·given·the·options·<code·class="inline">delayed_write</code>·and·<code·class="inline">read_ahead</code>·to·turn·on |
| 179 | caching,·which·will·reduce·the·number·of·operating·system·calls·and·greatly | 179 | caching,·which·will·reduce·the·number·of·operating·system·calls·and·greatly |
| 180 | improve·performance·for·small·reads·and·writes.·However,·the·overhead·won't | 180 | improve·performance·for·small·reads·and·writes.·However,·the·overhead·won't |
| 181 | disappear·completely·and·it's·best·to·keep·the·number·of·file·operations·to·a | 181 | disappear·completely·and·it's·best·to·keep·the·number·of·file·operations·to·a |
| 182 | minimum.·As·a·contrived·example,·the·following·function·writes·4MB·in·2.5 | 182 | minimum.·As·a·contrived·example,·the·following·function·writes·4MB·in·2.5 |
| 183 | seconds·when·tested:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 183 | seconds·when·tested:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="1559522493-1">(</span><span·class="n">Name</span><span·class="p"·data-group-id="1559522493-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 184 | ····</span><span·class="p"·data-group-id=" | 184 | ····</span><span·class="p"·data-group-id="1559522493-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="1559522493-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·612,·SHA:·c8cf30318c48e61a1e2cb497bd107ce564ed5836e5a3097c7c92b5e6b4ab73dc·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 185 | ····</span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id="1559522493-5">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="w">·</span><span·class="ow">bsl</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="1559[·...·truncated·by·diffoscope;·len:·6,·SHA:·92e77bf7176089db0eb34387ac31bb016b14355e6caa66f14593d984948abda3·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 186 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 186 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="1559522493-6">(</span><span·class="n">Fd</span><span·class="p"·data-group-id="1559522493-6">)</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id=" | 187 | </span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id="1559522493-7">(</span><span·class="p">_</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="1559522493-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 188 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 188 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 189 | </span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id=" | 189 | </span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id="1559522493-8">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p"·data-group-id="1559522493-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 190 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="1559522493-9">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1559522493-10"><<</span><span·class="mi">0</span><span·class="p"·data-group-id="1559522493-10">>></span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·b75c5eea43f796c5290dc3b0408ac92e5d91ebc0683e122b0c84a4a4467abb89·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="nf">create_file_slow_1</span><span·class="p"·data-group-id="1559522493-11">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="15595224[·...·truncated·by·diffoscope;·len:·2,·SHA:·6e4001871c0cf27c7634ef1dc478408f642410fd3a444e2a88e301f5c4a35a4d·...·]-11">)</span><span·class="p">.</span></code></pre><p>The·following·functionally·equivalent·code·writes·128·bytes·per·call·to |
| 192 | <a·href="#write/2"><code·class="inline">write/2</code></a>·and·so·does·the·same·work·in·0.08·seconds,·which·is·roughly·30·times | 192 | <a·href="#write/2"><code·class="inline">write/2</code></a>·and·so·does·the·same·work·in·0.08·seconds,·which·is·roughly·30·times |
| 193 | faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">create_file</span><span·class="p"·data-group-id=" | 193 | faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">create_file</span><span·class="p"·data-group-id="9921527511-1">(</span><span·class="n">Name</span><span·class="p"·data-group-id="9921527511-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ····</span><span·class="p"·data-group-id=" | 194 | ····</span><span·class="p"·data-group-id="9921527511-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="9921527511-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·612,·SHA:·05e1df1ee162fcdb6cab810f6a55fc00a476d8e43d0a2da6d82118d6f7a48331·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 195 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 195 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-5">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="w">·</span><span·class="ow">bsl</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="9921[·...·truncated·by·diffoscope;·len:·6,·SHA:·519afd98c720bd8faba1f02ea72c6f990f4be432704f967c77bce4905d24b524·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 196 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9921527511-6">(</span><span·class="n">Fd</span><span·class="p"·data-group-id="9921527511-6">)</span><span·class="p">,</span><span·class="w"> |
| 197 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 197 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 198 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-7">(</span><span·class="p">_</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="9921527511-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 199 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 200 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 200 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-8">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p"·data-group-id="9921527511-8">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">128</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="9921527511-9">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9921527511-10"><<</span><span·class="mi">0</span><span·class="p">:</span><span·class="p"·data-group-id="9921527511-11">(</sp[·...·truncated·by·diffoscope;·len:·287,·SHA:·87677fa3e00f29068056fc8add49bce55dda389651a604a0071602e08a7f2186·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-12">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">128</span><span·class="p"·data-group-id="992152[·...·truncated·by·diffoscope;·len:·4,·SHA:·440a5f172610e2fcfc71ff38c54a6c0638613b0ed0c3ed62d149d97a00372f28·...·]-12">)</span><span·class="p">;</span><span·class="w"> |
| 203 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-13">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p"·data-group-id="9921527511-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="9921527511-14">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9921527511-15"><<</span><span·class="mi">0</span><span·class="p">:</span><span·class="p"·data-group-id="9921527511-16">(</s[·...·truncated·by·diffoscope;·len:·285,·SHA:·147649a318a39761cdb9423d387253d4a7b4cf3511747fb03fa8fc1ff5774870·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nf">create_file_1</span><span·class="p"·data-group-id="9921527511-17">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="99215275[·...·truncated·by·diffoscope;·len:·2,·SHA:·4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8·...·]-17">)</span><span·class="p">.</span></code></pre><p>When·writing·data·it's·generally·more·efficient·to·write·a·list·of·binaries |
| 206 | rather·than·a·list·of·integers.·It·is·not·needed·to·flatten·a·deep·list·before | 206 | rather·than·a·list·of·integers.·It·is·not·needed·to·flatten·a·deep·list·before |
| 207 | writing.·On·Unix·hosts,·scatter·output,·which·writes·a·set·of·buffers·in·one | 207 | writing.·On·Unix·hosts,·scatter·output,·which·writes·a·set·of·buffers·in·one |
| 208 | operation,·is·used·when·possible.·In·this·way | 208 | operation,·is·used·when·possible.·In·this·way |
| 209 | <a·href="#write/2"><code·class="inline">write(FD,·[Bin1,·Bin2·|·Bin3])</code></a>·writes·the·contents·of·the | 209 | <a·href="#write/2"><code·class="inline">write(FD,·[Bin1,·Bin2·|·Bin3])</code></a>·writes·the·contents·of·the |
| 210 | binaries·without·copying·the·data·at·all,·except·for·perhaps·deep·down·in·the | 210 | binaries·without·copying·the·data·at·all,·except·for·perhaps·deep·down·in·the |
| 211 | operating·system·kernel.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>If·an·error·occurs·when·accessing·an·open·file·with·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html"><code·class="inline">io</code></a>,·the·process | 211 | operating·system·kernel.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>If·an·error·occurs·when·accessing·an·open·file·with·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html"><code·class="inline">io</code></a>,·the·process |
| 212 | handling·the·file·exits.·The·dead·file·process·can·hang·if·a·process·tries·to | 212 | handling·the·file·exits.·The·dead·file·process·can·hang·if·a·process·tries·to |
| Offset 1956, 16 lines modified | Offset 1956, 16 lines modified | ||
| 1956 | ······</div> | 1956 | ······</div> |
| 1957 | <p>Reads·Erlang·terms,·separated·by·<code·class="inline">.</code>,·from·<code·class="inline">Filename</code>.·Returns·one·of·the | 1957 | <p>Reads·Erlang·terms,·separated·by·<code·class="inline">.</code>,·from·<code·class="inline">Filename</code>.·Returns·one·of·the |
| 1958 | following:</p><ul><li><p><strong><code·class="inline">{ok,·Terms}</code></strong>·-·The·file·was·successfully·read.</p></li><li><p><strong><code·class="inline">{error,·atom()}</code></strong>·-·An·error·occurred·when·opening·the·file·or·reading·it. | 1958 | following:</p><ul><li><p><strong><code·class="inline">{ok,·Terms}</code></strong>·-·The·file·was·successfully·read.</p></li><li><p><strong><code·class="inline">{error,·atom()}</code></strong>·-·An·error·occurred·when·opening·the·file·or·reading·it. |
| 1959 | For·a·list·of·typical·error·codes,·see·<a·href="#open/2"><code·class="inline">open/2</code></a>.</p></li><li><p><strong><code·class="inline">{error,·{Line,·Mod,·Term}}</code></strong>·-·An·error·occurred·when·interpreting·the | 1959 | For·a·list·of·typical·error·codes,·see·<a·href="#open/2"><code·class="inline">open/2</code></a>.</p></li><li><p><strong><code·class="inline">{error,·{Line,·Mod,·Term}}</code></strong>·-·An·error·occurred·when·interpreting·the |
| 1960 | Erlang·terms·in·the·file.·To·convert·the·three-element·tuple·to·an·English | 1960 | Erlang·terms·in·the·file.·To·convert·the·three-element·tuple·to·an·English |
| 1961 | description·of·the·error,·use·<a·href="#format_error/1"><code·class="inline">format_error/1</code></a>.</p></li></ul><p><em>Example:</em></p><pre><code·class="text">f.txt:··{person,·"kalle",·25}. | 1961 | description·of·the·error,·use·<a·href="#format_error/1"><code·class="inline">format_error/1</code></a>.</p></li></ul><p><em>Example:</em></p><pre><code·class="text">f.txt:··{person,·"kalle",·25}. |
| 1962 | ········{person,·"pelle",·30}.</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">consult</span><span·class="p"·data-group-id=" | 1962 | ········{person,·"pelle",·30}.</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">consult</span><span·class="p"·data-group-id="5684905946-1">(</span><span·class="s">"f.txt"</span><span·class="p"·data-group-id="5684905946-1">)</span><span·class="p">.</span><span·class="w"> |
| 1963 | </span><span·class="p"·data-group-id=" | 1963 | </span><span·class="p"·data-group-id="5684905946-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="5684905946-3">[</span><span·class="p"·data-group-id="5684905946-4">{</span><span·class="ss">person</span><span·class="p">,</span><span·class="s">"ka[·...·truncated·by·diffoscope;·len:·487,·SHA:·f5fc212ca3e3364389bbdedf4cf8af7b1aafcaba11afbb3c71df6056c13cbb77·...·]-2">}</span></code></pre><p>The·encoding·of·<code·class="inline">Filename</code>·can·be·set·by·a·comment,·as·described·in |
| 1964 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/epp.html#encoding"><code·class="inline">epp</code></a>.</p> | 1964 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/epp.html#encoding"><code·class="inline">epp</code></a>.</p> |
| 1965 | ··</section> | 1965 | ··</section> |
| 1966 | </section> | 1966 | </section> |
| 1967 | <section·class="detail"·id="copy/2"> | 1967 | <section·class="detail"·id="copy/2"> |
| 1968 | ··<div·class="detail-header"> | 1968 | ··<div·class="detail-header"> |
| 1969 | ····<a·href="#copy/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1969 | ····<a·href="#copy/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 3246, 15 lines modified | Offset 3246, 15 lines modified | ||
| 3246 | ····························FileInfo·::·<a·href="#t:file_info/0">file_info</a>(), | 3246 | ····························FileInfo·::·<a·href="#t:file_info/0">file_info</a>(), |
| 3247 | ····························Reason·::·<a·href="#t:posix/0">posix</a>()·|·badarg.</pre> | 3247 | ····························Reason·::·<a·href="#t:posix/0">posix</a>()·|·badarg.</pre> |
| 3248 | ······</div> | 3248 | ······</div> |
| 3249 | <p>Retrieves·information·about·a·file.·Returns·<code·class="inline">{ok,·FileInfo}</code>·if·successful, | 3249 | <p>Retrieves·information·about·a·file.·Returns·<code·class="inline">{ok,·FileInfo}</code>·if·successful, |
| 3250 | otherwise·<code·class="inline">{error,·Reason}</code>.</p><p><code·class="inline">FileInfo</code>·is·a·record·<code·class="inline">file_info</code>,·defined·in·the·Kernel·include·file·<code·class="inline">file.hrl</code>. | 3250 | otherwise·<code·class="inline">{error,·Reason}</code>.</p><p><code·class="inline">FileInfo</code>·is·a·record·<code·class="inline">file_info</code>,·defined·in·the·Kernel·include·file·<code·class="inline">file.hrl</code>. |
| 3251 | Include·the·following·directive·in·the·module·from·which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 3251 | Include·the·following·directive·in·the·module·from·which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8592912653-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="8592912653-1">)</span><span·class="p">.</span></code></pre><p>The·time·type·returned·in·<code·class="inline">atime</code>,·<code·class="inline">mtime</code>,·and·<code·class="inline">ctime</code>·is·dependent·on·the·time |
| 3252 | type·set·in·<code·class="inline">Opts·::·{time,·Type}</code>·as·follows:</p><ul><li><p><strong><code·class="inline">local</code></strong>·-·Returns·local·time.</p></li><li><p><strong><code·class="inline">universal</code></strong>·-·Returns·universal·time.</p></li><li><p><strong><code·class="inline">posix</code></strong>·-·Returns·seconds·since·or·before·Unix·time·epoch,·which·is | 3252 | type·set·in·<code·class="inline">Opts·::·{time,·Type}</code>·as·follows:</p><ul><li><p><strong><code·class="inline">local</code></strong>·-·Returns·local·time.</p></li><li><p><strong><code·class="inline">universal</code></strong>·-·Returns·universal·time.</p></li><li><p><strong><code·class="inline">posix</code></strong>·-·Returns·seconds·since·or·before·Unix·time·epoch,·which·is |
| 3253 | 1970-01-01·00:00·UTC.</p></li></ul><p>Default·is·<code·class="inline">{time,·local}</code>.</p><p>If·the·option·<code·class="inline">raw</code>·is·set,·the·file·server·is·not·called·and·only·information | 3253 | 1970-01-01·00:00·UTC.</p></li></ul><p>Default·is·<code·class="inline">{time,·local}</code>.</p><p>If·the·option·<code·class="inline">raw</code>·is·set,·the·file·server·is·not·called·and·only·information |
| 3254 | about·local·files·is·returned.·Note·that·this·will·break·this·module's·atomicity | 3254 | about·local·files·is·returned.·Note·that·this·will·break·this·module's·atomicity |
| 3255 | guarantees·as·it·can·race·with·a·concurrent·call·to | 3255 | guarantees·as·it·can·race·with·a·concurrent·call·to |
| 3256 | <a·href="#write_file_info/2"><code·class="inline">write_file_info/1,2</code>·</a>.</p><p>This·option·has·no·effect·when·the·function·is·given·an·I/O·device·instead·of·a | 3256 | <a·href="#write_file_info/2"><code·class="inline">write_file_info/1,2</code>·</a>.</p><p>This·option·has·no·effect·when·the·function·is·given·an·I/O·device·instead·of·a |
| 3257 | file·name.·Use·<a·href="#open/2"><code·class="inline">open/2</code></a>·with·the·<code·class="inline">raw</code>·mode·to·obtain·a·file·descriptor·first.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>As·file·times·are·stored·in·POSIX·time·on·most·OS,·it·is·faster·to·query·file | 3257 | file·name.·Use·<a·href="#open/2"><code·class="inline">open/2</code></a>·with·the·<code·class="inline">raw</code>·mode·to·obtain·a·file·descriptor·first.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>As·file·times·are·stored·in·POSIX·time·on·most·OS,·it·is·faster·to·query·file |
| 3258 | information·with·option·<code·class="inline">posix</code>.</p></section><p>The·record·<code·class="inline">file_info</code>·contains·the·following·fields:</p><ul><li><p><strong><code·class="inline">size·=</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·Size·of·file·in·bytes.</p></li><li><p><strong><code·class="inline">type·=·device·|·directory·|·other·|·regular</code></strong>·-·The·type·of·the·file.·Can | 3258 | information·with·option·<code·class="inline">posix</code>.</p></section><p>The·record·<code·class="inline">file_info</code>·contains·the·following·fields:</p><ul><li><p><strong><code·class="inline">size·=</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·Size·of·file·in·bytes.</p></li><li><p><strong><code·class="inline">type·=·device·|·directory·|·other·|·regular</code></strong>·-·The·type·of·the·file.·Can |
| Offset 3900, 15 lines modified | Offset 3900, 15 lines modified | ||
| 3900 | ·····························Reason·::·<a·href="#t:posix/0">posix</a>()·|·badarg.</pre> | 3900 | ·····························Reason·::·<a·href="#t:posix/0">posix</a>()·|·badarg.</pre> |
| 3901 | ······</div> | 3901 | ······</div> |
| 3902 | <p>Changes·file·information.·Returns·<code·class="inline">ok</code>·if·successful,·otherwise | 3902 | <p>Changes·file·information.·Returns·<code·class="inline">ok</code>·if·successful,·otherwise |
| 3903 | <code·class="inline">{error,·Reason}</code>.</p><p><code·class="inline">FileInfo</code>·is·a·record·<code·class="inline">file_info</code>,·defined·in·the·Kernel | 3903 | <code·class="inline">{error,·Reason}</code>.</p><p><code·class="inline">FileInfo</code>·is·a·record·<code·class="inline">file_info</code>,·defined·in·the·Kernel |
| 3904 | include·file·<code·class="inline">file.hrl</code>.·Include·the·following·directive·in·the·module·from | 3904 | include·file·<code·class="inline">file.hrl</code>.·Include·the·following·directive·in·the·module·from |
| 3905 | which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 3905 | which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="0378130609-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="0378130609-1">)</span><span·class="p">.</span></code></pre><p>The·time·type·set·in·<code·class="inline">atime</code>,·<code·class="inline">mtime</code>,·and·<code·class="inline">ctime</code>·depends·on·the·time·type·set |
| 3906 | in·<code·class="inline">Opts·::·{time,·Type}</code>·as·follows:</p><ul><li><p><strong><code·class="inline">local</code></strong>·-·Interprets·the·time·set·as·local.</p></li><li><p><strong><code·class="inline">universal</code></strong>·-·Interprets·it·as·universal·time.</p></li><li><p><strong><code·class="inline">posix</code></strong>·-·Must·be·seconds·since·or·before·Unix·time·epoch,·which·is | 3906 | in·<code·class="inline">Opts·::·{time,·Type}</code>·as·follows:</p><ul><li><p><strong><code·class="inline">local</code></strong>·-·Interprets·the·time·set·as·local.</p></li><li><p><strong><code·class="inline">universal</code></strong>·-·Interprets·it·as·universal·time.</p></li><li><p><strong><code·class="inline">posix</code></strong>·-·Must·be·seconds·since·or·before·Unix·time·epoch,·which·is |
| 3907 | 1970-01-01·00:00·UTC.</p></li></ul><p>Default·is·<code·class="inline">{time,·local}</code>.</p><p>If·the·option·<code·class="inline">raw</code>·is·set,·the·file·server·is·not·called·and·only·information | 3907 | 1970-01-01·00:00·UTC.</p></li></ul><p>Default·is·<code·class="inline">{time,·local}</code>.</p><p>If·the·option·<code·class="inline">raw</code>·is·set,·the·file·server·is·not·called·and·only·information |
| 3908 | about·local·files·is·returned.</p><p>The·following·fields·are·used·from·the·record,·if·they·are·specified:</p><ul><li><p><strong><code·class="inline">atime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·The·last·time·the·file·was | 3908 | about·local·files·is·returned.</p><p>The·following·fields·are·used·from·the·record,·if·they·are·specified:</p><ul><li><p><strong><code·class="inline">atime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·The·last·time·the·file·was |
| 3909 | read.</p></li><li><p><strong><code·class="inline">mtime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·The·last·time·the·file·was | 3909 | read.</p></li><li><p><strong><code·class="inline">mtime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·The·last·time·the·file·was |
| 3910 | written.</p></li><li><p><strong><code·class="inline">ctime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·On·Unix,·any·value | 3910 | written.</p></li><li><p><strong><code·class="inline">ctime·=</code>·<a·href="#t:date_time/0"><code·class="inline">date_time/0</code></a>·<code·class="inline">|</code>·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0"><code·class="inline">non_neg_integer/0</code></a></strong>·-·On·Unix,·any·value |
| 3911 | specified·for·this·field·is·ignored·(the·"ctime"·for·the·file·is·set·to·the | 3911 | specified·for·this·field·is·ignored·(the·"ctime"·for·the·file·is·set·to·the |
| 3912 | current·time).·On·Windows,·this·field·is·the·new·creation·time·to·set·for·the | 3912 | current·time).·On·Windows,·this·field·is·the·new·creation·time·to·set·for·the |
| Offset 3942, 15 lines modified | Offset 3942, 15 lines modified | ||
| 3942 | ······<p·class="built-using"> | 3942 | ······<p·class="built-using"> |
| 3943 | ········Built·using | 3943 | ········Built·using |
| 3944 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3944 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3945 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3945 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3946 | ······</p> | 3946 | ······</p> |
| 3947 | <p>Copyright·©·1996-202 | 3947 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3948 | ····</footer> | 3948 | ····</footer> |
| 3949 | ··</div> | 3949 | ··</div> |
| 3950 | </main> | 3950 | </main> |
| 3951 | </div> | 3951 | </div> |
| 3952 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3952 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3953 | ··<script> | 3953 | ··<script> |
| 3954 | ··let·initialized·=·false; | 3954 | ··let·initialized·=·false; |
| Offset 132, 15 lines modified | Offset 132, 15 lines modified | ||
| 132 | The·implementation·assumes·that·the·OS·kernel·supports·SCTP | 132 | The·implementation·assumes·that·the·OS·kernel·supports·SCTP |
| 133 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">(RFC·2960)</a> | 133 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">(RFC·2960)</a> |
| 134 | through·the·user-level | 134 | through·the·user-level |
| 135 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions</a>.</p><p>During·development,·this·implementation·was·tested·on:</p><ul><li>Linux·Fedora·Core·5.0·(kernel·2.6.15-2054·or·later·is·needed)</li><li>Solaris·10,·11</li></ul><p>During·OTP·adaptation·it·was·tested·on:</p><ul><li>SUSE·Linux·Enterprise·Server·10·(x86_64)·kernel·2.6.16.27-0.6-smp,·with | 135 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions</a>.</p><p>During·development,·this·implementation·was·tested·on:</p><ul><li>Linux·Fedora·Core·5.0·(kernel·2.6.15-2054·or·later·is·needed)</li><li>Solaris·10,·11</li></ul><p>During·OTP·adaptation·it·was·tested·on:</p><ul><li>SUSE·Linux·Enterprise·Server·10·(x86_64)·kernel·2.6.16.27-0.6-smp,·with |
| 136 | lksctp-tools-1.0.6</li><li>Briefly·on·Solaris·10</li><li>SUSE·Linux·Enterprise·Server·10·Service·Pack·1·(x86_64)·kernel | 136 | lksctp-tools-1.0.6</li><li>Briefly·on·Solaris·10</li><li>SUSE·Linux·Enterprise·Server·10·Service·Pack·1·(x86_64)·kernel |
| 137 | 2.6.16.54-0.2.3-smp·with·lksctp-tools-1.0.7</li><li>FreeBSD·8.2</li></ul><p>This·module·was·written·for·one-to-many·style·sockets·(type·<code·class="inline">seqpacket</code>). | 137 | 2.6.16.54-0.2.3-smp·with·lksctp-tools-1.0.7</li><li>FreeBSD·8.2</li></ul><p>This·module·was·written·for·one-to-many·style·sockets·(type·<code·class="inline">seqpacket</code>). |
| 138 | With·the·addition·of·<a·href="#peeloff/2"><code·class="inline">peeloff/2</code></a>,·one-to-one·style·sockets·(type·<code·class="inline">stream</code>) | 138 | With·the·addition·of·<a·href="#peeloff/2"><code·class="inline">peeloff/2</code></a>,·one-to-one·style·sockets·(type·<code·class="inline">stream</code>) |
| 139 | were·introduced.</p><p>Record·definitions·for·this·module·can·be·found·using:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 139 | were·introduced.</p><p>Record·definitions·for·this·module·can·be·found·using:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="7452428276-1">(</span><span·class="s">"kernel/include/inet_sctp.hrl"</span><span·class="p"·data-group-id="7452428276-1">)</span><span·class="p">.</span></code></pre><p>These·record·definitions·use·the·"new"·spelling·'adaptation', |
| 140 | not·the·deprecated·'adaption',·regardless·of·which·spelling | 140 | not·the·deprecated·'adaption',·regardless·of·which·spelling |
| 141 | the·underlying·C·API·uses.</p><h2·id="module-sctp-socket-options"·class="section-heading"> | 141 | the·underlying·C·API·uses.</p><h2·id="module-sctp-socket-options"·class="section-heading"> |
| 142 | ··<a·href="#module-sctp-socket-options"·class="hover-link"> | 142 | ··<a·href="#module-sctp-socket-options"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text"><a·href=""·id="options"></a>·SCTP·Socket·Options</span> | 145 | ··<span·class="text"><a·href=""·id="options"></a>·SCTP·Socket·Options</span> |
| 146 | </h2> | 146 | </h2> |
| Offset 180, 39 lines modified | Offset 180, 39 lines modified | ||
| 180 | the·driver·buffer·(see·<code·class="inline">buffer</code>·above).</p></li><li><p><strong><code·class="inline">{recbuf, integer()}</code></strong>·-·The·size,·in·bytes,·of·the·OS·kernel·receive | 180 | the·driver·buffer·(see·<code·class="inline">buffer</code>·above).</p></li><li><p><strong><code·class="inline">{recbuf, integer()}</code></strong>·-·The·size,·in·bytes,·of·the·OS·kernel·receive |
| 181 | buffer·for·this·socket.·Sending·errors·would·occur·for·datagrams | 181 | buffer·for·this·socket.·Sending·errors·would·occur·for·datagrams |
| 182 | larger·than·<code·class="inline">val(recbuf)</code>.·Setting·this·option·also·adjusts·the·size | 182 | larger·than·<code·class="inline">val(recbuf)</code>.·Setting·this·option·also·adjusts·the·size |
| 183 | of·the·driver·buffer·(see·<code·class="inline">buffer</code>·above).</p></li></ul><h3·id="option_non_block_send"><a·href=""></a></h3><ul><li><p><strong><code·class="inline">{non_block_send, boolean()}</code></strong>·-·A·send·call·that·would·otherwise·block·(hang), | 183 | of·the·driver·buffer·(see·<code·class="inline">buffer</code>·above).</p></li></ul><h3·id="option_non_block_send"><a·href=""></a></h3><ul><li><p><strong><code·class="inline">{non_block_send, boolean()}</code></strong>·-·A·send·call·that·would·otherwise·block·(hang), |
| 184 | will·instead·immediately·return·with·e.g.·<code·class="inline">{error,·eagain}</code> | 184 | will·instead·immediately·return·with·e.g.·<code·class="inline">{error,·eagain}</code> |
| 185 | <em>if</em>·this·option·has·been·set·to·<code·class="inline">true</code>. | 185 | <em>if</em>·this·option·has·been·set·to·<code·class="inline">true</code>. |
| 186 | Defaults·to·<code·class="inline">false</code>.</p></li><li><p><strong><code·class="inline">{sctp_module, module()}</code></strong>·-·Overrides·which·callback·module·is·used. | 186 | Defaults·to·<code·class="inline">false</code>.</p></li><li><p><strong><code·class="inline">{sctp_module, module()}</code></strong>·-·Overrides·which·callback·module·is·used. |
| 187 | Defaults·to·<code·class="inline">inet_sctp</code>·for·IPv4·and·<code·class="inline">inet6_sctp</code>·for·IPv6.</p></li><li><p><strong><code·class="inline">{sctp_rtoinfo, #sctp_rtoinfo{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_rtoinfo</span><span·class="p"·data-group-id=" | 187 | Defaults·to·<code·class="inline">inet_sctp</code>·for·IPv4·and·<code·class="inline">inet6_sctp</code>·for·IPv6.</p></li><li><p><strong><code·class="inline">{sctp_rtoinfo, #sctp_rtoinfo{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_rtoinfo</span><span·class="p"·data-group-id="4922238982-1">{</span><span·class="w"> |
| 188 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id=" | 188 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="4922238982-2">(</span><span·class="p"·data-group-id="4922238982-2">)</span><span·class="p">,</span><span·class="w"> |
| 189 | ······</span><span·class="ss">initial</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 189 | ······</span><span·class="ss">initial</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4922238982-3">(</span><span·class="p"·data-group-id="4922238982-3">)</span><span·class="p">,</span><span·class="w"> |
| 190 | ······</span><span·class="ss">max</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 190 | ······</span><span·class="ss">max</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4922238982-4">(</span><span·class="p"·data-group-id="4922238982-4">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ······</span><span·class="ss">min</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 191 | ······</span><span·class="ss">min</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4922238982-5">(</span><span·class="p"·data-group-id="4922238982-5">)</span><span·class="w"> |
| 192 | </span><span·class="p"·data-group-id=" | 192 | </span><span·class="p"·data-group-id="4922238982-1">}</span></code></pre><p>Determines·retransmission·time-out·parameters,·in·milliseconds,·for·the |
| 193 | association(s)·specified·by·<code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.·See | 193 | association(s)·specified·by·<code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.·See |
| 194 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and | 194 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and |
| 195 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a> | 195 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a> |
| 196 | for·the·exact·semantics·of·the·field·values.</p></li><li><p><strong><code·class="inline">{sctp_associnfo, #sctp_assocparams{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_assocparams</span><span·class="p"·data-group-id=" | 196 | for·the·exact·semantics·of·the·field·values.</p></li><li><p><strong><code·class="inline">{sctp_associnfo, #sctp_assocparams{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_assocparams</span><span·class="p"·data-group-id="9793132948-1">{</span><span·class="w"> |
| 197 | ······</span><span·class="ss">assoc_id</span><span·class="w">·················</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id=" | 197 | ······</span><span·class="ss">assoc_id</span><span·class="w">·················</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="9793132948-2">(</span><span·class="p"·data-group-id="9793132948-2">)</span><span·class="p">,</span><span·class="w"> |
| 198 | ······</span><span·class="ss">asocmaxrxt</span><span·class="w">···············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 198 | ······</span><span·class="ss">asocmaxrxt</span><span·class="w">···············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9793132948-3">(</span><span·class="p"·data-group-id="9793132948-3">)</span><span·class="p">,</span><span·class="w"> |
| 199 | ······</span><span·class="ss">number_peer_destinations</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 199 | ······</span><span·class="ss">number_peer_destinations</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9793132948-4">(</span><span·class="p"·data-group-id="9793132948-4">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ······</span><span·class="ss">peer_rwnd</span><span·class="w">················</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 200 | ······</span><span·class="ss">peer_rwnd</span><span·class="w">················</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9793132948-5">(</span><span·class="p"·data-group-id="9793132948-5">)</span><span·class="p">,</span><span·class="w"> |
| 201 | ······</span><span·class="ss">local_rwnd</span><span·class="w">···············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 201 | ······</span><span·class="ss">local_rwnd</span><span·class="w">···············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9793132948-6">(</span><span·class="p"·data-group-id="9793132948-6">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ······</span><span·class="ss">cookie_life</span><span·class="w">··············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 202 | ······</span><span·class="ss">cookie_life</span><span·class="w">··············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9793132948-7">(</span><span·class="p"·data-group-id="9793132948-7">)</span><span·class="w"> |
| 203 | </span><span·class="p"·data-group-id=" | 203 | </span><span·class="p"·data-group-id="9793132948-1">}</span></code></pre><p>Determines·association·parameters·for·the·association(s)·specified·by |
| 204 | <code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.·See | 204 | <code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.·See |
| 205 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a> | 205 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a> |
| 206 | for·the·discussion·of·their·semantics.·Rarely·used.</p></li><li><p><strong><code·class="inline">{sctp_initmsg, #sctp_initmsg{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_initmsg</span><span·class="p"·data-group-id=" | 206 | for·the·discussion·of·their·semantics.·Rarely·used.</p></li><li><p><strong><code·class="inline">{sctp_initmsg, #sctp_initmsg{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_initmsg</span><span·class="p"·data-group-id="7849018562-1">{</span><span·class="w"> |
| 207 | ·····</span><span·class="ss">num_ostreams</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 207 | ·····</span><span·class="ss">num_ostreams</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7849018562-2">(</span><span·class="p"·data-group-id="7849018562-2">)</span><span·class="p">,</span><span·class="w"> |
| 208 | ·····</span><span·class="ss">max_instreams</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 208 | ·····</span><span·class="ss">max_instreams</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7849018562-3">(</span><span·class="p"·data-group-id="7849018562-3">)</span><span·class="p">,</span><span·class="w"> |
| 209 | ·····</span><span·class="ss">max_attempts</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 209 | ·····</span><span·class="ss">max_attempts</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7849018562-4">(</span><span·class="p"·data-group-id="7849018562-4">)</span><span·class="p">,</span><span·class="w"> |
| 210 | ·····</span><span·class="ss">max_init_timeo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 210 | ·····</span><span·class="ss">max_init_timeo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="7849018562-5">(</span><span·class="p"·data-group-id="7849018562-5">)</span><span·class="w"> |
| 211 | </span><span·class="p"·data-group-id=" | 211 | </span><span·class="p"·data-group-id="7849018562-1">}</span></code></pre><p>Determines·the·default·parameters·that·this·socket·tries·to·negotiate |
| 212 | with·its·peer·while·establishing·an·association·with·it.·Is·to·be·set·after | 212 | with·its·peer·while·establishing·an·association·with·it.·Is·to·be·set·after |
| 213 | <a·href="#open/1"><code·class="inline">open/*</code></a>·but·before·the·first·<a·href="#connect/4"><code·class="inline">connect/*</code></a>. | 213 | <a·href="#open/1"><code·class="inline">open/*</code></a>·but·before·the·first·<a·href="#connect/4"><code·class="inline">connect/*</code></a>. |
| 214 | <code·class="inline">#sctp_initmsg{}</code>·can·also·be·used·as·ancillary·data·with·the·first·call·of | 214 | <code·class="inline">#sctp_initmsg{}</code>·can·also·be·used·as·ancillary·data·with·the·first·call·of |
| 215 | <a·href="#send/3"><code·class="inline">send/*</code></a>·to·a·new·peer·(when·a·new·association·is·created).</p><ul><li><p><strong><code·class="inline">num_ostreams</code></strong>·-·Number·of·outbound·streams</p></li><li><p><strong><code·class="inline">max_instreams</code></strong>·-·Maximum·number·of·inbound·streams</p></li><li><p><strong><code·class="inline">max_attempts</code></strong>·-·Maximum·retransmissions·while·establishing·an | 215 | <a·href="#send/3"><code·class="inline">send/*</code></a>·to·a·new·peer·(when·a·new·association·is·created).</p><ul><li><p><strong><code·class="inline">num_ostreams</code></strong>·-·Number·of·outbound·streams</p></li><li><p><strong><code·class="inline">max_instreams</code></strong>·-·Maximum·number·of·inbound·streams</p></li><li><p><strong><code·class="inline">max_attempts</code></strong>·-·Maximum·retransmissions·while·establishing·an |
| 216 | association</p></li><li><p><strong><code·class="inline">max_init_timeo</code></strong>·-·Time-out,·in·milliseconds,·for·establishing·an | 216 | association</p></li><li><p><strong><code·class="inline">max_init_timeo</code></strong>·-·Time-out,·in·milliseconds,·for·establishing·an |
| 217 | association</p></li></ul></li><li><p><strong><code·class="inline">{sctp_autoclose, integer()·>=·0}</code></strong>·-·Determines·the·time,·in·seconds, | 217 | association</p></li></ul></li><li><p><strong><code·class="inline">{sctp_autoclose, integer()·>=·0}</code></strong>·-·Determines·the·time,·in·seconds, |
| 218 | after·which·an·idle·association·is·automatically·closed.·<code·class="inline">0</code>·means·that·the | 218 | after·which·an·idle·association·is·automatically·closed.·<code·class="inline">0</code>·means·that·the |
| Offset 221, 239 lines modified | Offset 221, 239 lines modified | ||
| 221 | expense·of·latency.</p></li><li><p><strong><code·class="inline">{sctp_disable_fragments,·true|false}</code></strong>·-·If·<code·class="inline">true</code>,·induces·an·error·on·an | 221 | expense·of·latency.</p></li><li><p><strong><code·class="inline">{sctp_disable_fragments,·true|false}</code></strong>·-·If·<code·class="inline">true</code>,·induces·an·error·on·an |
| 222 | attempt·to·send·a·message·larger·than·the·current·PMTU·size·(which·would | 222 | attempt·to·send·a·message·larger·than·the·current·PMTU·size·(which·would |
| 223 | require·fragmentation/reassembling).·Notice·that·message·fragmentation·does | 223 | require·fragmentation/reassembling).·Notice·that·message·fragmentation·does |
| 224 | not·affect·the·logical·atomicity·of·its·delivery;·this·option·is·provided·for | 224 | not·affect·the·logical·atomicity·of·its·delivery;·this·option·is·provided·for |
| 225 | performance·reasons·only.</p></li><li><p><strong><code·class="inline">{sctp_i_want_mapped_v4_addr, true|false}</code></strong>·-·Turns·on|off·automatic | 225 | performance·reasons·only.</p></li><li><p><strong><code·class="inline">{sctp_i_want_mapped_v4_addr, true|false}</code></strong>·-·Turns·on|off·automatic |
| 226 | mapping·of·IPv4·addresses·into·IPv6·ones·(if·the·socket·address·family·is | 226 | mapping·of·IPv4·addresses·into·IPv6·ones·(if·the·socket·address·family·is |
| 227 | <code·class="inline">AF_INET6</code>).</p></li><li><p><strong><code·class="inline">{sctp_maxseg, integer()}</code></strong>·-·Determines·the·maximum·chunk·size·if·message | 227 | <code·class="inline">AF_INET6</code>).</p></li><li><p><strong><code·class="inline">{sctp_maxseg, integer()}</code></strong>·-·Determines·the·maximum·chunk·size·if·message |
| 228 | fragmentation·is·used.·If·<code·class="inline">0</code>,·the·chunk·size·is·limited·by·the·Path·MTU·only.</p></li><li><p><strong><code·class="inline">{sctp_primary_addr, #sctp_prim{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_prim</span><span·class="p"·data-group-id=" | 228 | fragmentation·is·used.·If·<code·class="inline">0</code>,·the·chunk·size·is·limited·by·the·Path·MTU·only.</p></li><li><p><strong><code·class="inline">{sctp_primary_addr, #sctp_prim{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_prim</span><span·class="p"·data-group-id="5353030741-1">{</span><span·class="w"> |
| 229 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id=" | 229 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="5353030741-2">(</span><span·class="p"·data-group-id="5353030741-2">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ······</span><span·class="ss">addr</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 230 | ······</span><span·class="ss">addr</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5353030741-3">{</span><span·class="n">IP</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="5353030741-3">}</span><span·class="w"> |
| 231 | </span><span·class="p"·data-group-id=" | 231 | </span><span·class="p"·data-group-id="5353030741-1">}</span><span·class="w"> |
| 232 | ·</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id=" | 232 | ·</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id="5353030741-4">(</span><span·class="p"·data-group-id="5353030741-4">)</span><span·class="w"> |
| 233 | ·</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id=" | 233 | ·</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id="5353030741-5">(</span><span·class="p"·data-group-id="5353030741-5">)</span></code></pre><p>For·the·association·specified·by·<code·class="inline">assoc_id</code>,·<code·class="inline">{IP,Port}</code>·must·be·one·of·the |
| 234 | peer·addresses.·This·option·determines·that·the·specified·address·is·treated | 234 | peer·addresses.·This·option·determines·that·the·specified·address·is·treated |
| 235 | by·the·local·SCTP·stack·as·the·primary·address·of·the·peer.</p></li><li><p><strong><code·class="inline">{sctp_set_peer_primary_addr, #sctp_setpeerprim{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_setpeerprim</span><span·class="p"·data-group-id="7 | 235 | by·the·local·SCTP·stack·as·the·primary·address·of·the·peer.</p></li><li><p><strong><code·class="inline">{sctp_set_peer_primary_addr, #sctp_setpeerprim{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_setpeerprim</span><span·class="p"·data-group-id="6377539546-1">{</span><span·class="w"> |
| 236 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="7 | 236 | ······</span><span·class="ss">assoc_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="6377539546-2">(</span><span·class="p"·data-group-id="6377539546-2">)</span><span·class="p">,</span><span·class="w"> |
| 237 | ······</span><span·class="ss">addr</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 237 | ······</span><span·class="ss">addr</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6377539546-3">{</span><span·class="n">IP</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="6377539546-3">}</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id="7 | 238 | </span><span·class="p"·data-group-id="6377539546-1">}</span><span·class="w"> |
| 239 | ·</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id="7 | 239 | ·</span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id="6377539546-4">(</span><span·class="p"·data-group-id="6377539546-4">)</span><span·class="w"> |
| 240 | ·</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id="7 | 240 | ·</span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id="6377539546-5">(</span><span·class="p"·data-group-id="6377539546-5">)</span></code></pre><p>When·set,·informs·the·peer·to·use·<code·class="inline">{IP, Port}</code>·as·the·primary·address·of·the |
| 241 | local·endpoint·for·the·association·specified·by·<code·class="inline">assoc_id</code>.</p></li><li><p><strong><code·class="inline">{sctp_adaptation_layer, #sctp_setadaptation{}}</code></strong>·<a·href=""·id="option-sctp_adaptation_layer"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_setadaptation</span><span·class="p"·data-group-id=" | 241 | local·endpoint·for·the·association·specified·by·<code·class="inline">assoc_id</code>.</p></li><li><p><strong><code·class="inline">{sctp_adaptation_layer, #sctp_setadaptation{}}</code></strong>·<a·href=""·id="option-sctp_adaptation_layer"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_setadaptation</span><span·class="p"·data-group-id="8994823226-1">{</span><span·class="w"> |
| 242 | ······</span><span·class="ss">adaptation_ind</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 242 | ······</span><span·class="ss">adaptation_ind</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="8994823226-2">(</span><span·class="p"·data-group-id="8994823226-2">)</span><span·class="w"> |
| 243 | </span><span·class="p"·data-group-id=" | 243 | </span><span·class="p"·data-group-id="8994823226-1">}</span></code></pre><p>When·set,·requests·that·the·local·endpoint·uses·the·value·specified·by |
| 244 | <code·class="inline">adaptation_ind</code>·as·the·Adaptation·Indication·parameter·for·establishing | 244 | <code·class="inline">adaptation_ind</code>·as·the·Adaptation·Indication·parameter·for·establishing |
| 245 | new·associations.·For·details,·see | 245 | new·associations.·For·details,·see |
| 246 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and | 246 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and |
| 247 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a>.</p></li><li><p><strong><code·class="inline">{sctp_peer_addr_params, #sctp_paddrparams{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_paddrparams</span><span·class="p"·data-group-id=" | 247 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a>.</p></li><li><p><strong><code·class="inline">{sctp_peer_addr_params, #sctp_paddrparams{}}</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_paddrparams</span><span·class="p"·data-group-id="3345173116-1">{</span><span·class="w"> |
| 248 | ······</span><span·class="ss">assoc_id</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id=" | 248 | ······</span><span·class="ss">assoc_id</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="3345173116-2">(</span><span·class="p"·data-group-id="3345173116-2">)</span><span·class="p">,</span><span·class="w"> |
| 249 | ······</span><span·class="ss">address</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 249 | ······</span><span·class="ss">address</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3345173116-3">{</span><span·class="n">IP</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="3345173116-3">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ······</span><span·class="ss">hbinterval</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 250 | ······</span><span·class="ss">hbinterval</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3345173116-4">(</span><span·class="p"·data-group-id="3345173116-4">)</span><span·class="p">,</span><span·class="w"> |
| 251 | ······</span><span·class="ss">pathmaxrxt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 251 | ······</span><span·class="ss">pathmaxrxt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3345173116-5">(</span><span·class="p"·data-group-id="3345173116-5">)</span><span·class="p">,</span><span·class="w"> |
| 252 | ······</span><span·class="ss">pathmtu</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 252 | ······</span><span·class="ss">pathmtu</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3345173116-6">(</span><span·class="p"·data-group-id="3345173116-6">)</span><span·class="p">,</span><span·class="w"> |
| 253 | ······</span><span·class="ss">sackdelay</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 253 | ······</span><span·class="ss">sackdelay</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3345173116-7">(</span><span·class="p"·data-group-id="3345173116-7">)</span><span·class="p">,</span><span·class="w"> |
| 254 | ······</span><span·class="ss">flags</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list</span><span·class="p"·data-group-id=" | 254 | ······</span><span·class="ss">flags</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list</span><span·class="p"·data-group-id="3345173116-8">(</span><span·class="p"·data-group-id="3345173116-8">)</span><span·class="w"> |
| 255 | </span><span·class="p"·data-group-id=" | 255 | </span><span·class="p"·data-group-id="3345173116-1">}</span><span·class="w"> |
| 256 | </span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id=" | 256 | </span><span·class="n">IP</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">ip_address</span><span·class="p"·data-group-id="3345173116-9">(</span><span·class="p"·data-group-id="3345173116-9">)</span><span·class="w"> |
| 257 | </span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id=" | 257 | </span><span·class="n">Port</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">port_number</span><span·class="p"·data-group-id="3345173116-10">(</span><span·class="p"·data-group-id="3345173116-10">)</span></code></pre><p>Determines·various·per-address·parameters·for·the·association·specified·by |
| 258 | <code·class="inline">assoc_id</code>·and·the·peer·address·<code·class="inline">address</code>·(the·SCTP·protocol·supports | 258 | <code·class="inline">assoc_id</code>·and·the·peer·address·<code·class="inline">address</code>·(the·SCTP·protocol·supports |
| 259 | multi-homing,·so·more·than·one·address·can·correspond·to·a·specified | 259 | multi-homing,·so·more·than·one·address·can·correspond·to·a·specified |
| 260 | association).</p><ul><li><p><strong><code·class="inline">hbinterval</code></strong>·-·Heartbeat·interval,·in·milliseconds</p></li><li><p><strong><code·class="inline">pathmaxrxt</code></strong>·-·Maximum·number·of·retransmissions·before·this·address·is | 260 | association).</p><ul><li><p><strong><code·class="inline">hbinterval</code></strong>·-·Heartbeat·interval,·in·milliseconds</p></li><li><p><strong><code·class="inline">pathmaxrxt</code></strong>·-·Maximum·number·of·retransmissions·before·this·address·is |
| 261 | considered·unreachable·(and·an·alternative·address·is·selected)</p></li><li><p><strong><code·class="inline">pathmtu</code></strong>·-·Fixed·Path·MTU,·if·automatic·discovery·is·disabled·(see | 261 | considered·unreachable·(and·an·alternative·address·is·selected)</p></li><li><p><strong><code·class="inline">pathmtu</code></strong>·-·Fixed·Path·MTU,·if·automatic·discovery·is·disabled·(see |
| 262 | <code·class="inline">flags</code>·below)</p></li><li><p><strong><code·class="inline">sackdelay</code></strong>·-·Delay,·in·milliseconds,·for·SAC·messages·(if·the·delay·is | 262 | <code·class="inline">flags</code>·below)</p></li><li><p><strong><code·class="inline">sackdelay</code></strong>·-·Delay,·in·milliseconds,·for·SAC·messages·(if·the·delay·is |
| 263 | enabled,·see·<code·class="inline">flags</code>·below)</p></li><li><p><strong><code·class="inline">flags</code></strong>·-·The·following·flags·are·available:</p><ul><li><p><strong><code·class="inline">hb_enable</code></strong>·-·Enables·heartbeat</p></li><li><p><strong><code·class="inline">hb_disable</code></strong>·-·Disables·heartbeat</p></li><li><p><strong><code·class="inline">hb_demand</code></strong>·-·Initiates·heartbeat·immediately</p></li><li><p><strong><code·class="inline">pmtud_enable</code></strong>·-·Enables·automatic·Path·MTU·discovery</p></li><li><p><strong><code·class="inline">pmtud_disable</code></strong>·-·Disables·automatic·Path·MTU·discovery</p></li><li><p><strong><code·class="inline">sackdelay_enable</code></strong>·-·Enables·SAC·delay</p></li><li><p><strong><code·class="inline">sackdelay_disable</code></strong>·-·Disables·SAC·delay</p></li></ul></li></ul></li><li><p><strong><code·class="inline">{sctp_default_send_param, #sctp_sndrcvinfo{}}</code></strong></p><p><a·href=""·id="record-sctp_sndrcvinfo"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_sndrcvinfo</span><span·class="p"·data-group-id=" | 263 | enabled,·see·<code·class="inline">flags</code>·below)</p></li><li><p><strong><code·class="inline">flags</code></strong>·-·The·following·flags·are·available:</p><ul><li><p><strong><code·class="inline">hb_enable</code></strong>·-·Enables·heartbeat</p></li><li><p><strong><code·class="inline">hb_disable</code></strong>·-·Disables·heartbeat</p></li><li><p><strong><code·class="inline">hb_demand</code></strong>·-·Initiates·heartbeat·immediately</p></li><li><p><strong><code·class="inline">pmtud_enable</code></strong>·-·Enables·automatic·Path·MTU·discovery</p></li><li><p><strong><code·class="inline">pmtud_disable</code></strong>·-·Disables·automatic·Path·MTU·discovery</p></li><li><p><strong><code·class="inline">sackdelay_enable</code></strong>·-·Enables·SAC·delay</p></li><li><p><strong><code·class="inline">sackdelay_disable</code></strong>·-·Disables·SAC·delay</p></li></ul></li></ul></li><li><p><strong><code·class="inline">{sctp_default_send_param, #sctp_sndrcvinfo{}}</code></strong></p><p><a·href=""·id="record-sctp_sndrcvinfo"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_sndrcvinfo</span><span·class="p"·data-group-id="3522987928-1">{</span><span·class="w"> |
| 264 | ······</span><span·class="ss">stream</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 264 | ······</span><span·class="ss">stream</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-2">(</span><span·class="p"·data-group-id="3522987928-2">)</span><span·class="p">,</span><span·class="w"> |
| 265 | ······</span><span·class="ss">ssn</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 265 | ······</span><span·class="ss">ssn</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-3">(</span><span·class="p"·data-group-id="3522987928-3">)</span><span·class="p">,</span><span·class="w"> |
| 266 | ······</span><span·class="ss">flags</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list</span><span·class="p"·data-group-id=" | 266 | ······</span><span·class="ss">flags</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">list</span><span·class="p"·data-group-id="3522987928-4">(</span><span·class="p"·data-group-id="3522987928-4">)</span><span·class="p">,</span><span·class="w"> |
| 267 | ······</span><span·class="ss">ppid</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 267 | ······</span><span·class="ss">ppid</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-5">(</span><span·class="p"·data-group-id="3522987928-5">)</span><span·class="p">,</span><span·class="w"> |
| 268 | ······</span><span·class="ss">context</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 268 | ······</span><span·class="ss">context</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-6">(</span><span·class="p"·data-group-id="3522987928-6">)</span><span·class="p">,</span><span·class="w"> |
| 269 | ······</span><span·class="ss">timetolive</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 269 | ······</span><span·class="ss">timetolive</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-7">(</span><span·class="p"·data-group-id="3522987928-7">)</span><span·class="p">,</span><span·class="w"> |
| 270 | ······</span><span·class="ss">tsn</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 270 | ······</span><span·class="ss">tsn</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-8">(</span><span·class="p"·data-group-id="3522987928-8">)</span><span·class="p">,</span><span·class="w"> |
| 271 | ······</span><span·class="ss">cumtsn</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 271 | ······</span><span·class="ss">cumtsn</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="3522987928-9">(</span><span·class="p"·data-group-id="3522987928-9">)</span><span·class="p">,</span><span·class="w"> |
| 272 | ······</span><span·class="ss">assoc_id</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id=" | 272 | ······</span><span·class="ss">assoc_id</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">assoc_id</span><span·class="p"·data-group-id="3522987928-10">(</span><span·class="p"·data-group-id="3522987928-10">)</span><span·class="w"> |
| 273 | </span><span·class="p"·data-group-id=" | 273 | </span><span·class="p"·data-group-id="3522987928-1">}</span></code></pre><p><code·class="inline">#sctp_sndrcvinfo{}</code>·is·used·both·in·this·socket·option,·and·as |
| 274 | ancillary·data·while·sending·or·receiving·SCTP·messages.·When·set | 274 | ancillary·data·while·sending·or·receiving·SCTP·messages.·When·set |
| 275 | as·an·option,·it·provides·default·values·for·subsequent | 275 | as·an·option,·it·provides·default·values·for·subsequent |
| 276 | <a·href="#send/3"><code·class="inline">send</code></a>·calls·on·the·association·specified·by·<code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.</p><p>The·following·fields·typically·must·be·specified·by·the·sender:</p><ul><li><p><strong><code·class="inline">sinfo_stream</code></strong>·-·Stream·number·(0-base)·within·the·association·to·send | 276 | <a·href="#send/3"><code·class="inline">send</code></a>·calls·on·the·association·specified·by·<code·class="inline">assoc_id</code>.</p><p><code·class="inline">assoc_id = 0</code>·(default)·indicates·the·whole·endpoint.</p><p>The·following·fields·typically·must·be·specified·by·the·sender:</p><ul><li><p><strong><code·class="inline">sinfo_stream</code></strong>·-·Stream·number·(0-base)·within·the·association·to·send |
| 277 | the·messages·through;</p></li><li><p><strong><code·class="inline">sinfo_flags</code></strong>·-·The·following·flags·are·recognised:</p><ul><li><p><strong><code·class="inline">unordered</code></strong>·-·The·message·is·to·be·sent·unordered</p></li><li><p><strong><code·class="inline">addr_over</code></strong>·-·The·address·specified·in·<a·href="#send/3"><code·class="inline">send</code></a>·overwrites | 277 | the·messages·through;</p></li><li><p><strong><code·class="inline">sinfo_flags</code></strong>·-·The·following·flags·are·recognised:</p><ul><li><p><strong><code·class="inline">unordered</code></strong>·-·The·message·is·to·be·sent·unordered</p></li><li><p><strong><code·class="inline">addr_over</code></strong>·-·The·address·specified·in·<a·href="#send/3"><code·class="inline">send</code></a>·overwrites |
| 278 | the·primary·peer·address</p></li><li><p><strong><code·class="inline">abort</code></strong>·-·Aborts·the·current·association·without·flushing·any·unsent | 278 | the·primary·peer·address</p></li><li><p><strong><code·class="inline">abort</code></strong>·-·Aborts·the·current·association·without·flushing·any·unsent |
| 279 | data</p></li><li><p><strong><code·class="inline">eof</code></strong>·-·Gracefully·shuts·down·the·current·association,·with·flushing | 279 | data</p></li><li><p><strong><code·class="inline">eof</code></strong>·-·Gracefully·shuts·down·the·current·association,·with·flushing |
| 280 | of·unsent·data</p></li></ul><p>Other·fields·are·rarely·used.·For·complete·information,·see | 280 | of·unsent·data</p></li></ul><p>Other·fields·are·rarely·used.·For·complete·information,·see |
| 281 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and | 281 | <a·href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC·2960</a>·and |
| 282 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a>.</p></li></ul></li><li><p><strong><code·class="inline">{sctp_events, #sctp_event_subscribe{}}</code></strong>·<a·href=""·id="option-sctp_events"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_event_subscribe</span><span·class="p"·data-group-id=" | 282 | <a·href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets·API·Extensions·for·SCTP</a>.</p></li></ul></li><li><p><strong><code·class="inline">{sctp_events, #sctp_event_subscribe{}}</code></strong>·<a·href=""·id="option-sctp_events"></a></p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">sctp_event_subscribe</span><span·class="p"·data-group-id="9248013101-1">{</span><span·class="w"> |
| 283 | ········</span><span·class="ss">data_io_event</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 283 | ········</span><span·class="ss">data_io_event</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 284 | ········</span><span·class="ss">association_event</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 284 | ········</span><span·class="ss">association_event</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 285 | ········</span><span·class="ss">address_event</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 285 | ········</span><span·class="ss">address_event</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 286 | ········</span><span·class="ss">send_failure_event</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 286 | ········</span><span·class="ss">send_failure_event</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 287 | ········</span><span·class="ss">peer_error_event</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 287 | ········</span><span·class="ss">peer_error_event</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 288 | ········</span><span·class="ss">shutdown_event</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 288 | ········</span><span·class="ss">shutdown_event</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 289 | ········</span><span·class="ss">partial_delivery_event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> | 289 | ········</span><span·class="ss">partial_delivery_event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w"> |
| 290 | ········</span><span·class="ss">adaptation_layer_event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> | 290 | ········</span><span·class="ss">adaptation_layer_event</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> |
| 291 | </span><span·class="p"·data-group-id=" | 291 | </span><span·class="p"·data-group-id="9248013101-1">}</span></code></pre><p>This·option·determines·which·<a·href="#sctp-events">SCTP Events</a>·that·are·to·be |
| Max diff block lines reached; 126915/173477 bytes (73.16%) of diff not shown. | |||
| Offset 126, 35 lines modified | Offset 126, 35 lines modified | ||
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | ····<section·id="moduledoc"> | 127 | ····<section·id="moduledoc"> |
| 128 | <p>Interface·to·TCP/IP·sockets.</p><p>This·module·provides·functions·for·communicating·over·TCP/IP | 128 | <p>Interface·to·TCP/IP·sockets.</p><p>This·module·provides·functions·for·communicating·over·TCP/IP |
| 129 | protocol·sockets.</p><p>The·following·code·fragment·is·a·simple·example·of·a·client·connecting·to·a | 129 | protocol·sockets.</p><p>The·following·code·fragment·is·a·simple·example·of·a·client·connecting·to·a |
| 130 | server·at·port·5678,·transferring·a·binary,·and·closing·the·connection:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id=" | 130 | server·at·port·5678,·transferring·a·binary,·and·closing·the·connection:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id="5964746362-1">(</span><span·class="p"·data-group-id="5964746362-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 131 | ····</span><span·class="n">SomeHostInNet</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"localhost"</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·to·make·it·runnable·on·one·machine</span><span·class="w"> | 131 | ····</span><span·class="n">SomeHostInNet</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"localhost"</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·to·make·it·runnable·on·one·machine</span><span·class="w"> |
| 132 | ····</span><span·class="p"·data-group-id=" | 132 | ····</span><span·class="p"·data-group-id="5964746362-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sock</span><span·class="p"·data-group-id="5964746362-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·119,·SHA:·7598c4b3524ae4e27b9018082963dcfc1e3d1be75c003f3c4138a87d6891bd2e·...·]-3">(</span><span·class="n">SomeHostInNet</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5678</span><span·class="p">,</span><span·class="w"> |
| 133 | ·································</span><span·class="p"·data-group-id=" | 133 | ·································</span><span·class="p"·data-group-id="5964746362-4">[</span><span·class="ss">binary</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5964746362-5">{</span><span·class="ss">packet</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span>[·...·truncated·by·diffoscope;·len:·147,·SHA:·ba83cd3a27a373b27d53ebce114ff60bc1444216985abcc19f7ed5eefef8ec5e·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 134 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 134 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="5964746362-6">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Some·Data"</span><span·class="p"·data-group-id="5964746362-6">)</span><span·class="p">,</span><span·class="w"> |
| 135 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 135 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="5964746362-7">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="5964746362-7">)</span><span·class="p">.</span></code></pre><p>At·the·other·end,·a·server·is·listening·on·port·5678,·accepts·the·connection, |
| 136 | and·receives·the·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">server</span><span·class="p"·data-group-id=" | 136 | and·receives·the·binary:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">server</span><span·class="p"·data-group-id="3852645778-1">(</span><span·class="p"·data-group-id="3852645778-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 137 | ····</span><span·class="p"·data-group-id=" | 137 | ····</span><span·class="p"·data-group-id="3852645778-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">LSock</span><span·class="p"·data-group-id="3852645778-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·535,·SHA:·32a39edc5bba7d2d7fac7d610ea6f4d8f38b893a66d403ca70658ff65c70f269·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 138 | ········································</span><span·class="p"·data-group-id=" | 138 | ········································</span><span·class="p"·data-group-id="3852645778-6">{</span><span·class="ss">active</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="3852645778-6">}</span><span·class="p"·data-group-id="3852645778-4">]</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·17d931504b6a2f16da61b3ff6aa943a3626451ea57e9c4f8735da27ba15bb723·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 139 | ····</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="p"·data-group-id="3852645778-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sock</span><span·class="p"·data-group-id="3852645778-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·199,·SHA:·a3334c669b263f531965d4fedf6e006d966c04107c2ed14889ebaf312d122cb7·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 140 | ····</span><span·class="p"·data-group-id=" | 140 | ····</span><span·class="p"·data-group-id="3852645778-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p"·data-group-id="3852645778-9">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·300,·SHA:·41758452414bd59cb8d3b8fe75456f8cab3dc33cebafd3a3052ac59fcbc7c791·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 141 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="3852645778-12">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="3852645778-12">)</span><span·class="p">,</span><span·class="w"> |
| 142 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 142 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="3852645778-13">(</span><span·class="n">LSock</span><span·class="p"·data-group-id="3852645778-13">)</span><span·class="p">,</span><span·class="w"> |
| 143 | ····</span><span·class="n">Bin</span><span·class="p">.</span><span·class="w"> | 143 | ····</span><span·class="n">Bin</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="nf">do_recv</span><span·class="p"·data-group-id=" | 144 | </span><span·class="nf">do_recv</span><span·class="p"·data-group-id="3852645778-14">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bs</span><span·class="p"·data-group-id="3852645778-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 145 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 145 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="3852645778-15">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="3852645778-15">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 146 | ········</span><span·class="p"·data-group-id=" | 146 | ········</span><span·class="p"·data-group-id="3852645778-16">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="p"·data-group-id="3852645778-16">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 147 | ············</span><span·class="nf">do_recv</span><span·class="p"·data-group-id=" | 147 | ············</span><span·class="nf">do_recv</span><span·class="p"·data-group-id="3852645778-17">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3852645778-18">[</span><span·class="n">Bs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·c[·...·truncated·by·diffoscope;·len:·88,·SHA:·d7424e6cab9b4958514ec7fafaf177915f0d95b8060b9edfc74a471a4f6a2e19·...·]-17">)</span><span·class="p">;</span><span·class="w"> |
| 148 | ········</span><span·class="p"·data-group-id=" | 148 | ········</span><span·class="p"·data-group-id="3852645778-19">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">closed</span><span·class="p"·data-group-id="3852645778-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ············</span><span·class="p"·data-group-id=" | 149 | ············</span><span·class="p"·data-group-id="3852645778-20">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id="3852645778-21">(</span><span·class="n">Bs</span><span·class="p"·data-group-id="3852645778-[·...·truncated·by·diffoscope;·len:·53,·SHA:·55eada903203937b391f96f5e73e8e121ae0283b7d1e6681db00da4101eda853·...·]-20">}</span><span·class="w"> |
| 150 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>For·more·examples,·see·section·<a·href="#module-examples">Examples</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Functions·that·create·sockets·can·take·an·optional·option; | 150 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>For·more·examples,·see·section·<a·href="#module-examples">Examples</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Functions·that·create·sockets·can·take·an·optional·option; |
| 151 | <code·class="inline">{inet_backend, Backend}</code>·that,·if·specified,·has·to·be·the·first·option.·This | 151 | <code·class="inline">{inet_backend, Backend}</code>·that,·if·specified,·has·to·be·the·first·option.·This |
| 152 | selects·the·implementation·backend·towards·the·platform's·socket·API.</p><p>This·is·a·<em>temporary</em>·option·that·will·be·ignored·in·a·future·release.</p><p>The·default·is·<code·class="inline">Backend = inet</code>·that·selects·the·traditional·<code·class="inline">inet_drv.c</code> | 152 | selects·the·implementation·backend·towards·the·platform's·socket·API.</p><p>This·is·a·<em>temporary</em>·option·that·will·be·ignored·in·a·future·release.</p><p>The·default·is·<code·class="inline">Backend = inet</code>·that·selects·the·traditional·<code·class="inline">inet_drv.c</code> |
| 153 | driver.·The·other·choice·is·<code·class="inline">Backend = socket</code>·that·selects·the·new·<a·href="socket.html"><code·class="inline">socket</code></a> | 153 | driver.·The·other·choice·is·<code·class="inline">Backend = socket</code>·that·selects·the·new·<a·href="socket.html"><code·class="inline">socket</code></a> |
| 154 | module·and·its·NIF·implementation.</p><p>The·system·default·can·be·changed·when·the·node·is·started·with·the | 154 | module·and·its·NIF·implementation.</p><p>The·system·default·can·be·changed·when·the·node·is·started·with·the |
| 155 | application·<code·class="inline">kernel</code>'s·configuration·variable·<code·class="inline">inet_backend</code>.</p><p>For·<code·class="inline">gen_tcp</code>·with·<code·class="inline">inet_backend·=·socket</code>·we·have·tried·to·be·as·"compatible" | 155 | application·<code·class="inline">kernel</code>'s·configuration·variable·<code·class="inline">inet_backend</code>.</p><p>For·<code·class="inline">gen_tcp</code>·with·<code·class="inline">inet_backend·=·socket</code>·we·have·tried·to·be·as·"compatible" |
| 156 | as·possible·which·has·sometimes·been·impossible.·Here·is·a·list·of·cases·when | 156 | as·possible·which·has·sometimes·been·impossible.·Here·is·a·list·of·cases·when |
| Offset 185, 91 lines modified | Offset 185, 91 lines modified | ||
| 185 | ··<span·class="text">Examples</span> | 185 | ··<span·class="text">Examples</span> |
| 186 | </h2> | 186 | </h2> |
| 187 | <p>The·following·example·illustrates·use·of·option·<code·class="inline">{active,once}</code>·and·multiple | 187 | <p>The·following·example·illustrates·use·of·option·<code·class="inline">{active,once}</code>·and·multiple |
| 188 | accepts·by·implementing·a·server·as·a·number·of·worker·processes·doing·accept·on | 188 | accepts·by·implementing·a·server·as·a·number·of·worker·processes·doing·accept·on |
| 189 | a·single·listening·socket.·Function·<code·class="inline">start/2</code>·takes·the·number·of·worker | 189 | a·single·listening·socket.·Function·<code·class="inline">start/2</code>·takes·the·number·of·worker |
| 190 | processes·and·the·port·number·on·which·to·listen·for·incoming·connections.·If | 190 | processes·and·the·port·number·on·which·to·listen·for·incoming·connections.·If |
| 191 | <code·class="inline">LPort</code>·is·specified·as·<code·class="inline">0</code>,·an·ephemeral·port·number·is·used,·which·is·why·the | 191 | <code·class="inline">LPort</code>·is·specified·as·<code·class="inline">0</code>,·an·ephemeral·port·number·is·used,·which·is·why·the |
| 192 | start·function·returns·the·actual·port·number·allocated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id=" | 192 | start·function·returns·the·actual·port·number·allocated:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id="1623029363-1">(</span><span·class="n">Num</span><span·class="p">,</span><span·class="n">LPort</span><span·class="p"·data-group-id="1623029363-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">listen</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">listen</span><span·class="p"·data-group-id="1623029363-2">(</span><span·class="n">LPort</span><span·class="p">,</span><span·class="p"·data-group-id="1623029363-3">[</span><span·class="p"·data-group-id="1623029363-4">{</span><span·class="ss">active</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·387,·SHA:·71d25d5539f19eae9d5458a5089e5d15d987063c3f026dd335a46fa8a1d77cc1·...·]-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 194 | ········</span><span·class="p"·data-group-id=" | 194 | ········</span><span·class="p"·data-group-id="1623029363-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ListenSock</span><span·class="p"·data-group-id="1623029363-6">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ············</span><span·class="nf">start_servers</span><span·class="p"·data-group-id=" | 195 | ············</span><span·class="nf">start_servers</span><span·class="p"·data-group-id="1623029363-7">(</span><span·class="n">Num</span><span·class="p">,</span><span·class="n">ListenSock</span><span·class="p"·data-group-id="1623029363-7">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ············</span><span·class="p"·data-group-id=" | 196 | ············</span><span·class="p"·data-group-id="1623029363-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="1623029363-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·199,·SHA:·0a1f78b3ee514d792e7daeca912aa72e16379acdb1e92342498a43cc8bc94f78·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 197 | ············</span><span·class="n">Port</span><span·class="p">;</span><span·class="w"> | 197 | ············</span><span·class="n">Port</span><span·class="p">;</span><span·class="w"> |
| 198 | ········</span><span·class="p"·data-group-id=" | 198 | ········</span><span·class="p"·data-group-id="1623029363-10">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="n">Reason</span><span·class="p"·data-group-id="1623029363-10">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ············</span><span·class="p"·data-group-id=" | 199 | ············</span><span·class="p"·data-group-id="1623029363-11">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="n">Reason</span><span·class="p"·data-group-id="1623029363-11">}</span><span·class="w"> |
| 200 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 200 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="nf">start_servers</span><span·class="p"·data-group-id=" | 201 | </span><span·class="nf">start_servers</span><span·class="p"·data-group-id="1623029363-12">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="1623029363-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 202 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 203 | </span><span·class="nf">start_servers</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nf">start_servers</span><span·class="p"·data-group-id="1623029363-13">(</span><span·class="n">Num</span><span·class="p">,</span><span·class="n">LS</span><span·class="p"·data-group-id="1623029363-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 204 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="1623029363-14">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="ss">server</span><span·class="p">,</span><span·class="p"·data-group-id="1623029363-15">[</span><span·class="n">LS</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·72,·SHA:·a70fe14b36a3fc5dbb15d174cbfa3878ae65b1917b4ef0a7738705526f911516·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 205 | ····</span><span·class="nf">start_servers</span><span·class="p"·data-group-id=" | 205 | ····</span><span·class="nf">start_servers</span><span·class="p"·data-group-id="1623029363-16">(</span><span·class="n">Num</span><span·class="o">-</span><span·class="mi">1</span><span·class="p">,</span><span·class="n">LS</span><span·class="p"·data-group-id="1623029363-16">)</span><span·class="p">.</span><span·class="w"> |
| 206 | </span><span·class="nf">server</span><span·class="p"·data-group-id=" | 206 | </span><span·class="nf">server</span><span·class="p"·data-group-id="1623029363-17">(</span><span·class="n">LS</span><span·class="p"·data-group-id="1623029363-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">accept</span><span·class="p"·data-group-id=" | 207 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">accept</span><span·class="p"·data-group-id="1623029363-18">(</span><span·class="n">LS</span><span·class="p"·data-group-id="1623029363-18">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 208 | ········</span><span·class="p"·data-group-id=" | 208 | ········</span><span·class="p"·data-group-id="1623029363-19">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">S</span><span·class="p"·data-group-id="1623029363-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 209 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="1623029363-20">(</span><span·class="n">S</span><span·class="p"·data-group-id="1623029363-20">)</span><span·class="p">,</span><span·class="w"> |
| 210 | ············</span><span·class="nf">server</span><span·class="p"·data-group-id=" | 210 | ············</span><span·class="nf">server</span><span·class="p"·data-group-id="1623029363-21">(</span><span·class="n">LS</span><span·class="p"·data-group-id="1623029363-21">)</span><span·class="p">;</span><span·class="w"> |
| 211 | ········</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 211 | ········</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 212 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 212 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1623029363-22">(</span><span·class="s">"accept·returned·</span><span·class="si">~w</span><span·class="s">·-·goodbye!</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="1623029363-23">[</[·...·truncated·by·diffoscope;·len:·128,·SHA:·96a100e4ef2d6aea8907e2629217e39cfaa6ebae8349cb235a159e3b61100d43·...·]-22">)</span><span·class="p">,</span><span·class="w"> |
| 213 | ············</span><span·class="ss">ok</span><span·class="w"> | 213 | ············</span><span·class="ss">ok</span><span·class="w"> |
| 214 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 214 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 215 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 215 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="1623029363-24">(</span><span·class="n">S</span><span·class="p"·data-group-id="1623029363-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | ····</span><span·class="nc">inet</span><span·class="p">:</span><span·class="nf">setopts</span><span·class="p"·data-group-id=" | 216 | ····</span><span·class="nc">inet</span><span·class="p">:</span><span·class="nf">setopts</span><span·class="p"·data-group-id="1623029363-25">(</span><span·class="n">S</span><span·class="p">,</span><span·class="p"·data-group-id="1623029363-26">[</span><span·class="p"·data-group-id="1623029363-27">{</span><span·class="ss">active</span><span·class="p">,</span><span·class="ss">once</[·...·truncated·by·diffoscope;·len:·154,·SHA:·4ae998d114e74bb4560dbd91249e43d589c8d9f49e7e1f7e09d05d95dd315bf5·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 217 | ····</span><span·class="k">receive</span><span·class="w"> | 217 | ····</span><span·class="k">receive</span><span·class="w"> |
| 218 | ········</span><span·class="p"·data-group-id=" | 218 | ········</span><span·class="p"·data-group-id="1623029363-28">{</span><span·class="ss">tcp</span><span·class="p">,</span><span·class="n">S</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="1623029363-28">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 219 | ············</span><span·class="n">Answer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">process</span><span·class="p"·data-group-id=" | 219 | ············</span><span·class="n">Answer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">process</span><span·class="p"·data-group-id="1623029363-29">(</span><span·class="n">Data</span><span·class="p"·data-group-id="1623029363-29">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·Not·implemented·in·this·example</span><span·class="w"> |
| 220 | ············</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 220 | ············</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="1623029363-30">(</span><span·class="n">S</span><span·class="p">,</span><span·class="n">Answer</span><span·class="p"·data-group-id="1623029363-30">)</span><span·class="p">,</span><span·class="w"> |
| 221 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 221 | ············</span><span·class="nf">loop</span><span·class="p"·data-group-id="1623029363-31">(</span><span·class="n">S</span><span·class="p"·data-group-id="1623029363-31">)</span><span·class="p">;</span><span·class="w"> |
| 222 | ········</span><span·class="p"·data-group-id=" | 222 | ········</span><span·class="p"·data-group-id="1623029363-32">{</span><span·class="ss">tcp_closed</span><span·class="p">,</span><span·class="n">S</span><span·class="p"·data-group-id="1623029363-32">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 223 | ············</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1623029363-33">(</span><span·class="s">"Socket·</span><span·class="si">~w</span><span·class="s">·closed·[</span><span·class="si">~w</span><span·class="s">]</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·323,·SHA:·a6c1d8120a3e1a5fbbe75fca2426a94ce1c1ef0c608f2682527d6460ac61ded4·...·]-33">)</span><span·class="p">,</span><span·class="w"> |
| 224 | ············</span><span·class="ss">ok</span><span·class="w"> | 224 | ············</span><span·class="ss">ok</span><span·class="w"> |
| 225 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Example·of·a·simple·client:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Example·of·a·simple·client:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id="2349040779-1">(</span><span·class="n">PortNo</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="2349040779-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 226 | ····</span><span·class="p"·data-group-id=" | 226 | ····</span><span·class="p"·data-group-id="2349040779-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Sock</span><span·class="p"·data-group-id="2349040779-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><[·...·truncated·by·diffoscope;·len:·458,·SHA:·c96c124071d226a7edcffe9b1503270235c9b32ea1b29fa4122953386f1bbeac·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 227 | ····················································</span><span·class="p"·data-group-id=" | 227 | ····················································</span><span·class="p"·data-group-id="2349040779-6">{</span><span·class="ss">packet</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="2349040779-6">}</span><span·class="p"·data-group-id="2349040779-4">]</span><span·class="p"·data-group-id="2349040779-3">)</span><span·class="p">,</span><span·class="w"> |
| 228 | ····</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 228 | ····</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="2349040779-7">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="2349040779-7">)</span><span·class="p">,</span><span·class="w"> |
| 229 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 229 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="2349040779-8">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="2349040779-8">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ····</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 230 | ····</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="2349040779-9">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="2349040779-9">)</span><span·class="p">,</span><span·class="w"> |
| 231 | ····</span><span·class="n">A</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">send</code>·call·does·not·accept·a·time-out·option·because·time-outs·on·send·is | 231 | ····</span><span·class="n">A</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">send</code>·call·does·not·accept·a·time-out·option·because·time-outs·on·send·is |
| 232 | handled·through·socket·option·<code·class="inline">send_timeout</code>.·The·behavior·of·a·send·operation | 232 | handled·through·socket·option·<code·class="inline">send_timeout</code>.·The·behavior·of·a·send·operation |
| 233 | with·no·receiver·is·mainly·defined·by·the·underlying·TCP·stack·and·the·network | 233 | with·no·receiver·is·mainly·defined·by·the·underlying·TCP·stack·and·the·network |
| 234 | infrastructure.·To·write·code·that·handles·a·hanging·receiver·that·can | 234 | infrastructure.·To·write·code·that·handles·a·hanging·receiver·that·can |
| 235 | eventually·cause·the·sender·to·hang·on·a·<code·class="inline">send</code>·do·like·the·following.</p><p>Consider·a·process·that·receives·data·from·a·client·process·to·be·forwarded·to·a | 235 | eventually·cause·the·sender·to·hang·on·a·<code·class="inline">send</code>·do·like·the·following.</p><p>Consider·a·process·that·receives·data·from·a·client·process·to·be·forwarded·to·a |
| 236 | server·on·the·network.·The·process·is·connected·to·the·server·through·TCP/IP·and | 236 | server·on·the·network.·The·process·is·connected·to·the·server·through·TCP/IP·and |
| 237 | does·not·get·any·acknowledge·for·each·message·it·sends,·but·has·to·rely·on·the | 237 | does·not·get·any·acknowledge·for·each·message·it·sends,·but·has·to·rely·on·the |
| 238 | send·time-out·option·to·detect·that·the·other·end·is·unresponsive.·Option | 238 | send·time-out·option·to·detect·that·the·other·end·is·unresponsive.·Option |
| 239 | <code·class="inline">send_timeout</code>·can·be·used·when·connecting:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 239 | <code·class="inline">send_timeout</code>·can·be·used·when·connecting:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="p"·data-group-id=" | 240 | </span><span·class="p"·data-group-id="3173492379-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Sock</span><span·class="p"·data-group-id="3173492379-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">gen_tcp</span><[·...·truncated·by·diffoscope;·len:·95,·SHA:·a336117b2229b8053a5af19a25e9472241db5c8c848ab833c1f397e8a03831c3·...·]-2">(</span><span·class="n">HostAddress</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w"> |
| 241 | ····························</span><span·class="p"·data-group-id=" | 241 | ····························</span><span·class="p"·data-group-id="3173492379-3">[</span><span·class="p"·data-group-id="3173492379-4">{</span><span·class="ss">active</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="3173492379-4">}</span><span·class="p">,</span><span·class="w"> |
| 242 | ·····························</span><span·class="p"·data-group-id=" | 242 | ·····························</span><span·class="p"·data-group-id="3173492379-5">{</span><span·class="ss">send_timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5000</span><span·class="p"·data-group-id="3173492379-5">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ·····························</span><span·class="p"·data-group-id=" | 243 | ·····························</span><span·class="p"·data-group-id="3173492379-6">{</span><span·class="ss">packet</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3173492379-6">}</span><span·class="p"·data-group-id="3173492379-3">]</span><span·class="p"·data-group-id="3173492379-2">)</span><span·class="p">,</span><span·class="w"> |
| 244 | ················</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 244 | ················</span><span·class="nf">loop</span><span·class="p"·data-group-id="3173492379-7">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="3173492379-7">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·See·below</span><span·class="w"> |
| 245 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>In·the·loop·where·requests·are·handled,·send·time-outs·can·now·be·detected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id=" | 245 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>In·the·loop·where·requests·are·handled,·send·time-outs·can·now·be·detected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">loop</span><span·class="p"·data-group-id="4684638731-1">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="4684638731-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 246 | ····</span><span·class="k">receive</span><span·class="w"> | 246 | ····</span><span·class="k">receive</span><span·class="w"> |
| 247 | ········</span><span·class="p"·data-group-id=" | 247 | ········</span><span·class="p"·data-group-id="4684638731-2">{</span><span·class="n">Client</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">send_data</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Binary</span><span·class="p"·data-group-id="4684638731-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 248 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 248 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="4684638731-3">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="p"·data-group-id="4684638731-4">[</span><span·class="n">Binary</span><span·class="p"·data-group-id="4684638731-4">]</span><span·class="p"·data-group-id="4684638731-3">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 249 | ················</span><span·class="p"·data-group-id=" | 249 | ················</span><span·class="p"·data-group-id="4684638731-5">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">timeout</span><span·class="p"·data-group-id="4684638731-5">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 250 | ····················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 250 | ····················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4684638731-6">(</span><span·class="s">"Send·timeout,·closing!</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 251 | ······························</span><span·class="p"·data-group-id=" | 251 | ······························</span><span·class="p"·data-group-id="4684638731-7">[</span><span·class="p"·data-group-id="4684638731-7">]</span><span·class="p"·data-group-id="4684638731-6">)</span><span·class="p">,</span><span·class="w"> |
| 252 | ····················</span><span·class="nf">handle_send_timeout</span><span·class="p"·data-group-id="6254191776-8">(</span><span·class="p"·data-group-id="6254191776-8">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·Not·implemented·here</span><span·class="w"> | ||
| 253 | ····················</span><span·class="n"> | 252 | ····················</span><span·class="nf">handle_send_timeout</span><span·class="p"·data-group-id="4684638731-8">(</span><span·class="p"·data-group-id="4684638731-8">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·Not·implemented·here</span><span·class="w"> |
| 253 | ····················</span><span·class="n">Client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4684638731-9">{</span><span·class="nf">self</span><span·class="p"·data-group-id="4684638731-10">(</span><span·class="p"·data-group-id="4684638731-10">)</span><span·class="p">,</span><span·class="p"·data-group-id="4684638731-11">{</span><span·class="ss">error_sending</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">timeout</span><span·class="p"·data-group-id="4684638731-11">}</span><span·class="p"·data-group-id="4684638731-9">}</span><span·class="p">,</span><span·class="w"> | ||
| 254 | ····················</span><span·class="c1">%%·Usually,·it's·a·good·idea·to·give·up·in·case·of·a</span><span·class="w"> | 254 | ····················</span><span·class="c1">%%·Usually,·it's·a·good·idea·to·give·up·in·case·of·a</span><span·class="w"> |
| 255 | ····················</span><span·class="c1">%%·send·timeout,·as·you·never·know·how·much·actually</span><span·class="w"> | 255 | ····················</span><span·class="c1">%%·send·timeout,·as·you·never·know·how·much·actually</span><span·class="w"> |
| 256 | ····················</span><span·class="c1">%%·reached·the·server,·maybe·only·a·packet·header?!</span><span·class="w"> | 256 | ····················</span><span·class="c1">%%·reached·the·server,·maybe·only·a·packet·header?!</span><span·class="w"> |
| 257 | ····················</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 257 | ····················</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="4684638731-12">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="4684638731-12">)</span><span·class="p">;</span><span·class="w"> |
| 258 | ················</span><span·class="p"·data-group-id=" | 258 | ················</span><span·class="p"·data-group-id="4684638731-13">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OtherSendError</span><span·class="p"·data-group-id="4684638731-13">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 259 | ····················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 259 | ····················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4684638731-14">(</span><span·class="s">"Some·other·error·on·socket·(</span><span·class="si">~p</span><span·class="s">),·closing"</span><span·class="p">,</span><span·class="w"> |
| 260 | ······························</span><span·class="p"·data-group-id=" | 260 | ······························</span><span·class="p"·data-group-id="4684638731-15">[</span><span·class="n">OtherSendError</span><span·class="p"·data-group-id="4684638731-15">]</span><span·class="p"·data-group-id="4684638731-14">)</span><span·class="p">,</span><span·class="w"> |
| 261 | ····················</span><span·class="n">Client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 261 | ····················</span><span·class="n">Client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4684638731-16">{</span><span·class="nf">self</span><span·class="p"·data-group-id="4684638731-17">(</span><span·class="p"·data-group-id="4684638731-17">)</span><span·class="p">,</span><span·class="p"·data-group-id="4684638731-18">{</span><span·class="ss">er[·...·truncated·by·diffoscope;·len:·198,·SHA:·57008045ff59299bb08b8e40ed9226d0abf2ecf64d5fb3c541830c2d84a5de48·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 262 | ····················</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 262 | ····················</span><span·class="nc">gen_tcp</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="4684638731-19">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="4684638731-19">)</span><span·class="p">;</span><span·class="w"> |
| 263 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 263 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 264 | ····················</span><span·class="n">Client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 264 | ····················</span><span·class="n">Client</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="4684638731-20">{</span><span·class="nf">self</span><span·class="p"·data-group-id="4684638731-21">(</span><span·class="p"·data-group-id="4684638731-21">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">data_sent</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·4809e179b66e3d48b0e7e4f28a95f3b8ea328c91f292480765170301437603f8·...·]-20">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ····················</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 265 | ····················</span><span·class="nf">loop</span><span·class="p"·data-group-id="4684638731-22">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="4684638731-22">)</span><span·class="w"> |
| 266 | ············</span><span·class="k">end</span><span·class="w"> | 266 | ············</span><span·class="k">end</span><span·class="w"> |
| 267 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Usually·it·suffices·to·detect·time-outs·on·receive,·as·most·protocols·include | 267 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>Usually·it·suffices·to·detect·time-outs·on·receive,·as·most·protocols·include |
| 268 | some·sort·of·acknowledgment·from·the·server,·but·if·the·protocol·is·strictly·one | 268 | some·sort·of·acknowledgment·from·the·server,·but·if·the·protocol·is·strictly·one |
| 269 | way,·option·<code·class="inline">send_timeout</code>·comes·in·handy.</p> | 269 | way,·option·<code·class="inline">send_timeout</code>·comes·in·handy.</p> |
| 270 | ····</section> | 270 | ····</section> |
| Max diff block lines reached; 701/61586 bytes (1.14%) of diff not shown. | |||
| Offset 924, 25 lines modified | Offset 924, 25 lines modified | ||
| 924 | time-to-live·(TTL)·for·outgoing·multicast·datagrams·to·control·the·scope·of | 924 | time-to-live·(TTL)·for·outgoing·multicast·datagrams·to·control·the·scope·of |
| 925 | the·multicasts.</p><p>Datagrams·with·a·TTL·of·1·are·not·forwarded·beyond·the·local·network. | 925 | the·multicasts.</p><p>Datagrams·with·a·TTL·of·1·are·not·forwarded·beyond·the·local·network. |
| 926 | Defaults·to·<code·class="inline">1</code>.</p></li><li><p><strong><code·class="inline">{add_membership, {MultiAddress, InterfaceAddress}}</code></strong>·- | 926 | Defaults·to·<code·class="inline">1</code>.</p></li><li><p><strong><code·class="inline">{add_membership, {MultiAddress, InterfaceAddress}}</code></strong>·- |
| 927 | Joins·a·multicast·group.</p></li><li><p><strong><code·class="inline">{drop_membership, {MultiAddress, InterfaceAddress}}</code></strong>·- | 927 | Joins·a·multicast·group.</p></li><li><p><strong><code·class="inline">{drop_membership, {MultiAddress, InterfaceAddress}}</code></strong>·- |
| 928 | Leaves·a·multicast·group.</p></li><li><p><strong><a·href="#t:option/0"><code·class="inline">option/0</code></a></strong>·-·See·<a·href="inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>.</p></li></ul><p>UDP·packets·are·sent·with·this·socket·using·<a·href="#send/3"><code·class="inline">send(Socket, ...)</code></a>. | 928 | Leaves·a·multicast·group.</p></li><li><p><strong><a·href="#t:option/0"><code·class="inline">option/0</code></a></strong>·-·See·<a·href="inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>.</p></li></ul><p>UDP·packets·are·sent·with·this·socket·using·<a·href="#send/3"><code·class="inline">send(Socket, ...)</code></a>. |
| 929 | When·UDP·packets·arrive·to·the·<code·class="inline">Socket</code>'s·UDP·port,·and·the·socket·is·in | 929 | When·UDP·packets·arrive·to·the·<code·class="inline">Socket</code>'s·UDP·port,·and·the·socket·is·in |
| 930 | an·<em>active·mode</em>,·the·packets·are·delivered·as·messages·to·the | 930 | an·<em>active·mode</em>,·the·packets·are·delivered·as·messages·to·the |
| 931 | controlling·process·(socket·owner):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 931 | controlling·process·(socket·owner):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1559303954-1">{</span><span·class="ss">udp</span><span·class="p">,</span><span·class="err"> </span><span·class="n">Socket</span><span·class="p">,</span><span·class="err"> </span><span·class="n">PeerIP</span><span·class="p">,</span><span·class="err"> </span[·...·truncated·by·diffoscope;·len:·152,·SHA:·12e7347710e9f78badc6362b39124be945baa638d49c377227ec6c2bcd1baca8·...·]-1">}</span><span·class="w">·</span><span·class="c1">%·Without·ancillary·data</span><span·class="w"> |
| 932 | </span><span·class="p"·data-group-id=" | 932 | </span><span·class="p"·data-group-id="1559303954-2">{</span><span·class="ss">udp</span><span·class="p">,</span><span·class="err"> </span><span·class="n">Socket</span><span·class="p">,</span><span·class="err"> </span><span·class="n">PeerIP</span><span·class="p">,</span><span·class="err"> </span[·...·truncated·by·diffoscope;·len:·232,·SHA:·a25995f08b3f6287f661cdecc6b08f6773d7a7c70c2bc5ab710ac9bb101b01bd·...·]-2">}</span><span·class="w">·</span><span·class="c1">%·With·ancillary·data</span></code></pre><p><code·class="inline">PeerIP</code>·and·<code·class="inline">PeerPort</code>·are·the·address·from·which·<code·class="inline">Packet</code>·was·sent. |
| 933 | <code·class="inline">Packet</code>·is·a·list·of·bytes·(<code·class="inline">[</code><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a><code·class="inline">]</code>·if·option·<code·class="inline">list</code> | 933 | <code·class="inline">Packet</code>·is·a·list·of·bytes·(<code·class="inline">[</code><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a><code·class="inline">]</code>·if·option·<code·class="inline">list</code> |
| 934 | is·active·and·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0"><code·class="inline">binary/0</code></a>·if·option·<code·class="inline">binary</code>is·active | 934 | is·active·and·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0"><code·class="inline">binary/0</code></a>·if·option·<code·class="inline">binary</code>is·active |
| 935 | (they·are·mutually·exclusive).</p><p>The·message·contains·an·<code·class="inline">AncData</code>·field·only·if·any·of·the·socket | 935 | (they·are·mutually·exclusive).</p><p>The·message·contains·an·<code·class="inline">AncData</code>·field·only·if·any·of·the·socket |
| 936 | <a·href="#t:option/0">options</a>·<a·href="inet.html#option-recvtos"><code·class="inline">recvtos</code></a>, | 936 | <a·href="#t:option/0">options</a>·<a·href="inet.html#option-recvtos"><code·class="inline">recvtos</code></a>, |
| 937 | <a·href="inet.html#option-recvtclass"><code·class="inline">recvtclass</code></a>·or | 937 | <a·href="inet.html#option-recvtclass"><code·class="inline">recvtclass</code></a>·or |
| 938 | <a·href="inet.html#option-recvttl"><code·class="inline">recvttl</code></a>·are·active.</p><p>When·a·socket·in·<code·class="inline">{active, N}</code>·mode·(see·<a·href="inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>·for·details), | 938 | <a·href="inet.html#option-recvttl"><code·class="inline">recvttl</code></a>·are·active.</p><p>When·a·socket·in·<code·class="inline">{active, N}</code>·mode·(see·<a·href="inet.html#setopts/2"><code·class="inline">inet:setopts/2</code></a>·for·details), |
| 939 | transitions·to·passive·(<code·class="inline">{active, false}</code>)·mode·(<code·class="inline">N</code>·counts·down·to·<code·class="inline">0</code>), | 939 | transitions·to·passive·(<code·class="inline">{active, false}</code>)·mode·(<code·class="inline">N</code>·counts·down·to·<code·class="inline">0</code>), |
| 940 | the·controlling·process·is·notified·by·a·message·on·this·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1589105933-1">{</span><span·class="ss">udp_passive</span><span·class="p">,</span><span·class="err"> </span><span·class="n">Socket</span><span·class="p"·data-group-id="1589105933-1">}</span></code></pre><p>If·the·OS·protocol·stack·reports·an·error·for·the·socket,·the·following | ||
| 941 | 940 | the·controlling·process·is·notified·by·a·message·on·this·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6009146895-1">{</span><span·class="ss">udp_passive</span><span·class="p">,</span><span·class="err"> </span><spa[·...·truncated·by·diffoscope;·len:·165,·SHA:·6664b0771fdf2f4861174e199d56e3fae2b391c1d9913e70edfd77a4284d197b·...·] | |
| 941 | message·is·sent·to·the·controlling·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8369210936-1">{</span><span·class="ss">udp_error</span><span·class="p">,</span><span·class="err"> </span><span·class="n">Socket</span><span·class="p">,</span><span·class="err"> </span><span·class="n">Reason</span><span·class="p"·data-group-id="8369210936-1">}</span></code></pre><p><code·class="inline">Reason</code>·is·mostly·a·<a·href="inet.html#posix-error-codes">POSIX·Error·Code</a>.</p><p>If·the·socket·is·in·<em>passive·mode</em>·(not·in·an·<em>active·mode</em>),·received·data | ||
| 942 | can·be·retrieved·with·the<code·class="inline">recv/2,3</code>](<a·href="#recv/2"><code·class="inline">recv/2</code></a>)·calls.·Note·that·incoming | 942 | can·be·retrieved·with·the<code·class="inline">recv/2,3</code>](<a·href="#recv/2"><code·class="inline">recv/2</code></a>)·calls.·Note·that·incoming |
| 943 | UDP·packets·that·are·longer·than·the·receive·buffer·option·specifies | 943 | UDP·packets·that·are·longer·than·the·receive·buffer·option·specifies |
| 944 | can·be·truncated·without·warning.</p><p>The·default·value·for·the·receive·buffer·option·is·<code·class="inline">{recbuf, 8192}</code>.</p> | 944 | can·be·truncated·without·warning.</p><p>The·default·value·for·the·receive·buffer·option·is·<code·class="inline">{recbuf, 8192}</code>.</p> |
| 945 | ··</section> | 945 | ··</section> |
| 946 | </section> | 946 | </section> |
| 947 | <section·class="detail"·id="recv/2"> | 947 | <section·class="detail"·id="recv/2"> |
| Offset 1225, 15 lines modified | Offset 1225, 15 lines modified | ||
| 1225 | ······<p·class="built-using"> | 1225 | ······<p·class="built-using"> |
| 1226 | ········Built·using | 1226 | ········Built·using |
| 1227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1227 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1228 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1229 | ······</p> | 1229 | ······</p> |
| 1230 | <p>Copyright·©·1996-202 | 1230 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1231 | ····</footer> | 1231 | ····</footer> |
| 1232 | ··</div> | 1232 | ··</div> |
| 1233 | </main> | 1233 | </main> |
| 1234 | </div> | 1234 | </div> |
| 1235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1235 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1236 | ··<script> | 1236 | ··<script> |
| 1237 | ··let·initialized·=·false; | 1237 | ··let·initialized·=·false; |
| Offset 1244, 15 lines modified | Offset 1244, 15 lines modified | ||
| 1244 | ······<p·class="built-using"> | 1244 | ······<p·class="built-using"> |
| 1245 | ········Built·using | 1245 | ········Built·using |
| 1246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1248 | ······</p> | 1248 | ······</p> |
| 1249 | <p>Copyright·©·1996-202 | 1249 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1250 | ····</footer> | 1250 | ····</footer> |
| 1251 | ··</div> | 1251 | ··</div> |
| 1252 | </main> | 1252 | </main> |
| 1253 | </div> | 1253 | </div> |
| 1254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1255 | ··<script> | 1255 | ··<script> |
| 1256 | ··let·initialized·=·false; | 1256 | ··let·initialized·=·false; |
| Offset 128, 15 lines modified | Offset 128, 15 lines modified | ||
| 128 | ····<section·id="moduledoc"> | 128 | ····<section·id="moduledoc"> |
| 129 | <p>Grouping·nodes·to·global·name·registration·groups.</p><p>This·module·makes·it·possible·to·partition·the·nodes·of·a·system·into·<em>global | 129 | <p>Grouping·nodes·to·global·name·registration·groups.</p><p>This·module·makes·it·possible·to·partition·the·nodes·of·a·system·into·<em>global |
| 130 | groups</em>.·Each·global·group·has·its·own·global·namespace,·see·<a·href="global.html"><code·class="inline">global</code></a>.</p><p>The·main·advantage·of·dividing·systems·into·global·groups·is·that·the·background | 130 | groups</em>.·Each·global·group·has·its·own·global·namespace,·see·<a·href="global.html"><code·class="inline">global</code></a>.</p><p>The·main·advantage·of·dividing·systems·into·global·groups·is·that·the·background |
| 131 | load·decreases·while·the·number·of·nodes·to·be·updated·is·reduced·when | 131 | load·decreases·while·the·number·of·nodes·to·be·updated·is·reduced·when |
| 132 | manipulating·globally·registered·names.</p><p>The·Kernel·configuration·parameter·<a·href="kernel_app.html#global_groups"><code·class="inline">global_groups</code></a> | 132 | manipulating·globally·registered·names.</p><p>The·Kernel·configuration·parameter·<a·href="kernel_app.html#global_groups"><code·class="inline">global_groups</code></a> |
| 133 | defines·the·global·groups:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 133 | defines·the·global·groups:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2251409019-1">{</span><span·class="ss">global_groups</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2251409019-2">[</span><span·class="n">GroupTuple</span><span·class="w">·</span><span·class="p">:</span><span·class="p"[·...·truncated·by·diffoscope;·len:·268,·SHA:·58c531891cae89760666c401c52fca3b2b742d83f318b7fed23dabfaf109ce72·...·]-1">}</span></code></pre><p>For·the·processes·and·nodes·to·run·smoothly·using·the·global·group |
| 134 | functionality,·the·following·criteria·must·be·met:</p><ul><li>An·instance·of·the·global·group·server,·<code·class="inline">global_group</code>,·must·be·running·on | 134 | functionality,·the·following·criteria·must·be·met:</p><ul><li>An·instance·of·the·global·group·server,·<code·class="inline">global_group</code>,·must·be·running·on |
| 135 | each·node.·The·processes·are·automatically·started·and·synchronized·when·a | 135 | each·node.·The·processes·are·automatically·started·and·synchronized·when·a |
| 136 | node·is·started.</li><li>All·involved·nodes·must·agree·on·the·global·group·definition,·otherwise·the | 136 | node·is·started.</li><li>All·involved·nodes·must·agree·on·the·global·group·definition,·otherwise·the |
| 137 | behavior·of·the·system·is·undefined.</li><li><em>All</em>·nodes·in·the·system·must·belong·to·exactly·one·global·group.</li></ul><p>In·the·following·descriptions,·a·<em>group·node</em>·is·a·node·belonging·to·the·same | 137 | behavior·of·the·system·is·undefined.</li><li><em>All</em>·nodes·in·the·system·must·belong·to·exactly·one·global·group.</li></ul><p>In·the·following·descriptions,·a·<em>group·node</em>·is·a·node·belonging·to·the·same |
| 138 | global·group·as·the·local·node.</p><h2·id="module-notes"·class="section-heading"> | 138 | global·group·as·the·local·node.</p><h2·id="module-notes"·class="section-heading"> |
| 139 | ··<a·href="#module-notes"·class="hover-link"> | 139 | ··<a·href="#module-notes"·class="hover-link"> |
| 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 901, 15 lines modified | Offset 901, 15 lines modified | ||
| 901 | ······<p·class="built-using"> | 901 | ······<p·class="built-using"> |
| 902 | ········Built·using | 902 | ········Built·using |
| 903 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 903 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 904 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 904 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 905 | ······</p> | 905 | ······</p> |
| 906 | <p>Copyright·©·1996-202 | 906 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 907 | ····</footer> | 907 | ····</footer> |
| 908 | ··</div> | 908 | ··</div> |
| 909 | </main> | 909 | </main> |
| 910 | </div> | 910 | </div> |
| 911 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 911 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 912 | ··<script> | 912 | ··<script> |
| 913 | ··let·initialized·=·false; | 913 | ··let·initialized·=·false; |
| Offset 589, 15 lines modified | Offset 589, 15 lines modified | ||
| 589 | ······<p·class="built-using"> | 589 | ······<p·class="built-using"> |
| 590 | ········Built·using | 590 | ········Built·using |
| 591 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 591 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 592 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 592 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 593 | ······</p> | 593 | ······</p> |
| 594 | <p>Copyright·©·1996-202 | 594 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 595 | ····</footer> | 595 | ····</footer> |
| 596 | ··</div> | 596 | ··</div> |
| 597 | </main> | 597 | </main> |
| 598 | </div> | 598 | </div> |
| 599 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 599 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 600 | ··<script> | 600 | ··<script> |
| 601 | ··let·initialized·=·false; | 601 | ··let·initialized·=·false; |
| Offset 147, 27 lines modified | Offset 147, 27 lines modified | ||
| 147 | inet_default_listen_options·'[{delay_send,true}]'</code></pre><p><strong>Please·note</strong>·that·the·default·option·<code·class="inline">{active,·true}</code>·cannot·be·changed, | 147 | inet_default_listen_options·'[{delay_send,true}]'</code></pre><p><strong>Please·note</strong>·that·the·default·option·<code·class="inline">{active,·true}</code>·cannot·be·changed, |
| 148 | for·internal·implementation·reasons.</p><p>Addresses·as·inputs·to·functions·can·be·either·a·string·or·a·tuple. | 148 | for·internal·implementation·reasons.</p><p>Addresses·as·inputs·to·functions·can·be·either·a·string·or·a·tuple. |
| 149 | For·example,·the·IP·address·150.236.20.73·can·be·passed·to | 149 | For·example,·the·IP·address·150.236.20.73·can·be·passed·to |
| 150 | <a·href="#gethostbyaddr/1"><code·class="inline">gethostbyaddr/1</code></a>,·either·as·a·string·<code·class="inline">"150.236.20.73"</code> | 150 | <a·href="#gethostbyaddr/1"><code·class="inline">gethostbyaddr/1</code></a>,·either·as·a·string·<code·class="inline">"150.236.20.73"</code> |
| 151 | or·as·a·tuple·<code·class="inline">{150, 236, 20, 73}</code>.</p><p><em>IPv4·address·examples:</em></p><pre><code·class="text">Address··········ip_address() | 151 | or·as·a·tuple·<code·class="inline">{150, 236, 20, 73}</code>.</p><p><em>IPv4·address·examples:</em></p><pre><code·class="text">Address··········ip_address() |
| 152 | -------··········------------ | 152 | -------··········------------ |
| 153 | 127.0.0.1········{127,0,0,1} | 153 | 127.0.0.1········{127,0,0,1} |
| 154 | 192.168.42.2·····{192,168,42,2}</code></pre><p><em>IPv6·address·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Address</span><span·class="w">··········</span><span·class="nf">ip_address</span><span·class="p"·data-group-id=" | 154 | 192.168.42.2·····{192,168,42,2}</code></pre><p><em>IPv6·address·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Address</span><span·class="w">··········</span><span·class="nf">ip_address</span><span·class="p"·data-group-id="8001360717-1">(</span><span·class="p"·data-group-id="8001360717-1">)</span><span·class="w"> |
| 155 | </span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">··········</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="w"> | 155 | </span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">-</span><span·class="w">··········</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="o">--</span><span·class="w"> |
| 156 | </span><span·class="p">:</span><span·class="p">:</span><span·class="mi">1</span><span·class="w">·············</span><span·class="p"·data-group-id=" | 156 | </span><span·class="p">:</span><span·class="p">:</span><span·class="mi">1</span><span·class="w">·············</span><span·class="p"·data-group-id="8001360717-2">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·175,·SHA:·625b45483d03707f0755b5644611bcf2177138e0b0b0cdeac41ab85422e89853·...·]-2">}</span><span·class="w"> |
| 157 | </span><span·class="p">:</span><span·class="p">:</span><span·class="mf">192.168</span><span·class="p">.</span><span·class="mf">42.2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 157 | </span><span·class="p">:</span><span·class="p">:</span><span·class="mf">192.168</span><span·class="p">.</span><span·class="mf">42.2</span><span·class="w">··</span><span·class="p"·data-group-id="8001360717-3">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·792,·SHA:·a1e1ac177f5674c7160cc4b777a19da4031491fffcc636b1ef213093e2c340d9·...·]-3">}</span><span·class="w"> |
| 158 | </span><span·class="p">:</span><span·class="p">:</span><span·class="n">FFFF</span><span·class="p">:</span><span·class="mf">192.168</span><span·class="p">.</span><span·class="mf">42.2</span><span·class="w"> | 158 | </span><span·class="p">:</span><span·class="p">:</span><span·class="n">FFFF</span><span·class="p">:</span><span·class="mf">192.168</span><span·class="p">.</span><span·class="mf">42.2</span><span·class="w"> |
| 159 | ················</span><span·class="p"·data-group-id=" | 159 | ················</span><span·class="p"·data-group-id="8001360717-6">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·798,·SHA:·19912c40236386a19b894c239d8c8dd681eb2813940707501bde4891c5acdf77·...·]-6">}</span><span·class="w"> |
| 160 | </span><span·class="mi">3</span><span·class="nc">ffe</span><span·class="p">:</span><span·class="nc">b80</span><span·class="p">:</span><span·class="mi">1</span><span·class="nc">f8d</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="mi">204</span><span·class="p">:</span><span·class="nc">acff</span><span·class="p">:</span><span·class="nc">fe17</span><span·class="p">:</span><span·class="ss">bf38</span><span·class="w"> | 160 | </span><span·class="mi">3</span><span·class="nc">ffe</span><span·class="p">:</span><span·class="nc">b80</span><span·class="p">:</span><span·class="mi">1</span><span·class="nc">f8d</span><span·class="p">:</span><span·class="mi">2</span><span·class="p">:</span><span·class="mi">204</span><span·class="p">:</span><span·class="nc">acff</span><span·class="p">:</span><span·class="nc">fe17</span><span·class="p">:</span><span·class="ss">bf38</span><span·class="w"> |
| 161 | ················</span><span·class="p"·data-group-id=" | 161 | ················</span><span·class="p"·data-group-id="8001360717-9">{</span><span·class="mi">16#3ffe</span><span·class="p">,</span><span·class="mi">16#b80</span><span·class="p">,</span><span·class="mi">16#1f8d</span><span·class="p">,</span><span·class="mi">16#2</span><span·class="p">,</span><span·class="mi">1[·...·truncated·by·diffoscope;·len:·218,·SHA:·7d9155f6ee5e4fd1f628f1b5c3dae1265dcae68ccb223227f2cf90770f64b997·...·]-9">}</span><span·class="w"> |
| 162 | </span><span·class="nc">fe80</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">204</span><span·class="p">:</span><span·class="nc">acff</span><span·class="p">:</span><span·class="nc">fe17</span><span·class="p">:</span><span·class="ss">bf38</span><span·class="w"> | 162 | </span><span·class="nc">fe80</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">204</span><span·class="p">:</span><span·class="nc">acff</span><span·class="p">:</span><span·class="nc">fe17</span><span·class="p">:</span><span·class="ss">bf38</span><span·class="w"> |
| 163 | ················</span><span·class="p"·data-group-id=" | 163 | ················</span><span·class="p"·data-group-id="8001360717-10">{</span><span·class="mi">16#fe80</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">16#204</span><[·...·truncated·by·diffoscope;·len:·656,·SHA:·2dd01399172d176480be57f74087cf6b03b8819379fad5d34e41e67f70cb08a2·...·]0-1">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="p"·data-group-id=" | 164 | </span><span·class="p"·data-group-id="7335917560-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7335917560-3">{</span><span·class="mi">192</span><span·class="p">,</span><span·class="mi">168</span><span·class="p">,</span><span·class="mi">42</span><sp[·...·truncated·by·diffoscope;·len:·139,·SHA:·85944b3d2489b0be002ad2c1dcc1204d62b278fc99941790f65093f6e06649e1·...·]0-2">}</span><span·class="gp·unselectable"> |
| 165 | 2>·</span><span·class="nc">inet</span><span·class="p">:</span><span·class="nf">parse_address</span><span·class="p"·data-group-id=" | 165 | 2>·</span><span·class="nc">inet</span><span·class="p">:</span><span·class="nf">parse_address</span><span·class="p"·data-group-id="7335917560-4">(</span><span·class="s">"::FFFF:192.168.42.2"</span><span·class="p"·data-group-id="7335917560-4">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="p"·data-group-id=" | 166 | </span><span·class="p"·data-group-id="7335917560-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7335917560-6">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·cl[·...·truncated·by·diffoscope;·len:·342,·SHA:·d32b8868894193964072325fce06b79b0b00db2c5337859e4d596330479784f5·...·]0-5">}</span></code></pre><h2·id="module-posix-error-codes"·class="section-heading"> |
| 167 | ··<a·href="#module-posix-error-codes"·class="hover-link"> | 167 | ··<a·href="#module-posix-error-codes"·class="hover-link"> |
| 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 169 | ··</a> | 169 | ··</a> |
| 170 | ··<span·class="text"><a·href=""·id="posix-error-codes"></a>·POSIX·Error·Codes</span> | 170 | ··<span·class="text"><a·href=""·id="posix-error-codes"></a>·POSIX·Error·Codes</span> |
| 171 | </h2> | 171 | </h2> |
| 172 | <ul><li><code·class="inline">e2big</code>·-·Too·long·argument·list</li><li><code·class="inline">eacces</code>·-·Permission·denied</li><li><code·class="inline">eaddrinuse</code>·-·Address·already·in·use</li><li><code·class="inline">eaddrnotavail</code>·-·Cannot·assign·requested·address</li><li><code·class="inline">eadv</code>·-·Advertise·error</li><li><code·class="inline">eafnosupport</code>·-·Address·family·not·supported·by·protocol·family</li><li><code·class="inline">eagain</code>·-·Resource·temporarily·unavailable</li><li><code·class="inline">ealign</code>·-·EALIGN</li><li><code·class="inline">ealready</code>·-·Operation·already·in·progress</li><li><code·class="inline">ebade</code>·-·Bad·exchange·descriptor</li><li><code·class="inline">ebadf</code>·-·Bad·file·number</li><li><code·class="inline">ebadfd</code>·-·File·descriptor·in·bad·state</li><li><code·class="inline">ebadmsg</code>·-·Not·a·data·message</li><li><code·class="inline">ebadr</code>·-·Bad·request·descriptor</li><li><code·class="inline">ebadrpc</code>·-·Bad·RPC·structure</li><li><code·class="inline">ebadrqc</code>·-·Bad·request·code</li><li><code·class="inline">ebadslt</code>·-·Invalid·slot</li><li><code·class="inline">ebfont</code>·-·Bad·font·file·format</li><li><code·class="inline">ebusy</code>·-·File·busy</li><li><code·class="inline">echild</code>·-·No·children</li><li><code·class="inline">echrng</code>·-·Channel·number·out·of·range</li><li><code·class="inline">ecomm</code>·-·Communication·error·on·send</li><li><code·class="inline">econnaborted</code>·-·Software·caused·connection·abort</li><li><code·class="inline">econnrefused</code>·-·Connection·refused</li><li><code·class="inline">econnreset</code>·-·Connection·reset·by·peer</li><li><code·class="inline">edeadlk</code>·-·Resource·deadlock·avoided</li><li><code·class="inline">edeadlock</code>·-·Resource·deadlock·avoided</li><li><code·class="inline">edestaddrreq</code>·-·Destination·address·required</li><li><code·class="inline">edirty</code>·-·Mounting·a·dirty·fs·without·force</li><li><code·class="inline">edom</code>·-·Math·argument·out·of·range</li><li><code·class="inline">edotdot</code>·-·Cross·mount·point</li><li><code·class="inline">edquot</code>·-·Disk·quota·exceeded</li><li><code·class="inline">eduppkg</code>·-·Duplicate·package·name</li><li><code·class="inline">eexist</code>·-·File·already·exists</li><li><code·class="inline">efault</code>·-·Bad·address·in·system·call·argument</li><li><code·class="inline">efbig</code>·-·File·too·large</li><li><code·class="inline">ehostdown</code>·-·Host·is·down</li><li><code·class="inline">ehostunreach</code>·-·Host·is·unreachable</li><li><code·class="inline">eidrm</code>·-·Identifier·removed</li><li><code·class="inline">einit</code>·-·Initialization·error</li><li><code·class="inline">einprogress</code>·-·Operation·now·in·progress</li><li><code·class="inline">eintr</code>·-·Interrupted·system·call</li><li><code·class="inline">einval</code>·-·Invalid·argument</li><li><code·class="inline">eio</code>·-·I/O·error</li><li><code·class="inline">eisconn</code>·-·Socket·is·already·connected</li><li><code·class="inline">eisdir</code>·-·Illegal·operation·on·a·directory</li><li><code·class="inline">eisnam</code>·-·Is·a·named·file</li><li><code·class="inline">el2hlt</code>·-·Level·2·halted</li><li><code·class="inline">el2nsync</code>·-·Level·2·not·synchronized</li><li><code·class="inline">el3hlt</code>·-·Level·3·halted</li><li><code·class="inline">el3rst</code>·-·Level·3·reset</li><li><code·class="inline">elbin</code>·-·ELBIN</li><li><code·class="inline">elibacc</code>·-·Cannot·access·a·needed·shared·library</li><li><code·class="inline">elibbad</code>·-·Accessing·a·corrupted·shared·library</li><li><code·class="inline">elibexec</code>·-·Cannot·exec·a·shared·library·directly</li><li><code·class="inline">elibmax</code>·-·Attempting·to·link·in·more·shared·libraries·than·system·limit</li><li><code·class="inline">elibscn</code>·-·<code·class="inline">.lib</code>·section·in·<code·class="inline">a.out</code>·corrupted</li><li><code·class="inline">elnrng</code>·-·Link·number·out·of·range</li><li><code·class="inline">eloop</code>·-·Too·many·levels·of·symbolic·links</li><li><code·class="inline">emfile</code>·-·Too·many·open·files</li><li><code·class="inline">emlink</code>·-·Too·many·links</li><li><code·class="inline">emsgsize</code>·-·Message·too·long</li><li><code·class="inline">emultihop</code>·-·Multihop·attempted</li><li><code·class="inline">enametoolong</code>·-·Filename·too·long</li><li><code·class="inline">enavail</code>·-·Unavailable</li><li><code·class="inline">enet</code>·-·ENET</li><li><code·class="inline">enetdown</code>·-·Network·is·down</li><li><code·class="inline">enetreset</code>·-·Network·dropped·connection·on·reset</li><li><code·class="inline">enetunreach</code>·-·Network·is·unreachable</li><li><code·class="inline">enfile</code>·-·File·table·overflow</li><li><code·class="inline">enoano</code>·-·Anode·table·overflow</li><li><code·class="inline">enobufs</code>·-·No·buffer·space·available</li><li><code·class="inline">enocsi</code>·-·No·CSI·structure·available</li><li><code·class="inline">enodata</code>·-·No·data·available</li><li><code·class="inline">enodev</code>·-·No·such·device</li><li><code·class="inline">enoent</code>·-·No·such·file·or·directory</li><li><code·class="inline">enoexec</code>·-·Exec·format·error</li><li><code·class="inline">enolck</code>·-·No·locks·available</li><li><code·class="inline">enolink</code>·-·Link·has·been·severed</li><li><code·class="inline">enomem</code>·-·Not·enough·memory</li><li><code·class="inline">enomsg</code>·-·No·message·of·desired·type</li><li><code·class="inline">enonet</code>·-·Machine·is·not·on·the·network</li><li><code·class="inline">enopkg</code>·-·Package·not·installed</li><li><code·class="inline">enoprotoopt</code>·-·Bad·protocol·option</li><li><code·class="inline">enospc</code>·-·No·space·left·on·device</li><li><code·class="inline">enosr</code>·-·Out·of·stream·resources·or·not·a·stream·device</li><li><code·class="inline">enosym</code>·-·Unresolved·symbol·name</li><li><code·class="inline">enosys</code>·-·Function·not·implemented</li><li><code·class="inline">enotblk</code>·-·Block·device·required</li><li><code·class="inline">enotconn</code>·-·Socket·is·not·connected</li><li><code·class="inline">enotdir</code>·-·Not·a·directory</li><li><code·class="inline">enotempty</code>·-·Directory·not·empty</li><li><code·class="inline">enotnam</code>·-·Not·a·named·file</li><li><code·class="inline">enotsock</code>·-·Socket·operation·on·non-socket</li><li><code·class="inline">enotsup</code>·-·Operation·not·supported</li><li><code·class="inline">enotty</code>·-·Inappropriate·device·for·<code·class="inline">ioctl</code></li><li><code·class="inline">enotuniq</code>·-·Name·not·unique·on·network</li><li><code·class="inline">enxio</code>·-·No·such·device·or·address</li><li><code·class="inline">eopnotsupp</code>·-·Operation·not·supported·on·socket</li><li><code·class="inline">eperm</code>·-·Not·owner</li><li><code·class="inline">epfnosupport</code>·-·Protocol·family·not·supported</li><li><code·class="inline">epipe</code>·-·Broken·pipe</li><li><code·class="inline">eproclim</code>·-·Too·many·processes</li><li><code·class="inline">eprocunavail</code>·-·Bad·procedure·for·program</li><li><code·class="inline">eprogmismatch</code>·-·Wrong·program·version</li><li><code·class="inline">eprogunavail</code>·-·RPC·program·unavailable</li><li><code·class="inline">eproto</code>·-·Protocol·error</li><li><code·class="inline">eprotonosupport</code>·-·Protocol·not·supported</li><li><code·class="inline">eprototype</code>·-·Wrong·protocol·type·for·socket</li><li><code·class="inline">erange</code>·-·Math·result·unrepresentable</li><li><code·class="inline">erefused</code>·-·EREFUSED</li><li><code·class="inline">eremchg</code>·-·Remote·address·changed</li><li><code·class="inline">eremdev</code>·-·Remote·device</li><li><code·class="inline">eremote</code>·-·Pathname·hit·remote·filesystem</li><li><code·class="inline">eremoteio</code>·-·Remote·I/O·error</li><li><code·class="inline">eremoterelease</code>·-·EREMOTERELEASE</li><li><code·class="inline">erofs</code>·-·Read-only·filesystem</li><li><code·class="inline">erpcmismatch</code>·-·Wrong·RPC·version</li><li><code·class="inline">erremote</code>·-·Object·is·remote</li><li><code·class="inline">eshutdown</code>·-·Cannot·send·after·socket·shutdown</li><li><code·class="inline">esocktnosupport</code>·-·Socket·type·not·supported</li><li><code·class="inline">espipe</code>·-·Invalid·seek</li><li><code·class="inline">esrch</code>·-·No·such·process</li><li><code·class="inline">esrmnt</code>·-·Srmount·error</li><li><code·class="inline">estale</code>·-·Stale·remote·file·handle</li><li><code·class="inline">esuccess</code>·-·Error·0</li><li><code·class="inline">etime</code>·-·Timer·expired</li><li><code·class="inline">etimedout</code>·-·Connection·timed·out</li><li><code·class="inline">etoomanyrefs</code>·-·Too·many·references</li><li><code·class="inline">etxtbsy</code>·-·Text·file·or·pseudo-device·busy</li><li><code·class="inline">euclean</code>·-·Structure·needs·cleaning</li><li><code·class="inline">eunatch</code>·-·Protocol·driver·not·attached</li><li><code·class="inline">eusers</code>·-·Too·many·users</li><li><code·class="inline">eversion</code>·-·Version·mismatch</li><li><code·class="inline">ewouldblock</code>·-·Operation·would·block</li><li><code·class="inline">exdev</code>·-·Cross-device·link</li><li><code·class="inline">exfull</code>·-·Message·tables·full</li><li><code·class="inline">nxdomain</code>·-·Hostname·or·domain·name·cannot·be·found</li></ul> | 172 | <ul><li><code·class="inline">e2big</code>·-·Too·long·argument·list</li><li><code·class="inline">eacces</code>·-·Permission·denied</li><li><code·class="inline">eaddrinuse</code>·-·Address·already·in·use</li><li><code·class="inline">eaddrnotavail</code>·-·Cannot·assign·requested·address</li><li><code·class="inline">eadv</code>·-·Advertise·error</li><li><code·class="inline">eafnosupport</code>·-·Address·family·not·supported·by·protocol·family</li><li><code·class="inline">eagain</code>·-·Resource·temporarily·unavailable</li><li><code·class="inline">ealign</code>·-·EALIGN</li><li><code·class="inline">ealready</code>·-·Operation·already·in·progress</li><li><code·class="inline">ebade</code>·-·Bad·exchange·descriptor</li><li><code·class="inline">ebadf</code>·-·Bad·file·number</li><li><code·class="inline">ebadfd</code>·-·File·descriptor·in·bad·state</li><li><code·class="inline">ebadmsg</code>·-·Not·a·data·message</li><li><code·class="inline">ebadr</code>·-·Bad·request·descriptor</li><li><code·class="inline">ebadrpc</code>·-·Bad·RPC·structure</li><li><code·class="inline">ebadrqc</code>·-·Bad·request·code</li><li><code·class="inline">ebadslt</code>·-·Invalid·slot</li><li><code·class="inline">ebfont</code>·-·Bad·font·file·format</li><li><code·class="inline">ebusy</code>·-·File·busy</li><li><code·class="inline">echild</code>·-·No·children</li><li><code·class="inline">echrng</code>·-·Channel·number·out·of·range</li><li><code·class="inline">ecomm</code>·-·Communication·error·on·send</li><li><code·class="inline">econnaborted</code>·-·Software·caused·connection·abort</li><li><code·class="inline">econnrefused</code>·-·Connection·refused</li><li><code·class="inline">econnreset</code>·-·Connection·reset·by·peer</li><li><code·class="inline">edeadlk</code>·-·Resource·deadlock·avoided</li><li><code·class="inline">edeadlock</code>·-·Resource·deadlock·avoided</li><li><code·class="inline">edestaddrreq</code>·-·Destination·address·required</li><li><code·class="inline">edirty</code>·-·Mounting·a·dirty·fs·without·force</li><li><code·class="inline">edom</code>·-·Math·argument·out·of·range</li><li><code·class="inline">edotdot</code>·-·Cross·mount·point</li><li><code·class="inline">edquot</code>·-·Disk·quota·exceeded</li><li><code·class="inline">eduppkg</code>·-·Duplicate·package·name</li><li><code·class="inline">eexist</code>·-·File·already·exists</li><li><code·class="inline">efault</code>·-·Bad·address·in·system·call·argument</li><li><code·class="inline">efbig</code>·-·File·too·large</li><li><code·class="inline">ehostdown</code>·-·Host·is·down</li><li><code·class="inline">ehostunreach</code>·-·Host·is·unreachable</li><li><code·class="inline">eidrm</code>·-·Identifier·removed</li><li><code·class="inline">einit</code>·-·Initialization·error</li><li><code·class="inline">einprogress</code>·-·Operation·now·in·progress</li><li><code·class="inline">eintr</code>·-·Interrupted·system·call</li><li><code·class="inline">einval</code>·-·Invalid·argument</li><li><code·class="inline">eio</code>·-·I/O·error</li><li><code·class="inline">eisconn</code>·-·Socket·is·already·connected</li><li><code·class="inline">eisdir</code>·-·Illegal·operation·on·a·directory</li><li><code·class="inline">eisnam</code>·-·Is·a·named·file</li><li><code·class="inline">el2hlt</code>·-·Level·2·halted</li><li><code·class="inline">el2nsync</code>·-·Level·2·not·synchronized</li><li><code·class="inline">el3hlt</code>·-·Level·3·halted</li><li><code·class="inline">el3rst</code>·-·Level·3·reset</li><li><code·class="inline">elbin</code>·-·ELBIN</li><li><code·class="inline">elibacc</code>·-·Cannot·access·a·needed·shared·library</li><li><code·class="inline">elibbad</code>·-·Accessing·a·corrupted·shared·library</li><li><code·class="inline">elibexec</code>·-·Cannot·exec·a·shared·library·directly</li><li><code·class="inline">elibmax</code>·-·Attempting·to·link·in·more·shared·libraries·than·system·limit</li><li><code·class="inline">elibscn</code>·-·<code·class="inline">.lib</code>·section·in·<code·class="inline">a.out</code>·corrupted</li><li><code·class="inline">elnrng</code>·-·Link·number·out·of·range</li><li><code·class="inline">eloop</code>·-·Too·many·levels·of·symbolic·links</li><li><code·class="inline">emfile</code>·-·Too·many·open·files</li><li><code·class="inline">emlink</code>·-·Too·many·links</li><li><code·class="inline">emsgsize</code>·-·Message·too·long</li><li><code·class="inline">emultihop</code>·-·Multihop·attempted</li><li><code·class="inline">enametoolong</code>·-·Filename·too·long</li><li><code·class="inline">enavail</code>·-·Unavailable</li><li><code·class="inline">enet</code>·-·ENET</li><li><code·class="inline">enetdown</code>·-·Network·is·down</li><li><code·class="inline">enetreset</code>·-·Network·dropped·connection·on·reset</li><li><code·class="inline">enetunreach</code>·-·Network·is·unreachable</li><li><code·class="inline">enfile</code>·-·File·table·overflow</li><li><code·class="inline">enoano</code>·-·Anode·table·overflow</li><li><code·class="inline">enobufs</code>·-·No·buffer·space·available</li><li><code·class="inline">enocsi</code>·-·No·CSI·structure·available</li><li><code·class="inline">enodata</code>·-·No·data·available</li><li><code·class="inline">enodev</code>·-·No·such·device</li><li><code·class="inline">enoent</code>·-·No·such·file·or·directory</li><li><code·class="inline">enoexec</code>·-·Exec·format·error</li><li><code·class="inline">enolck</code>·-·No·locks·available</li><li><code·class="inline">enolink</code>·-·Link·has·been·severed</li><li><code·class="inline">enomem</code>·-·Not·enough·memory</li><li><code·class="inline">enomsg</code>·-·No·message·of·desired·type</li><li><code·class="inline">enonet</code>·-·Machine·is·not·on·the·network</li><li><code·class="inline">enopkg</code>·-·Package·not·installed</li><li><code·class="inline">enoprotoopt</code>·-·Bad·protocol·option</li><li><code·class="inline">enospc</code>·-·No·space·left·on·device</li><li><code·class="inline">enosr</code>·-·Out·of·stream·resources·or·not·a·stream·device</li><li><code·class="inline">enosym</code>·-·Unresolved·symbol·name</li><li><code·class="inline">enosys</code>·-·Function·not·implemented</li><li><code·class="inline">enotblk</code>·-·Block·device·required</li><li><code·class="inline">enotconn</code>·-·Socket·is·not·connected</li><li><code·class="inline">enotdir</code>·-·Not·a·directory</li><li><code·class="inline">enotempty</code>·-·Directory·not·empty</li><li><code·class="inline">enotnam</code>·-·Not·a·named·file</li><li><code·class="inline">enotsock</code>·-·Socket·operation·on·non-socket</li><li><code·class="inline">enotsup</code>·-·Operation·not·supported</li><li><code·class="inline">enotty</code>·-·Inappropriate·device·for·<code·class="inline">ioctl</code></li><li><code·class="inline">enotuniq</code>·-·Name·not·unique·on·network</li><li><code·class="inline">enxio</code>·-·No·such·device·or·address</li><li><code·class="inline">eopnotsupp</code>·-·Operation·not·supported·on·socket</li><li><code·class="inline">eperm</code>·-·Not·owner</li><li><code·class="inline">epfnosupport</code>·-·Protocol·family·not·supported</li><li><code·class="inline">epipe</code>·-·Broken·pipe</li><li><code·class="inline">eproclim</code>·-·Too·many·processes</li><li><code·class="inline">eprocunavail</code>·-·Bad·procedure·for·program</li><li><code·class="inline">eprogmismatch</code>·-·Wrong·program·version</li><li><code·class="inline">eprogunavail</code>·-·RPC·program·unavailable</li><li><code·class="inline">eproto</code>·-·Protocol·error</li><li><code·class="inline">eprotonosupport</code>·-·Protocol·not·supported</li><li><code·class="inline">eprototype</code>·-·Wrong·protocol·type·for·socket</li><li><code·class="inline">erange</code>·-·Math·result·unrepresentable</li><li><code·class="inline">erefused</code>·-·EREFUSED</li><li><code·class="inline">eremchg</code>·-·Remote·address·changed</li><li><code·class="inline">eremdev</code>·-·Remote·device</li><li><code·class="inline">eremote</code>·-·Pathname·hit·remote·filesystem</li><li><code·class="inline">eremoteio</code>·-·Remote·I/O·error</li><li><code·class="inline">eremoterelease</code>·-·EREMOTERELEASE</li><li><code·class="inline">erofs</code>·-·Read-only·filesystem</li><li><code·class="inline">erpcmismatch</code>·-·Wrong·RPC·version</li><li><code·class="inline">erremote</code>·-·Object·is·remote</li><li><code·class="inline">eshutdown</code>·-·Cannot·send·after·socket·shutdown</li><li><code·class="inline">esocktnosupport</code>·-·Socket·type·not·supported</li><li><code·class="inline">espipe</code>·-·Invalid·seek</li><li><code·class="inline">esrch</code>·-·No·such·process</li><li><code·class="inline">esrmnt</code>·-·Srmount·error</li><li><code·class="inline">estale</code>·-·Stale·remote·file·handle</li><li><code·class="inline">esuccess</code>·-·Error·0</li><li><code·class="inline">etime</code>·-·Timer·expired</li><li><code·class="inline">etimedout</code>·-·Connection·timed·out</li><li><code·class="inline">etoomanyrefs</code>·-·Too·many·references</li><li><code·class="inline">etxtbsy</code>·-·Text·file·or·pseudo-device·busy</li><li><code·class="inline">euclean</code>·-·Structure·needs·cleaning</li><li><code·class="inline">eunatch</code>·-·Protocol·driver·not·attached</li><li><code·class="inline">eusers</code>·-·Too·many·users</li><li><code·class="inline">eversion</code>·-·Version·mismatch</li><li><code·class="inline">ewouldblock</code>·-·Operation·would·block</li><li><code·class="inline">exdev</code>·-·Cross-device·link</li><li><code·class="inline">exfull</code>·-·Message·tables·full</li><li><code·class="inline">nxdomain</code>·-·Hostname·or·domain·name·cannot·be·found</li></ul> |
| 173 | ····</section> | 173 | ····</section> |
| Offset 953, 15 lines modified | Offset 953, 15 lines modified | ||
| 953 | ···················h_addrtype·::·inet·|·inet6, | 953 | ···················h_addrtype·::·inet·|·inet6, |
| 954 | ···················h_length·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), | 954 | ···················h_length·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), |
| 955 | ···················h_addr_list·::·[<a·href="inet.html#t:ip_address/0">inet:ip_address</a>()]}.</pre> | 955 | ···················h_addr_list·::·[<a·href="inet.html#t:ip_address/0">inet:ip_address</a>()]}.</pre> |
| 956 | ······</div> | 956 | ······</div> |
| 957 | <p>A·record·describing·a·host;·name·and·address.</p><p>Corresponds·to·the·<code·class="inline">C</code>:·<code·class="inline">struct hostent</code>·as·returned·by·for·example | 957 | <p>A·record·describing·a·host;·name·and·address.</p><p>Corresponds·to·the·<code·class="inline">C</code>:·<code·class="inline">struct hostent</code>·as·returned·by·for·example |
| 958 | <code·class="inline">gethostbyname(3)</code>.</p><p>The·record·is·defined·in·the·Kernel·include·file·<code·class="inline">"inet.hrl"</code>.</p><p>Add·the·following·directive·to·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 958 | <code·class="inline">gethostbyname(3)</code>.</p><p>The·record·is·defined·in·the·Kernel·include·file·<code·class="inline">"inet.hrl"</code>.</p><p>Add·the·following·directive·to·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="6705182329-1">(</span><span·class="s">"kernel/include/inet.hrl"</span><span·class="p"·data-group-id="6705182329-1">)</span><span·class="p">.</span></code></pre> |
| 959 | ··</section> | 959 | ··</section> |
| 960 | </section> | 960 | </section> |
| 961 | <section·class="detail"·id="t:hostname/0"> | 961 | <section·class="detail"·id="t:hostname/0"> |
| 962 | ··<div·class="detail-header"> | 962 | ··<div·class="detail-header"> |
| 963 | ····<a·href="#t:hostname/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 963 | ····<a·href="#t:hostname/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| 964 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 964 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2050, 17 lines modified | Offset 2050, 17 lines modified | ||
| 2050 | coded·in·native·endianness.</p><p>Asking·for·and·inspecting·raw·socket·options·require·low-level·information·about | 2050 | coded·in·native·endianness.</p><p>Asking·for·and·inspecting·raw·socket·options·require·low-level·information·about |
| 2051 | the·current·operating·system·and·TCP·stack.</p><p><em>Example:</em></p><p>Consider·a·Linux·machine·where·option·<code·class="inline">TCP_INFO</code>·can·be·used·to·collect·TCP | 2051 | the·current·operating·system·and·TCP·stack.</p><p><em>Example:</em></p><p>Consider·a·Linux·machine·where·option·<code·class="inline">TCP_INFO</code>·can·be·used·to·collect·TCP |
| 2052 | statistics·for·a·socket.·Assume·you·are·interested·in·field·<code·class="inline">tcpi_sacked</code>·of | 2052 | statistics·for·a·socket.·Assume·you·are·interested·in·field·<code·class="inline">tcpi_sacked</code>·of |
| 2053 | <code·class="inline">struct·tcp_info</code>·filled·in·when·asking·for·<code·class="inline">TCP_INFO</code>.·To·be·able·to·access | 2053 | <code·class="inline">struct·tcp_info</code>·filled·in·when·asking·for·<code·class="inline">TCP_INFO</code>.·To·be·able·to·access |
| 2054 | this·information,·you·need·to·know·the·following:</p><ul><li>The·numeric·value·of·protocol·level·<code·class="inline">IPPROTO_TCP</code></li><li>The·numeric·value·of·option·<code·class="inline">TCP_INFO</code></li><li>The·size·of·<code·class="inline">struct·tcp_info</code></li><li>The·size·and·offset·of·the·specific·field</li></ul><p>By·inspecting·the·headers·or·writing·a·small·C·program,·it·is·found·that | 2054 | this·information,·you·need·to·know·the·following:</p><ul><li>The·numeric·value·of·protocol·level·<code·class="inline">IPPROTO_TCP</code></li><li>The·numeric·value·of·option·<code·class="inline">TCP_INFO</code></li><li>The·size·of·<code·class="inline">struct·tcp_info</code></li><li>The·size·and·offset·of·the·specific·field</li></ul><p>By·inspecting·the·headers·or·writing·a·small·C·program,·it·is·found·that |
| 2055 | <code·class="inline">IPPROTO_TCP</code>·is·6,·<code·class="inline">TCP_INFO</code>·is·11,·the·structure·size·is·92·(bytes),·the | 2055 | <code·class="inline">IPPROTO_TCP</code>·is·6,·<code·class="inline">TCP_INFO</code>·is·11,·the·structure·size·is·92·(bytes),·the |
| 2056 | offset·of·<code·class="inline">tcpi_sacked</code>·is·28·bytes,·and·the·value·is·a·32-bit·integer.·The | 2056 | offset·of·<code·class="inline">tcpi_sacked</code>·is·28·bytes,·and·the·value·is·a·32-bit·integer.·The |
| 2057 | following·code·can·be·used·to·retrieve·the·value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">get_tcpi_sacked</span><span·class="p"·data-group-id=" | 2057 | following·code·can·be·used·to·retrieve·the·value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">get_tcpi_sacked</span><span·class="p"·data-group-id="3609825755-1">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="3609825755-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 2058 | ····</span><span·class="p"·data-group-id=" | 2058 | ····</span><span·class="p"·data-group-id="3609825755-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3609825755-3">[</span><span·class="p"·data-group-id="3609825755-4">{</span><span·class="ss">raw</span><span·class="p">,</span><span·class="p">_</span><sp[·...·truncated·by·diffoscope;·len:·943,·SHA:·84c73d323a96bd3c9f0d90a6899b808d1cfb94b42da3c64dab81a8d3989009e9·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 2059 | ····</span><span·class="p"·data-group-id=" | 2059 | ····</span><span·class="p"·data-group-id="3609825755-8"><<</span><span·class="p">_</span><span·class="p">:</span><span·class="mi">28</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="n">TcpiSacked</span><span·class="p">:</span><span·class="mi">3[·...·truncated·by·diffoscope;·len:·205,·SHA:·4116e5fc2e17d86f6fcda45eb06fb9a650b4e08d60cb42a13115e89106084d60·...·]-8">>></span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w"> |
| 2060 | ····</span><span·class="n">TcpiSacked</span><span·class="p">.</span></code></pre><p>Preferably,·you·would·check·the·machine·type,·the·operating·system,·and·the | 2060 | ····</span><span·class="n">TcpiSacked</span><span·class="p">.</span></code></pre><p>Preferably,·you·would·check·the·machine·type,·the·operating·system,·and·the |
| 2061 | Kernel·version·before·executing·anything·similar·to·this·code.</p> | 2061 | Kernel·version·before·executing·anything·similar·to·this·code.</p> |
| 2062 | ··</section> | 2062 | ··</section> |
| 2063 | </section> | 2063 | </section> |
| 2064 | <section·class="detail"·id="getstat/1"> | 2064 | <section·class="detail"·id="getstat/1"> |
| 2065 | ··<div·class="detail-header"> | 2065 | ··<div·class="detail-header"> |
| Offset 2381, 15 lines modified | Offset 2381, 15 lines modified | ||
| 2381 | ······<div·class="specs"> | 2381 | ······<div·class="specs"> |
| 2382 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor(Socket)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>()·when·Socket·::·<a·href="#t:socket/0">socket</a>().</pre> | 2382 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor(Socket)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>()·when·Socket·::·<a·href="#t:socket/0">socket</a>().</pre> |
| 2383 | ······</div> | 2383 | ······</div> |
| 2384 | <p>Start·a·socket·monitor.</p><p>If·the·<code·class="inline">Socket</code>·to·monitor·doesn't·exist·or·when·the·monitor·is·triggered, | 2384 | <p>Start·a·socket·monitor.</p><p>If·the·<code·class="inline">Socket</code>·to·monitor·doesn't·exist·or·when·the·monitor·is·triggered, |
| 2385 | a·<code·class="inline">'DOWN'</code>·message·is·sent·that·has·the·following·pattern:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ····</span><span·class="p"·data-group-id=" | 2385 | a·<code·class="inline">'DOWN'</code>·message·is·sent·that·has·the·following·pattern:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ····</span><span·class="p"·data-group-id="3685263134-1">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MonitorRef</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">,</span><span·class="w">[·...·truncated·by·diffoscope;·len:·153,·SHA:·fa036ad48592baddf08392dcf2877b0409edf5b418551f34792cc0404d4f5020·...·]-1">}</span></code></pre><ul><li><p><strong><code·class="inline">MonitorRef</code></strong>·-·The·return·value·from·this·function.</p></li><li><p><strong><code·class="inline">Type</code></strong>·-·The·type·of·socket,·can·be·one·of·the·following |
| 2386 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a>s:·<code·class="inline">port</code>·or·<code·class="inline">socket</code>.</p></li><li><p><strong><code·class="inline">Object</code></strong>·-·The·monitored·entity,·the·socket,·which·triggered·the·event.</p></li><li><p><strong><code·class="inline">Info</code></strong>·-·Either·the·termination·reason·of·the·socket·or·<code·class="inline">nosock</code> | 2386 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0"><code·class="inline">atom/0</code></a>s:·<code·class="inline">port</code>·or·<code·class="inline">socket</code>.</p></li><li><p><strong><code·class="inline">Object</code></strong>·-·The·monitored·entity,·the·socket,·which·triggered·the·event.</p></li><li><p><strong><code·class="inline">Info</code></strong>·-·Either·the·termination·reason·of·the·socket·or·<code·class="inline">nosock</code> |
| 2387 | (the·<code·class="inline">Socket</code>·did·not·exist·when·this·function·was·called).</p></li></ul><p>Making·several·calls·to·<a·href="#monitor/1"><code·class="inline">inet:monitor/1</code></a>·for·the·same·<code·class="inline">Socket</code> | 2387 | (the·<code·class="inline">Socket</code>·did·not·exist·when·this·function·was·called).</p></li></ul><p>Making·several·calls·to·<a·href="#monitor/1"><code·class="inline">inet:monitor/1</code></a>·for·the·same·<code·class="inline">Socket</code> |
| 2388 | is·not·an·error;·one·monitor·is·created·per·call.</p><p>The·monitor·is·triggered·when·the·socket·is·closed·in·any·way·such·as | 2388 | is·not·an·error;·one·monitor·is·created·per·call.</p><p>The·monitor·is·triggered·when·the·socket·is·closed·in·any·way·such·as |
| 2389 | an·API·call,·remote·end·close,·closed·by·signal·when·owner·exits,·...</p> | 2389 | an·API·call,·remote·end·close,·closed·by·signal·when·owner·exits,·...</p> |
| 2390 | ··</section> | 2390 | ··</section> |
| 2391 | </section> | 2391 | </section> |
| 2392 | <section·class="detail"·id="ntoa/1"> | 2392 | <section·class="detail"·id="ntoa/1"> |
| Offset 3222, 15 lines modified | Offset 3222, 15 lines modified | ||
| 3222 | ······<p·class="built-using"> | 3222 | ······<p·class="built-using"> |
| 3223 | ········Built·using | 3223 | ········Built·using |
| 3224 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3224 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3225 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3225 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3226 | ······</p> | 3226 | ······</p> |
| 3227 | <p>Copyright·©·1996-202 | 3227 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3228 | ····</footer> | 3228 | ····</footer> |
| 3229 | ··</div> | 3229 | ··</div> |
| 3230 | </main> | 3230 | </main> |
| 3231 | </div> | 3231 | </div> |
| 3232 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3232 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3233 | ··<script> | 3233 | ··<script> |
| 3234 | ··let·initialized·=·false; | 3234 | ··let·initialized·=·false; |
| Offset 175, 23 lines modified | Offset 175, 23 lines modified | ||
| 175 | <p>The·following·data·types·concern·the·DNS·client:</p><h2·id="module-example"·class="section-heading"> | 175 | <p>The·following·data·types·concern·the·DNS·client:</p><h2·id="module-example"·class="section-heading"> |
| 176 | ··<a·href="#module-example"·class="hover-link"> | 176 | ··<a·href="#module-example"·class="hover-link"> |
| 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 178 | ··</a> | 178 | ··</a> |
| 179 | ··<span·class="text">Example</span> | 179 | ··<span·class="text">Example</span> |
| 180 | </h2> | 180 | </h2> |
| 181 | <p>This·access·functions·example·shows·how·<a·href="#lookup/3"><code·class="inline">lookup/3</code></a>·can·be·implemented·using | 181 | <p>This·access·functions·example·shows·how·<a·href="#lookup/3"><code·class="inline">lookup/3</code></a>·can·be·implemented·using |
| 182 | <a·href="#resolve/3"><code·class="inline">resolve/3</code></a>·from·outside·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">example_lookup</span><span·class="p"·data-group-id=" | 182 | <a·href="#resolve/3"><code·class="inline">resolve/3</code></a>·from·outside·the·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">example_lookup</span><span·class="p"·data-group-id="2578986031-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Class</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p"·data-group-id="2578986031-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">inet_res</span><span·class="p">:</span><span·class="nf">resolve</span><span·class="p"·data-group-id=" | 183 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">inet_res</span><span·class="p">:</span><span·class="nf">resolve</span><span·class="p"·data-group-id="2578986031-2">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Class</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p"·data-group-id="2578986031-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 184 | ········</span><span·class="p"·data-group-id=" | 184 | ········</span><span·class="p"·data-group-id="2578986031-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Msg</span><span·class="p"·data-group-id="2578986031-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ············</span><span·class="p"·data-group-id=" | 185 | ············</span><span·class="p"·data-group-id="2578986031-4">[</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id="2578986031-5">(</span><span·class="n">RR</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">data</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·23f0f7161f7c60c8559f6339f08b83123c33c0ac061f1651fcaec70b7619e1e0·...·]-5">)</span><span·class="w"> |
| 186 | ·············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">RR</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id=" | 186 | ·············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">RR</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id="2578986031-6">(</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">anlist</span><span·class="p"·data-group-id="2578986031-6">)</span><span·class="p">,</span><span·class="w"> |
| 187 | ·················</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 187 | ·················</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id="2578986031-7">(</span><span·class="n">RR</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">type</span><span·class="p"·data-group-id="2578986031-7">)</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">,</span><span·class="w"> |
| 188 | ·················</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 188 | ·················</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id="2578986031-8">(</span><span·class="n">RR</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">class</span><span·class="p"·data-group-id="2578986031-8">)</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·64,·SHA:·6c2fd15738dc0176b003e0584a24399dea6013ab624ca8e01b4c9e6da8c2f529·...·]-4">]</span><span·class="p">;</span><span·class="w"> |
| 189 | ········</span><span·class="p"·data-group-id=" | 189 | ········</span><span·class="p"·data-group-id="2578986031-9">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="2578986031-9">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ············</span><span·class="p"·data-group-id=" | 190 | ············</span><span·class="p"·data-group-id="2578986031-10">[</span><span·class="p"·data-group-id="2578986031-10">]</span><span·class="w"> |
| 191 | ·····</span><span·class="k">end</span><span·class="p">.</span></code></pre> | 191 | ·····</span><span·class="k">end</span><span·class="p">.</span></code></pre> |
| 192 | ····</section> | 192 | ····</section> |
| 193 | </div> | 193 | </div> |
| 194 | ··<section·id="summary"·class="details-list"> | 194 | ··<section·id="summary"·class="details-list"> |
| 195 | ····<h1·class="section-heading"> | 195 | ····<h1·class="section-heading"> |
| Offset 584, 65 lines modified | Offset 584, 65 lines modified | ||
| 584 | ··········<pre·translate="no"><span·class="attribute">-type</span>·dns_msg()·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 584 | ··········<pre·translate="no"><span·class="attribute">-type</span>·dns_msg()·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 585 | ······</div> | 585 | ······</div> |
| 586 | <p>A·DNS·message.</p><p>This·is·the·start·of·a·hierarchy·of·opaque·data·structures·that·can·be | 586 | <p>A·DNS·message.</p><p>This·is·the·start·of·a·hierarchy·of·opaque·data·structures·that·can·be |
| 587 | examined·with·access·functions·in·<code·class="inline">inet_dns</code>,·which·return·lists·of | 587 | examined·with·access·functions·in·<code·class="inline">inet_dns</code>,·which·return·lists·of |
| 588 | <code·class="inline">{Field,Value}</code>·tuples.·The·arity·2·functions·return·the·value | 588 | <code·class="inline">{Field,Value}</code>·tuples.·The·arity·2·functions·return·the·value |
| 589 | for·a·specified·field.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">dns_msg</span><span·class="p"·data-group-id=" | 589 | for·a·specified·field.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">dns_msg</span><span·class="p"·data-group-id="4561797278-1">(</span><span·class="p"·data-group-id="4561797278-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">DnsMsg</span><span·class="w"> |
| 590 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id=" | 590 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id="4561797278-2">(</span><span·class="n">DnsMsg</span><span·class="p"·data-group-id="4561797278-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 591 | ········</span><span·class="p"·data-group-id=" | 591 | ········</span><span·class="p"·data-group-id="4561797278-3">[</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-4">{</span><span·class="ss">header</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_header</span><span·class="p"·data-group-id="4561797278-5">[·...·truncated·by·diffoscope;·len:·102,·SHA:·7581afef808be49af2882bdf637db0828b1b6d4b251ad49319e20318521684cc·...·]-4">}</span><span·class="w"> |
| 592 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 592 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-6">{</span><span·class="ss">qdlist</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_query</span><span·class="p"·data-group-id="4561797278-7">(</span><span·class="p"·data-group-id="4561797278-7">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·f1a411697dbc9ecc1648a8983af5f4acfbec0e14ff6d57b83d89df735da321d2·...·]-6">}</span><span·class="w"> |
| 593 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 593 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-8">{</span><span·class="ss">anlist</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_rr</span><span·class="p"·data-group-id="4561797278-9">(</span><span·class="p"·data-group-id="4561797278-9">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-8">}</span><span·class="w"> |
| 594 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 594 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-10">{</span><span·class="ss">nslist</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_rr</span><span·class="p"·data-group-id="4561797278-11">(</span><span·class="p"·data-group-id="4561797278-11">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·f1a411697dbc9ecc1648a8983af5f4acfbec0e14ff6d57b83d89df735da321d2·...·]-10">}</span><span·class="w"> |
| 595 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 595 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-12">{</span><span·class="ss">arlist</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_rr</span><span·class="p"·data-group-id="4561797278-13">(</span><span·class="p"·data-group-id="4561797278-13">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·102,·SHA:·aaec934b60755ab2a2689cf9e5d47f3124a4b1eb8656c85e31774baac7ef8031·...·]-3">]</span><span·class="w"> |
| 596 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id=" | 596 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id="4561797278-14">(</span><span·class="n">DnsMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">header</span><span·class="p"·data-group-id="4561797278-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·133,·SHA:·c5e5d5ba0c455d5f78a7ad5e0cf4fc995ce5ed97e46f61a1839ebd53c1dba15e·...·]-15">)</span><span·class="w">·</span><span·class="c1">%·for·example</span><span·class="w"> |
| 597 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id=" | 597 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">msg</span><span·class="p"·data-group-id="4561797278-16">(</span><span·class="n">DnsMsg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Field</span><span·class="p"·data-group-id="4561797278-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Value</span><span·class="w"> |
| 598 | </span><span·class="nf">dns_header</span><span·class="p"·data-group-id=" | 598 | </span><span·class="nf">dns_header</span><span·class="p"·data-group-id="4561797278-17">(</span><span·class="p"·data-group-id="4561797278-17">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">DnsHeader</span><span·class="w"> |
| 599 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">header</span><span·class="p"·data-group-id=" | 599 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">header</span><span·class="p"·data-group-id="4561797278-18">(</span><span·class="n">DnsHeader</span><span·class="p"·data-group-id="4561797278-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 600 | ········</span><span·class="p"·data-group-id=" | 600 | ········</span><span·class="p"·data-group-id="4561797278-19">[</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-20">{</span><span·class="ss">id</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-21">(</s[·...·truncated·by·diffoscope;·len:·99,·SHA:·3f6211eaab3f8fc91ec9676e0acee9e2d6b482a825275d48069ddb8fe465e545·...·]-20">}</span><span·class="w"> |
| 601 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 601 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-22">{</span><span·class="ss">qr</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-23">(</span><span·class="p"·data-group-id="4561797278-23">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-22">}</span><span·class="w"> |
| 602 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 602 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-24">{</span><span·class="ss">opcode</span><span·class="p">,</span><span·class="w">·</span><span·class="k">query</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">iquery</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·329,·SHA:·02f01660d7312aa4db54bd61751b0421baeb92fefbdbf2bdd3482c3e45356c54·...·]-24">}</span><span·class="w"> |
| 603 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 603 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-26">{</span><span·class="ss">aa</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-27">(</span><span·class="p"·data-group-id="4561797278-27">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-26">}</span><span·class="w"> |
| 604 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 604 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-28">{</span><span·class="ss">tc</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-29">(</span><span·class="p"·data-group-id="4561797278-29">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-28">}</span><span·class="w"> |
| 605 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 605 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-30">{</span><span·class="ss">rd</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-31">(</span><span·class="p"·data-group-id="4561797278-31">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-30">}</span><span·class="w"> |
| 606 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 606 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-32">{</span><span·class="ss">ra</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-33">(</span><span·class="p"·data-group-id="4561797278-33">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-32">}</span><span·class="w"> |
| 607 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 607 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-34">{</span><span·class="ss">pr</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">boolean</span><span·class="p"·data-group-id="4561797278-35">(</span><span·class="p"·data-group-id="4561797278-35">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·8ecfc386c3fc658737dbf3257e08aacc0de62485d1a64a6cec6ad11a478ef81d·...·]-34">}</span><span·class="w"> |
| 608 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 608 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-36">{</span><span·class="ss">rcode</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-37">(</span><span·class="mi">0</span><span·class="p">.</span><span·class="p">.</spa[·...·truncated·by·diffoscope;·len:·201,·SHA:·bc8b1ef14183623a69a8f6618e2e8d835fe1c1c4c12f6a9ab1e94c2f3e3deded·...·]-19">]</span><span·class="w"> |
| 609 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">header</span><span·class="p"·data-group-id=" | 609 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">header</span><span·class="p"·data-group-id="4561797278-38">(</span><span·class="n">DnsHeader</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Field</span><span·class="p"·data-group-id="4561797278-38">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Value</span><span·class="w"> |
| 610 | </span><span·class="nf">query_type</span><span·class="p"·data-group-id=" | 610 | </span><span·class="nf">query_type</span><span·class="p"·data-group-id="4561797278-39">(</span><span·class="p"·data-group-id="4561797278-39">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">axfr</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·424,·SHA:·c96735e62d16c20b46d634dded4f2febe4e53441793f279b9d8e295f4b6c9eb9·...·]-40">)</span><span·class="w"> |
| 611 | </span><span·class="nf">dns_query</span><span·class="p"·data-group-id=" | 611 | </span><span·class="nf">dns_query</span><span·class="p"·data-group-id="4561797278-41">(</span><span·class="p"·data-group-id="4561797278-41">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">DnsQuery</span><span·class="w"> |
| 612 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">dns_query</span><span·class="p"·data-group-id=" | 612 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">dns_query</span><span·class="p"·data-group-id="4561797278-42">(</span><span·class="n">DnsQuery</span><span·class="p"·data-group-id="4561797278-42">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 613 | ········</span><span·class="p"·data-group-id=" | 613 | ········</span><span·class="p"·data-group-id="4561797278-43">[</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-44">{</span><span·class="ss">domain</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_name</span><span·class="p"·data-group-id="4561797278-45"[·...·truncated·by·diffoscope;·len:·104,·SHA:·9560b7f396a363cc1108b08a8ad101e3f6cadcf45a42606d7459a4d11e420729·...·]-44">}</span><span·class="w"> |
| 614 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 614 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-46">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">query_type</span><span·class="p"·data-group-id="4561797278-47">(</span><span·class="p"·data-group-id="4561797278-47">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·6ed2728035f0ecf94a6b7261ce7799dff098ff10a92e2b16e85e58a5b40f3054·...·]-46">}</span><span·class="w"> |
| 615 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 615 | ········</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-48">{</span><span·class="ss">class</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_class</span><span·class="p"·data-group-id="4561797278-49">(</span><span·class="p"·data-group-id="4561797278-49">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·104,·SHA:·a9e4ceec8c306ce3445c7f29f156b863d6ff022b1d54969e0f2a438178df9190·...·]-43">]</span><span·class="w"> |
| 616 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">dns_query</span><span·class="p"·data-group-id=" | 616 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">dns_query</span><span·class="p"·data-group-id="4561797278-50">(</span><span·class="n">DnsQuery</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Field</span><span·class="p"·data-group-id="4561797278-50">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Value</span><span·class="w"> |
| 617 | </span><span·class="nf">dns_rr</span><span·class="p"·data-group-id=" | 617 | </span><span·class="nf">dns_rr</span><span·class="p"·data-group-id="4561797278-51">(</span><span·class="p"·data-group-id="4561797278-51">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">DnsRr</span><span·class="w"> |
| 618 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 618 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id="4561797278-52">(</span><span·class="n">DnsRr</span><span·class="p"·data-group-id="4561797278-52">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">DnsRrFields</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">DnsRrOptFields</span><span·class="w"> |
| 619 | ····</span><span·class="n">DnsRrFields</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 619 | ····</span><span·class="n">DnsRrFields</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-53">[</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-54">{</span><span·class="ss">domain</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_name</span><span·class="p"·data-group-id="4561797278-55"[·...·truncated·by·diffoscope;·len:·104,·SHA:·dd84ef4a7c3ad05e4a1f60667b929afc053f5a28a5a40503b68099dd713a8b15·...·]-54">}</span><span·class="w"> |
| 620 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 620 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-56">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_rr_type</span><span·class="p"·data-group-id="4561797278-57">(</span><span·class="p"·data-group-id="4561797278-57">)</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·d9a2d521f7cc0d994603f43eb7766e818a565b8099991c627cdcfcf0367dadfd·...·]-56">}</span><span·class="w"> |
| 621 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 621 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-58">{</span><span·class="ss">class</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_class</span><span·class="p"·data-group-id="4561797278-59">(</span><span·class="p"·data-group-id="4561797278-59">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·6ed2728035f0ecf94a6b7261ce7799dff098ff10a92e2b16e85e58a5b40f3054·...·]-58">}</span><span·class="w"> |
| 622 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 622 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-60">{</span><span·class="ss">ttl</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-61">(</span><span·class="p"·data-group-id="4561797278-61">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·28f31e46146e72e5b4ec574705a55263bbeb9f29ec8e1800c34d4103e1ebc637·...·]-60">}</span><span·class="w"> |
| 623 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 623 | ··················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-62">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_data</span><span·class="p"·data-group-id="4561797278-63">(</span><span·class="p"·data-group-id="4561797278-63">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·102,·SHA:·3db1cdc24bdd1d2630411d17619a445e6584cf9bbad68210095c859a63c7ba9e·...·]-53">]</span><span·class="w"> |
| 624 | ····</span><span·class="n">DnsRrOptFields</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 624 | ····</span><span·class="n">DnsRrOptFields</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-64">[</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-65">{</span><span·class="ss">domain</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_name</span><span·class="p"·data-group-id="4561797278-66"[·...·truncated·by·diffoscope;·len:·104,·SHA:·0a2d2652c636e1c37ff2b131058a816107a419f9c0e10a12135cdb95c766a4b6·...·]-65">}</span><span·class="w"> |
| 625 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 625 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-67">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">opt</span><span·class="p"·data-group-id="4561797278-67">}</span><span·class="w"> |
| 626 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 626 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-68">{</span><span·class="ss">udp_payload_size</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-69">(</span><span·class="p"·data-group-id="4561797278-69">)</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·99f4ac432cf8d3248f6aad0a844162bdeb04af0600d540dbb6fda69466c98656·...·]-68">}</span><span·class="w"> |
| 627 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 627 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-70">{</span><span·class="ss">ext_rcode</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-71">(</span><span·class="p"·data-group-id="4561797278-71">)</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·81bbe03101c7cf624a18de33f16db82c0c2118411562bdfff7d813808c5fba85·...·]-70">}</span><span·class="w"> |
| 628 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 628 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-72">{</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-73">(</span><span·class="p"·data-group-id="4561797278-73">)</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·6ed2728035f0ecf94a6b7261ce7799dff098ff10a92e2b16e85e58a5b40f3054·...·]-72">}</span><span·class="w"> |
| 629 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 629 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-74">{</span><span·class="ss">z</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="4561797278-75">(</span><span·class="p"·data-group-id="4561797278-75">)</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·3600f4a9804a2f5d1d2c42f7fd06943428d7793ad96d4841daf0ebfb939a23d4·...·]-74">}</span><span·class="w"> |
| 630 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 630 | ·····················</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4561797278-76">{</span><span·class="ss">data</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">dns_data</span><span·class="p"·data-group-id="4561797278-77">(</span><span·class="p"·data-group-id="4561797278-77">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·102,·SHA:·682d6cfdfc0add11eff640ac748f64ee646502bdf32b0abcba9e13434e36775b·...·]-64">]</span><span·class="w"> |
| 631 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 631 | ····</span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">rr</span><span·class="p"·data-group-id="4561797278-78">(</span><span·class="n">DnsRr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Field</span><span·class="p"·data-group-id="4561797278-78">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·472,·SHA:·b230fbc10495b2de2ba462d7a793daa97aca194a0e4f41b1b138353462022f8b·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">msg</span><span·class="p">;</span><span·class="w"> |
| 632 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id=" | 632 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id="3188006476-3">(</span><span·class="nf">dns_header</span><span·class="p"·data-group-id="3188006476-4">(</span><span·class="p"·data-group-id="3188006476-4">)</span><span·class="p"·data-group-id="3188006476-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">header</span><span·class="p">;</span><span·class="w"> |
| 633 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id=" | 633 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id="3188006476-5">(</span><span·class="nf">dns_query</span><span·class="p"·data-group-id="3188006476-6">(</span><span·class="p"·data-group-id="3188006476-6">)</span><span·class="p"·data-group-id="3188006476-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">dns_query</span><span·class="p">;</span><span·class="w"> |
| 634 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id=" | 634 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id="3188006476-7">(</span><span·class="nf">dns_rr</span><span·class="p"·data-group-id="3188006476-8">(</span><span·class="p"·data-group-id="3188006476-8">)</span><span·class="p"·data-group-id="3188006476-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">rr</span><span·class="p">;</span><span·class="w"> |
| 635 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id=" | 635 | </span><span·class="nc">inet_dns</span><span·class="p">:</span><span·class="nf">record_type</span><span·class="p"·data-group-id="3188006476-9">(</span><span·class="p">_</span><span·class="p"·data-group-id="3188006476-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p">.</span></code></pre><p>So,·<code·class="inline">inet_dns:(inet_dns:record_type(X))(X)</code>·converts·any·of·these·data |
| 636 | structures·into·a·<code·class="inline">{Field,Value}</code>·list.</p> | 636 | structures·into·a·<code·class="inline">{Field,Value}</code>·list.</p> |
| 637 | ··</section> | 637 | ··</section> |
| 638 | </section> | 638 | </section> |
| 639 | <section·class="detail"·id="t:dns_name/0"> | 639 | <section·class="detail"·id="t:dns_name/0"> |
| 640 | ··<div·class="detail-header"> | 640 | ··<div·class="detail-header"> |
| 641 | ····<a·href="#t:dns_name/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 641 | ····<a·href="#t:dns_name/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| Offset 1456, 15 lines modified | Offset 1456, 15 lines modified | ||
| 1456 | ······<p·class="built-using"> | 1456 | ······<p·class="built-using"> |
| 1457 | ········Built·using | 1457 | ········Built·using |
| 1458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1460 | ······</p> | 1460 | ······</p> |
| 1461 | <p>Copyright·©·1996-202 | 1461 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1462 | ····</footer> | 1462 | ····</footer> |
| 1463 | ··</div> | 1463 | ··</div> |
| 1464 | </main> | 1464 | </main> |
| 1465 | </div> | 1465 | </div> |
| 1466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1467 | ··<script> | 1467 | ··<script> |
| 1468 | ··let·initialized·=·false; | 1468 | ··let·initialized·=·false; |
| Offset 187, 15 lines modified | Offset 187, 15 lines modified | ||
| 187 | ······<p·class="built-using"> | 187 | ······<p·class="built-using"> |
| 188 | ········Built·using | 188 | ········Built·using |
| 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 191 | ······</p> | 191 | ······</p> |
| 192 | <p>Copyright·©·1996-202 | 192 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 193 | ····</footer> | 193 | ····</footer> |
| 194 | ··</div> | 194 | ··</div> |
| 195 | </main> | 195 | </main> |
| 196 | </div> | 196 | </div> |
| 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 198 | ··<script> | 198 | ··<script> |
| 199 | ··let·initialized·=·false; | 199 | ··let·initialized·=·false; |
| Offset 436, 15 lines modified | Offset 436, 15 lines modified | ||
| 436 | ······<p·class="built-using"> | 436 | ······<p·class="built-using"> |
| 437 | ········Built·using | 437 | ········Built·using |
| 438 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 438 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 439 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 439 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 440 | ······</p> | 440 | ······</p> |
| 441 | <p>Copyright·©·1996-202 | 441 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 442 | ····</footer> | 442 | ····</footer> |
| 443 | ··</div> | 443 | ··</div> |
| 444 | </main> | 444 | </main> |
| 445 | </div> | 445 | </div> |
| 446 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 446 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 447 | ··<script> | 447 | ··<script> |
| 448 | ··let·initialized·=·false; | 448 | ··let·initialized·=·false; |
| Offset 126, 34 lines modified | Offset 126, 34 lines modified | ||
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | ····<section·id="moduledoc"> | 127 | ····<section·id="moduledoc"> |
| 128 | <p>API·module·for·Logger,·the·standard·logging·facility·in·Erlang/OTP.</p><p>This·module·implements·the·main·API·for·logging·in·Erlang/OTP.·To·create·a·log | 128 | <p>API·module·for·Logger,·the·standard·logging·facility·in·Erlang/OTP.</p><p>This·module·implements·the·main·API·for·logging·in·Erlang/OTP.·To·create·a·log |
| 129 | event,·use·the·<a·href="#logging-api-functions">API·functions</a>·or·the·log | 129 | event,·use·the·<a·href="#logging-api-functions">API·functions</a>·or·the·log |
| 130 | <a·href="#module-macros">macros</a>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">LOG_ERROR</span><span·class="p"·data-group-id=" | 130 | <a·href="#module-macros">macros</a>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">LOG_ERROR</span><span·class="p"·data-group-id="3727433912-1">(</span><span·class="s">"error·happened·because:·</span><span·class="si">~p</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3727433912-2">[</span><span·class="n">Reason</s[·...·truncated·by·diffoscope;·len:·98,·SHA:·671c40132b8d73b3ef54b013a9d414698aa0bbd452b2a25651bca60b70eb2558·...·]-1">)</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%·With·macro</span><span·class="w"> |
| 131 | </span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id=" | 131 | </span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="3727433912-3">(</span><span·class="s">"error·happened·because:·</span><span·class="si">~p</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3727433912-4">[</span><span·class="n">Reason</s[·...·truncated·by·diffoscope;·len:·98,·SHA:·0459e3b5b9687692c64469776c38e71798db872cb301a5761998646c06c5f78c·...·]-3">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·Without·macro</span></code></pre><p>To·configure·the·Logger·backend,·use |
| 132 | <a·href="kernel_app.html#logger">Kernel·configuration·parameters</a>·or | 132 | <a·href="kernel_app.html#logger">Kernel·configuration·parameters</a>·or |
| 133 | <a·href="#configuration-api-functions">configuration·functions</a>·in·the·Logger·API.</p><p>By·default,·the·Kernel·application·installs·one·log·handler·at·system·start. | 133 | <a·href="#configuration-api-functions">configuration·functions</a>·in·the·Logger·API.</p><p>By·default,·the·Kernel·application·installs·one·log·handler·at·system·start. |
| 134 | This·handler·is·named·<code·class="inline">default</code>.·It·receives·and·processes·standard·log·events | 134 | This·handler·is·named·<code·class="inline">default</code>.·It·receives·and·processes·standard·log·events |
| 135 | produced·by·the·Erlang·runtime·system,·standard·behaviours·and·different | 135 | produced·by·the·Erlang·runtime·system,·standard·behaviours·and·different |
| 136 | Erlang/OTP·applications.·The·log·events·are·by·default·printed·to·the·terminal.</p><p>If·you·want·your·systems·logs·to·be·printed·to·a·file·instead,·you·must | 136 | Erlang/OTP·applications.·The·log·events·are·by·default·printed·to·the·terminal.</p><p>If·you·want·your·systems·logs·to·be·printed·to·a·file·instead,·you·must |
| 137 | configure·the·default·handler·to·do·so.·The·simplest·way·is·to·include·the | 137 | configure·the·default·handler·to·do·so.·The·simplest·way·is·to·include·the |
| 138 | following·in·your·<a·href="config.html"><code·class="inline">sys.config</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 138 | following·in·your·<a·href="config.html"><code·class="inline">sys.config</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0348585395-1">[</span><span·class="p"·data-group-id="0348585395-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 139 | ··</span><span·class="p"·data-group-id=" | 139 | ··</span><span·class="p"·data-group-id="0348585395-3">[</span><span·class="p"·data-group-id="0348585395-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 140 | ····</span><span·class="p"·data-group-id=" | 140 | ····</span><span·class="p"·data-group-id="0348585395-5">[</span><span·class="p"·data-group-id="0348585395-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 141 | ······</span><span·class="p"·data-group-id=" | 141 | ······</span><span·class="p"·data-group-id="0348585395-7">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0348585395-8">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=>[·...·truncated·by·diffoscope;·len:·494,·SHA:·597e6ae19b8d713663abcff353195b83cf55725be4d65a6edf77164c6355f598·...·]-1">]</span><span·class="p">.</span></code></pre><p>For·more·information·about:</p><ul><li>the·Logger·facility·in·general,·see·the·<a·href="logger_chapter.html">User's·Guide</a>.</li><li>how·to·configure·Logger,·see·the |
| 142 | <a·href="logger_chapter.html#configuration">Configuration</a>·section·in·the·User's·Guide.</li><li>the·built-in·handlers,·see·<a·href="logger_std_h.html"><code·class="inline">logger_std_h</code></a>·and·<a·href="logger_disk_log_h.html"><code·class="inline">logger_disk_log_h</code></a>.</li><li>the·built-in·formatter,·see·<a·href="logger_formatter.html"><code·class="inline">logger_formatter</code></a>.</li><li>built-in·filters,·see·<a·href="logger_filters.html"><code·class="inline">logger_filters</code></a>.</li></ul><h2·id="module-macros"·class="section-heading"> | 142 | <a·href="logger_chapter.html#configuration">Configuration</a>·section·in·the·User's·Guide.</li><li>the·built-in·handlers,·see·<a·href="logger_std_h.html"><code·class="inline">logger_std_h</code></a>·and·<a·href="logger_disk_log_h.html"><code·class="inline">logger_disk_log_h</code></a>.</li><li>the·built-in·formatter,·see·<a·href="logger_formatter.html"><code·class="inline">logger_formatter</code></a>.</li><li>built-in·filters,·see·<a·href="logger_filters.html"><code·class="inline">logger_filters</code></a>.</li></ul><h2·id="module-macros"·class="section-heading"> |
| 143 | ··<a·href="#module-macros"·class="hover-link"> | 143 | ··<a·href="#module-macros"·class="hover-link"> |
| 144 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 144 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 145 | ··</a> | 145 | ··</a> |
| 146 | ··<span·class="text">Macros</span> | 146 | ··<span·class="text">Macros</span> |
| 147 | </h2> | 147 | </h2> |
| 148 | <p>The·following·macros·are·defined·in·<code·class="inline">logger.hrl</code>,·which·is·included·in·a·module | 148 | <p>The·following·macros·are·defined·in·<code·class="inline">logger.hrl</code>,·which·is·included·in·a·module |
| 149 | with·the·directive</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 149 | with·the·directive</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="0364353858-1">(</span><span·class="s">"kernel/include/logger.hrl"</span><span·class="p"·data-group-id="0364353858-1">)</span><span·class="p">.</span></code></pre><ul><li><code·class="inline">?LOG_EMERGENCY(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_EMERGENCY(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_ALERT(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_ALERT(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_CRITICAL(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_CRITICAL(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_ERROR(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_ERROR(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_WARNING(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_WARNING(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_NOTICE(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_NOTICE(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_INFO(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_INFO(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG_DEBUG(StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG_DEBUG(FunOrFormat,Args[,Metadata])</code></li><li><code·class="inline">?LOG(Level,StringOrReport[,Metadata])</code></li><li><code·class="inline">?LOG(Level,FunOrFormat,Args[,Metadata])</code></li></ul><p>All·macros·expand·to·a·call·to·Logger,·where·<code·class="inline">Level</code>·is·taken·from·the·macro |
| 150 | name,·or·from·the·first·argument·in·the·case·of·the·<code·class="inline">?LOG</code>·macro.·Location·data | 150 | name,·or·from·the·first·argument·in·the·case·of·the·<code·class="inline">?LOG</code>·macro.·Location·data |
| 151 | is·added·to·the·metadata·as·described·under·the·<a·href="#t:metadata/0"><code·class="inline">metadata/0</code></a>·type·definition.</p><p>The·call·is·wrapped·in·a·case·statement·and·will·be·evaluated·only·if·<code·class="inline">Level</code>·is | 151 | is·added·to·the·metadata·as·described·under·the·<a·href="#t:metadata/0"><code·class="inline">metadata/0</code></a>·type·definition.</p><p>The·call·is·wrapped·in·a·case·statement·and·will·be·evaluated·only·if·<code·class="inline">Level</code>·is |
| 152 | equal·to·or·below·the·configured·log·level.</p><h2·id="module-see-also"·class="section-heading"> | 152 | equal·to·or·below·the·configured·log·level.</p><h2·id="module-see-also"·class="section-heading"> |
| 153 | ··<a·href="#module-see-also"·class="hover-link"> | 153 | ··<a·href="#module-see-also"·class="hover-link"> |
| 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 154 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 155 | ··</a> | 155 | ··</a> |
| 156 | ··<span·class="text">See·Also</span> | 156 | ··<span·class="text">See·Also</span> |
| Offset 2304, 21 lines modified | Offset 2304, 21 lines modified | ||
| 2304 | ·········(Level·::·<a·href="#t:level/0">level</a>(),·Fun·::·<a·href="#t:msg_fun/0">msg_fun</a>(),·FunArgs·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·ok.</pre> | 2304 | ·········(Level·::·<a·href="#t:level/0">level</a>(),·Fun·::·<a·href="#t:msg_fun/0">msg_fun</a>(),·FunArgs·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·ok.</pre> |
| 2305 | ······</div> | 2305 | ······</div> |
| 2306 | <p>Create·a·log·event·at·the·given·<a·href="logger_chapter.html#log-level">log·level</a>,·with | 2306 | <p>Create·a·log·event·at·the·given·<a·href="logger_chapter.html#log-level">log·level</a>,·with |
| 2307 | the·given·<a·href="logger_chapter.html#log-message">message</a>·to·be·logged·and | 2307 | the·given·<a·href="logger_chapter.html#log-message">message</a>·to·be·logged·and |
| 2308 | <a·href="logger_chapter.html#metadata"><em>metadata</em></a>.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·A·plain·string</span><span·class="gp·unselectable"> | 2308 | <a·href="logger_chapter.html#metadata"><em>metadata</em></a>.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·A·plain·string</span><span·class="gp·unselectable"> |
| 2309 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id=" | 2309 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id="9723296894-1">(</span><span·class="ss">info</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Hello·World"</span><span·class="p"·data-group-id="9723296894-1">)</span><span·class="p">.</span><span·class="w"> |
| 2310 | </span><span·class="c1">%%·A·plain·string·with·metadata</span><span·class="gp·unselectable"> | 2310 | </span><span·class="c1">%%·A·plain·string·with·metadata</span><span·class="gp·unselectable"> |
| 2311 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id=" | 2311 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id="9723296894-2">(</span><span·class="ss">debug</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Hello·World"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9723296894-3">#{</span><span·cla[·...·truncated·by·diffoscope;·len:·265,·SHA:·6aec5be1df4307ba901f2773646bfc1018a9beb621a3f3f9d12273f575945e23·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 2312 | </span><span·class="c1">%%·A·format·string·with·arguments</span><span·class="gp·unselectable"> | 2312 | </span><span·class="c1">%%·A·format·string·with·arguments</span><span·class="gp·unselectable"> |
| 2313 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id=" | 2313 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id="9723296894-4">(</span><span·class="ss">warning</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"The·roof·is·on·~ts"</span><span·class="p">,</span><span·class="p"·data-group-id="9723296894-5">[</span><span·class="n">Cause</sp[·...·truncated·by·diffoscope;·len:·97,·SHA:·41b9b1e00871d7991797b7e95f55a10cadfd5c0ffe705b327417fa1335dcf59a·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 2314 | </span><span·class="c1">%%·A·report</span><span·class="gp·unselectable"> | 2314 | </span><span·class="c1">%%·A·report</span><span·class="gp·unselectable"> |
| 2315 | 4>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id=" | 2315 | 4>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id="9723296894-6">(</span><span·class="ss">warning</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9723296894-7">#{</span><span·class="w">·</span><span·class="ss">what</span><span·class="w">·</span><span·class="p">=></sp[·...·truncated·by·diffoscope;·len:·354,·SHA:·f76d38605c7c08bfe795b04bc02149f7fdddc15e7386976b011dc3cd16de40b8·...·]-6">)</span><span·class="p">.</span></code></pre><p>Equivalent·to·<a·href="#log/4"><code·class="inline">log(Level,·FormatOrFun,·Args,·#{})</code></a>·if·called·as |
| 2316 | <code·class="inline">log(Level,·FormatOrFun,·Args)</code>.</p> | 2316 | <code·class="inline">log(Level,·FormatOrFun,·Args)</code>.</p> |
| 2317 | ··</section> | 2317 | ··</section> |
| 2318 | </section> | 2318 | </section> |
| 2319 | <section·class="detail"·id="log/4"> | 2319 | <section·class="detail"·id="log/4"> |
| 2320 | ··<div·class="detail-header"> | 2320 | ··<div·class="detail-header"> |
| 2321 | ····<a·href="#log/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2321 | ····<a·href="#log/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2347, 20 lines modified | Offset 2347, 20 lines modified | ||
| 2347 | <p>Create·a·log·event·at·the·given·<a·href="logger_chapter.html#log-level">log·level</a>,·with | 2347 | <p>Create·a·log·event·at·the·given·<a·href="logger_chapter.html#log-level">log·level</a>,·with |
| 2348 | the·given·<a·href="logger_chapter.html#log-message">message</a>·to·be·logged·and | 2348 | the·given·<a·href="logger_chapter.html#log-message">message</a>·to·be·logged·and |
| 2349 | <a·href="logger_chapter.html#metadata"><em>metadata</em></a>.</p><p>The·message·and·metadata·can·either·be·given·directly·in·the·arguments,·or | 2349 | <a·href="logger_chapter.html#metadata"><em>metadata</em></a>.</p><p>The·message·and·metadata·can·either·be·given·directly·in·the·arguments,·or |
| 2350 | returned·from·a·fun.·Passing·a·fun·instead·of·the·message/metadata·directly·is | 2350 | returned·from·a·fun.·Passing·a·fun·instead·of·the·message/metadata·directly·is |
| 2351 | useful·in·scenarios·when·the·message/metadata·is·very·expensive·to·compute.·This | 2351 | useful·in·scenarios·when·the·message/metadata·is·very·expensive·to·compute.·This |
| 2352 | is·because·the·fun·is·only·evaluated·when·the·message/metadata·is·actually | 2352 | is·because·the·fun·is·only·evaluated·when·the·message/metadata·is·actually |
| 2353 | needed,·which·may·be·not·at·all·if·the·log·event·is·not·to·be·logged.·Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·A·plain·string·with·expensive·metadata</span><span·class="gp·unselectable"> | 2353 | needed,·which·may·be·not·at·all·if·the·log·event·is·not·to·be·logged.·Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·A·plain·string·with·expensive·metadata</span><span·class="gp·unselectable"> |
| 2354 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id=" | 2354 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id="2433123816-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2433123816-2">(</span><span·class="p"·data-group-id="2433123816-3">[</span><span·class="p"·data-group-id="2433123816-3">]</span><span·class="p"·data-group-id="2433123816-2">)</[·...·truncated·by·diffoscope;·len:·900,·SHA:·d851258603cf54ee0da3181520e6e65ae8d73564ff0126ed05163dd495f8774e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 2355 | </span><span·class="c1">%%·An·expensive·report</span><span·class="gp·unselectable"> | 2355 | </span><span·class="c1">%%·An·expensive·report</span><span·class="gp·unselectable"> |
| 2356 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id=" | 2356 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id="2433123816-8">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2433123816-9">(</span><span·class="n">What</span><span·class="p"·data-group-id="2433123816-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·727,·SHA:·3ee70d5d6bbf6ceb151290184dfa2d575e2015198785de51c769bb35c509d076·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 2357 | </span><span·class="c1">%%·A·plain·string·with·expensive·metadata·and·normal·metadata</span><span·class="gp·unselectable"> | 2357 | </span><span·class="c1">%%·A·plain·string·with·expensive·metadata·and·normal·metadata</span><span·class="gp·unselectable"> |
| 2358 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id=" | 2358 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id="2433123816-12">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2433123816-13">(</span><span·class="p"·data-group-id="2433123816-14">[</span><span·class="p"·data-group-id="2433123816-14">]</span><span·class="p"·data-group-id="2433123816-13[·...·truncated·by·diffoscope;·len:·859,·SHA:·ed7eda59b30c1fc8c948bd7e9da0850cf46f8c87ac905d140b47260781611d17·...·]-18">]</span><span·class="p">,</span><span·class="w"> |
| 2359 | ···············</span><span·class="p"·data-group-id=" | 2359 | ···············</span><span·class="p"·data-group-id="2433123816-19">#{</span><span·class="w">·</span><span·class="ss">meta</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">data</span><span·class="w">·</span><span·class="p"·data-group-id="2433123816-19">}</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·ad266371e784675b996405dcfc06d7551ceabe5caf7f698cf55b7abe62db5287·...·]-12">)</span><span·class="p">.</span></code></pre><p>When·metadata·is·given·both·as·an·argument·and·returned·from·the·fun·they·are |
| 2360 | merged.·If·equal·keys·exists·the·values·are·taken·from·the·metadata·returned·by | 2360 | merged.·If·equal·keys·exists·the·values·are·taken·from·the·metadata·returned·by |
| 2361 | the·fun.</p> | 2361 | the·fun.</p> |
| 2362 | ··</section> | 2362 | ··</section> |
| 2363 | </section> | 2363 | </section> |
| 2364 | <section·class="detail"·id="notice/1"> | 2364 | <section·class="detail"·id="notice/1"> |
| 2365 | ··<div·class="detail-header"> | 2365 | ··<div·class="detail-header"> |
| Offset 2657, 34 lines modified | Offset 2657, 34 lines modified | ||
| 2657 | ······</div> | 2657 | ······</div> |
| 2658 | <p>Reads·the·application·configuration·parameter·<code·class="inline">logger</code>·and·calls | 2658 | <p>Reads·the·application·configuration·parameter·<code·class="inline">logger</code>·and·calls |
| 2659 | <a·href="#add_handlers/1"><code·class="inline">add_handlers/1</code></a>·with·its·contents.</p><p>This·function·should·be·used·by·custom·Logger·handlers·to·make·configuration | 2659 | <a·href="#add_handlers/1"><code·class="inline">add_handlers/1</code></a>·with·its·contents.</p><p>This·function·should·be·used·by·custom·Logger·handlers·to·make·configuration |
| 2660 | consistent·no·matter·which·handler·the·system·uses.·Normal·usage·is·to·add·a | 2660 | consistent·no·matter·which·handler·the·system·uses.·Normal·usage·is·to·add·a |
| 2661 | call·to·<a·href="#add_handlers/1"><code·class="inline">logger:add_handlers/1</code></a>·just·after·the·processes·that·the·handler·needs | 2661 | call·to·<a·href="#add_handlers/1"><code·class="inline">logger:add_handlers/1</code></a>·just·after·the·processes·that·the·handler·needs |
| 2662 | are·started,·and·pass·the·application's·<code·class="inline">logger</code>·configuration·as·the·argument. | 2662 | are·started,·and·pass·the·application's·<code·class="inline">logger</code>·configuration·as·the·argument. |
| 2663 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 2663 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="7371620404-1">(</span><span·class="ss">application</span><span·class="p"·data-group-id="7371620404-1">)</span><span·class="p">.</span><span·class="w"> |
| 2664 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 2664 | </span><span·class="nf">start</span><span·class="p"·data-group-id="7371620404-2">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7371620404-3">[</span><span·class="p"·data-group-id="7371620404-3">]</span><span·class="p"·data-group-id="7371620404-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 2665 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 2665 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">supervisor</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="7371620404-4">(</span><span·class="p"·data-group-id="7371620404-5">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_sup</span><span·class="p"·data-group-id="7371620404-5">}</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·252,·SHA:·e237b2c0c8e5127580a8dfeee996a38650aad4311e01312dc40b4f8e001dd9ac·...·]-4">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 2666 | ········</span><span·class="p"·data-group-id=" | 2666 | ········</span><span·class="p"·data-group-id="7371620404-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="7371620404-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 2667 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handlers</span><span·class="p"·data-group-id=" | 2667 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handlers</span><span·class="p"·data-group-id="7371620404-8">(</span><span·class="ss">my_app</span><span·class="p"·data-group-id="7371620404-8">)</span><span·class="p">,</span><span·class="w"> |
| 2668 | ············</span><span·class="p"·data-group-id=" | 2668 | ············</span><span·class="p"·data-group-id="7371620404-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7371620404-10">[</span><span·class="p"·data-group-id="7[·...·truncated·by·diffoscope;·len:·63,·SHA:·0e178f009f59a6de1ce32e02d4f5c82f91fb1339844ec472b807bf0a215b3931·...·]-9">}</span><span·class="p">;</span><span·class="w"> |
| 2669 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Error</span><span·class="w"> | 2669 | ········</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Error</span><span·class="w"> |
| 2670 | ·····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>This·reads·the·<code·class="inline">logger</code>·configuration·parameter·from·the·<code·class="inline">my_app</code>·application | 2670 | ·····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>This·reads·the·<code·class="inline">logger</code>·configuration·parameter·from·the·<code·class="inline">my_app</code>·application |
| 2671 | and·starts·the·configured·handlers.·The·contents·of·the·configuration·use·the | 2671 | and·starts·the·configured·handlers.·The·contents·of·the·configuration·use·the |
| 2672 | same·rules·as·the | 2672 | same·rules·as·the |
| 2673 | <a·href="logger_chapter.html#handler-configuration">logger·handler·configuration</a>.</p><p>If·the·handler·is·meant·to·replace·the·default·handler,·the·Kernel's·default | 2673 | <a·href="logger_chapter.html#handler-configuration">logger·handler·configuration</a>.</p><p>If·the·handler·is·meant·to·replace·the·default·handler,·the·Kernel's·default |
| 2674 | handler·have·to·be·disabled·before·the·new·handler·is·added.·A·<code·class="inline">sys.config</code>·file | 2674 | handler·have·to·be·disabled·before·the·new·handler·is·added.·A·<code·class="inline">sys.config</code>·file |
| 2675 | that·disables·the·Kernel·handler·and·adds·a·custom·handler·could·look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8 | 2675 | that·disables·the·Kernel·handler·and·adds·a·custom·handler·could·look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3785705828-1">[</span><span·class="p"·data-group-id="3785705828-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 2676 | ··</span><span·class="p"·data-group-id="8 | 2676 | ··</span><span·class="p"·data-group-id="3785705828-3">[</span><span·class="p"·data-group-id="3785705828-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 2677 | ····</span><span·class="c1">%%·Disable·the·default·Kernel·handler</span><span·class="w"> | 2677 | ····</span><span·class="c1">%%·Disable·the·default·Kernel·handler</span><span·class="w"> |
| 2678 | ····</span><span·class="p"·data-group-id="8 | 2678 | ····</span><span·class="p"·data-group-id="3785705828-5">[</span><span·class="p"·data-group-id="3785705828-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">undefi[·...·truncated·by·diffoscope;·len:·263,·SHA:·b199d847a59b181d051b0e957c5c2c83463cbb97639efd8f236b71742dfaa390·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 2679 | ·</span><span·class="p"·data-group-id="8 | 2679 | ·</span><span·class="p"·data-group-id="3785705828-7">{</span><span·class="ss">my_app</span><span·class="p">,</span><span·class="w"> |
| 2680 | ··</span><span·class="p"·data-group-id="8 | 2680 | ··</span><span·class="p"·data-group-id="3785705828-8">[</span><span·class="p"·data-group-id="3785705828-9">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 2681 | ····</span><span·class="c1">%%·Enable·this·handler·as·the·default</span><span·class="w"> | 2681 | ····</span><span·class="c1">%%·Enable·this·handler·as·the·default</span><span·class="w"> |
| 2682 | ····</span><span·class="p"·data-group-id="8 | 2682 | ····</span><span·class="p"·data-group-id="3785705828-10">[</span><span·class="p"·data-group-id="3785705828-11">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_h[·...·truncated·by·diffoscope;·len:·478,·SHA:·315b131ed1c96e50188a49ffb4075fc2c67ded1ae9f2c51b1387ba6b5e1913fd·...·]-1">]</span><span·class="p">.</span></code></pre> |
| 2683 | ··</section> | 2683 | ··</section> |
| 2684 | </section> | 2684 | </section> |
| 2685 | <section·class="detail"·id="add_primary_filter/2"> | 2685 | <section·class="detail"·id="add_primary_filter/2"> |
| 2686 | ··<div·class="detail-header"> | 2686 | ··<div·class="detail-header"> |
| 2687 | ····<a·href="#add_primary_filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2687 | ····<a·href="#add_primary_filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 2688 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 2688 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3575, 16 lines modified | Offset 3575, 16 lines modified | ||
| 3575 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·update_formatter_config(HandlerId,·FormatterConfig)·->·ok·|·{error,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()} | 3575 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·update_formatter_config(HandlerId,·FormatterConfig)·->·ok·|·{error,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()} |
| 3576 | ·································when | 3576 | ·································when |
| 3577 | ·····································HandlerId·::·<a·href="logger_handler.html#t:id/0">logger_handler:id</a>(), | 3577 | ·····································HandlerId·::·<a·href="logger_handler.html#t:id/0">logger_handler:id</a>(), |
| 3578 | ·····································FormatterConfig·::·<a·href="#t:formatter_config/0">formatter_config</a>().</pre> | 3578 | ·····································FormatterConfig·::·<a·href="#t:formatter_config/0">formatter_config</a>().</pre> |
| 3579 | ······</div> | 3579 | ······</div> |
| 3580 | <p>Update·the·formatter·configuration·for·the·specified·handler.</p><p>The·new·configuration·is·merged·with·the·existing·formatter·configuration.</p><p>To·overwrite·the·existing·configuration·without·any·merge,·use</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">set_handler_config</span><span·class="p"·data-group-id="784 | 3580 | <p>Update·the·formatter·configuration·for·the·specified·handler.</p><p>The·new·configuration·is·merged·with·the·existing·formatter·configuration.</p><p>To·overwrite·the·existing·configuration·without·any·merge,·use</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">set_handler_config</span><span·class="p"·data-group-id="4758447801-1">(</span><span·class="n">HandlerId</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">formatter</span><span·class="p">,</span><span·class="w"> |
| 3581 | » ······</span><span·class="p"·data-group-id="784 | 3581 | » ······</span><span·class="p"·data-group-id="4758447801-2">{</span><span·class="n">FormatterModule</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FormatterConfig</span><span·class="p"·data-group-id="4758447801-2">}</span><span·class="p"·data-group-id="4758447801-1">)</span><span·class="p">.</span></code></pre> |
| 3582 | ··</section> | 3582 | ··</section> |
| 3583 | </section> | 3583 | </section> |
| 3584 | <section·class="detail"·id="update_formatter_config/3"> | 3584 | <section·class="detail"·id="update_formatter_config/3"> |
| 3585 | ··<div·class="detail-header"> | 3585 | ··<div·class="detail-header"> |
| Max diff block lines reached; 12510/54747 bytes (22.85%) of diff not shown. | |||
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 186 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 187 | ··</a> | 187 | ··</a> |
| 188 | ··<span·class="text">Logger·API</span> | 188 | ··<span·class="text">Logger·API</span> |
| 189 | </h2> | 189 | </h2> |
| 190 | <p>The·API·for·logging·consists·of·a·set·of·<a·href="logger.html#module-macros">macros</a>,·and·a·set | 190 | <p>The·API·for·logging·consists·of·a·set·of·<a·href="logger.html#module-macros">macros</a>,·and·a·set |
| 191 | of·functions·on·the·form·<code·class="inline">logger:Level/1,2,3</code>,·which·are·all·shortcuts·for | 191 | of·functions·on·the·form·<code·class="inline">logger:Level/1,2,3</code>,·which·are·all·shortcuts·for |
| 192 | <a·href="logger.html#log/2"><code·class="inline">logger:log(Level,Arg1[,Arg2[,Arg3]])</code></a>.</p><p>The·macros·are·defined·in·<code·class="inline">logger.hrl</code>,·which·is·included·in·a·module·with·the | 192 | <a·href="logger.html#log/2"><code·class="inline">logger:log(Level,Arg1[,Arg2[,Arg3]])</code></a>.</p><p>The·macros·are·defined·in·<code·class="inline">logger.hrl</code>,·which·is·included·in·a·module·with·the |
| 193 | directive</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 193 | directive</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="1264800141-1">(</span><span·class="s">"kernel/include/logger.hrl"</span><span·class="p"·data-group-id="1264800141-1">)</span><span·class="p">.</span></code></pre><p>The·difference·between·using·the·macros·and·the·exported·functions·is·that |
| 194 | macros·add·location·(originator)·information·to·the·metadata,·and·performs·lazy | 194 | macros·add·location·(originator)·information·to·the·metadata,·and·performs·lazy |
| 195 | evaluation·by·wrapping·the·logger·call·in·a·case·statement,·so·it·is·only | 195 | evaluation·by·wrapping·the·logger·call·in·a·case·statement,·so·it·is·only |
| 196 | evaluated·if·the·log·level·of·the·event·passes·the·primary·log·level·check.</p><h3·id="log-level"·class="section-heading"> | 196 | evaluated·if·the·log·level·of·the·event·passes·the·primary·log·level·check.</p><h3·id="log-level"·class="section-heading"> |
| 197 | ··<a·href="#log-level"·class="hover-link"> | 197 | ··<a·href="#log-level"·class="hover-link"> |
| 198 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 198 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 199 | ··</a> | 199 | ··</a> |
| 200 | ··<span·class="text">Log·Level</span> | 200 | ··<span·class="text">Log·Level</span> |
| Offset 208, 31 lines modified | Offset 208, 31 lines modified | ||
| 208 | ··<a·href="#log-message"·class="hover-link"> | 208 | ··<a·href="#log-message"·class="hover-link"> |
| 209 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 209 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 210 | ··</a> | 210 | ··</a> |
| 211 | ··<span·class="text">Log·Message</span> | 211 | ··<span·class="text">Log·Message</span> |
| 212 | </h3> | 212 | </h3> |
| 213 | <p>The·log·message·contains·the·information·to·be·logged.·The·message·can·consist | 213 | <p>The·log·message·contains·the·information·to·be·logged.·The·message·can·consist |
| 214 | of·a·format·string·and·arguments·(given·as·two·separate·parameters·in·the·Logger | 214 | of·a·format·string·and·arguments·(given·as·two·separate·parameters·in·the·Logger |
| 215 | API),·a·string·or·a·report.</p><p>Example,·format·string·and·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id=" | 215 | API),·a·string·or·a·report.</p><p>Example,·format·string·and·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="6648263127-1">(</span><span·class="s">"The·file·does·not·exist:·~ts"</span><span·class="p">,</span><span·class="p"·data-group-id="6648263127-2">[</span><span·class="n">Filename</span><span·class="p"·data-group-id="6648263127-2">]</span><span·clas[·...·truncated·by·diffoscope;·len:·367,·SHA:·e9349228e7e4be6569c0aed2917b7edbd810561999cdde3d9921f06f21a44e09·...·]-1">)</span></code></pre><p>A·report,·which·is·either·a·map·or·a·key-value·list,·is·the·preferred·way·to·log |
| 216 | using·Logger·as·it·makes·it·possible·for·different·backends·to·filter·and·format | 216 | using·Logger·as·it·makes·it·possible·for·different·backends·to·filter·and·format |
| 217 | the·log·event·as·it·needs·to.</p><p>Example,·report:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">LOG_ERROR</span><span·class="p"·data-group-id=" | 217 | the·log·event·as·it·needs·to.</p><p>Example,·report:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">LOG_ERROR</span><span·class="p"·data-group-id="1877462580-1">(</span><span·class="p"·data-group-id="1877462580-2">#{</span><span·class="w">·</span><span·class="ss">user</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">joe</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·464,·SHA:·861bc9cc2e2e268af5cdc17c997d71b1453a7e531fda16363da51cb22282f4c0·...·]-1">)</span></code></pre><p>Reports·can·be·accompanied·by·a·<em>report·callback</em>·specified·in·the·log·event's |
| 218 | <a·href="#metadata">metadata</a>.·The·report·callback·is·a·convenience | 218 | <a·href="#metadata">metadata</a>.·The·report·callback·is·a·convenience |
| 219 | function·that·the·<a·href="#formatters">formatter</a>·can·use·to·convert | 219 | function·that·the·<a·href="#formatters">formatter</a>·can·use·to·convert |
| 220 | the·report·to·a·format·string·and·arguments,·or·directly·to·a·string.·The | 220 | the·report·to·a·format·string·and·arguments,·or·directly·to·a·string.·The |
| 221 | formatter·can·also·use·its·own·conversion·function,·if·no·callback·is·provided, | 221 | formatter·can·also·use·its·own·conversion·function,·if·no·callback·is·provided, |
| 222 | or·if·a·customized·formatting·is·desired.</p><p>The·report·callback·must·be·a·fun·with·one·or·two·arguments.·If·it·takes·one | 222 | or·if·a·customized·formatting·is·desired.</p><p>The·report·callback·must·be·a·fun·with·one·or·two·arguments.·If·it·takes·one |
| 223 | argument,·this·is·the·report·itself,·and·the·fun·returns·a·format·string·and | 223 | argument,·this·is·the·report·itself,·and·the·fun·returns·a·format·string·and |
| 224 | arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="0126314943-1">(</span><span·class="p"·data-group-id="0126314943-2">(</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">report</span><span·class="p"·data-group-id="0126314943-3">(</span><span·class="p"·data-group-id="0126314943-3">)</span><span·class="p"·data-group-id="0126314943-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="0126314943-4">{</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0126314943-5">(</span><span·class="p"·data-group-id="0126314943-5">)</span><span·class="p">,</span><span·class="p"·data-group-id="0126314943-6">[</span><span·class="nf">term</span><span·class="p"·data-group-id="0126314943-7">(</span><span·class="p"·data-group-id="0126314943-7">)</span><span·class="p"·data-group-id="0126314943-6">]</span><span·class="p"·data-group-id="0126314943-4">}</span><span·class="p"·data-group-id="0126314943-1">)</span></code></pre><p>If·it·takes·two·arguments,·the·first·is·the·report,·and·the·second·is·a·map | ||
| 225 | 224 | arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="7123939658-1">(</span><span·class="p"·data-group-id="7123939658-2">(</span><span·class="nc">logger</span><span·class="p">:</span><span·c[·...·truncated·by·diffoscope;·len:·958,·SHA:·2ed5165461d0a75f950483487352e9a0142a1df35d601dabf9f9c6131b4099aa·...·] | |
| 225 | containing·extra·data·that·allows·direct·conversion·to·a·string:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="6351980577-1">(</span><span·class="p"·data-group-id="6351980577-2">(</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">report</span><span·class="p"·data-group-id="6351980577-3">(</span><span·class="p"·data-group-id="6351980577-3">)</span><span·class="p">,</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">report_cb_config</span><span·class="p"·data-group-id="6351980577-4">(</span><span·class="p"·data-group-id="6351980577-4">)</span><span·class="p"·data-group-id="6351980577-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">chardata</span><span·class="p"·data-group-id="6351980577-5">(</span><span·class="p"·data-group-id="6351980577-5">)</span><span·class="p"·data-group-id="6351980577-1">)</span></code></pre><p>The·fun·must·obey·the·<code·class="inline">depth</code>·and·<code·class="inline">chars_limit</code>·parameters·provided·in·the | ||
| 226 | second·argument,·as·the·formatter·cannot·do·anything·useful·of·these·parameters | 226 | second·argument,·as·the·formatter·cannot·do·anything·useful·of·these·parameters |
| 227 | with·the·returned·string.·The·extra·data·also·contains·a·field·named | 227 | with·the·returned·string.·The·extra·data·also·contains·a·field·named |
| 228 | <code·class="inline">single_line</code>,·indicating·if·the·printed·log·message·may·contain·line·breaks·or | 228 | <code·class="inline">single_line</code>,·indicating·if·the·printed·log·message·may·contain·line·breaks·or |
| 229 | not.·This·variant·is·used·when·the·formatting·of·the·report·depends·on·the·size | 229 | not.·This·variant·is·used·when·the·formatting·of·the·report·depends·on·the·size |
| 230 | or·single·line·parameters.</p><p>Example,·report,·and·metadata·with·report·callback:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id="5036928308-1">(</span><span·class="p"·data-group-id="5036928308-2">#{</span><span·class="ss">got</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">connection_request</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">state</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="5036928308-2">}</span><span·class="p">,</span><span·class="w"> | ||
| 231 | ·· | 230 | or·single·line·parameters.</p><p>Example,·report,·and·metadata·with·report·callback:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">debug</span><span·class="p"·data-group-id="839035[·...·truncated·by·diffoscope;·len:·664,·SHA:·3e47effa9b01ec442bf90445a2d13d5d1cae6d5a8a1c700dd39138b5f4441254·...·] |
| 231 | ·············</span><span·class="p"·data-group-id="8390355569-3">#{</span><span·class="ss">report_cb</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="8390355569-4">(</span><span·class="n">R</span><span·class="p"·data-group-id="8390355569-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="8390355569-5">{</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="8390355569-6">[</span><span·class="n">R</span><span·class="p"·data-group-id="8390355569-6">]</span><span·class="p"·data-group-id="8390355569-5">}</span><span·class="w">·</span><span·class="k">end</span><span·class="p"·data-group-id="8390355569-3">}</span><span·class="p"·data-group-id="8390355569-1">)</span></code></pre><p>The·log·message·can·also·be·provided·through·a·fun·for·lazy·evaluation.·The·fun | ||
| 232 | is·only·evaluated·if·the·primary·log·level·check·passes,·and·is·therefore | 232 | is·only·evaluated·if·the·primary·log·level·check·passes,·and·is·therefore |
| 233 | recommended·if·it·is·expensive·to·generate·the·message.·The·lazy·fun·must·return | 233 | recommended·if·it·is·expensive·to·generate·the·message.·The·lazy·fun·must·return |
| 234 | a·string,·a·report,·or·a·tuple·with·format·string·and·arguments.</p><h3·id="metadata"·class="section-heading"> | 234 | a·string,·a·report,·or·a·tuple·with·format·string·and·arguments.</p><h3·id="metadata"·class="section-heading"> |
| 235 | ··<a·href="#metadata"·class="hover-link"> | 235 | ··<a·href="#metadata"·class="hover-link"> |
| 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 237 | ··</a> | 237 | ··</a> |
| 238 | ··<span·class="text">Metadata</span> | 238 | ··<span·class="text">Metadata</span> |
| Offset 412, 22 lines modified | Offset 412, 22 lines modified | ||
| 412 | with·<a·href="../../../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·Error·Logging</a>,·which·is·specified·with | 412 | with·<a·href="../../../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·Error·Logging</a>,·which·is·specified·with |
| 413 | <a·href="#logger_sasl_compatible"><code·class="inline">logger_sasl_compatible</code></a>.</p><p>With·this·parameter,·you·can·modify·or·disable·the·default·handler,·add·custom | 413 | <a·href="#logger_sasl_compatible"><code·class="inline">logger_sasl_compatible</code></a>.</p><p>With·this·parameter,·you·can·modify·or·disable·the·default·handler,·add·custom |
| 414 | handlers·and·primary·logger·filters,·set·log·levels·per·module,·and·modify·the | 414 | handlers·and·primary·logger·filters,·set·log·levels·per·module,·and·modify·the |
| 415 | <a·href="#logger-proxy">proxy</a>·configuration.</p><p><code·class="inline">Config</code>·is·any·(zero·or·more)·of·the·following:</p><ul><li><p><strong><code·class="inline">{handler,·default,·undefined}</code></strong>·-·Disables·the·default·handler.·This | 415 | <a·href="#logger-proxy">proxy</a>·configuration.</p><p><code·class="inline">Config</code>·is·any·(zero·or·more)·of·the·following:</p><ul><li><p><strong><code·class="inline">{handler,·default,·undefined}</code></strong>·-·Disables·the·default·handler.·This |
| 416 | allows·another·application·to·add·its·own·default·handler.</p><p>Only·one·entry·of·this·type·is·allowed.</p></li><li><p><strong><code·class="inline">{handler,·HandlerId,·Module,·HandlerConfig}</code></strong>·-·If·<code·class="inline">HandlerId</code>·is | 416 | allows·another·application·to·add·its·own·default·handler.</p><p>Only·one·entry·of·this·type·is·allowed.</p></li><li><p><strong><code·class="inline">{handler,·HandlerId,·Module,·HandlerConfig}</code></strong>·-·If·<code·class="inline">HandlerId</code>·is |
| 417 | <code·class="inline">default</code>,·then·this·entry·modifies·the·default·handler,·equivalent·to | 417 | <code·class="inline">default</code>,·then·this·entry·modifies·the·default·handler,·equivalent·to |
| 418 | calling</p><pre><code·class="text">········logger:remove_handler(default) | 418 | calling</p><pre><code·class="text">········logger:remove_handler(default) |
| 419 | </code></pre><p>followed·by</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="7 | 419 | </code></pre><p>followed·by</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="8743838054-1">(</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HandlerConfig</span><span·class="p"·data-group-id="8743838054-1">)</span><span·class="w"> |
| 420 | </span></code></pre><p>For·all·other·values·of·<code·class="inline">HandlerId</code>,·this·entry·adds·a·new·handler, | 420 | </span></code></pre><p>For·all·other·values·of·<code·class="inline">HandlerId</code>,·this·entry·adds·a·new·handler, |
| 421 | equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="4 | 421 | equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="4106212232-1">(</span><span·class="n">HandlerId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HandlerConfig</span><span·class="p"·data-group-id="4106212232-1">)</span><span·class="w"> |
| 422 | </span></code></pre><p>Multiple·entries·of·this·type·are·allowed.</p></li><li><p><strong><code·class="inline">{filters,·FilterDefault,·[Filter]}</code></strong>·-·Adds·the·specified·primary | 422 | </span></code></pre><p>Multiple·entries·of·this·type·are·allowed.</p></li><li><p><strong><code·class="inline">{filters,·FilterDefault,·[Filter]}</code></strong>·-·Adds·the·specified·primary |
| 423 | filters.</p><ul><li><p><code·class="inline">FilterDefault·=·log·|·stop</code></p></li><li><code·class="inline">Filter·=·{FilterId,·{FilterFun,·FilterConfig}}</code></li></ul><p>Equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_primary_filter</span><span·class="p"·data-group-id=" | 423 | filters.</p><ul><li><p><code·class="inline">FilterDefault·=·log·|·stop</code></p></li><li><code·class="inline">Filter·=·{FilterId,·{FilterFun,·FilterConfig}}</code></li></ul><p>Equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_primary_filter</span><span·class="p"·data-group-id="7781649727-1">(</span><span·class="n">FilterId</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7781649727-2">{</span><span·class="n">FilterFun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Filter[·...·truncated·by·diffoscope;·len:·107,·SHA:·d7c3ae33d379b691a063482ff20ae10c72b4b06081333fd897e8672f1c60c3a9·...·]-1">)</span><span·class="w"> |
| 424 | </span></code></pre><p>for·each·<code·class="inline">Filter</code>.</p><p><code·class="inline">FilterDefault</code>·specifies·the·behaviour·if·all·primary·filters·return | 424 | </span></code></pre><p>for·each·<code·class="inline">Filter</code>.</p><p><code·class="inline">FilterDefault</code>·specifies·the·behaviour·if·all·primary·filters·return |
| 425 | <code·class="inline">ignore</code>,·see·section·<a·href="#filters">Filters</a>.</p><p>Only·one·entry·of·this·type·is·allowed.</p></li><li><p><strong><code·class="inline">{module_level,·Level,·[Module]}</code></strong>·-·Sets·module·log·level·for·the·given | 425 | <code·class="inline">ignore</code>,·see·section·<a·href="#filters">Filters</a>.</p><p>Only·one·entry·of·this·type·is·allowed.</p></li><li><p><strong><code·class="inline">{module_level,·Level,·[Module]}</code></strong>·-·Sets·module·log·level·for·the·given |
| 426 | modules.·Equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_module_level</span><span·class="p"·data-group-id=" | 426 | modules.·Equivalent·to·calling</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_module_level</span><span·class="p"·data-group-id="5216924880-1">(</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Level</span><span·class="p"·data-group-id="5216924880-1">)</span></code></pre><p>for·each·<code·class="inline">Module</code>.</p><p>Multiple·entries·of·this·type·are·allowed.</p></li><li><p><strong><code·class="inline">{proxy,·ProxyConfig}</code></strong>·-·Sets·the·proxy·configuration,·equivalent·to |
| 427 | calling</p><pre><code·class="text">········logger:set_proxy_config(ProxyConfig) | 427 | calling</p><pre><code·class="text">········logger:set_proxy_config(ProxyConfig) |
| 428 | </code></pre><p>Only·one·entry·of·this·type·is·allowed.</p></li></ul><p>See·section·<a·href="#configuration-examples">Configuration·Examples</a>·for | 428 | </code></pre><p>Only·one·entry·of·this·type·is·allowed.</p></li></ul><p>See·section·<a·href="#configuration-examples">Configuration·Examples</a>·for |
| 429 | examples·using·the·<code·class="inline">logger</code>·parameter·for·system·configuration.</p></li><li><p><strong><code·class="inline"·id="logger_metadata">logger_metadata·=·map()</code></strong>·-·Specifies·the·primary | 429 | examples·using·the·<code·class="inline">logger</code>·parameter·for·system·configuration.</p></li><li><p><strong><code·class="inline"·id="logger_metadata">logger_metadata·=·map()</code></strong>·-·Specifies·the·primary |
| 430 | metadata.·See·the·<a·href="kernel_app.html#logger_metadata"><code·class="inline">kernel(6)</code></a>·manual·page·for | 430 | metadata.·See·the·<a·href="kernel_app.html#logger_metadata"><code·class="inline">kernel(6)</code></a>·manual·page·for |
| 431 | more·information·about·this·parameter.</p></li><li><p><strong><code·class="inline"·id="logger_level">logger_level·=·Level</code></strong>·-·Specifies·the·primary·log | 431 | more·information·about·this·parameter.</p></li><li><p><strong><code·class="inline"·id="logger_level">logger_level·=·Level</code></strong>·-·Specifies·the·primary·log |
| 432 | level.·See·the·<a·href="kernel_app.html#logger_level"><code·class="inline">kernel(6)</code></a>·manual·page·for·more | 432 | level.·See·the·<a·href="kernel_app.html#logger_level"><code·class="inline">kernel(6)</code></a>·manual·page·for·more |
| 433 | information·about·this·parameter.</p></li><li><p><strong><code·class="inline"·id="logger_sasl_compatible">logger_sasl_compatible·=·true·|·false</code></strong>·- | 433 | information·about·this·parameter.</p></li><li><p><strong><code·class="inline"·id="logger_sasl_compatible">logger_sasl_compatible·=·true·|·false</code></strong>·- |
| Offset 442, 39 lines modified | Offset 442, 39 lines modified | ||
| 442 | </h3> | 442 | </h3> |
| 443 | <p>The·value·of·the·Kernel·configuration·parameter·<code·class="inline">logger</code>·is·a·list·of·tuples.·It | 443 | <p>The·value·of·the·Kernel·configuration·parameter·<code·class="inline">logger</code>·is·a·list·of·tuples.·It |
| 444 | is·possible·to·write·the·term·on·the·command·line·when·starting·an·erlang·node, | 444 | is·possible·to·write·the·term·on·the·command·line·when·starting·an·erlang·node, |
| 445 | but·as·the·term·grows,·a·better·approach·is·to·use·the·system·configuration | 445 | but·as·the·term·grows,·a·better·approach·is·to·use·the·system·configuration |
| 446 | file.·See·the·<a·href="config.html"><code·class="inline">config(4)</code></a>·manual·page·for·more·information·about | 446 | file.·See·the·<a·href="config.html"><code·class="inline">config(4)</code></a>·manual·page·for·more·information·about |
| 447 | this·file.</p><p>Each·of·the·following·examples·shows·a·simple·system·configuration·file·that | 447 | this·file.</p><p>Each·of·the·following·examples·shows·a·simple·system·configuration·file·that |
| 448 | configures·Logger·according·to·the·description.</p><p>Modify·the·default·handler·to·print·to·a·file·instead·of | 448 | configures·Logger·according·to·the·description.</p><p>Modify·the·default·handler·to·print·to·a·file·instead·of |
| 449 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 449 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9854928814-1">[</span><span·class="p"·data-group-id="9854928814-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 450 | ··</span><span·class="p"·data-group-id=" | 450 | ··</span><span·class="p"·data-group-id="9854928814-3">[</span><span·class="p"·data-group-id="9854928814-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 451 | ····</span><span·class="p"·data-group-id=" | 451 | ····</span><span·class="p"·data-group-id="9854928814-5">[</span><span·class="p"·data-group-id="9854928814-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·{handler,·HandlerId,·Module,</span><span·class="w"> |
| 452 | ······</span><span·class="p"·data-group-id="5336014888-7">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="5336014888-8">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"log/erlang.log"</span><span·class="p"·data-group-id="5336014888-8">}</span><span·class="p"·data-group-id="5336014888-7">}</span><span·class="p"·data-group-id="5336014888-6">}</span><span·class="w">··</span><span·class="c1">%·Config}</span><span·class="w"> | ||
| 453 | ····</span><span·class="p"·data-group-id=" | 452 | ······</span><span·class="p"·data-group-id="9854928814-7">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="9854928814-8">#{</span><span·class="ss">file</span><span[·...·truncated·by·diffoscope;·len:·330,·SHA:·defb04fba460b192ae130dd51ab2d261efdc2d18dcd7a7864077627affd88106·...·]</span><span·class="w"> |
| 453 | ····</span><span·class="p"·data-group-id="9854928814-5">]</span><span·class="p"·data-group-id="9854928814-4">}</span><span·class="p"·data-group-id="9854928814-3">]</span><span·class="p"·data-group-id="9854928814-2">}</span><span·class="p"·data-group-id="9854928814-1">]</span><span·class="p">.</span></code></pre><p>Modify·the·default·handler·to·print·each·log·event·as·a·single·line:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0079649251-1">[</span><span·class="p"·data-group-id="0079649251-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> | ||
| 454 | ··</span><span·class="p"·data-group-id="0 | 454 | ··</span><span·class="p"·data-group-id="0079649251-3">[</span><span·class="p"·data-group-id="0079649251-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 455 | ····</span><span·class="p"·data-group-id="0 | 455 | ····</span><span·class="p"·data-group-id="0079649251-5">[</span><span·class="p"·data-group-id="0079649251-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 456 | ······</span><span·class="p"·data-group-id="0890230112-7">#{</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0890230112-8">{</span><span·class="ss">logger_formatter</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0890230112-9">#{</span><span·class="ss">single_line</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="0890230112-9">}</span><span·class="p"·data-group-id="0890230112-8">}</span><span·class="p"·data-group-id="0890230112-7">}</span><span·class="p"·data-group-id="0890230112-6">}</span><span·class="w"> | ||
| 457 | ····</span><span·class="p"·data-group-id="0890230112-5">]</span><span·class="p"·data-group-id="0890230112-4">}</span><span·class="p"·data-group-id="0890230112-3">]</span><span·class="p"·data-group-id="0890230112-2">}</span><span·class="p"·data-group-id="0890230112-1">]</span><span·class="p">.</span></code></pre><p>Modify·the·default·handler·to·print·the·pid·of·the·logging·process·for·each·log | ||
| 458 | 456 | ······</span><span·class="p"·data-group-id="0079649251-7">#{</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0079649251-8">{</span><span·class="ss">logger_for[·...·truncated·by·diffoscope;·len:·459,·SHA:·ff0b98fc9bbf032a4f9126120d7836e337336b8aa46529366ebc73ddc68b4525·...·]</span><span·class="w"> | |
| 457 | ····</span><span·class="p"·data-group-id="0079649251-5">]</span><span·class="p"·data-group-id="0079649251-4">}</span><span·class="p"·data-group-id="0079649251-3">]</span><span·class="p"·data-group-id="0079649251-2">}</span><span·class="p"·data-group-id="0079649251-1">]</span><span·class="p">.</span></code></pre><p>Modify·the·default·handler·to·print·the·pid·of·the·logging·process·for·each·log | ||
| 458 | event:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3371847197-1">[</span><span·class="p"·data-group-id="3371847197-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> | ||
| 459 | ··</span><span·class="p"·data-group-id=" | 459 | ··</span><span·class="p"·data-group-id="3371847197-3">[</span><span·class="p"·data-group-id="3371847197-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 460 | ····</span><span·class="p"·data-group-id=" | 460 | ····</span><span·class="p"·data-group-id="3371847197-5">[</span><span·class="p"·data-group-id="3371847197-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 461 | ······</span><span·class="p"·data-group-id=" | 461 | ······</span><span·class="p"·data-group-id="3371847197-7">#{</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="3371847197-8">{</span><span·class="ss">logger_formatter</span><span·class="p">,</span><span·class="w"> |
| 462 | ························</span><span·class="p"·data-group-id=" | 462 | ························</span><span·class="p"·data-group-id="3371847197-9">#{</span><span·class="ss">template</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="3371847197-10">[</span><span·class="ss">time</span><span·class="p">,</span><span·class="s">&qu[·...·truncated·by·diffoscope;·len:·494,·SHA:·48c7e982f8333bc350901bb714b484456e1136936e612ab085450deb4e171d29·...·]-6">}</span><span·class="w"> |
| 463 | ····</span><span·class="p"·data-group-id=" | 463 | ····</span><span·class="p"·data-group-id="3371847197-5">]</span><span·class="p"·data-group-id="3371847197-4">}</span><span·class="p"·data-group-id="3371847197-3">]</span><span·class="p"·data-group-id="3371847197-2">}</span><span·class="p"·data-group-id="3371847197-1">]</span><span·class="p">.</span></code></pre><p>Modify·the·default·handler·to·only·print·errors·and·more·severe·log·events·to |
| 464 | "log/erlang.log",·and·add·another·handler·to·print·all·log·events·to | 464 | "log/erlang.log",·and·add·another·handler·to·print·all·log·events·to |
| 465 | "log/debug.log".</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 465 | "log/debug.log".</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5701646350-1">[</span><span·class="p"·data-group-id="5701646350-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 466 | ··</span><span·class="p"·data-group-id=" | 466 | ··</span><span·class="p"·data-group-id="5701646350-3">[</span><span·class="p"·data-group-id="5701646350-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 467 | ····</span><span·class="p"·data-group-id=" | 467 | ····</span><span·class="p"·data-group-id="5701646350-5">[</span><span·class="p"·data-group-id="5701646350-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 468 | ······</span><span·class="p"·data-group-id=" | 468 | ······</span><span·class="p"·data-group-id="5701646350-7">#{</span><span·class="ss">level</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">error</span><span·class="p">,</span><span·class="w"> |
| 469 | ········</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 469 | ········</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="5701646350-8">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"log/erlang.log"</span><span·class="p"·data-group-id="5701646350-8">}</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·67,·SHA:·0fccc9d97a67e97aa9fd55daf72c5749249d290a91106b9bc06ac5650a4e1a86·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 470 | ·····</span><span·class="p"·data-group-id=" | 470 | ·····</span><span·class="p"·data-group-id="5701646350-9">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">info</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 471 | ······</span><span·class="p"·data-group-id=" | 471 | ······</span><span·class="p"·data-group-id="5701646350-10">#{</span><span·class="ss">level</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">debug</span><span·class="p">,</span><span·class="w"> |
| 472 | ········</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 472 | ········</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="5701646350-11">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"log/debug.log"</span><span·class="p"·data-group-id="5701646350-11">}</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·69,·SHA:·f83b48445cf58058396b07030e9128862bf6011261baf1d7fbd9214994178d27·...·]-9">}</span><span·class="w"> |
| 473 | ····</span><span·class="p"·data-group-id=" | 473 | ····</span><span·class="p"·data-group-id="5701646350-5">]</span><span·class="p"·data-group-id="5701646350-4">}</span><span·class="p"·data-group-id="5701646350-3">]</span><span·class="p"·data-group-id="5701646350-2">}</span><span·class="p"·data-group-id="5701646350-1">]</span><span·class="p">.</span></code></pre><h2·id="backwards-compatibility-with-error_logger"·class="section-heading"> |
| 474 | ··<a·href="#backwards-compatibility-with-error_logger"·class="hover-link"> | 474 | ··<a·href="#backwards-compatibility-with-error_logger"·class="hover-link"> |
| 475 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 475 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 476 | ··</a> | 476 | ··</a> |
| 477 | ··<span·class="text">Backwards·Compatibility·with·error_logger</span> | 477 | ··<span·class="text">Backwards·Compatibility·with·error_logger</span> |
| 478 | </h2> | 478 | </h2> |
| 479 | <p>Logger·provides·backwards·compatibility·with·<code·class="inline">error_logger</code>·in·the·following | 479 | <p>Logger·provides·backwards·compatibility·with·<code·class="inline">error_logger</code>·in·the·following |
| 480 | ways:</p><ul><li><p><strong>API·for·Logging</strong>·-·The·<code·class="inline">error_logger</code>·API·still·exists,·but·should·only·be | 480 | ways:</p><ul><li><p><strong>API·for·Logging</strong>·-·The·<code·class="inline">error_logger</code>·API·still·exists,·but·should·only·be |
| Offset 507, 17 lines modified | Offset 507, 17 lines modified | ||
| 507 | <code·class="inline">true</code>.·The | 507 | <code·class="inline">true</code>.·The |
| 508 | <a·href="../../../../lib/sasl-4.2.2/doc/html/sasl_app.html#deprecated_error_logger_config">SASL·configuration·parameters</a> | 508 | <a·href="../../../../lib/sasl-4.2.2/doc/html/sasl_app.html#deprecated_error_logger_config">SASL·configuration·parameters</a> |
| 509 | can·then·be·used·as·before,·and·the·SASL·reports·will·only·be·printed·if·the | 509 | can·then·be·used·as·before,·and·the·SASL·reports·will·only·be·printed·if·the |
| 510 | SASL·application·is·running,·through·a·second·log·handler·named·<code·class="inline">sasl</code>.</p><p>All·SASL·reports·have·a·metadata·field·<code·class="inline">domain</code>·which·is·set·to·<code·class="inline">[otp,sasl]</code>. | 510 | SASL·application·is·running,·through·a·second·log·handler·named·<code·class="inline">sasl</code>.</p><p>All·SASL·reports·have·a·metadata·field·<code·class="inline">domain</code>·which·is·set·to·<code·class="inline">[otp,sasl]</code>. |
| 511 | This·field·can·be·used·by·filters·to·stop·or·allow·the·log·events.</p><p>See·section·<a·href="../../../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·User's·Guide</a>·for·more | 511 | This·field·can·be·used·by·filters·to·stop·or·allow·the·log·events.</p><p>See·section·<a·href="../../../../lib/sasl-4.2.2/doc/html/error_logging.html">SASL·User's·Guide</a>·for·more |
| 512 | information·about·the·old·SASL·error·logging·functionality.</p></li><li><p><strong><a·href=""·id="legacy_event_handlers"></a>·Legacy·Event·Handlers</strong><br/>To·use·event·handlers·written·for·<code·class="inline">error_logger</code>,·just·add·your·event·handler | 512 | information·about·the·old·SASL·error·logging·functionality.</p></li><li><p><strong><a·href=""·id="legacy_event_handlers"></a>·Legacy·Event·Handlers</strong><br/>To·use·event·handlers·written·for·<code·class="inline">error_logger</code>,·just·add·your·event·handler |
| 513 | with</p><pre><code·class="text">error_logger:add_report_handler/1,2.</code></pre><p>This·automatically·starts·the·error·logger·event·manager,·and·adds | 513 | with</p><pre><code·class="text">error_logger:add_report_handler/1,2.</code></pre><p>This·automatically·starts·the·error·logger·event·manager,·and·adds |
| 514 | <code·class="inline">error_logger</code>·as·a·handler·to·Logger,·with·the·following·configuration:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 514 | <code·class="inline">error_logger</code>·as·a·handler·to·Logger,·with·the·following·configuration:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7567402761-1">#{</span><span·class="ss">level</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">info</span><span·class="p">,</span><span·class="w"> |
| 515 | ··</span><span·class="ss">filter_default</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">log</span><span·class="p">,</span><span·class="w"> | 515 | ··</span><span·class="ss">filter_default</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">log</span><span·class="p">,</span><span·class="w"> |
| 516 | ··</span><span·class="ss">filters</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 516 | ··</span><span·class="ss">filters</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="7567402761-2">[</span><span·class="p"·data-group-id="7567402761-2">]</span><span·class="p"·data-group-id="7567402761-1">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·handler·ignores·events·that·do·not·originate·from·the·<code·class="inline">error_logger</code> |
| 517 | API,·or·from·within·OTP.·This·means·that·if·your·code·uses·the·Logger·API | 517 | API,·or·from·within·OTP.·This·means·that·if·your·code·uses·the·Logger·API |
| Max diff block lines reached; 57417/104206 bytes (55.10%) of diff not shown. | |||
| Offset 140, 27 lines modified | Offset 140, 27 lines modified | ||
| 140 | </h2> | 140 | </h2> |
| 141 | <h3·id="print-the-primary-logger-configurations"·class="section-heading"> | 141 | <h3·id="print-the-primary-logger-configurations"·class="section-heading"> |
| 142 | ··<a·href="#print-the-primary-logger-configurations"·class="hover-link"> | 142 | ··<a·href="#print-the-primary-logger-configurations"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text">Print·the·primary·Logger·configurations.</span> | 145 | ··<span·class="text">Print·the·primary·Logger·configurations.</span> |
| 146 | </h3> | 146 | </h3> |
| 147 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">i</span><span·class="p"·data-group-id=" | 147 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">i</span><span·class="p"·data-group-id="6157573544-1">(</span><span·class="ss">primary</span><span·class="p"·data-group-id="6157573544-1">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="n">Primary</span><span·class="w">·</span><span·class="nc">configuration</span><span·class="p">:</span><span·class="w"> | 148 | </span><span·class="n">Primary</span><span·class="w">·</span><span·class="nc">configuration</span><span·class="p">:</span><span·class="w"> |
| 149 | ····</span><span·class="n">Level</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">notice</span><span·class="w"> | 149 | ····</span><span·class="n">Level</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">notice</span><span·class="w"> |
| 150 | ····</span><span·class="n">Filter</span><span·class="w">·</span><span·class="n">Default</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">log</span><span·class="w"> | 150 | ····</span><span·class="n">Filter</span><span·class="w">·</span><span·class="n">Default</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">log</span><span·class="w"> |
| 151 | ····</span><span·class="n">Filters</span><span·class="p">:</span><span·class="w"> | 151 | ····</span><span·class="n">Filters</span><span·class="p">:</span><span·class="w"> |
| 152 | ········</span><span·class="p"·data-group-id=" | 152 | ········</span><span·class="p"·data-group-id="6157573544-2">(</span><span·class="ss">none</span><span·class="p"·data-group-id="6157573544-2">)</span></code></pre><p>It·is·also·possible·to·fetch·the·configuration·using |
| 153 | <a·href="logger.html#get_primary_config/0"><code·class="inline">logger:get_primary_config()</code></a>.</p><h4>See·also</h4><ul><li><a·href="logger.html#i/0">logger:i()</a></li><li><a·href="logger_chapter.html#configuration">Configuration</a>·in·the·Logging·User's·Guide</li></ul><h3·id="print-the-configuration-of-all-handlers"·class="section-heading"> | 153 | <a·href="logger.html#get_primary_config/0"><code·class="inline">logger:get_primary_config()</code></a>.</p><h4>See·also</h4><ul><li><a·href="logger.html#i/0">logger:i()</a></li><li><a·href="logger_chapter.html#configuration">Configuration</a>·in·the·Logging·User's·Guide</li></ul><h3·id="print-the-configuration-of-all-handlers"·class="section-heading"> |
| 154 | ··<a·href="#print-the-configuration-of-all-handlers"·class="hover-link"> | 154 | ··<a·href="#print-the-configuration-of-all-handlers"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Print·the·configuration·of·all·handlers.</span> | 157 | ··<span·class="text">Print·the·configuration·of·all·handlers.</span> |
| 158 | </h3> | 158 | </h3> |
| 159 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">i</span><span·class="p"·data-group-id=" | 159 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">i</span><span·class="p"·data-group-id="6366386699-1">(</span><span·class="ss">handlers</span><span·class="p"·data-group-id="6366386699-1">)</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="n">Handler</span><span·class="w">·</span><span·class="nc">configuration</span><span·class="p">:</span><span·class="w"> | 160 | </span><span·class="n">Handler</span><span·class="w">·</span><span·class="nc">configuration</span><span·class="p">:</span><span·class="w"> |
| 161 | ····</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">default</span><span·class="w"> | 161 | ····</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">default</span><span·class="w"> |
| 162 | ········</span><span·class="n">Module</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="w"> | 162 | ········</span><span·class="n">Module</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="w"> |
| 163 | ········</span><span·class="n">Level</span><span·class="p">:</span><span·class="w">··</span><span·class="ss">all</span><span·class="w"> | 163 | ········</span><span·class="n">Level</span><span·class="p">:</span><span·class="w">··</span><span·class="ss">all</span><span·class="w"> |
| 164 | ········</span><span·class="n">Formatter</span><span·class="p">:</span><span·class="w"> | 164 | ········</span><span·class="n">Formatter</span><span·class="p">:</span><span·class="w"> |
| 165 | ············</span><span·class="n">Module</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">logger_formatter</span><span·class="w"> | 165 | ············</span><span·class="n">Module</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">logger_formatter</span><span·class="w"> |
| 166 | ············</span><span·class="n">Config</span><span·class="p">:</span><span·class="w"> | 166 | ············</span><span·class="n">Config</span><span·class="p">:</span><span·class="w"> |
| Offset 169, 18 lines modified | Offset 169, 18 lines modified | ||
| 169 | ········</span><span·class="n">Filter</span><span·class="w">·</span><span·class="n">Default</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stop</span><span·class="w"> | 169 | ········</span><span·class="n">Filter</span><span·class="w">·</span><span·class="n">Default</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stop</span><span·class="w"> |
| 170 | ········</span><span·class="n">Filters</span><span·class="p">:</span><span·class="w"> | 170 | ········</span><span·class="n">Filters</span><span·class="p">:</span><span·class="w"> |
| 171 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">remote_gl</span><span·class="w"> | 171 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">remote_gl</span><span·class="w"> |
| 172 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">remote_gl</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> | 172 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">remote_gl</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> |
| 173 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stop</span><span·class="w"> | 173 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stop</span><span·class="w"> |
| 174 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">domain</span><span·class="w"> | 174 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">domain</span><span·class="w"> |
| 175 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> | 175 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> |
| 176 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="6366386699-2">{</span><span·class="ss">log</span><span·class="p">,</span><span·class="ss">super</span><span·class="p">,</span><span·class="p"·data-group-id="6366386699-3">[</span><span·class="ss">otp</span><span·class="p">,</span><span·class="ss">sasl</spa[·...·truncated·by·diffoscope;·len:·96,·SHA:·2793577d38485dc6e31ec2c82fc1218832d4dfb485063d880ece7e5568ddecf5·...·]-2">}</span><span·class="w"> |
| 177 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">no_domain</span><span·class="w"> | 177 | ············</span><span·class="n">Id</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">no_domain</span><span·class="w"> |
| 178 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> | 178 | ················</span><span·class="n">Fun</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> |
| 179 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 179 | ················</span><span·class="n">Arg</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="6366386699-4">{</span><span·class="ss">log</span><span·class="p">,</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="p"·data-group-id="6366386699-5">[</span><span·class="p"·data-group-id="6366386699-5">]</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·f801cfb9d035bde5e2f342af08999b0f6e557dda5b19d9b62de9d7cdf85511af·...·]-4">}</span><span·class="w"> |
| 180 | ········</span><span·class="n">Handler</span><span·class="w">·</span><span·class="n">Config</span><span·class="p">:</span><span·class="w"> | 180 | ········</span><span·class="n">Handler</span><span·class="w">·</span><span·class="n">Config</span><span·class="p">:</span><span·class="w"> |
| 181 | ············</span><span·class="nc">burst_limit_enable</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">true</span><span·class="w"> | 181 | ············</span><span·class="nc">burst_limit_enable</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">true</span><span·class="w"> |
| 182 | ············</span><span·class="nc">burst_limit_max_count</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">500</span><span·class="w"> | 182 | ············</span><span·class="nc">burst_limit_max_count</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">500</span><span·class="w"> |
| 183 | ············</span><span·class="nc">burst_limit_window_time</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000</span><span·class="w"> | 183 | ············</span><span·class="nc">burst_limit_window_time</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000</span><span·class="w"> |
| 184 | ············</span><span·class="nc">drop_mode_qlen</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">200</span><span·class="w"> | 184 | ············</span><span·class="nc">drop_mode_qlen</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">200</span><span·class="w"> |
| 185 | ············</span><span·class="nc">filesync_repeat_interval</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">no_repeat</span><span·class="w"> | 185 | ············</span><span·class="nc">filesync_repeat_interval</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">no_repeat</span><span·class="w"> |
| 186 | ············</span><span·class="nc">flush_qlen</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000</span><span·class="w"> | 186 | ············</span><span·class="nc">flush_qlen</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000</span><span·class="w"> |
| Offset 211, 15 lines modified | Offset 211, 15 lines modified | ||
| 211 | level·to·<code·class="inline">info</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">kernel</span><span·class="w">·</span><span·class="ss">logger_level</span><span·class="w">·</span><span·class="ss">info</span><span·class="w"> | 211 | level·to·<code·class="inline">info</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">kernel</span><span·class="w">·</span><span·class="ss">logger_level</span><span·class="w">·</span><span·class="ss">info</span><span·class="w"> |
| 212 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">-</span><span·class="n">Nov</span><span·class="o">-</span><span·class="mi">2019</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">33</span><span·class="p">:</span><span·class="mf">11.742069</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 212 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">-</span><span·class="n">Nov</span><span·class="o">-</span><span·class="mi">2019</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">33</span><span·class="p">:</span><span·class="mf">11.742069</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 213 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">kernel</span><span·class="w"> | 213 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">kernel</span><span·class="w"> |
| 214 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> | 214 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> |
| 215 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">-</span><span·class="n">Nov</span><span·class="o">-</span><span·class="mi">2019</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">33</span><span·class="p">:</span><span·class="mf">11.746546</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 215 | </span><span·class="o">=</span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="o">==</span><span·class="o">==</span><span·class="w">·</span><span·class="mi">4</span><span·class="o">-</span><span·class="n">Nov</span><span·class="o">-</span><span·class="mi">2019</span><span·class="p">:</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">33</span><span·class="p">:</span><span·class="mf">11.746546</span><span·class="w">·</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 216 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stdlib</span><span·class="w"> | 216 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">stdlib</span><span·class="w"> |
| 217 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> | 217 | ····</span><span·class="nc">started_at</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">nonode@nohost</span><span·class="w"> |
| 218 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 218 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.3</span><span·class="w">··</span><span·class="p"·data-group-id="1131179022-1">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="1131179022-1">)</span><span·class="w"> |
| 219 | </span><span·class="mi">1</span><span·class="o">></span></code></pre><h2·id="configure-logger-formatter"·class="section-heading"> | 219 | </span><span·class="mi">1</span><span·class="o">></span></code></pre><h2·id="configure-logger-formatter"·class="section-heading"> |
| 220 | ··<a·href="#configure-logger-formatter"·class="hover-link"> | 220 | ··<a·href="#configure-logger-formatter"·class="hover-link"> |
| 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 221 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 222 | ··</a> | 222 | ··</a> |
| 223 | ··<span·class="text">Configure·Logger·formatter</span> | 223 | ··<span·class="text">Configure·Logger·formatter</span> |
| 224 | </h2> | 224 | </h2> |
| 225 | <p>In·order·to·fit·better·into·your·existing·logging·infrastructure·Logger·can | 225 | <p>In·order·to·fit·better·into·your·existing·logging·infrastructure·Logger·can |
| Offset 229, 40 lines modified | Offset 229, 40 lines modified | ||
| 229 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 229 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 230 | ··</a> | 230 | ··</a> |
| 231 | ··<span·class="text">Single·line·configuration</span> | 231 | ··<span·class="text">Single·line·configuration</span> |
| 232 | </h3> | 232 | </h3> |
| 233 | <p>Since·single·line·logging·is·the·default·of·the·built-in·formatter·you·only·have | 233 | <p>Since·single·line·logging·is·the·default·of·the·built-in·formatter·you·only·have |
| 234 | to·provide·the·empty·map·as·the·configuration.·The·example·below·uses·the | 234 | to·provide·the·empty·map·as·the·configuration.·The·example·below·uses·the |
| 235 | <code·class="inline">sys.config</code>·to·change·the·formatter·configuration.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> | 235 | <code·class="inline">sys.config</code>·to·change·the·formatter·configuration.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> |
| 236 | </span><span·class="p"·data-group-id="5 | 236 | </span><span·class="p"·data-group-id="5714169805-1">[</span><span·class="p"·data-group-id="5714169805-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 237 | ··</span><span·class="p"·data-group-id="5 | 237 | ··</span><span·class="p"·data-group-id="5714169805-3">[</span><span·class="p"·data-group-id="5714169805-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 238 | ····</span><span·class="p"·data-group-id="5 | 238 | ····</span><span·class="p"·data-group-id="5714169805-5">[</span><span·class="p"·data-group-id="5714169805-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 239 | ······</span><span·class="p"·data-group-id="5 | 239 | ······</span><span·class="p"·data-group-id="5714169805-7">#{</span><span·class="w">·</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="5714169805-8">{</span><span·class="ss">logger_formatter</span><span·cl[·...·truncated·by·diffoscope;·len:·583,·SHA:·b58a3d714d157295f652ffc9d0ecce496ba969c38058210d18b137820fdfb1ae·...·]-1">]</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> | 240 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> |
| 241 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id="5 | 241 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id="5714169805-10">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="5714169805-10">)</span><span·class="gp·unselectable"> |
| 242 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="5 | 242 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="5714169805-11">(</span><span·class="s">"Oh·noes,·an·error"</span><span·class="p"·data-group-id="5714169805-11">)</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">03</span><span·class="n">T11</span><span·class="p">:</span><span·class="mi">07</span><span·class="p">:</span><span·class="mf">47.466763</span><span·class="o">-</span><span·class="mi">04</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">an</span><span·class="w">·</span><span·class="ss">error</span></code></pre><p>However,·if·you·just·want·to·change·it·for·the·current·session·you·can·also·do | 243 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">03</span><span·class="n">T11</span><span·class="p">:</span><span·class="mi">07</span><span·class="p">:</span><span·class="mf">47.466763</span><span·class="o">-</span><span·class="mi">04</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">an</span><span·class="w">·</span><span·class="ss">error</span></code></pre><p>However,·if·you·just·want·to·change·it·for·the·current·session·you·can·also·do |
| 244 | that.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id=" | 244 | that.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id="6697832905-1">(</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">formatter</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6697832905-2">{</span><span·class="ss">logg[·...·truncated·by·diffoscope;·len:·268,·SHA:·4efd5fa6183549cc1f3711480dfce615c447bd63a8426b978313c0ba9a1399e5·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 245 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 245 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 246 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id=" | 246 | 2>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="6697832905-4">(</span><span·class="s">"Oh·noes,·another·error"</span><span·class="p"·data-group-id="6697832905-4">)</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">04</span><span·class="n">T15</span><span·class="p">:</span><span·class="mi">34</span><span·class="p">:</span><span·class="mf">02.648713</span><span·class="o">-</span><span·class="mi">04</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">another</span><span·class="w">·</span><span·class="ss">error</span></code></pre><h4>See·also</h4><ul><li><a·href="logger_formatter.html#t:config/0">logger_formatter's·Configuration</a></li><li><a·href="logger_chapter.html#formatters">Formatters</a>·in·the·Logging·User's·Guide</li><li><a·href="logger.html#set_handler_config/3"><code·class="inline">logger:set_handler_config/3</code></a></li></ul><h3·id="add-file-and-line-number-to-log-entries"·class="section-heading"> | 247 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">04</span><span·class="n">T15</span><span·class="p">:</span><span·class="mi">34</span><span·class="p">:</span><span·class="mf">02.648713</span><span·class="o">-</span><span·class="mi">04</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">another</span><span·class="w">·</span><span·class="ss">error</span></code></pre><h4>See·also</h4><ul><li><a·href="logger_formatter.html#t:config/0">logger_formatter's·Configuration</a></li><li><a·href="logger_chapter.html#formatters">Formatters</a>·in·the·Logging·User's·Guide</li><li><a·href="logger.html#set_handler_config/3"><code·class="inline">logger:set_handler_config/3</code></a></li></ul><h3·id="add-file-and-line-number-to-log-entries"·class="section-heading"> |
| 248 | ··<a·href="#add-file-and-line-number-to-log-entries"·class="hover-link"> | 248 | ··<a·href="#add-file-and-line-number-to-log-entries"·class="hover-link"> |
| 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 250 | ··</a> | 250 | ··</a> |
| 251 | ··<span·class="text">Add·file·and·line·number·to·log·entries</span> | 251 | ··<span·class="text">Add·file·and·line·number·to·log·entries</span> |
| 252 | </h3> | 252 | </h3> |
| 253 | <p>You·can·change·what·is·printed·to·the·log·by·using·the·formatter·template:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> | 253 | <p>You·can·change·what·is·printed·to·the·log·by·using·the·formatter·template:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> |
| 254 | </span><span·class="p"·data-group-id="24 | 254 | </span><span·class="p"·data-group-id="2474722676-1">[</span><span·class="p"·data-group-id="2474722676-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 255 | ··</span><span·class="p"·data-group-id="24 | 255 | ··</span><span·class="p"·data-group-id="2474722676-3">[</span><span·class="p"·data-group-id="2474722676-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 256 | ····</span><span·class="p"·data-group-id="24 | 256 | ····</span><span·class="p"·data-group-id="2474722676-5">[</span><span·class="p"·data-group-id="2474722676-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 257 | ······</span><span·class="p"·data-group-id="24 | 257 | ······</span><span·class="p"·data-group-id="2474722676-7">#{</span><span·class="w">·</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="2474722676-8">{</span><span·class="ss">logger_formatter</span><span·class="p">,</span><span·class="w"> |
| 258 | ········</span><span·class="p"·data-group-id="24 | 258 | ········</span><span·class="p"·data-group-id="2474722676-9">#{</span><span·class="w">·</span><span·class="ss">template</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="2474722676-10">[</span><span·class="ss">time</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·1055,·SHA:·1c98f334f8bcc6a38d3cdb20ba40e585ef4066b48df4f137400f78d3eb17242d·...·]6-1">]</span><span·class="p">.</span><span·class="w"> |
| 259 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> | 259 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> |
| 260 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id="24 | 260 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id="2474722676-11">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="2474722676-11">)</span><span·class="gp·unselectable"> |
| 261 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="24 | 261 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="2474722676-12">(</span><span·class="s">"Oh·noes,·more·errors"</span><span·class="p">,</span><span·class="p"·data-group-id="2474722676-13">#{</span><span·class="w">·</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></sp[·...·truncated·by·diffoscope;·len:·366,·SHA:·4ea12981159febdc19f8117372e58e70fc222782614f171112309b428650447f·...·]6-12">)</span><span·class="p">.</span><span·class="w"> |
| 262 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">05</span><span·class="n">T07</span><span·class="p">:</span><span·class="mi">37</span><span·class="p">:</span><span·class="mf">44.104241</span><span·class="o">+</span><span·class="mi">02</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="ss">shell</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">1</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">more</span><span·class="w">·</span><span·class="ss">errors</span></code></pre><p>Note·that·file·and·line·have·to·be·added·in·the·metadata·by·the·caller·of | 262 | </span><span·class="mi">1962</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">05</span><span·class="n">T07</span><span·class="p">:</span><span·class="mi">37</span><span·class="p">:</span><span·class="mf">44.104241</span><span·class="o">+</span><span·class="mi">02</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="ss">shell</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">1</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">more</span><span·class="w">·</span><span·class="ss">errors</span></code></pre><p>Note·that·file·and·line·have·to·be·added·in·the·metadata·by·the·caller·of |
| 263 | <a·href="logger.html#log/3"><code·class="inline">logger:log/3</code></a>·as·otherwise·Logger·will·not·know·from·where·it·was·called.·The | 263 | <a·href="logger.html#log/3"><code·class="inline">logger:log/3</code></a>·as·otherwise·Logger·will·not·know·from·where·it·was·called.·The |
| 264 | file·and·line·number·are·automatically·added·if·you·use·the·<code·class="inline">?LOG_ERROR</code>·macros | 264 | file·and·line·number·are·automatically·added·if·you·use·the·<code·class="inline">?LOG_ERROR</code>·macros |
| 265 | in·<code·class="inline">kernel/include/logger.hrl</code>.</p><h4>See·also</h4><ul><li><a·href="logger_formatter.html#t:config/0">logger_formatter's·Configuration</a></li><li><a·href="logger_formatter.html#t:template/0">logger_formatter's·Template</a></li><li><a·href="logger.html#module-macros">Logger·Macros</a></li><li><a·href="logger_chapter.html#metadata">Metadata</a>·in·the·Logging·User's·Guide</li></ul><h2·id="configuring-handlers"·class="section-heading"> | 265 | in·<code·class="inline">kernel/include/logger.hrl</code>.</p><h4>See·also</h4><ul><li><a·href="logger_formatter.html#t:config/0">logger_formatter's·Configuration</a></li><li><a·href="logger_formatter.html#t:template/0">logger_formatter's·Template</a></li><li><a·href="logger.html#module-macros">Logger·Macros</a></li><li><a·href="logger_chapter.html#metadata">Metadata</a>·in·the·Logging·User's·Guide</li></ul><h2·id="configuring-handlers"·class="section-heading"> |
| 266 | ··<a·href="#configuring-handlers"·class="hover-link"> | 266 | ··<a·href="#configuring-handlers"·class="hover-link"> |
| 267 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 267 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 268 | ··</a> | 268 | ··</a> |
| Offset 271, 67 lines modified | Offset 271, 67 lines modified | ||
| 271 | <h3·id="print-logs-to-a-file"·class="section-heading"> | 271 | <h3·id="print-logs-to-a-file"·class="section-heading"> |
| 272 | ··<a·href="#print-logs-to-a-file"·class="hover-link"> | 272 | ··<a·href="#print-logs-to-a-file"·class="hover-link"> |
| 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 274 | ··</a> | 274 | ··</a> |
| 275 | ··<span·class="text">Print·logs·to·a·file</span> | 275 | ··<span·class="text">Print·logs·to·a·file</span> |
| 276 | </h3> | 276 | </h3> |
| 277 | <p>Instead·of·printing·the·logs·to·stdout·we·print·them·to·a·rotating·file·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> | 277 | <p>Instead·of·printing·the·logs·to·stdout·we·print·them·to·a·rotating·file·log.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">sys</span><span·class="p">.</span><span·class="ss">config</span><span·class="w"> |
| 278 | </span><span·class="p"·data-group-id=" | 278 | </span><span·class="p"·data-group-id="8919644097-1">[</span><span·class="p"·data-group-id="8919644097-2">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w"> |
| 279 | ··</span><span·class="p"·data-group-id=" | 279 | ··</span><span·class="p"·data-group-id="8919644097-3">[</span><span·class="p"·data-group-id="8919644097-4">{</span><span·class="ss">logger</span><span·class="p">,</span><span·class="w"> |
| 280 | ····</span><span·class="p"·data-group-id=" | 280 | ····</span><span·class="p"·data-group-id="8919644097-5">[</span><span·class="p"·data-group-id="8919644097-6">{</span><span·class="ss">handler</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 281 | ······</span><span·class="p"·data-group-id=" | 281 | ······</span><span·class="p"·data-group-id="8919644097-7">#{</span><span·class="w">·</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8919644097-8">#{</span><span·class="w">·</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"log/erlang.log"</span><span·class="p">,</span><span·class="w"> |
| 282 | ······················</span><span·class="ss">max_no_bytes</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">4096</span><span·class="p">,</span><span·class="w"> | 282 | ······················</span><span·class="ss">max_no_bytes</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">4096</span><span·class="p">,</span><span·class="w"> |
| 283 | ······················</span><span·class="ss">max_no_files</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">5</span><span·class="p"·data-group-id=" | 283 | ······················</span><span·class="ss">max_no_files</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">5</span><span·class="p"·data-group-id="8919644097-8">}</span><span·class="p">,</span><span·class="w"> |
| 284 | ·········</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 284 | ·········</span><span·class="ss">formatter</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8919644097-9">{</span><span·class="ss">logger_formatter</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8919644097-10">#{</span><span·class="p"·data-group-id="8919644097-10">}</span><span·class="p"·data-group-id="891964[·...·truncated·by·diffoscope;·len:·375,·SHA:·e5863078cb0ea121f3df0d35af3e2b2bbd3712875caa651935b6a02d690c4d30·...·]-1">]</span><span·class="p">.</span><span·class="w"> |
| 285 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> | 285 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="ss">sys</span><span·class="w"> |
| 286 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 286 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V10</span><span·class="p">.</span><span·class="mf">5.1</span><span·class="w">··</span><span·class="p"·data-group-id="8919644097-11">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="8919644097-11">)</span><span·class="gp·unselectable"> |
| 287 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id=" | 287 | 1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="8919644097-12">(</span><span·class="s">"Oh·noes,·even·more·errors"</span><span·class="p"·data-group-id="8919644097-12">)</span><span·class="p">.</span><span·class="w"> |
| 288 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 288 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 289 | 2>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">halt</span><span·class="p"·data-group-id=" | 289 | 2>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">halt</span><span·class="p"·data-group-id="8919644097-13">(</span><span·class="p"·data-group-id="8919644097-13">)</span><span·class="p">.</span><span·class="w"> |
| 290 | </span><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">log</span><span·class="o">/</span><span·class="ss">erlang</span><span·class="p">.</span><span·class="ss">log</span><span·class="w"> | 290 | </span><span·class="sc">$·</span><span·class="ss">cat</span><span·class="w">·</span><span·class="ss">log</span><span·class="o">/</span><span·class="ss">erlang</span><span·class="p">.</span><span·class="ss">log</span><span·class="w"> |
| 291 | </span><span·class="mi">2019</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">07</span><span·class="n">T11</span><span·class="p">:</span><span·class="mi">47</span><span·class="p">:</span><span·class="mf">16.837958</span><span·class="o">+</span><span·class="mi">02</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">even</span><span·class="w">·</span><span·class="ss">more</span><span·class="w">·</span><span·class="ss">errors</span></code></pre><h4>See·also</h4><ul><li><a·href="logger_std_h.html"><code·class="inline">logger_std_h</code></a></li><li><a·href="logger_chapter.html#handlers">Handlers</a>·in·the·Logging·User's·Guide</li></ul><h3·id="debug-only-handler"·class="section-heading"> | 291 | </span><span·class="mi">2019</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">07</span><span·class="n">T11</span><span·class="p">:</span><span·class="mi">47</span><span·class="p">:</span><span·class="mf">16.837958</span><span·class="o">+</span><span·class="mi">02</span><span·class="p">:</span><span·class="mi">00</span><span·class="w">·</span><span·class="nc">error</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Oh</span><span·class="w">·</span><span·class="ss">noes</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">even</span><span·class="w">·</span><span·class="ss">more</span><span·class="w">·</span><span·class="ss">errors</span></code></pre><h4>See·also</h4><ul><li><a·href="logger_std_h.html"><code·class="inline">logger_std_h</code></a></li><li><a·href="logger_chapter.html#handlers">Handlers</a>·in·the·Logging·User's·Guide</li></ul><h3·id="debug-only-handler"·class="section-heading"> |
| 292 | ··<a·href="#debug-only-handler"·class="hover-link"> | 292 | ··<a·href="#debug-only-handler"·class="hover-link"> |
| 293 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 293 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Max diff block lines reached; 55951/96966 bytes (57.70%) of diff not shown. | |||
| Offset 160, 20 lines modified | Offset 160, 20 lines modified | ||
| 160 | sync·if·something·has·actually·been·logged.</p><p>Defaults·to·<code·class="inline">5000</code>·milliseconds.</p><p>If·<code·class="inline">no_repeat</code>·is·set·as·value,·the·repeated·sync·operation·is·disabled.·The | 160 | sync·if·something·has·actually·been·logged.</p><p>Defaults·to·<code·class="inline">5000</code>·milliseconds.</p><p>If·<code·class="inline">no_repeat</code>·is·set·as·value,·the·repeated·sync·operation·is·disabled.·The |
| 161 | user·can·also·call·the·<a·href="#filesync/1"><code·class="inline">filesync/1</code></a>·function·to·perform·a | 161 | user·can·also·call·the·<a·href="#filesync/1"><code·class="inline">filesync/1</code></a>·function·to·perform·a |
| 162 | disk_log·sync.</p></li></ul><p>Other·configuration·parameters·exist,·to·be·used·for·customizing·the·overload | 162 | disk_log·sync.</p></li></ul><p>Other·configuration·parameters·exist,·to·be·used·for·customizing·the·overload |
| 163 | protection·behaviour.·The·same·parameters·are·used·both·in·the·standard·handler | 163 | protection·behaviour.·The·same·parameters·are·used·both·in·the·standard·handler |
| 164 | and·the·disk_log·handler,·and·are·documented·in·the | 164 | and·the·disk_log·handler,·and·are·documented·in·the |
| 165 | <a·href="logger_chapter.html#overload_protection"><code·class="inline">User's·Guide</code></a>.</p><p>Notice·that·when·changing·the·configuration·of·the·handler·in·runtime,·the | 165 | <a·href="logger_chapter.html#overload_protection"><code·class="inline">User's·Guide</code></a>.</p><p>Notice·that·when·changing·the·configuration·of·the·handler·in·runtime,·the |
| 166 | disk_log·options·(<code·class="inline">file</code>,·<code·class="inline">type</code>,·<code·class="inline">max_no_files</code>,·<code·class="inline">max_no_bytes</code>)·must·not·be | 166 | disk_log·options·(<code·class="inline">file</code>,·<code·class="inline">type</code>,·<code·class="inline">max_no_files</code>,·<code·class="inline">max_no_bytes</code>)·must·not·be |
| 167 | modified.</p><p>Example·of·adding·a·disk_log·handler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id=" | 167 | modified.</p><p>Example·of·adding·a·disk_log·handler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="4180070449-1">(</span><span·class="ss">my_disk_log_h</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_disk_log_h</span><span·class="p">,</span><span·class="w"> |
| 168 | ···················</span><span·class="p"·data-group-id=" | 168 | ···················</span><span·class="p"·data-group-id="4180070449-2">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4180070449-3">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"./my_disk_log"</span><span·class="p">,</span><span·class="w"> |
| 169 | ·································</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">wrap</span><span·class="p">,</span><span·class="w"> | 169 | ·································</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">wrap</span><span·class="p">,</span><span·class="w"> |
| 170 | ·································</span><span·class="ss">max_no_files</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> | 170 | ·································</span><span·class="ss">max_no_files</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> |
| 171 | ·································</span><span·class="ss">max_no_bytes</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">10000</span><span·class="p">,</span><span·class="w"> | 171 | ·································</span><span·class="ss">max_no_bytes</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">10000</span><span·class="p">,</span><span·class="w"> |
| 172 | ·································</span><span·class="ss">filesync_repeat_interval</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1000</span><span·class="p"·data-group-id=" | 172 | ·································</span><span·class="ss">filesync_repeat_interval</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1000</span><span·class="p"·data-group-id="4180070449-3">}</span><span·class="p"·data-group-id="4180070449-2">}</span><span·class="p"·data-group-id="4180070449-1">)</span><span·class="p">.</span></code></pre><p>To·use·the·disk_log·handler·instead·of·the·default·standard·handler·when |
| 173 | starting·an·Erlang·node,·change·the·Kernel·default·logger·to·use | 173 | starting·an·Erlang·node,·change·the·Kernel·default·logger·to·use |
| 174 | <code·class="inline">logger_disk_log_h</code>.·Example:</p><pre><code·class="text">erl·-kernel·logger·'[{handler,default,logger_disk_log_h, | 174 | <code·class="inline">logger_disk_log_h</code>.·Example:</p><pre><code·class="text">erl·-kernel·logger·'[{handler,default,logger_disk_log_h, |
| 175 | ······················#{config·=>·#{file·=>·"./system_disk_log"}}}]'</code></pre><h2·id="module-see-also"·class="section-heading"> | 175 | ······················#{config·=>·#{file·=>·"./system_disk_log"}}}]'</code></pre><h2·id="module-see-also"·class="section-heading"> |
| 176 | ··<a·href="#module-see-also"·class="hover-link"> | 176 | ··<a·href="#module-see-also"·class="hover-link"> |
| 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 177 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 178 | ··</a> | 178 | ··</a> |
| 179 | ··<span·class="text">See·Also</span> | 179 | ··<span·class="text">See·Also</span> |
| Offset 269, 15 lines modified | Offset 269, 15 lines modified | ||
| 269 | ······<p·class="built-using"> | 269 | ······<p·class="built-using"> |
| 270 | ········Built·using | 270 | ········Built·using |
| 271 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 271 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 272 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 272 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 273 | ······</p> | 273 | ······</p> |
| 274 | <p>Copyright·©·1996-202 | 274 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 275 | ····</footer> | 275 | ····</footer> |
| 276 | ··</div> | 276 | ··</div> |
| 277 | </main> | 277 | </main> |
| 278 | </div> | 278 | </div> |
| 279 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 279 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 280 | ··<script> | 280 | ··<script> |
| 281 | ··let·initialized·=·false; | 281 | ··let·initialized·=·false; |
| Offset 245, 35 lines modified | Offset 245, 35 lines modified | ||
| 245 | ······</div> | 245 | ······</div> |
| 246 | <p>This·filter·provides·a·way·of·filtering·log·events·based·on·a·<code·class="inline">domain</code>·field·in | 246 | <p>This·filter·provides·a·way·of·filtering·log·events·based·on·a·<code·class="inline">domain</code>·field·in |
| 247 | <code·class="inline">Metadata</code>.·This·field·is·optional,·and·the·purpose·of·using·it·is·to·group·log | 247 | <code·class="inline">Metadata</code>.·This·field·is·optional,·and·the·purpose·of·using·it·is·to·group·log |
| 248 | events·from,·for·example,·a·specific·functional·area.·This·allows·filtering·or | 248 | events·from,·for·example,·a·specific·functional·area.·This·allows·filtering·or |
| 249 | other·specialized·treatment·in·a·Logger·handler.</p><p>A·domain·field·must·be·a·list·of·atoms,·creating·smaller·and·more·specialized | 249 | other·specialized·treatment·in·a·Logger·handler.</p><p>A·domain·field·must·be·a·list·of·atoms,·creating·smaller·and·more·specialized |
| 250 | domains·as·the·list·grows·longer.·The·greatest·domain·is·<code·class="inline">[]</code>,·which·comprises | 250 | domains·as·the·list·grows·longer.·The·greatest·domain·is·<code·class="inline">[]</code>,·which·comprises |
| 251 | all·possible·domains.</p><p>For·example,·consider·the·following·domains:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 251 | all·possible·domains.</p><p>For·example,·consider·the·following·domains:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8892196247-1">[</span><span·class="ss">otp</span><span·class="p"·data-group-id="8892196247-1">]</span><span·class="w"> |
| 252 | </span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 252 | </span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8892196247-2">[</span><span·class="ss">otp</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sasl</span><span·class="p"·data-group-id="8892196247-2">]</span></code></pre><p><code·class="inline">D1</code>·is·the·greatest·of·the·two,·and·is·said·to·be·a·super-domain·of·<code·class="inline">D2</code>.·<code·class="inline">D2</code> |
| 253 | is·a·sub-domain·<code·class="inline">D1</code>.·Both·<code·class="inline">D1</code>·and·<code·class="inline">D2</code>·are·sub-domains·of·<code·class="inline">[]</code>.</p><p>The·above·domains·are·used·for·logs·originating·from·Erlang/OTP.·D1·specifies | 253 | is·a·sub-domain·<code·class="inline">D1</code>.·Both·<code·class="inline">D1</code>·and·<code·class="inline">D2</code>·are·sub-domains·of·<code·class="inline">[]</code>.</p><p>The·above·domains·are·used·for·logs·originating·from·Erlang/OTP.·D1·specifies |
| 254 | that·the·log·event·comes·from·Erlang/OTP·in·general,·and·D2·indicates·that·the | 254 | that·the·log·event·comes·from·Erlang/OTP·in·general,·and·D2·indicates·that·the |
| 255 | log·event·is·a·so·called·<a·href="logger_chapter.html#sasl_reports">SASL·report</a>.</p><p>The·<code·class="inline">Extra</code>·parameter·to·the·<a·href="#domain/2"><code·class="inline">domain/2</code></a>·function·is·specified·when | 255 | log·event·is·a·so·called·<a·href="logger_chapter.html#sasl_reports">SASL·report</a>.</p><p>The·<code·class="inline">Extra</code>·parameter·to·the·<a·href="#domain/2"><code·class="inline">domain/2</code></a>·function·is·specified·when |
| 256 | adding·the·filter·via·<a·href="logger.html#add_primary_filter/2"><code·class="inline">logger:add_primary_filter/2</code></a>·or | 256 | adding·the·filter·via·<a·href="logger.html#add_primary_filter/2"><code·class="inline">logger:add_primary_filter/2</code></a>·or |
| 257 | <a·href="logger.html#add_handler_filter/3"><code·class="inline">logger:add_handler_filter/3</code></a>.</p><p>The·filter·compares·the·value·of·the·<code·class="inline">domain</code>·field·in·the·log·event's·metadata | 257 | <a·href="logger.html#add_handler_filter/3"><code·class="inline">logger:add_handler_filter/3</code></a>.</p><p>The·filter·compares·the·value·of·the·<code·class="inline">domain</code>·field·in·the·log·event's·metadata |
| 258 | (<code·class="inline">Domain</code>)·against·<code·class="inline">MatchDomain</code>.·The·filter·matches·if·the·value·of·<code·class="inline">Compare</code> | 258 | (<code·class="inline">Domain</code>)·against·<code·class="inline">MatchDomain</code>.·The·filter·matches·if·the·value·of·<code·class="inline">Compare</code> |
| 259 | is:</p><ul><li><p><strong><code·class="inline">sub</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·or·a·sub-domain·of·<code·class="inline">MatchDomain</code>,·that | 259 | is:</p><ul><li><p><strong><code·class="inline">sub</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·or·a·sub-domain·of·<code·class="inline">MatchDomain</code>,·that |
| 260 | is,·if·<code·class="inline">MatchDomain</code>·is·a·prefix·of·<code·class="inline">Domain</code>.</p></li><li><p><strong><code·class="inline">super</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·or·a·super-domain·of·<code·class="inline">MatchDomain</code>, | 260 | is,·if·<code·class="inline">MatchDomain</code>·is·a·prefix·of·<code·class="inline">Domain</code>.</p></li><li><p><strong><code·class="inline">super</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·or·a·super-domain·of·<code·class="inline">MatchDomain</code>, |
| 261 | that·is,·if·<code·class="inline">Domain</code>·is·a·prefix·of·<code·class="inline">MatchDomain</code>.</p></li><li><p><strong><code·class="inline">equal</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·<code·class="inline">MatchDomain</code>.</p></li><li><p><strong><code·class="inline">not_equal</code></strong>·-·and·<code·class="inline">Domain</code>·differs·from·<code·class="inline">MatchDomain</code>,·or·if·there·is·no | 261 | that·is,·if·<code·class="inline">Domain</code>·is·a·prefix·of·<code·class="inline">MatchDomain</code>.</p></li><li><p><strong><code·class="inline">equal</code></strong>·-·and·<code·class="inline">Domain</code>·is·equal·to·<code·class="inline">MatchDomain</code>.</p></li><li><p><strong><code·class="inline">not_equal</code></strong>·-·and·<code·class="inline">Domain</code>·differs·from·<code·class="inline">MatchDomain</code>,·or·if·there·is·no |
| 262 | domain·field·in·metadata.</p></li><li><p><strong><code·class="inline">undefined</code></strong>·-·and·there·is·no·domain·field·in·metadata.·In·this·case | 262 | domain·field·in·metadata.</p></li><li><p><strong><code·class="inline">undefined</code></strong>·-·and·there·is·no·domain·field·in·metadata.·In·this·case |
| 263 | <code·class="inline">MatchDomain</code>·must·be·set·to·<code·class="inline">[]</code>.</p></li></ul><p>If·the·filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">log</code>,·the·log·event·is·allowed.·If·the | 263 | <code·class="inline">MatchDomain</code>·must·be·set·to·<code·class="inline">[]</code>.</p></li></ul><p>If·the·filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">log</code>,·the·log·event·is·allowed.·If·the |
| 264 | filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">stop</code>,·the·log·event·is·stopped.</p><p>If·the·filter·does·not·match,·it·returns·<code·class="inline">ignore</code>,·meaning·that·other·filters, | 264 | filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">stop</code>,·the·log·event·is·stopped.</p><p>If·the·filter·does·not·match,·it·returns·<code·class="inline">ignore</code>,·meaning·that·other·filters, |
| 265 | or·the·value·of·the·configuration·parameter·<code·class="inline">filter_default</code>,·decide·if·the | 265 | or·the·value·of·the·configuration·parameter·<code·class="inline">filter_default</code>,·decide·if·the |
| 266 | event·is·allowed·or·not.</p><p>Log·events·that·do·not·contain·any·domain·field,·match·only·when·<code·class="inline">Compare</code>·is | 266 | event·is·allowed·or·not.</p><p>Log·events·that·do·not·contain·any·domain·field,·match·only·when·<code·class="inline">Compare</code>·is |
| 267 | equal·to·<code·class="inline">undefined</code>·or·<code·class="inline">not_equal</code>.</p><p>Example:·stop·all·events·with·domain·<code·class="inline">[otp,·sasl·|·_]</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id=" | 267 | equal·to·<code·class="inline">undefined</code>·or·<code·class="inline">not_equal</code>.</p><p>Example:·stop·all·events·with·domain·<code·class="inline">[otp,·sasl·|·_]</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id="0426915152-1">(</span><span·class="ss">h1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">filter_default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">log</span><span·class="p"·data-group-id="0426915152-1">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·this·is·the·default</span><span·class="w"> |
| 268 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 268 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 269 | 2>·</span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 269 | 2>·</span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0426915152-2">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">domain</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·512,·SHA:·83f00169f92be6a04420db8f682129c6e7c70b0f9b0e61387968864e15469ff0·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 270 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 270 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 271 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler_filter</span><span·class="p"·data-group-id=" | 271 | 3>·</span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler_filter</span><span·class="p"·data-group-id="0426915152-5">(</span><span·class="ss">h1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">no_sasl</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Filter</span><span·class="p"·data-group-id="0426915152-5">)</span><span·class="p">.</span><span·class="w"> |
| 272 | </span><span·class="ss">ok</span></code></pre> | 272 | </span><span·class="ss">ok</span></code></pre> |
| 273 | ··</section> | 273 | ··</section> |
| 274 | </section> | 274 | </section> |
| 275 | <section·class="detail"·id="level/2"> | 275 | <section·class="detail"·id="level/2"> |
| 276 | ··<div·class="detail-header"> | 276 | ··<div·class="detail-header"> |
| 277 | ····<a·href="#level/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 277 | ····<a·href="#level/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 308, 17 lines modified | Offset 308, 17 lines modified | ||
| 308 | matches·log·events·by·comparing·the·log·level·with·a·specified·<code·class="inline">MatchLevel</code></p><p>The·<code·class="inline">Extra</code>·parameter·is·specified·when·adding·the·filter·via | 308 | matches·log·events·by·comparing·the·log·level·with·a·specified·<code·class="inline">MatchLevel</code></p><p>The·<code·class="inline">Extra</code>·parameter·is·specified·when·adding·the·filter·via |
| 309 | <a·href="logger.html#add_primary_filter/2"><code·class="inline">logger:add_primary_filter/2</code></a>·or·<a·href="logger.html#add_handler_filter/3"><code·class="inline">logger:add_handler_filter/3</code></a>.</p><p>The·filter·compares·the·value·of·the·event's·log·level·(<code·class="inline">Level</code>)·to·<code·class="inline">MatchLevel</code> | 309 | <a·href="logger.html#add_primary_filter/2"><code·class="inline">logger:add_primary_filter/2</code></a>·or·<a·href="logger.html#add_handler_filter/3"><code·class="inline">logger:add_handler_filter/3</code></a>.</p><p>The·filter·compares·the·value·of·the·event's·log·level·(<code·class="inline">Level</code>)·to·<code·class="inline">MatchLevel</code> |
| 310 | by·calling | 310 | by·calling |
| 311 | <a·href="logger.html#compare_levels/2"><code·class="inline">logger:compare_levels(Level,·MatchLevel)</code></a>.·The | 311 | <a·href="logger.html#compare_levels/2"><code·class="inline">logger:compare_levels(Level,·MatchLevel)</code></a>.·The |
| 312 | filter·matches·if·the·value·of·<code·class="inline">Operator</code>·is:</p><ul><li><p><strong><code·class="inline">neq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>·or·<code·class="inline">gt</code>.</p></li><li><p><strong><code·class="inline">eq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">eq</code>.</p></li><li><p><strong><code·class="inline">lt</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>.</p></li><li><p><strong><code·class="inline">gt</code></strong>·-·and·the·compare·function·returns·<code·class="inline">gt</code>.</p></li><li><p><strong><code·class="inline">lteq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>·or·<code·class="inline">eq</code>.</p></li><li><p><strong><code·class="inline">gteq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">gt</code>·or·<code·class="inline">eq</code>.</p></li></ul><p>If·the·filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">log</code>,·the·log·event·is·allowed.·If·the | 312 | filter·matches·if·the·value·of·<code·class="inline">Operator</code>·is:</p><ul><li><p><strong><code·class="inline">neq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>·or·<code·class="inline">gt</code>.</p></li><li><p><strong><code·class="inline">eq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">eq</code>.</p></li><li><p><strong><code·class="inline">lt</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>.</p></li><li><p><strong><code·class="inline">gt</code></strong>·-·and·the·compare·function·returns·<code·class="inline">gt</code>.</p></li><li><p><strong><code·class="inline">lteq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">lt</code>·or·<code·class="inline">eq</code>.</p></li><li><p><strong><code·class="inline">gteq</code></strong>·-·and·the·compare·function·returns·<code·class="inline">gt</code>·or·<code·class="inline">eq</code>.</p></li></ul><p>If·the·filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">log</code>,·the·log·event·is·allowed.·If·the |
| 313 | filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">stop</code>,·the·log·event·is·stopped.</p><p>If·the·filter·does·not·match,·it·returns·<code·class="inline">ignore</code>,·meaning·that·other·filters, | 313 | filter·matches·and·<code·class="inline">Action</code>·is·<code·class="inline">stop</code>,·the·log·event·is·stopped.</p><p>If·the·filter·does·not·match,·it·returns·<code·class="inline">ignore</code>,·meaning·that·other·filters, |
| 314 | or·the·value·of·the·configuration·parameter·<code·class="inline">filter_default</code>,·will·decide·if·the | 314 | or·the·value·of·the·configuration·parameter·<code·class="inline">filter_default</code>,·will·decide·if·the |
| 315 | event·is·allowed·or·not.</p><p>Example:·only·allow·debug·level·log·events</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id=" | 315 | event·is·allowed·or·not.</p><p>Example:·only·allow·debug·level·log·events</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">set_handler_config</span><span·class="p"·data-group-id="6837312864-1">(</span><span·class="ss">h1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">filter_default</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p"·data-group-id="6837312864-1">)</span><span·class="p">.</span><span·class="w"> |
| 316 | </span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 316 | </span><span·class="n">Filter</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6837312864-2">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">logger_filters</span><span·class="p">:</span><span·class="ss">level</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·329,·SHA:·98539f07cc0f032bc35b80ed6204b0b119a28317cb700ffe2aca4bf825cfe136·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 317 | </span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler_filter</span><span·class="p"·data-group-id=" | 317 | </span><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler_filter</span><span·class="p"·data-group-id="6837312864-4">(</span><span·class="ss">h1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">debug_only</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Filter</span><span·class="p"·data-group-id="6837312864-4">)</span><span·class="p">.</span><span·class="w"> |
| 318 | </span><span·class="ss">ok</span></code></pre> | 318 | </span><span·class="ss">ok</span></code></pre> |
| 319 | ··</section> | 319 | ··</section> |
| 320 | </section> | 320 | </section> |
| 321 | <section·class="detail"·id="progress/2"> | 321 | <section·class="detail"·id="progress/2"> |
| 322 | ··<div·class="detail-header"> | 322 | ··<div·class="detail-header"> |
| 323 | ····<a·href="#progress/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 323 | ····<a·href="#progress/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 402, 15 lines modified | Offset 402, 15 lines modified | ||
| 402 | ······<p·class="built-using"> | 402 | ······<p·class="built-using"> |
| 403 | ········Built·using | 403 | ········Built·using |
| 404 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 404 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 405 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 405 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 406 | ······</p> | 406 | ······</p> |
| 407 | <p>Copyright·©·1996-202 | 407 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 408 | ····</footer> | 408 | ····</footer> |
| 409 | ··</div> | 409 | ··</div> |
| 410 | </main> | 410 | </main> |
| 411 | </div> | 411 | </div> |
| 412 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 412 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 413 | ··<script> | 413 | ··<script> |
| 414 | ··let·initialized·=·false; | 414 | ··let·initialized·=·false; |
| Offset 607, 15 lines modified | Offset 607, 15 lines modified | ||
| 607 | ······<p·class="built-using"> | 607 | ······<p·class="built-using"> |
| 608 | ········Built·using | 608 | ········Built·using |
| 609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 611 | ······</p> | 611 | ······</p> |
| 612 | <p>Copyright·©·1996-202 | 612 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 613 | ····</footer> | 613 | ····</footer> |
| 614 | ··</div> | 614 | ··</div> |
| 615 | </main> | 615 | </main> |
| 616 | </div> | 616 | </div> |
| 617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 618 | ··<script> | 618 | ··<script> |
| 619 | ··let·initialized·=·false; | 619 | ··let·initialized·=·false; |
| Offset 580, 15 lines modified | Offset 580, 15 lines modified | ||
| 580 | ······<p·class="built-using"> | 580 | ······<p·class="built-using"> |
| 581 | ········Built·using | 581 | ········Built·using |
| 582 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 582 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 583 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 583 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 584 | ······</p> | 584 | ······</p> |
| 585 | <p>Copyright·©·1996-202 | 585 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 586 | ····</footer> | 586 | ····</footer> |
| 587 | ··</div> | 587 | ··</div> |
| 588 | </main> | 588 | </main> |
| 589 | </div> | 589 | </div> |
| 590 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 590 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 591 | ··<script> | 591 | ··<script> |
| 592 | ··let·initialized·=·false; | 592 | ··let·initialized·=·false; |
| Offset 181, 17 lines modified | Offset 181, 17 lines modified | ||
| 181 | but·only·performs·a·new·sync·if·something·has·actually·been·logged.</p><p>If·<code·class="inline">no_repeat</code>·is·set·as·value,·the·repeated·file·sync·operation·is·disabled, | 181 | but·only·performs·a·new·sync·if·something·has·actually·been·logged.</p><p>If·<code·class="inline">no_repeat</code>·is·set·as·value,·the·repeated·file·sync·operation·is·disabled, |
| 182 | and·it·is·the·operating·system·settings·that·determine·how·quickly·or·slowly | 182 | and·it·is·the·operating·system·settings·that·determine·how·quickly·or·slowly |
| 183 | data·is·written·to·disk.·The·user·can·also·call·the·<a·href="#filesync/1"><code·class="inline">filesync/1</code></a>·function·to | 183 | data·is·written·to·disk.·The·user·can·also·call·the·<a·href="#filesync/1"><code·class="inline">filesync/1</code></a>·function·to |
| 184 | perform·a·file·sync.</p><p>Defaults·to·<code·class="inline">5000</code>·milliseconds.</p></li></ul><p>Other·configuration·parameters·exist,·to·be·used·for·customizing·the·overload | 184 | perform·a·file·sync.</p><p>Defaults·to·<code·class="inline">5000</code>·milliseconds.</p></li></ul><p>Other·configuration·parameters·exist,·to·be·used·for·customizing·the·overload |
| 185 | protection·behaviour.·The·same·parameters·are·used·both·in·the·standard·handler | 185 | protection·behaviour.·The·same·parameters·are·used·both·in·the·standard·handler |
| 186 | and·the·disk_log·handler,·and·are·documented·in·the | 186 | and·the·disk_log·handler,·and·are·documented·in·the |
| 187 | <a·href="logger_chapter.html#overload_protection"><code·class="inline">User's·Guide</code></a>.</p><p>Notice·that·if·changing·the·configuration·of·the·handler·in·runtime,·the·<code·class="inline">type</code>, | 187 | <a·href="logger_chapter.html#overload_protection"><code·class="inline">User's·Guide</code></a>.</p><p>Notice·that·if·changing·the·configuration·of·the·handler·in·runtime,·the·<code·class="inline">type</code>, |
| 188 | <code·class="inline">file</code>,·or·<code·class="inline">modes</code>·parameters·must·not·be·modified.</p><p>Example·of·adding·a·standard·handler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id=" | 188 | <code·class="inline">file</code>,·or·<code·class="inline">modes</code>·parameters·must·not·be·modified.</p><p>Example·of·adding·a·standard·handler:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">logger</span><span·class="p">:</span><span·class="nf">add_handler</span><span·class="p"·data-group-id="4653176017-1">(</span><span·class="ss">my_standard_h</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">logger_std_h</span><span·class="p">,</span><span·class="w"> |
| 189 | ···················</span><span·class="p"·data-group-id=" | 189 | ···················</span><span·class="p"·data-group-id="4653176017-2">#{</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4653176017-3">#{</span><span·class="ss">file</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"./system_info.log"</span><span·class="p">,</span><span·class="w"> |
| 190 | ·································</span><span·class="ss">filesync_repeat_interval</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1000</span><span·class="p"·data-group-id=" | 190 | ·································</span><span·class="ss">filesync_repeat_interval</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1000</span><span·class="p"·data-group-id="4653176017-3">}</span><span·class="p"·data-group-id="4653176017-2">}</span><span·class="p"·data-group-id="4653176017-1">)</span><span·class="p">.</span></code></pre><p>To·set·the·default·handler,·that·starts·initially·with·the·Kernel·application, |
| 191 | to·log·to·file·instead·of·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>,·change·the | 191 | to·log·to·file·instead·of·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#t:standard_io/0"><code·class="inline">standard_io</code></a>,·change·the |
| 192 | Kernel·default·logger·configuration.·Example:</p><pre><code·class="text">erl·-kernel·logger·'[{handler,default,logger_std_h, | 192 | Kernel·default·logger·configuration.·Example:</p><pre><code·class="text">erl·-kernel·logger·'[{handler,default,logger_std_h, |
| 193 | ······················#{config·=>·#{file·=>·"./log.log"}}}]'</code></pre><p>An·example·of·how·to·replace·the·standard·handler·with·a·disk_log·handler·at | 193 | ······················#{config·=>·#{file·=>·"./log.log"}}}]'</code></pre><p>An·example·of·how·to·replace·the·standard·handler·with·a·disk_log·handler·at |
| 194 | startup·is·found·in·the·<a·href="logger_disk_log_h.html"><code·class="inline">logger_disk_log_h</code></a>·manual.</p><h2·id="module-see-also"·class="section-heading"> | 194 | startup·is·found·in·the·<a·href="logger_disk_log_h.html"><code·class="inline">logger_disk_log_h</code></a>·manual.</p><h2·id="module-see-also"·class="section-heading"> |
| 195 | ··<a·href="#module-see-also"·class="hover-link"> | 195 | ··<a·href="#module-see-also"·class="hover-link"> |
| 196 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 196 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 197 | ··</a> | 197 | ··</a> |
| Offset 288, 15 lines modified | Offset 288, 15 lines modified | ||
| 288 | ······<p·class="built-using"> | 288 | ······<p·class="built-using"> |
| 289 | ········Built·using | 289 | ········Built·using |
| 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 292 | ······</p> | 292 | ······</p> |
| 293 | <p>Copyright·©·1996-202 | 293 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 294 | ····</footer> | 294 | ····</footer> |
| 295 | ··</div> | 295 | ··</div> |
| 296 | </main> | 296 | </main> |
| 297 | </div> | 297 | </div> |
| 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 299 | ··<script> | 299 | ··<script> |
| 300 | ··let·initialized·=·false; | 300 | ··let·initialized·=·false; |
| Offset 553, 21 lines modified | Offset 553, 21 lines modified | ||
| 553 | ··········<pre·translate="no"><span·class="attribute">-type</span>·ifaddrs_filter_fun()·::·fun((<a·href="#t:ifaddrs/0">ifaddrs</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> | 553 | ··········<pre·translate="no"><span·class="attribute">-type</span>·ifaddrs_filter_fun()·::·fun((<a·href="#t:ifaddrs/0">ifaddrs</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> |
| 554 | ······</div> | 554 | ······</div> |
| 555 | <p>Interface·address·filtering·selector·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:function/0"><code·class="inline">function/0</code></a>.</p><p>For·each·<code·class="inline">ifaddrs</code>·entry,·return·either·<code·class="inline">true</code>·to·keep·the·entry | 555 | <p>Interface·address·filtering·selector·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:function/0"><code·class="inline">function/0</code></a>.</p><p>For·each·<code·class="inline">ifaddrs</code>·entry,·return·either·<code·class="inline">true</code>·to·keep·the·entry |
| 556 | or·<code·class="inline">false</code>·to·discard·the·entry.</p><p>For·example,·to·get·an·interface·list·which·only·contains | 556 | or·<code·class="inline">false</code>·to·discard·the·entry.</p><p>For·example,·to·get·an·interface·list·which·only·contains |
| 557 | non-<code·class="inline">loopback</code>·<code·class="inline">inet</code>·interfaces:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">net</span><span·class="p">:</span><span·class="nf">getifaddrs</span><span·class="p"·data-group-id=" | 557 | non-<code·class="inline">loopback</code>·<code·class="inline">inet</code>·interfaces:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">net</span><span·class="p">:</span><span·class="nf">getifaddrs</span><span·class="p"·data-group-id="2540135558-1">(</span><span·class="w"> |
| 558 | ····</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 558 | ····</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="2540135558-2">(</span><span·class="p"·data-group-id="2540135558-3">#{</span><span·class="w">·</span><span·class="ss">addr</span><span·class="w">··</span><span·class="p">:=</span><span·class="w">·</span><span·class="p"·data-group-id="2540135558-4">#{</span>[·...·truncated·by·diffoscope;·len:·172,·SHA:·8e81eac75c383bed190c0ec1c8aca916c7818eddac492a1a7b5e9467a469a74d·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 559 | ············</span><span·class="ss">flags</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Flags</span><span·class="p"·data-group-id=" | 559 | ············</span><span·class="ss">flags</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Flags</span><span·class="p"·data-group-id="2540135558-3">}</span><span·class="p"·data-group-id="2540135558-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 560 | ··········</span><span·class="ow">not</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id=" | 560 | ··········</span><span·class="ow">not</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id="2540135558-5">(</span><span·class="ss">loopback</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Flags</span><span·class="p"·data-group-id="2540135558-5">)</span><span·class="p">;</span><span·class="w"> |
| 561 | ········</span><span·class="p"·data-group-id=" | 561 | ········</span><span·class="p"·data-group-id="2540135558-6">(</span><span·class="p">_</span><span·class="p"·data-group-id="2540135558-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 562 | ··········</span><span·class="ss">false</span><span·class="w"> | 562 | ··········</span><span·class="ss">false</span><span·class="w"> |
| 563 | ····</span><span·class="k">end</span><span·class="p"·data-group-id=" | 563 | ····</span><span·class="k">end</span><span·class="p"·data-group-id="2540135558-1">)</span><span·class="p">.</span></code></pre> |
| 564 | ··</section> | 564 | ··</section> |
| 565 | </section> | 565 | </section> |
| 566 | <section·class="detail"·id="t:ifaddrs_filter_map/0"> | 566 | <section·class="detail"·id="t:ifaddrs_filter_map/0"> |
| 567 | ··<div·class="detail-header"> | 567 | ··<div·class="detail-header"> |
| 568 | ····<a·href="#t:ifaddrs_filter_map/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 568 | ····<a·href="#t:ifaddrs_filter_map/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| 569 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 569 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1350, 15 lines modified | Offset 1350, 15 lines modified | ||
| 1350 | ······<p·class="built-using"> | 1350 | ······<p·class="built-using"> |
| 1351 | ········Built·using | 1351 | ········Built·using |
| 1352 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1352 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1353 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1353 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1354 | ······</p> | 1354 | ······</p> |
| 1355 | <p>Copyright·©·1996-202 | 1355 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1356 | ····</footer> | 1356 | ····</footer> |
| 1357 | ··</div> | 1357 | ··</div> |
| 1358 | </main> | 1358 | </main> |
| 1359 | </div> | 1359 | </div> |
| 1360 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1360 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1361 | ··<script> | 1361 | ··<script> |
| 1362 | ··let·initialized·=·false; | 1362 | ··let·initialized·=·false; |
| Offset 475, 16 lines modified | Offset 475, 16 lines modified | ||
| 475 | ···················Name·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 475 | ···················Name·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 476 | ···················Port·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), | 476 | ···················Port·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), |
| 477 | ···················Reason·::·address·|·<a·href="file.html#t:posix/0">file:posix</a>().</pre> | 477 | ···················Reason·::·address·|·<a·href="file.html#t:posix/0">file:posix</a>().</pre> |
| 478 | ······</div> | 478 | ······</div> |
| 479 | <p>Returns·the·names·and·associated·port·numbers·of·the·Erlang·nodes·that·<code·class="inline">epmd</code> | 479 | <p>Returns·the·names·and·associated·port·numbers·of·the·Erlang·nodes·that·<code·class="inline">epmd</code> |
| 480 | registered·at·the·specified·host.</p><p>Similar·to·<code·class="inline">epmd·-names</code>,·see·<a·href="../../../../erts-15.2.7/doc/html/epmd_cmd.html"><code·class="inline">erts:epmd</code></a>.</p><p>Returns·<code·class="inline">{error,·address}</code>·if·<code·class="inline">epmd</code>·is·not·operational.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(arne@dunn)1>·</span><span·class="nc">net_adm</span><span·class="p">:</span><span·class="nf">names</span><span·class="p"·data-group-id=" | 480 | registered·at·the·specified·host.</p><p>Similar·to·<code·class="inline">epmd·-names</code>,·see·<a·href="../../../../erts-15.2.7/doc/html/epmd_cmd.html"><code·class="inline">erts:epmd</code></a>.</p><p>Returns·<code·class="inline">{error,·address}</code>·if·<code·class="inline">epmd</code>·is·not·operational.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(arne@dunn)1>·</span><span·class="nc">net_adm</span><span·class="p">:</span><span·class="nf">names</span><span·class="p"·data-group-id="3323773219-1">(</span><span·class="p"·data-group-id="3323773219-1">)</span><span·class="p">.</span><span·class="w"> |
| 481 | </span><span·class="p"·data-group-id=" | 481 | </span><span·class="p"·data-group-id="3323773219-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3323773219-3">[</span><span·class="p"·data-group-id="3323773219-4">{</span><span·class="s">"arne"</span><span·class="p">,</span><span·class="mi[·...·truncated·by·diffoscope;·len:·161,·SHA:·af91691305bcb3024161fcd2810f354aad992b5ef854762719796d99d279ebd4·...·]-2">}</span></code></pre> |
| 482 | ··</section> | 482 | ··</section> |
| 483 | </section> | 483 | </section> |
| 484 | <section·class="detail"·id="ping/1"> | 484 | <section·class="detail"·id="ping/1"> |
| 485 | ··<div·class="detail-header"> | 485 | ··<div·class="detail-header"> |
| 486 | ····<a·href="#ping/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 486 | ····<a·href="#ping/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 487 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 487 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 642, 15 lines modified | Offset 642, 15 lines modified | ||
| 642 | ······<p·class="built-using"> | 642 | ······<p·class="built-using"> |
| 643 | ········Built·using | 643 | ········Built·using |
| 644 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 644 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 645 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 645 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 646 | ······</p> | 646 | ······</p> |
| 647 | <p>Copyright·©·1996-202 | 647 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 648 | ····</footer> | 648 | ····</footer> |
| 649 | ··</div> | 649 | ··</div> |
| 650 | </main> | 650 | </main> |
| 651 | </div> | 651 | </div> |
| 652 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 652 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 653 | ··<script> | 653 | ··<script> |
| 654 | ··let·initialized·=·false; | 654 | ··let·initialized·=·false; |
| Offset 128, 17 lines modified | Offset 128, 17 lines modified | ||
| 128 | ····<section·id="moduledoc"> | 128 | ····<section·id="moduledoc"> |
| 129 | <p>Erlang·networking·kernel.</p><p>The·net·kernel·is·a·system·process,·registered·as·<code·class="inline">net_kernel</code>,·which·must·be | 129 | <p>Erlang·networking·kernel.</p><p>The·net·kernel·is·a·system·process,·registered·as·<code·class="inline">net_kernel</code>,·which·must·be |
| 130 | operational·for·distributed·Erlang·to·work.·The·purpose·of·this·process·is·to | 130 | operational·for·distributed·Erlang·to·work.·The·purpose·of·this·process·is·to |
| 131 | implement·parts·of·the·BIFs·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#spawn/4"><code·class="inline">spawn/4</code></a>·and | 131 | implement·parts·of·the·BIFs·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#spawn/4"><code·class="inline">spawn/4</code></a>·and |
| 132 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#spawn_link/4"><code·class="inline">spawn_link/4</code></a>,·and·to·provide·monitoring·of·the·network.</p><p>An·Erlang·node·is·started·using·command-line·flag·<code·class="inline">-name</code>·or·<code·class="inline">-sname</code>:</p><pre><code·class="text">$·erl·-sname·foobar</code></pre><p>It·is·also·possible·to·call·<a·href="#start/2"><code·class="inline">net_kernel:start(foobar,·#{})</code></a> | 132 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#spawn_link/4"><code·class="inline">spawn_link/4</code></a>,·and·to·provide·monitoring·of·the·network.</p><p>An·Erlang·node·is·started·using·command-line·flag·<code·class="inline">-name</code>·or·<code·class="inline">-sname</code>:</p><pre><code·class="text">$·erl·-sname·foobar</code></pre><p>It·is·also·possible·to·call·<a·href="#start/2"><code·class="inline">net_kernel:start(foobar,·#{})</code></a> |
| 133 | directly·from·the·normal·Erlang·shell·prompt:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 133 | directly·from·the·normal·Erlang·shell·prompt:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="6581711258-1">(</span><span·class="ss">foobar</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6581711258-2">#{</span><span·class="ss">name_domain</span><span·class="w">·</span><span·class="p">=></span><span·class="w"[·...·truncated·by·diffoscope;·len:·137,·SHA:·d91fedc8a8e284b3ef5c233dc9587bf840a600031075cf1b7e62bf2c29d1784f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="p"·data-group-id=" | 134 | </span><span·class="p"·data-group-id="6581711258-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.64</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="6581711258-3">}</span><span·class="w"> |
| 135 | </span><span·class="p"·data-group-id=" | 135 | </span><span·class="p"·data-group-id="6581711258-4">(</span><span·class="ss">foobar@gringotts</span><span·class="p"·data-group-id="6581711258-4">)</span><span·class="mi">2</span><span·class="o">></span></code></pre><p>If·the·node·is·started·with·command-line·flag·<code·class="inline">-sname</code>,·the·node·name·is |
| 136 | <code·class="inline">foobar@Host</code>,·where·<code·class="inline">Host</code>·is·the·short·name·of·the·host·(not·the·fully | 136 | <code·class="inline">foobar@Host</code>,·where·<code·class="inline">Host</code>·is·the·short·name·of·the·host·(not·the·fully |
| 137 | qualified·domain·name).·If·started·with·flag·<code·class="inline">-name</code>,·the·node·name·is | 137 | qualified·domain·name).·If·started·with·flag·<code·class="inline">-name</code>,·the·node·name·is |
| 138 | <code·class="inline">foobar@Host</code>,·where·<code·class="inline">Host</code>·is·the·fully·qualified·domain·name.·For·more | 138 | <code·class="inline">foobar@Host</code>,·where·<code·class="inline">Host</code>·is·the·fully·qualified·domain·name.·For·more |
| 139 | information,·see·<a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erl</code></a>.</p><p>Normally,·connections·are·established·automatically·when·another·node·is | 139 | information,·see·<a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erl</code></a>.</p><p>Normally,·connections·are·established·automatically·when·another·node·is |
| 140 | referenced.·This·functionality·can·be·disabled·by·setting·Kernel·configuration | 140 | referenced.·This·functionality·can·be·disabled·by·setting·Kernel·configuration |
| 141 | parameter·<code·class="inline">dist_auto_connect</code>·to·<code·class="inline">never</code>,·see·<a·href="kernel_app.html"><code·class="inline">kernel(6)</code></a>.·In | 141 | parameter·<code·class="inline">dist_auto_connect</code>·to·<code·class="inline">never</code>,·see·<a·href="kernel_app.html"><code·class="inline">kernel(6)</code></a>.·In |
| 142 | this·case,·connections·must·be·established·explicitly·by·calling | 142 | this·case,·connections·must·be·established·explicitly·by·calling |
| Offset 646, 21 lines modified | Offset 646, 21 lines modified | ||
| 646 | node·through·the·newly·established·connection.</li><li><code·class="inline">nodedown</code>·messages·are·delivered·after·all·the·signals·from·the·remote·node | 646 | node·through·the·newly·established·connection.</li><li><code·class="inline">nodedown</code>·messages·are·delivered·after·all·the·signals·from·the·remote·node |
| 647 | over·the·connection·have·been·delivered.</li><li><code·class="inline">nodeup</code>·messages·are·delivered·after·the·corresponding·node·appears·in | 647 | over·the·connection·have·been·delivered.</li><li><code·class="inline">nodeup</code>·messages·are·delivered·after·the·corresponding·node·appears·in |
| 648 | results·from·<code·class="inline">erlang:nodes()</code>.</li><li><code·class="inline">nodedown</code>·messages·are·delivered·after·the·corresponding·node·has·disappeared | 648 | results·from·<code·class="inline">erlang:nodes()</code>.</li><li><code·class="inline">nodedown</code>·messages·are·delivered·after·the·corresponding·node·has·disappeared |
| 649 | in·results·from·<code·class="inline">erlang:nodes()</code>.</li><li>As·of·OTP·23.0,·a·<code·class="inline">nodedown</code>·message·for·a·connection·being·taken·down·will·be | 649 | in·results·from·<code·class="inline">erlang:nodes()</code>.</li><li>As·of·OTP·23.0,·a·<code·class="inline">nodedown</code>·message·for·a·connection·being·taken·down·will·be |
| 650 | delivered·before·a·<code·class="inline">nodeup</code>·message·due·to·a·new·connection·to·the·same·node. | 650 | delivered·before·a·<code·class="inline">nodeup</code>·message·due·to·a·new·connection·to·the·same·node. |
| 651 | Prior·to·OTP·23.0,·this·was·not·guaranteed·to·be·the·case.</li></ul><p>The·format·of·the·node·status·change·messages·depends·on·<code·class="inline">Options</code>.·If·<code·class="inline">Options</code> | 651 | Prior·to·OTP·23.0,·this·was·not·guaranteed·to·be·the·case.</li></ul><p>The·format·of·the·node·status·change·messages·depends·on·<code·class="inline">Options</code>.·If·<code·class="inline">Options</code> |
| 652 | is·the·empty·list·or·if·<a·href="#monitor_nodes/1"><code·class="inline">net_kernel:monitor_nodes/1</code></a>·is·called,·the·format·is·as | 652 | is·the·empty·list·or·if·<a·href="#monitor_nodes/1"><code·class="inline">net_kernel:monitor_nodes/1</code></a>·is·called,·the·format·is·as |
| 653 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5 | 653 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5510097128-1">{</span><span·class="ss">nodeup</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="5510097128-1">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·195,·SHA:·6a090cb861410f4d5f9b97d0b2544394965bec5438c5bf94d2c798bbe73e371b·...·]8-2">}</span><span·class="w"> |
| 654 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="5 | 654 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="5510097128-3">(</span><span·class="p"·data-group-id="5510097128-3">)</span></code></pre><p>When·<code·class="inline">Options</code>·is·the·empty·map·or·empty·list,·the·caller·will·only·subscribe |
| 655 | for·status·change·messages·for·visible·nodes.·That·is,·only·nodes·that·appear·in | 655 | for·status·change·messages·for·visible·nodes.·That·is,·only·nodes·that·appear·in |
| 656 | the·result·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#nodes/0"><code·class="inline">erlang:nodes/0</code></a>.</p><p>If·<code·class="inline">Options</code>·equals·anything·other·than·the·empty·list,·the·format·of·the·status | 656 | the·result·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#nodes/0"><code·class="inline">erlang:nodes/0</code></a>.</p><p>If·<code·class="inline">Options</code>·equals·anything·other·than·the·empty·list,·the·format·of·the·status |
| 657 | change·messages·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8 | 657 | change·messages·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8440128997-1">{</span><span·class="ss">nodeup</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p"·data-group-id="8440128997-1">}</span><s[·...·truncated·by·diffoscope;·len:·346,·SHA:·c4d126a48f660549000c81d4cc6249971e313bc8f266dc41ebbcae47eb5e2c82·...·]-2">}</span><span·class="w"> |
| 658 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="8 | 658 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="8440128997-3">(</span><span·class="p"·data-group-id="8440128997-3">)</span><span·class="w"> |
| 659 | ··</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8 | 659 | ··</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8440128997-4">#{</span><span·class="n">Tag</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Val</span><span·class="p"·data-group-id="8440128997-4">}</span><span·class="w">·</span><span·class="p">|</span><span[·...·truncated·by·diffoscope;·len:·319,·SHA:·dfb5675b8f2528b99fab10a32211ac81aaec903793c4500f621aa6a28b29bd63·...·]-5">]</span></code></pre><p><code·class="inline">Info</code>·is·either·a·map·or·a·list·of·2-tuples.·Its·content·depends·on·<code·class="inline">Options</code>. |
| 660 | If·<code·class="inline">Options</code>·is·a·map,·<code·class="inline">Info</code>·will·also·be·a·map.·If·<code·class="inline">Options</code>·is·a·list,·<code·class="inline">Info</code> | 660 | If·<code·class="inline">Options</code>·is·a·map,·<code·class="inline">Info</code>·will·also·be·a·map.·If·<code·class="inline">Options</code>·is·a·list,·<code·class="inline">Info</code> |
| 661 | will·also·be·a·list.</p><p>When·<code·class="inline">Options</code>·is·a·map,·currently·the·following·associations·are·allowed:</p><ul><li><p><strong><code·class="inline">connection_id·=>·boolean()</code></strong>·-·If·the·value·of·the·association·equals | 661 | will·also·be·a·list.</p><p>When·<code·class="inline">Options</code>·is·a·map,·currently·the·following·associations·are·allowed:</p><ul><li><p><strong><code·class="inline">connection_id·=>·boolean()</code></strong>·-·If·the·value·of·the·association·equals |
| 662 | <code·class="inline">true</code>,·a·<code·class="inline">connection_id·=>·ConnectionId</code>·association·will·be·included·in·the | 662 | <code·class="inline">true</code>,·a·<code·class="inline">connection_id·=>·ConnectionId</code>·association·will·be·included·in·the |
| 663 | <code·class="inline">Info</code>·map·where·<code·class="inline">ConnectionId</code>·is·the·connection·identifier·of·the·connection | 663 | <code·class="inline">Info</code>·map·where·<code·class="inline">ConnectionId</code>·is·the·connection·identifier·of·the·connection |
| 664 | coming·up·or·going·down.·For·more·info·about·this·connection·identifier·see | 664 | coming·up·or·going·down.·For·more·info·about·this·connection·identifier·see |
| 665 | the·documentation·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#connection_id">erlang:nodes/2</a>.</p></li><li><p><strong><code·class="inline">node_type·=>·NodeType</code></strong>·-·Valid·values·for·<code·class="inline">NodeType</code>:</p><ul><li><p><strong><code·class="inline">visible</code></strong>·-·Subscribe·to·node·status·change·messages·for·visible·nodes | 665 | the·documentation·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#connection_id">erlang:nodes/2</a>.</p></li><li><p><strong><code·class="inline">node_type·=>·NodeType</code></strong>·-·Valid·values·for·<code·class="inline">NodeType</code>:</p><ul><li><p><strong><code·class="inline">visible</code></strong>·-·Subscribe·to·node·status·change·messages·for·visible·nodes |
| 666 | only.·The·association·<code·class="inline">node_type·=>·visible</code>·will·be·included·in·the·<code·class="inline">Info</code> | 666 | only.·The·association·<code·class="inline">node_type·=>·visible</code>·will·be·included·in·the·<code·class="inline">Info</code> |
| Offset 686, 31 lines modified | Offset 686, 31 lines modified | ||
| 686 | only.·The·tuple·<code·class="inline">{node_type,·hidden}</code>·will·be·included·in·the·<code·class="inline">Info</code>·list.</p></li><li><p><strong><code·class="inline">all</code></strong>·-·Subscribe·to·node·status·change·messages·for·both·visible·and | 686 | only.·The·tuple·<code·class="inline">{node_type,·hidden}</code>·will·be·included·in·the·<code·class="inline">Info</code>·list.</p></li><li><p><strong><code·class="inline">all</code></strong>·-·Subscribe·to·node·status·change·messages·for·both·visible·and |
| 687 | hidden·nodes.·The·tuple·<code·class="inline">{node_type,·visible·|·hidden}</code>·will·be·included·in | 687 | hidden·nodes.·The·tuple·<code·class="inline">{node_type,·visible·|·hidden}</code>·will·be·included·in |
| 688 | the·<code·class="inline">Info</code>·list.</p></li></ul><p>If·no·<code·class="inline">{node_type,·NodeType}</code>·option·has·been·given.·The·caller·will·subscribe | 688 | the·<code·class="inline">Info</code>·list.</p></li></ul><p>If·no·<code·class="inline">{node_type,·NodeType}</code>·option·has·been·given.·The·caller·will·subscribe |
| 689 | for·status·change·messages·for·visible·nodes·only,·but·<em>no</em> | 689 | for·status·change·messages·for·visible·nodes·only,·but·<em>no</em> |
| 690 | <code·class="inline">{node_type,·visible}</code>·tuple·will·be·included·in·the·<code·class="inline">Info</code>·list.</p></li><li><p><strong><code·class="inline">nodedown_reason</code></strong>·-·The·tuple·<code·class="inline">{nodedown_reason,·Reason}</code>·will·be·included | 690 | <code·class="inline">{node_type,·visible}</code>·tuple·will·be·included·in·the·<code·class="inline">Info</code>·list.</p></li><li><p><strong><code·class="inline">nodedown_reason</code></strong>·-·The·tuple·<code·class="inline">{nodedown_reason,·Reason}</code>·will·be·included |
| 691 | in·the·<code·class="inline">Info</code>·list·for·<code·class="inline">nodedown</code>·messages.</p><p>See·the·documentation·of·the | 691 | in·the·<code·class="inline">Info</code>·list·for·<code·class="inline">nodedown</code>·messages.</p><p>See·the·documentation·of·the |
| 692 | <a·href="net_kernel.html#nodedown_reasons"><code·class="inline">nodedown_reason·=>·boolean()</code></a>·association | 692 | <a·href="net_kernel.html#nodedown_reasons"><code·class="inline">nodedown_reason·=>·boolean()</code></a>·association |
| 693 | above·for·information·about·possible·<code·class="inline">Reason</code>·values.</p></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(a@localhost)1>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">monitor_nodes</span><span·class="p"·data-group-id="3 | 693 | above·for·information·about·possible·<code·class="inline">Reason</code>·values.</p></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(a@localhost)1>·</span><span·class="nc">net_kernel</span><span·class="p">:</span><span·class="nf">monitor_nodes</span><span·class="p"·data-group-id="3103172718-1">(</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-2">#{</span><span·class="ss">connection_id</span><span·class="p">=></span><span·class="ss">true</span><span·class=[·...·truncated·by·diffoscope;·len:·360,·SHA:·b509de6ba52520700c83b2ac844f730aa149c3c05ef8ecab947d24d56667740f·...·]8-1">)</span><span·class="p">.</span><span·class="w"> |
| 694 | </span><span·class="nf">ok</span><span·class="w"> | 694 | </span><span·class="nf">ok</span><span·class="w"> |
| 695 | </span><span·class="p"·data-group-id="3 | 695 | </span><span·class="p"·data-group-id="3103172718-3">(</span><span·class="ss">a@localhost</span><span·class="p"·data-group-id="3103172718-3">)</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nf">flush</span><span·class="p"·data-group-id="3103172718-[·...·truncated·by·diffoscope;·len:·51,·SHA:·3a1ee0d6660beb614bd905f421e1c4e198ff86a9377c581afb3aa60b753551c9·...·]8-4">)</span><span·class="p">.</span><span·class="w"> |
| 696 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 696 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-5">{</span><span·class="ss">nodeup</span><span·class="p">,</span><span·class="ss">b@localhost</span><span·class="p">,</span><span·class="w"> |
| 697 | ··················</span><span·class="p"·data-group-id="3 | 697 | ··················</span><span·class="p"·data-group-id="3103172718-6">#{</span><span·class="ss">connection_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">3067552</span><span·class="p">,</span><span·class="ss">node_type</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·167,·SHA:·5a1da4eeb9b9c18b38fe8a4c0aec2b20307ff8fb27f796e865edf2bbdcf6c3ec·...·]8-5">}</span><span·class="w"> |
| 698 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 698 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-7">{</span><span·class="ss">nodeup</span><span·class="p">,</span><span·class="ss">c@localhost</span><span·class="p">,</span><span·class="w"> |
| 699 | ··················</span><span·class="p"·data-group-id="3 | 699 | ··················</span><span·class="p"·data-group-id="3103172718-8">#{</span><span·class="ss">connection_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">13892107</span><span·class="p">,</span><span·class="ss">node_type</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·167,·SHA:·9c3766952ccd72d32fdb538d5c1fbd71b1b450b6d6c381912312fab638838cef·...·]8-7">}</span><span·class="w"> |
| 700 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 700 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-9">{</span><span·class="ss">nodedown</span><span·class="p">,</span><span·class="ss">b@localhost</span><span·class="p">,</span><span·class="w"> |
| 701 | ····················</span><span·class="p"·data-group-id="3 | 701 | ····················</span><span·class="p"·data-group-id="3103172718-10">#{</span><span·class="ss">connection_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">3067552</span><span·class="p">,</span><span·class="ss">node_type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">visible</span><span·class="p">,</span><span·class="w"> |
| 702 | ······················</span><span·class="ss">nodedown_reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">connection_closed</span><span·class="p"·data-group-id="3 | 702 | ······················</span><span·class="ss">nodedown_reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">connection_closed</span><span·class="p"·data-group-id="3103172718-10">}</span><span·class="p"·data-group-id="3103172718-9">}</span><span·class="w"> |
| 703 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 703 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-11">{</span><span·class="ss">nodedown</span><span·class="p">,</span><span·class="ss">c@localhost</span><span·class="p">,</span><span·class="w"> |
| 704 | ····················</span><span·class="p"·data-group-id="3 | 704 | ····················</span><span·class="p"·data-group-id="3103172718-12">#{</span><span·class="ss">connection_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">13892107</span><span·class="p">,</span><span·class="ss">node_type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">hidden</span><span·class="p">,</span><span·class="w"> |
| 705 | ······················</span><span·class="ss">nodedown_reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">net_tick_timeout</span><span·class="p"·data-group-id="3 | 705 | ······················</span><span·class="ss">nodedown_reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">net_tick_timeout</span><span·class="p"·data-group-id="3103172718-12">}</span><span·class="p"·data-group-id="3103172718-11">}</span><span·class="w"> |
| 706 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 706 | </span><span·class="n">Shell</span><span·class="w">·</span><span·class="ss">got</span><span·class="w">·</span><span·class="p"·data-group-id="3103172718-13">{</span><span·class="ss">nodeup</span><span·class="p">,</span><span·class="ss">b@localhost</span><span·class="p">,</span><span·class="w"> |
| 707 | ··················</span><span·class="p"·data-group-id="3 | 707 | ··················</span><span·class="p"·data-group-id="3103172718-14">#{</span><span·class="ss">connection_id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">3067553</span><span·class="p">,</span><span·class="ss">node_type</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·169,·SHA:·10ba89b8abbd6cdff77badb3329f79253a16fbf4730687d3989aa3197de3cc6e·...·]8-13">}</span><span·class="w"> |
| 708 | </span><span·class="nf">ok</span><span·class="w"> | 708 | </span><span·class="nf">ok</span><span·class="w"> |
| 709 | </span><span·class="p"·data-group-id="3 | 709 | </span><span·class="p"·data-group-id="3103172718-15">(</span><span·class="ss">a@localhost</span><span·class="p"·data-group-id="3103172718-15">)</span><span·class="mi">3</span><span·class="o">></span></code></pre> |
| 710 | ··</section> | 710 | ··</section> |
| 711 | </section> | 711 | </section> |
| 712 | <section·class="detail"·id="set_net_ticktime/1"> | 712 | <section·class="detail"·id="set_net_ticktime/1"> |
| 713 | ··<div·class="detail-header"> | 713 | ··<div·class="detail-header"> |
| 714 | ····<a·href="#set_net_ticktime/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 714 | ····<a·href="#set_net_ticktime/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 715 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 715 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 980, 15 lines modified | Offset 980, 15 lines modified | ||
| 980 | ······<p·class="built-using"> | 980 | ······<p·class="built-using"> |
| 981 | ········Built·using | 981 | ········Built·using |
| 982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 984 | ······</p> | 984 | ······</p> |
| 985 | <p>Copyright·©·1996-202 | 985 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 986 | ····</footer> | 986 | ····</footer> |
| 987 | ··</div> | 987 | ··</div> |
| 988 | </main> | 988 | </main> |
| 989 | </div> | 989 | </div> |
| 990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 991 | ··<script> | 991 | ··<script> |
| 992 | ··let·initialized·=·false; | 992 | ··let·initialized·=·false; |
| Offset 4139, 20 lines modified | Offset 4139, 20 lines modified | ||
| 4139 | will·make·repeated·attempts·to·open·the·disk·log·fail·every·time.</p><p>Own·Id:·OTP-5558·Aux·Id:·seq9823</p></li><li><p>Previously·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·behaved | 4139 | will·make·repeated·attempts·to·open·the·disk·log·fail·every·time.</p><p>Own·Id:·OTP-5558·Aux·Id:·seq9823</p></li><li><p>Previously·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·behaved |
| 4140 | completely·asynchronous.·This·had·one·undesirable·effect,·though.·You·could | 4140 | completely·asynchronous.·This·had·one·undesirable·effect,·though.·You·could |
| 4141 | never·know·when·you·were·guaranteed·<em>not</em>·to·be·affected·by·a·link·that·you | 4141 | never·know·when·you·were·guaranteed·<em>not</em>·to·be·affected·by·a·link·that·you |
| 4142 | had·unlinked·or·a·monitor·that·you·had·demonitored.</p><p>The·new·behavior·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·can·be | 4142 | had·unlinked·or·a·monitor·that·you·had·demonitored.</p><p>The·new·behavior·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unlink/1"><code·class="inline">unlink/1</code></a>·and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#demonitor/2"><code·class="inline">erlang:demonitor/2</code></a>·can·be |
| 4143 | viewed·as·two·operations·performed·atomically.·Asynchronously·send·an·unlink | 4143 | viewed·as·two·operations·performed·atomically.·Asynchronously·send·an·unlink |
| 4144 | signal·or·a·demonitor·signal,·and·ignore·any·future·results·of·the·link·or | 4144 | signal·or·a·demonitor·signal,·and·ignore·any·future·results·of·the·link·or |
| 4145 | monitor.</p><p><em>NOTE</em>:·This·change·can·cause·some·obscure·code·to·fail·which·previously·did | 4145 | monitor.</p><p><em>NOTE</em>:·This·change·can·cause·some·obscure·code·to·fail·which·previously·did |
| 4146 | not.·For·example,·the·following·code·might·hang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">············</span><span·class="n">Mon</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monitor</span><span·class="p"·data-group-id=" | 4146 | not.·For·example,·the·following·code·might·hang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">············</span><span·class="n">Mon</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monitor</span><span·class="p"·data-group-id="1878179500-1">(</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="1878179500-1">)</span><span·class="p">,</span><span·class="w"> |
| 4147 | ············</span><span·class="c1">%%·...</span><span·class="w"> | 4147 | ············</span><span·class="c1">%%·...</span><span·class="w"> |
| 4148 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id=" | 4148 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="1878179500-2">(</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bang</span><span·class="p"·data-group-id="1878179500-2">)</span><span·class="p">,</span><span·class="w"> |
| 4149 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id=" | 4149 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">demonitor</span><span·class="p"·data-group-id="1878179500-3">(</span><span·class="n">Mon</span><span·class="p"·data-group-id="1878179500-3">)</span><span·class="p">,</span><span·class="w"> |
| 4150 | ············</span><span·class="k">receive</span><span·class="w"> | 4150 | ············</span><span·class="k">receive</span><span·class="w"> |
| 4151 | ················</span><span·class="p"·data-group-id=" | 4151 | ················</span><span·class="p"·data-group-id="1878179500-4">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mon</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·143,·SHA:·4f908ab68bcd3816c4b8fb1255e05e7239d116260c5bf2d25dd8cdaf66ff29f5·...·]0-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> |
| 4152 | ············</span><span·class="c1">%%·We·were·previously·guaranteed·to·get·a·down·message</span><span·class="w"> | 4152 | ············</span><span·class="c1">%%·We·were·previously·guaranteed·to·get·a·down·message</span><span·class="w"> |
| 4153 | ············</span><span·class="c1">%%·(since·we·exited·the·process·ourself),·so·we·could</span><span·class="w"> | 4153 | ············</span><span·class="c1">%%·(since·we·exited·the·process·ourself),·so·we·could</span><span·class="w"> |
| 4154 | ············</span><span·class="c1">%%·in·this·case·leave·out:</span><span·class="w"> | 4154 | ············</span><span·class="c1">%%·in·this·case·leave·out:</span><span·class="w"> |
| 4155 | ············</span><span·class="c1">%%·after·0·->·ok</span><span·class="w"> | 4155 | ············</span><span·class="c1">%%·after·0·->·ok</span><span·class="w"> |
| 4156 | ············</span><span·class="k">end</span><span·class="p">,</span></code></pre><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-5772</p></li><li><p>The·behavior·when·an·application·fails·to·start·and·possibly·causes·the | 4156 | ············</span><span·class="k">end</span><span·class="p">,</span></code></pre><p>*<strong>·POTENTIAL·INCOMPATIBILITY·*</strong></p><p>Own·Id:·OTP-5772</p></li><li><p>The·behavior·when·an·application·fails·to·start·and·possibly·causes·the |
| 4157 | runtime·system·to·halt·has·been·cleaned·up,·including·fixing·some·minor·bugs.</p><p><code·class="inline">application_controller</code>·should·now·always·terminate·with·a·non-nested·string, | 4157 | runtime·system·to·halt·has·been·cleaned·up,·including·fixing·some·minor·bugs.</p><p><code·class="inline">application_controller</code>·should·now·always·terminate·with·a·non-nested·string, |
| 4158 | meaning·the·slogan·in·an·<code·class="inline">erl_crash.dump</code>·should·always·be·easy·to·read.</p><p><code·class="inline">init</code>·now·makes·sure·that·the·slogan·passed·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#halt/1"><code·class="inline">erlang:halt/1</code></a>·does·not | 4158 | meaning·the·slogan·in·an·<code·class="inline">erl_crash.dump</code>·should·always·be·easy·to·read.</p><p><code·class="inline">init</code>·now·makes·sure·that·the·slogan·passed·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#halt/1"><code·class="inline">erlang:halt/1</code></a>·does·not |
| Offset 4571, 15 lines modified | Offset 4571, 15 lines modified | ||
| 4571 | ······<p·class="built-using"> | 4571 | ······<p·class="built-using"> |
| 4572 | ········Built·using | 4572 | ········Built·using |
| 4573 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 4573 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 4574 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 4574 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 4575 | ······</p> | 4575 | ······</p> |
| 4576 | <p>Copyright·©·1996-202 | 4576 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 4577 | ····</footer> | 4577 | ····</footer> |
| 4578 | ··</div> | 4578 | ··</div> |
| 4579 | </main> | 4579 | </main> |
| 4580 | </div> | 4580 | </div> |
| 4581 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 4581 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 4582 | ··<script> | 4582 | ··<script> |
| 4583 | ··let·initialized·=·false; | 4583 | ··let·initialized·=·false; |
| Offset 640, 21 lines modified | Offset 640, 21 lines modified | ||
| 640 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·cmd(Command,·Options)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·when·Command·::·<a·href="#t:os_command/0">os_command</a>(),·Options·::·<a·href="#t:os_command_opts/0">os_command_opts</a>().</pre> | 640 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·cmd(Command,·Options)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·when·Command·::·<a·href="#t:os_command/0">os_command</a>(),·Options·::·<a·href="#t:os_command_opts/0">os_command_opts</a>().</pre> |
| 641 | ······</div> | 641 | ······</div> |
| 642 | <p>Executes·<code·class="inline">Command</code>·in·a·command·shell·of·the·target·OS,·captures·the·standard | 642 | <p>Executes·<code·class="inline">Command</code>·in·a·command·shell·of·the·target·OS,·captures·the·standard |
| 643 | output·and·standard·error·of·the·command,·and·returns·this·result·as·a·string.</p><p>The·command·shell·can·be·set·using·the | 643 | output·and·standard·error·of·the·command,·and·returns·this·result·as·a·string.</p><p>The·command·shell·can·be·set·using·the |
| 644 | <a·href="kernel_app.html#os_cmd_shell">kernel·configuration·parameter</a>,·by·default·the | 644 | <a·href="kernel_app.html#os_cmd_shell">kernel·configuration·parameter</a>,·by·default·the |
| 645 | shell·is·detected·upon·system·startup.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">LsOut</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id=" | 645 | shell·is·detected·upon·system·startup.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">LsOut</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="9693207235-1">(</span><span·class="s">"ls"</span><span·class="p"·data-group-id="9693207235-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·on·unix·platform</span><span·class="w"> |
| 646 | </span><span·class="n">DirOut</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id=" | 646 | </span><span·class="n">DirOut</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="9693207235-2">(</span><span·class="s">"dir"</span><span·class="p"·data-group-id="9693207235-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·on·Win32·platform</span></code></pre><p>Notice·that·in·some·cases,·standard·output·of·a·command·when·called·from·another |
| 647 | program·can·differ,·compared·with·the·standard·output·of·the·command·when·called | 647 | program·can·differ,·compared·with·the·standard·output·of·the·command·when·called |
| 648 | directly·from·an·OS·command·shell.</p><p>The·possible·options·are:</p><ul><li><p><strong><code·class="inline">max_size</code></strong>·-·The·maximum·size·of·the·data·returned·by·the·<code·class="inline">os:cmd</code>·call. | 648 | directly·from·an·OS·command·shell.</p><p>The·possible·options·are:</p><ul><li><p><strong><code·class="inline">max_size</code></strong>·-·The·maximum·size·of·the·data·returned·by·the·<code·class="inline">os:cmd</code>·call. |
| 649 | This·option·is·a·safety·feature·that·should·be·used·when·the·command·executed | 649 | This·option·is·a·safety·feature·that·should·be·used·when·the·command·executed |
| 650 | can·return·a·very·large,·possibly·infinite,·result.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="0 | 650 | can·return·a·very·large,·possibly·infinite,·result.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="0232021151-1">(</span><span·class="s">"cat·/dev/zero"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0232021151-2">#{</span><span·class="w">·</span><span·class="ss">max_size</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·191,·SHA:·56322be8e4e18e4031369468234c791d596885e98ca56fc6b2d211ef1dabff3f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 651 | </span><span·class="p"·data-group-id="0 | 651 | </span><span·class="p"·data-group-id="0232021151-3">[</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p[·...·truncated·by·diffoscope;·len:·762,·SHA:·89a639a8eddd70de77ef8821f25fb12e6149c9caf3e33ec8028d310fcc1077b8·...·]-3">]</span></code></pre></li></ul> |
| 652 | ··</section> | 652 | ··</section> |
| 653 | </section> | 653 | </section> |
| 654 | <section·class="detail"·id="env/0"> | 654 | <section·class="detail"·id="env/0"> |
| 655 | ··<div·class="detail-header"> | 655 | ··<div·class="detail-header"> |
| 656 | ····<a·href="#env/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 656 | ····<a·href="#env/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 657 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 657 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 918, 15 lines modified | Offset 918, 15 lines modified | ||
| 918 | ······</div> | 918 | ······</div> |
| 919 | <p>Returns·a·performance·counter·that·can·be·used·as·a·very·fast·and·high | 919 | <p>Returns·a·performance·counter·that·can·be·used·as·a·very·fast·and·high |
| 920 | resolution·timestamp.</p><p>This·counter·is·read·directly·from·the·hardware·or·operating·system·with·the | 920 | resolution·timestamp.</p><p>This·counter·is·read·directly·from·the·hardware·or·operating·system·with·the |
| 921 | same·guarantees.·This·means·that·two·consecutive·calls·to·the·function·are·not | 921 | same·guarantees.·This·means·that·two·consecutive·calls·to·the·function·are·not |
| 922 | guaranteed·to·be·monotonic,·though·it·most·likely·will·be.·The·performance | 922 | guaranteed·to·be·monotonic,·though·it·most·likely·will·be.·The·performance |
| 923 | counter·will·be·converted·to·the·resolution·passed·as·an·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">T1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">perf_counter</span><span·class="p"·data-group-id=" | 923 | counter·will·be·converted·to·the·resolution·passed·as·an·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">T1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">perf_counter</span><span·class="p"·data-group-id="6911506100-1">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="6911506100-1">)</span><span·class="p">,</span><span·class="k">receive</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">10000<[·...·truncated·by·diffoscope;·len:·487,·SHA:·3c7476e70b3b0dda15e8df8c482277e0bbb8e22b185fc3f8bf4132ab32e0e29b·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 924 | </span><span·class="mi">176525861</span><span·class="gp·unselectable"> | 924 | </span><span·class="mi">176525861</span><span·class="gp·unselectable"> |
| 925 | 2>·</span><span·class="n">T2</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="n">T1</span><span·class="p">.</span><span·class="w"> | 925 | 2>·</span><span·class="n">T2</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="n">T1</span><span·class="p">.</span><span·class="w"> |
| 926 | </span><span·class="mi">10004</span></code></pre> | 926 | </span><span·class="mi">10004</span></code></pre> |
| 927 | ··</section> | 927 | ··</section> |
| 928 | </section> | 928 | </section> |
| 929 | <section·class="detail"·id="putenv/2"> | 929 | <section·class="detail"·id="putenv/2"> |
| Offset 1079, 24 lines modified | Offset 1079, 24 lines modified | ||
| 1079 | <p>Returns·the·current·<a·href="../../../../erts-15.2.7/doc/html/time_correction.html#os-system-time">OS·system·time</a> | 1079 | <p>Returns·the·current·<a·href="../../../../erts-15.2.7/doc/html/time_correction.html#os-system-time">OS·system·time</a> |
| 1080 | in·the·same·format·as·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#timestamp/0"><code·class="inline">erlang:timestamp/0</code></a>.</p><p>The·tuple·can·be·used·together·with·function·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/calendar.html#now_to_universal_time/1"><code·class="inline">calendar:now_to_universal_time/1</code></a> | 1080 | in·the·same·format·as·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#timestamp/0"><code·class="inline">erlang:timestamp/0</code></a>.</p><p>The·tuple·can·be·used·together·with·function·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/calendar.html#now_to_universal_time/1"><code·class="inline">calendar:now_to_universal_time/1</code></a> |
| 1081 | or·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/calendar.html#now_to_local_time/1"><code·class="inline">calendar:now_to_local_time/1</code></a>·to·get·calendar·time.·Using·the·calendar·time, | 1081 | or·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/calendar.html#now_to_local_time/1"><code·class="inline">calendar:now_to_local_time/1</code></a>·to·get·calendar·time.·Using·the·calendar·time, |
| 1082 | together·with·the·<code·class="inline">MicroSecs</code>·part·of·the·return·tuple·from·this·function, | 1082 | together·with·the·<code·class="inline">MicroSecs</code>·part·of·the·return·tuple·from·this·function, |
| 1083 | allows·you·to·log·time·stamps·in·high·resolution·and·consistent·with·the·time·in | 1083 | allows·you·to·log·time·stamps·in·high·resolution·and·consistent·with·the·time·in |
| 1084 | ·the·rest·of·the·OS.</p><p>Example·of·code·formatting·a·string·in·format·"DD·Mon·YYYY·HH:MM:SS.mmmmmm", | 1084 | ·the·rest·of·the·OS.</p><p>Example·of·code·formatting·a·string·in·format·"DD·Mon·YYYY·HH:MM:SS.mmmmmm", |
| 1085 | where·DD·is·the·day·of·month,·Mon·is·the·textual·month·name,·YYYY·is·the·year, | 1085 | where·DD·is·the·day·of·month,·Mon·is·the·textual·month·name,·YYYY·is·the·year, |
| 1086 | HH:MM:SS·is·the·time,·and·mmmmmm·is·the·microseconds·in·six·positions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 1086 | HH:MM:SS·is·the·time,·and·mmmmmm·is·the·microseconds·in·six·positions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2388904512-1">(</span><span·class="ss">print_time</span><span·class="p"·data-group-id="2388904512-1">)</span><span·class="p">.</span><span·class="w"> |
| 1087 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 1087 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="2388904512-2">(</span><span·class="p"·data-group-id="2388904512-3">[</span><span·class="ss">format_utc_timestamp</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="2388904512-3">]</span><span·class="p"·data-group-id="2388[·...·truncated·by·diffoscope;·len:·6,·SHA:·75dfa768d8d54d6b62539ee2df9fab65c545cac3e3e3c87bea9bd9f56c516482·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 1088 | </span><span·class="nf">format_utc_timestamp</span><span·class="p"·data-group-id=" | 1088 | </span><span·class="nf">format_utc_timestamp</span><span·class="p"·data-group-id="2388904512-4">(</span><span·class="p"·data-group-id="2388904512-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1089 | ····</span><span·class="n">TS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 1089 | ····</span><span·class="n">TS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2388904512-5">{</span><span·class="p">_</span><span·class="p">,</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Micro</span><span·class="p"·data-group-id="2388904512-5">}</span><span·class="w">·</span><span·class="o">=</span><span·cla[·...·truncated·by·diffoscope;·len:·192,·SHA:·07f52110a1c32ac46c78b2defbb757070efa992a724dab6f892003f410a0876e·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 1090 | ····</span><span·class="p"·data-group-id=" | 1090 | ····</span><span·class="p"·data-group-id="2388904512-7">{</span><span·class="p"·data-group-id="2388904512-8">{</span><span·class="n">Year</span><span·class="p">,</span><span·class="n">Month</span><span·class="p">,</span><span·class="n">Day</span><span·class="p"·data-group-id="2388904512-8">}</span[·...·truncated·by·diffoscope;·len:·305,·SHA:·28feaae78471bc71891fb17792aba84e7a0771df8afcf6c381929d97fd7a1ac1·...·]-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 1091 | </span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">now_to_universal_time</span><span·class="p"·data-group-id=" | 1091 | </span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">now_to_universal_time</span><span·class="p"·data-group-id="2388904512-10">(</span><span·class="n">TS</span><span·class="p"·data-group-id="2388904512-10">)</span><span·class="p">,</span><span·class="w"> |
| 1092 | ····</span><span·class="n">Mstr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 1092 | ····</span><span·class="n">Mstr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="2388904512-11">(</span><span·class="n">Month</span><span·class="p">,</span><span·class="p"·data-group-id="2388904512-12">{</span><span·class="s">"Jan"</span><span·class="p">,</span><span·class="s">"Feb"</span><span·class="p">,</span><span·class="s">"Mar"</span><span·class="p">,</span><span·class="s">"Apr"</span><span·class="p">,</span><span·class="s">"May"</span><span·class="p">,</span><span·class="s">"Jun"</span><span·class="p">,</span><span·class="s">"Jul"</span><span·class="p">,</span><span·class="w"> |
| 1093 | ····</span><span·class="s">"Aug"</span><span·class="p">,</span><span·class="s">"Sep"</span><span·class="p">,</span><span·class="s">"Oct"</span><span·class="p">,</span><span·class="s">"Nov"</span><span·class="p">,</span><span·class="s">"Dec"</span><span·class="p"·data-group-id=" | 1093 | ····</span><span·class="s">"Aug"</span><span·class="p">,</span><span·class="s">"Sep"</span><span·class="p">,</span><span·class="s">"Oct"</span><span·class="p">,</span><span·class="s">"Nov"</span><span·class="p">,</span><span·class="s">"Dec"</span><span·class="p"·data-group-id="2388904512-12">}</span><span·class="p"·data-group-id="2388904512-11">)</span><span·class="p">,</span><span·class="w"> |
| 1094 | ····</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 1094 | ····</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2388904512-13">(</span><span·class="s">"</span><span·class="si">~2w</span><span·class="s">·</span><span·class="si">~s</span><span·class="s">·</span><span·class="si">~4w</span><span·class="s">·</span><span·class="si">~2w</span><span·class="s">:</span><span·class="si">~2..0w</span><span·class="s">:</span><span·class="si">~2..0w</span><span·class="s">.</span><span·class="si">~6..0w</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 1095 | ····</span><span·class="p"·data-group-id=" | 1095 | ····</span><span·class="p"·data-group-id="2388904512-14">[</span><span·class="n">Day</span><span·class="p">,</span><span·class="n">Mstr</span><span·class="p">,</span><span·class="n">Year</span><span·class="p">,</span><span·class="n">Hour</span><span·class="p">,</span><span·class="n">Minute</span><[·...·truncated·by·diffoscope;·len:·1004,·SHA:·744ca8acc1d968bc0abc8178369a4c0630f37168cb72f452203f2574196f4ad0·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1096 | </span><span·class="mi">29</span><span·class="w">·</span><span·class="n">Apr</span><span·class="w">·</span><span·class="mi">2009</span><span·class="w">··</span><span·class="mi">9</span><span·class="p">:</span><span·class="mi">55</span><span·class="p">:</span><span·class="mf">30.051711</span></code></pre><p>OS·system·time·can·also·be·retrieved·by·<a·href="#system_time/0"><code·class="inline">system_time/0</code></a>·and·<a·href="#system_time/1"><code·class="inline">system_time/1</code></a>.</p> | 1096 | </span><span·class="mi">29</span><span·class="w">·</span><span·class="n">Apr</span><span·class="w">·</span><span·class="mi">2009</span><span·class="w">··</span><span·class="mi">9</span><span·class="p">:</span><span·class="mi">55</span><span·class="p">:</span><span·class="mf">30.051711</span></code></pre><p>OS·system·time·can·also·be·retrieved·by·<a·href="#system_time/0"><code·class="inline">system_time/0</code></a>·and·<a·href="#system_time/1"><code·class="inline">system_time/1</code></a>.</p> |
| 1097 | ··</section> | 1097 | ··</section> |
| 1098 | </section> | 1098 | </section> |
| 1099 | <section·class="detail"·id="type/0"> | 1099 | <section·class="detail"·id="type/0"> |
| 1100 | ··<div·class="detail-header"> | 1100 | ··<div·class="detail-header"> |
| 1101 | ····<a·href="#type/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1101 | ····<a·href="#type/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1210, 15 lines modified | Offset 1210, 15 lines modified | ||
| 1210 | ······<p·class="built-using"> | 1210 | ······<p·class="built-using"> |
| 1211 | ········Built·using | 1211 | ········Built·using |
| 1212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1214 | ······</p> | 1214 | ······</p> |
| 1215 | <p>Copyright·©·1996-202 | 1215 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1216 | ····</footer> | 1216 | ····</footer> |
| 1217 | ··</div> | 1217 | ··</div> |
| 1218 | </main> | 1218 | </main> |
| 1219 | </div> | 1219 | </div> |
| 1220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1221 | ··<script> | 1221 | ··<script> |
| 1222 | ··let·initialized·=·false; | 1222 | ··let·initialized·=·false; |
| Offset 836, 15 lines modified | Offset 836, 15 lines modified | ||
| 836 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor_scope(Scope·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>())·->·{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>(),·#{<a·href="#t:group/0">group</a>()·=>·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0">pid</a>()]}}.</pre> | 836 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor_scope(Scope·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>())·->·{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>(),·#{<a·href="#t:group/0">group</a>()·=>·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0">pid</a>()]}}.</pre> |
| 837 | ······</div> | 837 | ······</div> |
| 838 | <p>Subscribes·the·caller·to·updates·from·the·specified·scope.</p><p>Returns·content·of·the·entire·scope·and·a·reference·to·match·the·upcoming | 838 | <p>Subscribes·the·caller·to·updates·from·the·specified·scope.</p><p>Returns·content·of·the·entire·scope·and·a·reference·to·match·the·upcoming |
| 839 | notifications.</p><p>Whenever·any·group·membership·changes,·an·update·message·is·sent·to·the | 839 | notifications.</p><p>Whenever·any·group·membership·changes,·an·update·message·is·sent·to·the |
| 840 | subscriber:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 840 | subscriber:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1806181389-1">{</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">join</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Group</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·781,·SHA:·3915d07a2312d190726d6ee90285a1d2ae12387bd1c01afbe6c590e2052cded7·...·]-1">}</span></code></pre> |
| 841 | ··</section> | 841 | ··</section> |
| 842 | </section> | 842 | </section> |
| 843 | <section·class="detail"·id="start/1"> | 843 | <section·class="detail"·id="start/1"> |
| 844 | ··<div·class="detail-header"> | 844 | ··<div·class="detail-header"> |
| 845 | ····<a·href="#start/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 845 | ····<a·href="#start/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 846 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 846 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1007, 15 lines modified | Offset 1007, 15 lines modified | ||
| 1007 | ······<p·class="built-using"> | 1007 | ······<p·class="built-using"> |
| 1008 | ········Built·using | 1008 | ········Built·using |
| 1009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1011 | ······</p> | 1011 | ······</p> |
| 1012 | <p>Copyright·©·1996-202 | 1012 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1013 | ····</footer> | 1013 | ····</footer> |
| 1014 | ··</div> | 1014 | ··</div> |
| 1015 | </main> | 1015 | </main> |
| 1016 | </div> | 1016 | </div> |
| 1017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1018 | ··<script> | 1018 | ··<script> |
| 1019 | ··let·initialized·=·false; | 1019 | ··let·initialized·=·false; |
| Offset 1043, 18 lines modified | Offset 1043, 18 lines modified | ||
| 1043 | all·the·nodes,·but·the·multicall·is·faster,·as·all·the·requests·are·sent·at·the | 1043 | all·the·nodes,·but·the·multicall·is·faster,·as·all·the·requests·are·sent·at·the |
| 1044 | same·time·and·are·collected·one·by·one·as·they·come·back.</p><p>The·function·evaluates·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(Module,·Function,·Args)</code></a>·on·the | 1044 | same·time·and·are·collected·one·by·one·as·they·come·back.</p><p>The·function·evaluates·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(Module,·Function,·Args)</code></a>·on·the |
| 1045 | specified·nodes·and·collects·the·answers.·It·returns·<code·class="inline">{ResL,·BadNodes}</code>,·where | 1045 | specified·nodes·and·collects·the·answers.·It·returns·<code·class="inline">{ResL,·BadNodes}</code>,·where |
| 1046 | <code·class="inline">BadNodes</code>·is·a·list·of·the·nodes·that·do·not·exist,·and·<code·class="inline">ResL</code>·is·a·list·of·the | 1046 | <code·class="inline">BadNodes</code>·is·a·list·of·the·nodes·that·do·not·exist,·and·<code·class="inline">ResL</code>·is·a·list·of·the |
| 1047 | return·values,·or·<code·class="inline">{badrpc,·Reason}</code>·for·failing·calls.·<code·class="inline">Timeout</code>·is·a·time | 1047 | return·values,·or·<code·class="inline">{badrpc,·Reason}</code>·for·failing·calls.·<code·class="inline">Timeout</code>·is·a·time |
| 1048 | (integer)·in·milliseconds,·or·<code·class="inline">infinity</code>.</p><p>The·following·example·is·useful·when·new·object·code·is·to·be·loaded·on·all | 1048 | (integer)·in·milliseconds,·or·<code·class="inline">infinity</code>.</p><p>The·following·example·is·useful·when·new·object·code·is·to·be·loaded·on·all |
| 1049 | nodes·in·the·network,·and·indicates·some·side·effects·that·RPCs·can·produce:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Find·object·code·for·module·Mod</span><span·class="w"> | 1049 | nodes·in·the·network,·and·indicates·some·side·effects·that·RPCs·can·produce:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Find·object·code·for·module·Mod</span><span·class="w"> |
| 1050 | </span><span·class="p"·data-group-id=" | 1050 | </span><span·class="p"·data-group-id="3466127799-1">{</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="3466127799-1">}</span><span·[·...·truncated·by·diffoscope;·len:·277,·SHA:·6c8839cb1009c05dcf09ee5553aba33c6c4e03d74a1bd48f6377f6e00aa374a3·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 1051 | </span><span·class="c1">%%·and·load·it·on·all·nodes·including·this·one</span><span·class="w"> | 1051 | </span><span·class="c1">%%·and·load·it·on·all·nodes·including·this·one</span><span·class="w"> |
| 1052 | </span><span·class="p"·data-group-id=" | 1052 | </span><span·class="p"·data-group-id="3466127799-3">{</span><span·class="n">ResL</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="3466127799-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·608,·SHA:·eaa3147372ccb34c7d44a1245f9351e84cbdd572d622b779f78e5b1d3e4019e6·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 1053 | </span><span·class="c1">%%·and·then·maybe·check·the·ResL·list.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·you·want·the·ability·to·distinguish·between·results,·you·may·want·to | 1053 | </span><span·class="c1">%%·and·then·maybe·check·the·ResL·list.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>If·you·want·the·ability·to·distinguish·between·results,·you·may·want·to |
| 1054 | consider·using·the·<a·href="erpc.html#multicall/4"><code·class="inline">erpc:multicall()</code></a>·function·from·the | 1054 | consider·using·the·<a·href="erpc.html#multicall/4"><code·class="inline">erpc:multicall()</code></a>·function·from·the |
| 1055 | <code·class="inline">erpc</code>·module·instead.</p></section><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the | 1055 | <code·class="inline">erpc</code>·module·instead.</p></section><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>You·cannot·make·<em>any</em>·assumptions·about·the·process·that·will·perform·the |
| 1056 | <code·class="inline">apply()</code>.·It·may·be·the·calling·process·itself,·an·<code·class="inline">rpc</code>·server,·another | 1056 | <code·class="inline">apply()</code>.·It·may·be·the·calling·process·itself,·an·<code·class="inline">rpc</code>·server,·another |
| 1057 | server,·or·a·freshly·spawned·process.</p></section> | 1057 | server,·or·a·freshly·spawned·process.</p></section> |
| 1058 | ··</section> | 1058 | ··</section> |
| Offset 1396, 15 lines modified | Offset 1396, 15 lines modified | ||
| 1396 | ······<p·class="built-using"> | 1396 | ······<p·class="built-using"> |
| 1397 | ········Built·using | 1397 | ········Built·using |
| 1398 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1398 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1399 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1399 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1400 | ······</p> | 1400 | ······</p> |
| 1401 | <p>Copyright·©·1996-202 | 1401 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1402 | ····</footer> | 1402 | ····</footer> |
| 1403 | ··</div> | 1403 | ··</div> |
| 1404 | </main> | 1404 | </main> |
| 1405 | </div> | 1405 | </div> |
| 1406 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1406 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1407 | ··<script> | 1407 | ··<script> |
| 1408 | ··let·initialized·=·false; | 1408 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 137, 17 lines modified | Offset 137, 17 lines modified | ||
| 137 | of·the·trace·output.</p><h2·id="module-trace-messages-sent-to-the-system-tracer"·class="section-heading"> | 137 | of·the·trace·output.</p><h2·id="module-trace-messages-sent-to-the-system-tracer"·class="section-heading"> |
| 138 | ··<a·href="#module-trace-messages-sent-to-the-system-tracer"·class="hover-link"> | 138 | ··<a·href="#module-trace-messages-sent-to-the-system-tracer"·class="hover-link"> |
| 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 140 | ··</a> | 140 | ··</a> |
| 141 | ··<span·class="text">Trace·Messages·Sent·to·the·System·Tracer</span> | 141 | ··<span·class="text">Trace·Messages·Sent·to·the·System·Tracer</span> |
| 142 | </h2> | 142 | </h2> |
| 143 | <p>The·format·of·the·messages·is·one·of·the·following,·depending·on·if·flag | 143 | <p>The·format·of·the·messages·is·one·of·the·following,·depending·on·if·flag |
| 144 | <code·class="inline">timestamp</code>·of·the·trace·token·is·set·to·<code·class="inline">true</code>·or·<code·class="inline">false</code>:</p><pre><code·class="text">{seq_trace,·Label,·SeqTraceInfo,·TimeStamp}</code></pre><p>or</p><pre><code·class="text">{seq_trace,·Label,·SeqTraceInfo}</code></pre><p>Where:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Label</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 144 | <code·class="inline">timestamp</code>·of·the·trace·token·is·set·to·<code·class="inline">true</code>·or·<code·class="inline">false</code>:</p><pre><code·class="text">{seq_trace,·Label,·SeqTraceInfo,·TimeStamp}</code></pre><p>or</p><pre><code·class="text">{seq_trace,·Label,·SeqTraceInfo}</code></pre><p>Where:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Label</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="6832079601-1">(</span><span·class="p"·data-group-id="6832079601-1">)</span><span·class="w"> |
| 145 | </span><span·class="n">TimeStamp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 145 | </span><span·class="n">TimeStamp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6832079601-2">{</span><span·class="n">Seconds</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Milliseconds</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Microseconds</span><span·class="p"·data-group-id="6832079[·...·truncated·by·diffoscope;·len:·3,·SHA:·36c1cc2f9d7022bf6beacb6248a89e7e677b3bf9a91e6457a5ffdbade55b76da·...·]-2">}</span><span·class="w"> |
| 146 | ··</span><span·class="n">Seconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Milliseconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Microseconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 146 | ··</span><span·class="n">Seconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Milliseconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Microseconds</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="6832079601-3">(</span><span·class="p"·data-group-id="6832079601-3">)</span></code></pre><p><code·class="inline">SeqTraceInfo</code>·can·have·the·following·formats:</p><ul><li><p><strong><code·class="inline">{send,·Serial,·From,·To,·Message}</code></strong>·-·Used·when·a·process·<code·class="inline">From</code>·with·its |
| 147 | trace·token·flag·<code·class="inline">send</code>·set·to·<code·class="inline">true</code>·has·sent·information.·<code·class="inline">To</code>·may·be·a | 147 | trace·token·flag·<code·class="inline">send</code>·set·to·<code·class="inline">true</code>·has·sent·information.·<code·class="inline">To</code>·may·be·a |
| 148 | process·identifier,·a·registered·name·on·a·node·represented·as | 148 | process·identifier,·a·registered·name·on·a·node·represented·as |
| 149 | <code·class="inline">{NameAtom,·NodeAtom}</code>,·or·a·node·name·represented·as·an·atom.·<code·class="inline">From</code>·may·be·a | 149 | <code·class="inline">{NameAtom,·NodeAtom}</code>,·or·a·node·name·represented·as·an·atom.·<code·class="inline">From</code>·may·be·a |
| 150 | process·identifier·or·a·node·name·represented·as·an·atom.·<code·class="inline">Message</code>·contains | 150 | process·identifier·or·a·node·name·represented·as·an·atom.·<code·class="inline">Message</code>·contains |
| 151 | the·information·passed·along·in·this·information·transfer.·If·the·transfer·is | 151 | the·information·passed·along·in·this·information·transfer.·If·the·transfer·is |
| 152 | done·via·message·passing,·it·is·the·actual·message.</p></li><li><p><strong><code·class="inline">{'receive',·Serial,·From,·To,·Message}</code></strong>·-·Used·when·a·process·<code·class="inline">To</code> | 152 | done·via·message·passing,·it·is·the·actual·message.</p></li><li><p><strong><code·class="inline">{'receive',·Serial,·From,·To,·Message}</code></strong>·-·Used·when·a·process·<code·class="inline">To</code> |
| 153 | receives·information·with·a·trace·token·that·has·flag·<code·class="inline">'receive'</code>·set·to | 153 | receives·information·with·a·trace·token·that·has·flag·<code·class="inline">'receive'</code>·set·to |
| Offset 283, 76 lines modified | Offset 283, 76 lines modified | ||
| 283 | from·the·sequential·tracing·point·of·view.</p><h2·id="module-example-of-use"·class="section-heading"> | 283 | from·the·sequential·tracing·point·of·view.</p><h2·id="module-example-of-use"·class="section-heading"> |
| 284 | ··<a·href="#module-example-of-use"·class="hover-link"> | 284 | ··<a·href="#module-example-of-use"·class="hover-link"> |
| 285 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 285 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 286 | ··</a> | 286 | ··</a> |
| 287 | ··<span·class="text">Example·of·Use</span> | 287 | ··<span·class="text">Example·of·Use</span> |
| 288 | </h2> | 288 | </h2> |
| 289 | <p>This·example·gives·a·rough·idea·of·how·the·new·primitives·can·be·used·and·what | 289 | <p>This·example·gives·a·rough·idea·of·how·the·new·primitives·can·be·used·and·what |
| 290 | kind·of·output·it·produces.</p><p>Assume·that·you·have·an·initiating·process·with·<code·class="inline">Pid·==·<0.30.0></code>·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 290 | kind·of·output·it·produces.</p><p>Assume·that·you·have·an·initiating·process·with·<code·class="inline">Pid·==·<0.30.0></code>·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7687204616-1">(</span><span·class="ss">seqex</span><span·class="p"·data-group-id="7687204616-1">)</span><span·class="p">.</span><span·class="w"> |
| 291 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 291 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="7687204616-2">(</span><span·class="ss">export_all</span><span·class="p"·data-group-id="7687204616-2">)</span><span·class="p">.</span><span·class="w"> |
| 292 | </span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 292 | </span><span·class="nf">loop</span><span·class="p"·data-group-id="7687204616-3">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7687204616-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 293 | ····</span><span·class="k">receive</span><span·class="w"> | 293 | ····</span><span·class="k">receive</span><span·class="w"> |
| 294 | ········</span><span·class="p"·data-group-id=" | 294 | ········</span><span·class="p"·data-group-id="7687204616-4">{</span><span·class="n">Port</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="7687204616-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 295 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id=" | 295 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id="7687204616-5">(</span><span·class="ss">label</span><span·class="p">,</span><span·class="mi">17</span><span·class="p"·data-group-id="7687204616-5">)</span><span·class="p">,</span><span·class="w"> |
| 296 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id=" | 296 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id="7687204616-6">(</span><span·class="ss">'receive'</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="7687204616-6">)</span><span·class="p">,</span><span·class="w"> |
| 297 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id=" | 297 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id="7687204616-7">(</span><span·class="ss">print</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="7687204616-7">)</span><span·class="p">,</span><span·class="w"> |
| 298 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id=" | 298 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="7687204616-8">(</span><span·class="mi">17</span><span·class="p">,</span><span·class="s">"****·Trace·Started·****"</span><span·class="p"·data-group-id="7687204616-8">)</span><span·class="p">,</span><span·class="w"> |
| 299 | ············</span><span·class="ss">call_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 299 | ············</span><span·class="ss">call_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="7687204616-9">{</span><span·class="nf">self</span><span·class="p"·data-group-id="7687204616-10">(</span><span·class="p"·data-group-id="7687204616-10">)</span><span·class="p">,</span><span·class="ss">the_message</span><span·class="p"·data-group-id="76872046[·...·truncated·by·diffoscope;·len:·2,·SHA:·b17ef6d19c7a5b1ee83b907c595526dcb1eb06db8227d650d5dda0a9f4ce8cd9·...·]-9">}</span><span·class="p">;</span><span·class="w"> |
| 300 | ········</span><span·class="p"·data-group-id=" | 300 | ········</span><span·class="p"·data-group-id="7687204616-11">{</span><span·class="ss">ack</span><span·class="p">,</span><span·class="n">Ack</span><span·class="p"·data-group-id="7687204616-11">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 301 | ············</span><span·class="ss">ok</span><span·class="w"> | 301 | ············</span><span·class="ss">ok</span><span·class="w"> |
| 302 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 302 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 303 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id=" | 303 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="7687204616-12">(</span><span·class="n">Port</span><span·class="p"·data-group-id="7687204616-12">)</span><span·class="p">.</span></code></pre><p>And·a·registered·process·<code·class="inline">call_server</code>·with·<code·class="inline">Pid·==·<0.31.0>[·...·truncated·by·diffoscope;·len:·192,·SHA:·9a3fc31d1c30b7b23ecb642071d87896c932bfca8834047dcf2086fd49bcb1c8·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 304 | ····</span><span·class="k">receive</span><span·class="w"> | 304 | ····</span><span·class="k">receive</span><span·class="w"> |
| 305 | ········</span><span·class="p"·data-group-id="6 | 305 | ········</span><span·class="p"·data-group-id="6145560879-2">{</span><span·class="n">PortController</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="6145560879-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 306 | ············</span><span·class="n">Ack</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6 | 306 | ············</span><span·class="n">Ack</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6145560879-3">{</span><span·class="ss">received</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Message</span><span·class="p"·data-group-id="6145560879-3">}</span><span·class="p">,</span><span·class="w"> |
| 307 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="6 | 307 | ············</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="6145560879-4">(</span><span·class="mi">17</span><span·class="p">,</span><span·class="s">"We·are·here·now"</span><span·class="p"·data-group-id="6145560879-4">)</span><span·class="p">,</span><span·class="w"> |
| 308 | ············</span><span·class="n">PortController</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6 | 308 | ············</span><span·class="n">PortController</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6145560879-5">{</span><span·class="ss">ack</span><span·class="p">,</span><span·class="n">Ack</span><span·class="p"·data-group-id="6145560879-5">}</span><span·class="w"> |
| 309 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 309 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 310 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6 | 310 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6145560879-6">(</span><span·class="p"·data-group-id="6145560879-6">)</span><span·class="p">.</span></code></pre><p>A·possible·output·from·the·system's·<code·class="inline">sequential_tracer</code>·can·be·like·this:</p><pre><code·class="makeup·erlang"·transl[·...·truncated·by·diffoscope;·len:·433,·SHA:·9d230fd9686e8affc8ac1e16938a75af72998f815c1975bcaa67509b71780748·...·]-1">}</span><span·class="w">·</span><span·class="n">WITH</span><span·class="w"> |
| 311 | </span><span·class="s">"****·Trace·Started·****"</span><span·class="w"> | 311 | </span><span·class="s">"****·Trace·Started·****"</span><span·class="w"> |
| 312 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Received</span><span·class="w">·</span><span·class="p"·data-group-id=" | 312 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Received</span><span·class="w">·</span><span·class="p"·data-group-id="4919103412-2">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4919103412-2">}</span><span·class="w">·</span><span·class="n">FROM</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.30</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">WITH</span><span·class="w"> |
| 313 | </span><span·class="p"·data-group-id=" | 313 | </span><span·class="p"·data-group-id="4919103412-3">{</span><span·class="o"><</span><span·class="mf">0.30</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="ss">the_message</span><span·class="p"·data-group-id="4919103412-3">}</span><span·class="w"> |
| 314 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Info</span><span·class="w">·</span><span·class="p"·data-group-id=" | 314 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Info</span><span·class="w">·</span><span·class="p"·data-group-id="4919103412-4">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4919103412-4">}</span><span·class="w">·</span><span·class="n">WITH</span><span·class="w"> |
| 315 | </span><span·class="s">"We·are·here·now"</span><span·class="w"> | 315 | </span><span·class="s">"We·are·here·now"</span><span·class="w"> |
| 316 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.30</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Received</span><span·class="w">·</span><span·class="p"·data-group-id=" | 316 | </span><span·class="mi">17</span><span·class="p">:</span><span·class="o"><</span><span·class="mf">0.30</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">Received</span><span·class="w">·</span><span·class="p"·data-group-id="4919103412-5">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4919103412-5">}</span><span·class="w">·</span><span·class="n">FROM</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.31</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">·</span><span·class="n">WITH</span><span·class="w"> |
| 317 | </span><span·class="p"·data-group-id=" | 317 | </span><span·class="p"·data-group-id="4919103412-6">{</span><span·class="ss">ack</span><span·class="p">,</span><span·class="p"·data-group-id="4919103412-7">{</span><span·class="ss">received</span><span·class="p">,</span><span·class="ss">the_message</span><span·class="p"·data-group-id="49191034[·...·truncated·by·diffoscope;·len:·55,·SHA:·b7ea91da9f8bf576df0fa2d76fd31ced71f8b09e1f0dcc1261e7f56206323d4b·...·]-6">}</span></code></pre><p>The·implementation·of·a·system·tracer·process·that·produces·this·printout·can |
| 318 | look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">tracer</span><span·class="p"·data-group-id=" | 318 | look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">tracer</span><span·class="p"·data-group-id="0923523092-1">(</span><span·class="p"·data-group-id="0923523092-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 319 | ····</span><span·class="k">receive</span><span·class="w"> | 319 | ····</span><span·class="k">receive</span><span·class="w"> |
| 320 | ········</span><span·class="p"·data-group-id=" | 320 | ········</span><span·class="p"·data-group-id="0923523092-2">{</span><span·class="ss">seq_trace</span><span·class="p">,</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p"·data-group-id="0923523092-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 321 | ···········</span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 321 | ···········</span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-3">(</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="0923523092-3">)</span><span·class="p">;</span><span·class="w"> |
| 322 | ········</span><span·class="p"·data-group-id=" | 322 | ········</span><span·class="p"·data-group-id="0923523092-4">{</span><span·class="ss">seq_trace</span><span·class="p">,</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p"·data-group-id="0923523092-4">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 323 | ···········</span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 323 | ···········</span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-5">(</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p"·data-group-id="0923523092-5">)</span><span·class="p">;</span><span·class="w"> |
| 324 | ········</span><span·class="p">_</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ignore</span><span·class="w"> | 324 | ········</span><span·class="p">_</span><span·class="n">Other</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ignore</span><span·class="w"> |
| 325 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 325 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 326 | ····</span><span·class="nf">tracer</span><span·class="p"·data-group-id=" | 326 | ····</span><span·class="nf">tracer</span><span·class="p"·data-group-id="0923523092-6">(</span><span·class="p"·data-group-id="0923523092-6">)</span><span·class="p">.</span><span·class="w"> |
| 327 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 327 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-7">(</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="0923523092-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 328 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 328 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0923523092-8">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">:"</span><span·class="p">,</span><span·class="p"·data-group-id="0923523092-9">[</span><span·class="n">Label</span><span·class="p"·data-group-id="0923523092-9"[·...·truncated·by·diffoscope;·len:·50,·SHA:·52781b5b223f4317536704e0a2b152f9b0547dd556ab99986b79ce12ddde6580·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 329 | ····</span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 329 | ····</span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-10">(</span><span·class="n">TraceInfo</span><span·class="p"·data-group-id="0923523092-10">)</span><span·class="p">;</span><span·class="w"> |
| 330 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 330 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-11">(</span><span·class="n">Label</span><span·class="p">,</span><span·class="n">TraceInfo</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p"·data-group-id="0923523092-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 331 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 331 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0923523092-12">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">·</span><span·class="si">~p</span><span·class="s">:"</span><span·class="p">,</span><span·class="p"·data-group-id="0923523092-13">[</span><span·class="n">Labe[·...·truncated·by·diffoscope;·len:·152,·SHA:·4062a106244df044555e590692f197000d10caa6fb9b2016fe718a028ea3aaec·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| 332 | ····</span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 332 | ····</span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-14">(</span><span·class="n">TraceInfo</span><span·class="p"·data-group-id="0923523092-14">)</span><span·class="p">.</span><span·class="w"> |
| 333 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 333 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-15">(</span><span·class="p"·data-group-id="0923523092-16">{</span><span·class="ss">print</span><span·class="p">,</span><span·class="n">Serial</span><span·class="p">,</span><span·class="n">From</span><span·class="p">,</span><span·class="p">_</spa[·...·truncated·by·diffoscope;·len:·148,·SHA:·a6c50c4c7a408de1a53f3a158fd2b15c221122fee16d46f21ef2bf5a1c3fcfed·...·]-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 334 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 334 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0923523092-17">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">·Info·</span><span·class="si">~p</span><span·class="s">·WITH</span><span·class="si">~n</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">&[·...·truncated·by·diffoscope;·len:·340,·SHA:·9087931db65e3ee9fdc4544f857a0b7440ed0e1b4cb318b5b08ee0af88d276aa·...·]-17">)</span><span·class="p">;</span><span·class="w"> |
| 335 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 335 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-19">(</span><span·class="p"·data-group-id="0923523092-20">{</span><span·class="ss">'receive'</span><span·class="p">,</span><span·class="n">Serial</span><span·class="p">,</span><span·class="n">From</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·164,·SHA:·ac794c2cd50c8513fee6603fe84792eef56d5b6e8a034fab83c3ce5b750a7c03·...·]-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 336 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 336 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0923523092-21">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">·Received·</span><span·class="si">~p</span><span·class="s">·FROM·</span><span·class="si">~p</span><span·class="s">·WITH</span><span·class="si">~n</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 337 | ··············</span><span·class="p"·data-group-id=" | 337 | ··············</span><span·class="p"·data-group-id="0923523092-22">[</span><span·class="n">To</span><span·class="p">,</span><span·class="n">Serial</span><span·class="p">,</span><span·class="n">From</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="0923523092-22">]</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·8f721e7e23a50f3f4fef3a2afcd0773b635146bba98fb8a6e01c9911493bf6f5·...·]-21">)</span><span·class="p">;</span><span·class="w"> |
| 338 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id=" | 338 | </span><span·class="nf">print_trace</span><span·class="p"·data-group-id="0923523092-23">(</span><span·class="p"·data-group-id="0923523092-24">{</span><span·class="nb">send</span><span·class="p">,</span><span·class="n">Serial</span><span·class="p">,</span><span·class="n">From</span><span·class="p">,</span><span·class="n">To</spa[·...·truncated·by·diffoscope;·len:·151,·SHA:·d8e47589425c59edc534e8d6b8325d18b4bff53ee31ef4b11aa8d6de9db7710d·...·]-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 339 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 339 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0923523092-25">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">·Sent·</span><span·class="si">~p</span><span·class="s">·TO·</span><span·class="si">~p</span><span·class="s">·WITH</span><span·class="si">~n</span><span·class="si">~p</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w"> |
| 340 | ··············</span><span·class="p"·data-group-id=" | 340 | ··············</span><span·class="p"·data-group-id="0923523092-26">[</span><span·class="n">From</span><span·class="p">,</span><span·class="n">Serial</span><span·class="p">,</span><span·class="n">To</span><span·class="p">,</span><span·class="n">Message</span><span·class="p"·data-group-id="0923523092-26">]</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·8f721e7e23a50f3f4fef3a2afcd0773b635146bba98fb8a6e01c9911493bf6f5·...·]-25">)</span><span·class="p">.</span></code></pre><p>The·code·that·creates·a·process·that·runs·this·tracer·function·and·sets·that |
| 341 | process·as·the·system·tracer·can·look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id=" | 341 | process·as·the·system·tracer·can·look·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">start</span><span·class="p"·data-group-id="0227078537-1">(</span><span·class="p"·data-group-id="0227078537-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 342 | ····</span><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 342 | ····</span><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="0227078537-2">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="ss">tracer</span><span·class="p">,</span><span·class="p"·data-group-id="0227078537-3">[</span><span·class="p"·data-group-id="0227078537-3">]</sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·f03b5ad06b5d0be84d65513d1c8611988d465b6033f67b905a78b5695d37f73f·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 343 | ····</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_system_tracer</span><span·class="p"·data-group-id=" | 343 | ····</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_system_tracer</span><span·class="p"·data-group-id="0227078537-4">(</span><span·class="n">Pid</span><span·class="p"·data-group-id="0227078537-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·set·Pid·as·the·system·tracer</span><span·class="w"> |
| 344 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>With·a·function·like·<code·class="inline">test/0</code>,·the·whole·example·can·be·started:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">test</span><span·class="p"·data-group-id=" | 344 | ····</span><span·class="ss">ok</span><span·class="p">.</span></code></pre><p>With·a·function·like·<code·class="inline">test/0</code>,·the·whole·example·can·be·started:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">test</span><span·class="p"·data-group-id="6173989170-1">(</span><span·class="p"·data-group-id="6173989170-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 345 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 345 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6173989170-2">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">loop</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6173989170-3">[</span><spa[·...·truncated·by·diffoscope;·len:·118,·SHA:·86a14e9357af5c394322367b3e9c2d73a1de059b5d0d75a74bf40486e5173615·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 346 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id=" | 346 | ····</span><span·class="nf">register</span><span·class="p"·data-group-id="6173989170-4">(</span><span·class="ss">call_server</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="6173989170-5">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">[·...·truncated·by·diffoscope;·len:·308,·SHA:·c0fa15fef3e5507763160a18e1d478520968c91714c755e6891d40528e88eff3·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 347 | ····</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 347 | ····</span><span·class="nf">start</span><span·class="p"·data-group-id="6173989170-7">(</span><span·class="p"·data-group-id="6173989170-7">)</span><span·class="p">,</span><span·class="w"> |
| 348 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 348 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="6173989170-8">{</span><span·class="ss">port</span><span·class="p">,</span><span·class="ss">message</span><span·class="p"·data-group-id="6173989170-8">}</span><span·class="p">.</span></code></pre> |
| 349 | ····</section> | 349 | ····</section> |
| 350 | </div> | 350 | </div> |
| 351 | ··<section·id="summary"·class="details-list"> | 351 | ··<section·id="summary"·class="details-list"> |
| 352 | ····<h1·class="section-heading"> | 352 | ····<h1·class="section-heading"> |
| 353 | ······<a·class="hover-link"·href="#summary"> | 353 | ······<a·class="hover-link"·href="#summary"> |
| Offset 907, 19 lines modified | Offset 907, 19 lines modified | ||
| 907 | ······</div> | 907 | ······</div> |
| 908 | <p>Sets·the·trace·token·for·the·calling·process·to·<code·class="inline">Token</code>.·If·<code·class="inline">Token·==·[]</code>·then | 908 | <p>Sets·the·trace·token·for·the·calling·process·to·<code·class="inline">Token</code>.·If·<code·class="inline">Token·==·[]</code>·then |
| 909 | tracing·is·disabled,·otherwise·<code·class="inline">Token</code>·should·be·an·Erlang·term·returned·from | 909 | tracing·is·disabled,·otherwise·<code·class="inline">Token</code>·should·be·an·Erlang·term·returned·from |
| 910 | <a·href="#get_token/0"><code·class="inline">get_token/0</code></a>·or·<a·href="#set_token/1"><code·class="inline">set_token/1</code></a>.·<a·href="#set_token/1"><code·class="inline">set_token/1</code></a> | 910 | <a·href="#get_token/0"><code·class="inline">get_token/0</code></a>·or·<a·href="#set_token/1"><code·class="inline">set_token/1</code></a>.·<a·href="#set_token/1"><code·class="inline">set_token/1</code></a> |
| 911 | can·be·used·to·temporarily·exclude·message·passing·from·the·trace·by·setting·the | 911 | can·be·used·to·temporarily·exclude·message·passing·from·the·trace·by·setting·the |
| 912 | trace·token·to·empty·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">OldToken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id=" | 912 | trace·token·to·empty·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">OldToken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id="5883905129-1">(</span><span·class="p"·data-group-id="5883905129-2">[</span><span·class="p"·data-group-id="5883905129-2">]</span><span·class="p"·data-group-id="5883905129-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·set·to·empty·and·save</span><span·class="w"> |
| 913 | ····································</span><span·class="c1">%·old·value</span><span·class="w"> | 913 | ····································</span><span·class="c1">%·old·value</span><span·class="w"> |
| 914 | </span><span·class="c1">%·do·something·that·should·not·be·part·of·the·trace</span><span·class="w"> | 914 | </span><span·class="c1">%·do·something·that·should·not·be·part·of·the·trace</span><span·class="w"> |
| 915 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 915 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="5883905129-3">(</span><span·class="s">"Exclude·the·signalling·caused·by·this</span><span·class="si">~n</span><span·class="s">"</span><span·class="p"·data-group-id="5883905129-3">)</span><span·class="p">,</span><span·class="w"> |
| 916 | </span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id=" | 916 | </span><span·class="nc">seq_trace</span><span·class="p">:</span><span·class="nf">set_token</span><span·class="p"·data-group-id="5883905129-4">(</span><span·class="n">OldToken</span><span·class="p"·data-group-id="5883905129-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·activate·the·trace·token·again</span><span·class="w"> |
| 917 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Returns·the·previous·value·of·the·trace·token.</p> | 917 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>Returns·the·previous·value·of·the·trace·token.</p> |
| 918 | ··</section> | 918 | ··</section> |
| 919 | </section> | 919 | </section> |
| 920 | <section·class="detail"·id="set_token/2"> | 920 | <section·class="detail"·id="set_token/2"> |
| 921 | ··<div·class="detail-header"> | 921 | ··<div·class="detail-header"> |
| 922 | ····<a·href="#set_token/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 922 | ····<a·href="#set_token/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1001, 15 lines modified | Offset 1001, 15 lines modified | ||
| 1001 | ······<p·class="built-using"> | 1001 | ······<p·class="built-using"> |
| 1002 | ········Built·using | 1002 | ········Built·using |
| 1003 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1003 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1004 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1004 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1005 | ······</p> | 1005 | ······</p> |
| 1006 | <p>Copyright·©·1996-202 | 1006 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1007 | ····</footer> | 1007 | ····</footer> |
| 1008 | ··</div> | 1008 | ··</div> |
| 1009 | </main> | 1009 | </main> |
| 1010 | </div> | 1010 | </div> |
| Max diff block lines reached; 40/51868 bytes (0.08%) of diff not shown. | |||
| Offset 168, 16 lines modified | Offset 168, 16 lines modified | ||
| 168 | and·using·that·as·the·<code·class="inline">Timeout | Handle</code>·argument,·the·same·<code·class="inline">Handle</code> | 168 | and·using·that·as·the·<code·class="inline">Timeout | Handle</code>·argument,·the·same·<code·class="inline">Handle</code> |
| 169 | will·then·be·the·<a·href="#t:select_handle/0"><code·class="inline">SelectHandle</code></a>·in·the·returned | 169 | will·then·be·the·<a·href="#t:select_handle/0"><code·class="inline">SelectHandle</code></a>·in·the·returned |
| 170 | <a·href="#t:select_info/0"><code·class="inline">select_info/0</code></a>·and·the·received·<code·class="inline">select</code>·message,·or·be | 170 | <a·href="#t:select_info/0"><code·class="inline">select_info/0</code></a>·and·the·received·<code·class="inline">select</code>·message,·or·be |
| 171 | the·<a·href="#t:completion_handle/0"><code·class="inline">CompletionHandle</code></a>·in·the·returned | 171 | the·<a·href="#t:completion_handle/0"><code·class="inline">CompletionHandle</code></a>·in·the·returned |
| 172 | <a·href="#t:completion_info/0"><code·class="inline">completion_info/0</code></a>·and·the·received·<code·class="inline">completion</code>·message.</p><p>The·compiler·may·then·optimize·a·following·<code·class="inline">receive</code>·statement | 172 | <a·href="#t:completion_info/0"><code·class="inline">completion_info/0</code></a>·and·the·received·<code·class="inline">completion</code>·message.</p><p>The·compiler·may·then·optimize·a·following·<code·class="inline">receive</code>·statement |
| 173 | to·only·scan·the·messages·that·arrive·after·the·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0"><code·class="inline">reference/0</code></a> | 173 | to·only·scan·the·messages·that·arrive·after·the·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0"><code·class="inline">reference/0</code></a> |
| 174 | is·created.··If·the·message·queue·is·large·this·is·a·big·optimization.</p><p>The·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0"><code·class="inline">reference/0</code></a>·has·to·be·unique·for·the·call.</p><h4>Repeating·an·Operation·on·a·<code·class="inline">select</code>·Systems</h4><p>On<code·class="inline">select</code>·systems,·if·a·call·would·be·repeated·<em>before</em>·the·<code·class="inline">select</code> | 174 | is·created.··If·the·message·queue·is·large·this·is·a·big·optimization.</p><p>The·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0"><code·class="inline">reference/0</code></a>·has·to·be·unique·for·the·call.</p><h4>Repeating·an·Operation·on·a·<code·class="inline">select</code>·Systems</h4><p>On<code·class="inline">select</code>·systems,·if·a·call·would·be·repeated·<em>before</em>·the·<code·class="inline">select</code> |
| 175 | message·has·been·received·it·replaces·the·call·in·progress:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id=" | 175 | message·has·been·received·it·replaces·the·call·in·progress:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id="8006241756-1">{</span><span·class="ss">select</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8006241756-2">{</span><span·class="ss">select_info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Hand[·...·truncated·by·diffoscope;·len:·471,·SHA:·4508757f6cbaaf1fbc026601f5134605b84de220eb50dbfcdaba034fe9ed3025·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 176 | ····</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="p"·data-group-id="8006241756-4">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">timeout</span><span·class="p"·data-group-id="8006241756-4">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·280,·SHA:·ae51726d19421779d8dce26e963ba79f55c9ef5ffb0c6dfc753b5d9d47655437·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 177 | ····</span><span·class="p">:</span></code></pre><p>Above,·<code·class="inline">Handle</code>·is·<em>no·longer</em>·valid·once·the·second·<a·href="#accept/2"><code·class="inline">accept/2</code></a>,·call | 177 | ····</span><span·class="p">:</span></code></pre><p>Above,·<code·class="inline">Handle</code>·is·<em>no·longer</em>·valid·once·the·second·<a·href="#accept/2"><code·class="inline">accept/2</code></a>,·call |
| 178 | has·been·made·(the·first·call·is·automatically·canceled). | 178 | has·been·made·(the·first·call·is·automatically·canceled). |
| 179 | After·the·second·<a·href="#accept/2"><code·class="inline">accept/2</code></a>·call·returns·<code·class="inline">{error,·timeout}</code>, | 179 | After·the·second·<a·href="#accept/2"><code·class="inline">accept/2</code></a>·call·returns·<code·class="inline">{error,·timeout}</code>, |
| 180 | the·accept·operation·has·completed.</p><p>Note·that·there·is·a·race·here;·there·is·no·way·to·know·if·the·call | 180 | the·accept·operation·has·completed.</p><p>Note·that·there·is·a·race·here;·there·is·no·way·to·know·if·the·call |
| 181 | is·repeated·<em>before</em>·the·<code·class="inline">select</code>·message·is·sent·since·it·<em>may</em> | 181 | is·repeated·<em>before</em>·the·<code·class="inline">select</code>·message·is·sent·since·it·<em>may</em> |
| 182 | have·been·sent·just·before·the·repeated·call.··So·now·there | 182 | have·been·sent·just·before·the·repeated·call.··So·now·there |
| 183 | might·be·a·<code·class="inline">select</code>·message·containing·<code·class="inline">Handle</code>·in·the·inbox.</p><h4>The·<code·class="inline">abort</code>·Message</h4><p>Another·message·the·user·must·be·prepared·for | 183 | might·be·a·<code·class="inline">select</code>·message·containing·<code·class="inline">Handle</code>·in·the·inbox.</p><h4>The·<code·class="inline">abort</code>·Message</h4><p>Another·message·the·user·must·be·prepared·for |
| Offset 202, 36 lines modified | Offset 202, 36 lines modified | ||
| 202 | (<a·href="#t:completion_handle/0">completion·handle</a>) | 202 | (<a·href="#t:completion_handle/0">completion·handle</a>) |
| 203 | API·features·could·be·considered·no·longer·experimental.</li></ul><h2·id="module-examples"·class="section-heading"> | 203 | API·features·could·be·considered·no·longer·experimental.</li></ul><h2·id="module-examples"·class="section-heading"> |
| 204 | ··<a·href="#module-examples"·class="hover-link"> | 204 | ··<a·href="#module-examples"·class="hover-link"> |
| 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 206 | ··</a> | 206 | ··</a> |
| 207 | ··<span·class="text">Examples</span> | 207 | ··<span·class="text">Examples</span> |
| 208 | </h2> | 208 | </h2> |
| 209 | <pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id=" | 209 | <pre><code·class="makeup·erlang"·translate="no"><span·class="nf">client</span><span·class="p"·data-group-id="9846105050-1">(</span><span·class="n">SAddr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SPort</span><span·class="p"·data-group-id="9846105050-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 210 | ···</span><span·class="p"·data-group-id=" | 210 | ···</span><span·class="p"·data-group-id="9846105050-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sock</span><span·class="p"·data-group-id="9846105050-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·349,·SHA:·ca19ca8c6d7aa6989e5a9fa044c36bbfd48dbcea18eb37db8da797d5eca31421·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 211 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 211 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="9846105050-4">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9846105050-5">#{</span><span·class="ss">family</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">inet</span><span·class="p">,</span><span·class="w"> |
| 212 | ·······························</span><span·class="ss">addr</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">SAddr</span><span·class="p">,</span><span·class="w"> | 212 | ·······························</span><span·class="ss">addr</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">SAddr</span><span·class="p">,</span><span·class="w"> |
| 213 | ·······························</span><span·class="ss">port</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">SPort</span><span·class="p"·data-group-id=" | 213 | ·······························</span><span·class="ss">port</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">SPort</span><span·class="p"·data-group-id="9846105050-5">}</span><span·class="p"·data-group-id="9846105050-4">)</span><span·class="p">,</span><span·class="w"> |
| 214 | ···</span><span·class="n">Msg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 214 | ···</span><span·class="n">Msg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9846105050-6"><<</span><span·class="s">"hello"</span><span·class="p"·data-group-id="9846105050-6">>></span><span·class="p">,</span><span·class="w"> |
| 215 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 215 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="9846105050-7">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9846105050-7">)</span><span·class="p">,</span><span·class="w"> |
| 216 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">shutdown</span><span·class="p"·data-group-id=" | 216 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">shutdown</span><span·class="p"·data-group-id="9846105050-8">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">write</span><span·class="p"·data-group-id="9846105050-8">)</span><span·class="p">,</span><span·class="w"> |
| 217 | ···</span><span·class="p"·data-group-id=" | 217 | ···</span><span·class="p"·data-group-id="9846105050-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9846105050-9">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·195,·SHA:·6576d217eaf75874d03e0c9b4d51e3aeff5f7fe0f015a5a89a99cea24a0d7cd8·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 218 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 218 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9846105050-11">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="9846105050-11">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="nf">server</span><span·class="p"·data-group-id=" | 219 | </span><span·class="nf">server</span><span·class="p"·data-group-id="9846105050-12">(</span><span·class="n">Addr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="9846105050-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ···</span><span·class="p"·data-group-id=" | 220 | ···</span><span·class="p"·data-group-id="9846105050-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">LSock</span><span·class="p"·data-group-id="9846105050-13">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·353,·SHA:·1f4bc2cb625cfe196984cf04aa8cf00e211b0209d7e6323b61b975aba653823e·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 221 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">bind</span><span·class="p"·data-group-id=" | 221 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">bind</span><span·class="p"·data-group-id="9846105050-15">(</span><span·class="n">LSock</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9846105050-16">#{</span><span·class="ss">family</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">inet</span><span·class="p">,</span><span·class="w"> |
| 222 | ·····························</span><span·class="ss">port</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w"> | 222 | ·····························</span><span·class="ss">port</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Port</span><span·class="p">,</span><span·class="w"> |
| 223 | ·····························</span><span·class="ss">addr</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Addr</span><span·class="p"·data-group-id=" | 223 | ·····························</span><span·class="ss">addr</span><span·class="w">···</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Addr</span><span·class="p"·data-group-id="9846105050-16">}</span><span·class="p"·data-group-id="9846105050-15">)</span><span·class="p">,</span><span·class="w"> |
| 224 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">listen</span><span·class="p"·data-group-id=" | 224 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">listen</span><span·class="p"·data-group-id="9846105050-17">(</span><span·class="n">LSock</span><span·class="p"·data-group-id="9846105050-17">)</span><span·class="p">,</span><span·class="w"> |
| 225 | ···</span><span·class="p"·data-group-id=" | 225 | ···</span><span·class="p"·data-group-id="9846105050-18">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sock</span><span·class="p"·data-group-id="9846105050-18">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·201,·SHA:·c13e8096f4ee865c53e76d595d032e87f9ec82e0bfab18ee2a9a77f7b901c7d4·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ···</span><span·class="p"·data-group-id=" | 226 | ···</span><span·class="p"·data-group-id="9846105050-20">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9846105050-20">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·197,·SHA:·2c5b5b8e58144fb6e8da0c07aab3a6dfc0e0047303aa8ad534910387c8674c41·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 227 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id=" | 227 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="9846105050-22">(</span><span·class="n">Sock</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9846105050-22">)</span><span·class="p">,</span><span·class="w"> |
| 228 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 228 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9846105050-23">(</span><span·class="n">Sock</span><span·class="p"·data-group-id="9846105050-23">)</span><span·class="p">,</span><span·class="w"> |
| 229 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 229 | ···</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="9846105050-24">(</span><span·class="n">LSock</span><span·class="p"·data-group-id="9846105050-24">)</span><span·class="p">.</span></code></pre> |
| 230 | ····</section> | 230 | ····</section> |
| 231 | </div> | 231 | </div> |
| 232 | ··<section·id="summary"·class="details-list"> | 232 | ··<section·id="summary"·class="details-list"> |
| 233 | ····<h1·class="section-heading"> | 233 | ····<h1·class="section-heading"> |
| 234 | ······<a·class="hover-link"·href="#summary"> | 234 | ······<a·class="hover-link"·href="#summary"> |
| Offset 4669, 15 lines modified | Offset 4669, 15 lines modified | ||
| 4669 | with·its·name·and·address.</p></li><li><p><strong><code·class="inline">nread</code></strong>·-·Get·the·number·of·bytes·immediately·available·for·reading | 4669 | with·its·name·and·address.</p></li><li><p><strong><code·class="inline">nread</code></strong>·-·Get·the·number·of·bytes·immediately·available·for·reading |
| 4670 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">nwrite</code></strong>·-·Get·the·number·of·bytes·in·the·send·queue | 4670 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">nwrite</code></strong>·-·Get·the·number·of·bytes·in·the·send·queue |
| 4671 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">nspace</code></strong>·-·Get·the·free·space·in·the·send·queue | 4671 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">nspace</code></strong>·-·Get·the·free·space·in·the·send·queue |
| 4672 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">atmark</code></strong>·-·Test·if·there·is·OOB·(out-of-bound)·data·waiting·to·be·read | 4672 | <em>(since·OTP·26.1)</em>.</p><p>Result;·the·number·of·bytes,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p></li><li><p><strong><code·class="inline">atmark</code></strong>·-·Test·if·there·is·OOB·(out-of-bound)·data·waiting·to·be·read |
| 4673 | <em>(since·OTP·26.1)</em>.</p><p>Result;·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a>.</p></li><li><p><strong><code·class="inline">tcp_info</code></strong>·-·Get·miscellaneous·TCP·related·information·for·a | 4673 | <em>(since·OTP·26.1)</em>.</p><p>Result;·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0"><code·class="inline">boolean/0</code></a>.</p></li><li><p><strong><code·class="inline">tcp_info</code></strong>·-·Get·miscellaneous·TCP·related·information·for·a |
| 4674 | <em>connected</em>·socket·<em>(since·OTP·26.1)</em>.</p><p>Result;·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a>·with·information·items·as·key-value·pairs.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Not·all·requests·are·supported·by·all·platforms. | 4674 | <em>connected</em>·socket·<em>(since·OTP·26.1)</em>.</p><p>Result;·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:map/0"><code·class="inline">map/0</code></a>·with·information·items·as·key-value·pairs.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Not·all·requests·are·supported·by·all·platforms. |
| 4675 | To·see·if·a·ioctl·request·is·supported·on·the·current·platform:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="n">Request</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">nread</span><span·class="p">,</span><span·class="w"> | 4675 | To·see·if·a·ioctl·request·is·supported·on·the·current·platform:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="n">Request</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">nread</span><span·class="p">,</span><span·class="w"> |
| 4676 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id="7 | 4676 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id="7108335488-1">(</span><span·class="ss">ioctl_requests</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Request</span><span·class="p"·data-group-id="7108335488-1">)</span><span·class="p">,</span><span·class="w"> |
| 4677 | ······</span><span·class="p">:</span></code></pre></section> | 4677 | ······</span><span·class="p">:</span></code></pre></section> |
| 4678 | ··</section> | 4678 | ··</section> |
| 4679 | </section> | 4679 | </section> |
| 4680 | <section·class="detail"·id="ioctl/3"> | 4680 | <section·class="detail"·id="ioctl/3"> |
| 4681 | ··<div·class="detail-header"> | 4681 | ··<div·class="detail-header"> |
| 4682 | ····<a·href="#ioctl/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 4682 | ····<a·href="#ioctl/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 4827, 15 lines modified | Offset 4827, 15 lines modified | ||
| 4827 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_supported(Key1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> | 4827 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_supported(Key1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> |
| 4828 | ······</div> | 4828 | ······</div> |
| 4829 | <p>Check·if·a·socket·feature·is·supported.</p><p>Returns·<code·class="inline">true</code>·if·<a·href="#supports/0"><code·class="inline">supports/0</code></a>·has·a·<code·class="inline">{Key1,·true}</code>·tuple | 4829 | <p>Check·if·a·socket·feature·is·supported.</p><p>Returns·<code·class="inline">true</code>·if·<a·href="#supports/0"><code·class="inline">supports/0</code></a>·has·a·<code·class="inline">{Key1,·true}</code>·tuple |
| 4830 | or·a·<code·class="inline">{Key1,·list()}</code>·tuple·in·its·returned·list, | 4830 | or·a·<code·class="inline">{Key1,·list()}</code>·tuple·in·its·returned·list, |
| 4831 | otherwise·<code·class="inline">false</code>·(also·for·unknown·keys).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id=" | 4831 | otherwise·<code·class="inline">false</code>·(also·for·unknown·keys).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id="9634025412-1">(</span><span·class="ss">local</span><span·class="p"·data-group-id="9634025412-1">)</span><span·class="p">,</span></code></pre> |
| 4832 | ··</section> | 4832 | ··</section> |
| 4833 | </section> | 4833 | </section> |
| 4834 | <section·class="detail"·id="is_supported/2"> | 4834 | <section·class="detail"·id="is_supported/2"> |
| 4835 | ··<div·class="detail-header"> | 4835 | ··<div·class="detail-header"> |
| 4836 | ····<a·href="#is_supported/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 4836 | ····<a·href="#is_supported/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 4837 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 4837 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 4856, 15 lines modified | Offset 4856, 15 lines modified | ||
| 4856 | ······<div·class="specs"> | 4856 | ······<div·class="specs"> |
| 4857 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_supported(Key1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·Key2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> | 4857 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_supported(Key1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·Key2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> |
| 4858 | ······</div> | 4858 | ······</div> |
| 4859 | <p>Check·if·a·socket·feature·is·supported.</p><p>Returns·<code·class="inline">true</code>·if·<a·href="#supports/1"><code·class="inline">supports(Key1)</code></a>·has·a·<code·class="inline">{Key2,·true}</code>·tuple | 4859 | <p>Check·if·a·socket·feature·is·supported.</p><p>Returns·<code·class="inline">true</code>·if·<a·href="#supports/1"><code·class="inline">supports(Key1)</code></a>·has·a·<code·class="inline">{Key2,·true}</code>·tuple |
| 4860 | in·its·returned·list,·otherwise·<code·class="inline">false</code>·(also·for·unknown·keys).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id=" | 4860 | in·its·returned·list,·otherwise·<code·class="inline">false</code>·(also·for·unknown·keys).</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">is_supported</span><span·class="p"·data-group-id="1540425953-1">(</span><span·class="ss">msg_flags</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">errqueue</span><span·class="p"·data-group-id="1540425953-1">)</span><span·class="p">,</span></code></pre> |
| 4861 | ··</section> | 4861 | ··</section> |
| 4862 | </section> | 4862 | </section> |
| 4863 | <section·class="detail"·id="listen/1"> | 4863 | <section·class="detail"·id="listen/1"> |
| 4864 | ··<div·class="detail-header"> | 4864 | ··<div·class="detail-header"> |
| 4865 | ····<a·href="#listen/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 4865 | ····<a·href="#listen/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 4866 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 4866 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 4947, 15 lines modified | Offset 4947, 15 lines modified | ||
| 4947 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor(Socket·::·<a·href="#t:socket/0">socket</a>())·->·MonitorRef·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>().</pre> | 4947 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·monitor(Socket·::·<a·href="#t:socket/0">socket</a>())·->·MonitorRef·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:reference/0">reference</a>().</pre> |
| 4948 | ······</div> | 4948 | ······</div> |
| 4949 | <p>Start·a·socket·monitor.</p><p>If·the·<code·class="inline">Socket</code>·doesn't·exist·or·when·later·the·monitor·is·triggered, | 4949 | <p>Start·a·socket·monitor.</p><p>If·the·<code·class="inline">Socket</code>·doesn't·exist·or·when·later·the·monitor·is·triggered, |
| 4950 | a·<code·class="inline">'DOWN'</code>·message·is·sent·to·the·process·that·called·<a·href="#monitor/1"><code·class="inline">monitor/1</code></a> | 4950 | a·<code·class="inline">'DOWN'</code>·message·is·sent·to·the·process·that·called·<a·href="#monitor/1"><code·class="inline">monitor/1</code></a> |
| 4951 | with·the·following·pattern:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ····</span><span·class="p"·data-group-id=" | 4951 | with·the·following·pattern:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ····</span><span·class="p"·data-group-id="6303569689-1">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MonitorRef</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">socket</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·156,·SHA:·7fd4ca382a0ec52dcfa5ec3a533d2ceffc669de6c30d4507608d1db99dd02653·...·]-1">}</span></code></pre><p><code·class="inline">Info</code>·is·the·termination·reason·of·the·socket·or·<code·class="inline">nosock</code>·if |
| 4952 | <code·class="inline">Socket</code>·did·not·exist·when·the·monitor·was·started.</p><p>Making·several·calls·to·<a·href="#monitor/1"><code·class="inline">socket:monitor/1</code></a>·for·the·same·<code·class="inline">Socket</code>·is·not·an | 4952 | <code·class="inline">Socket</code>·did·not·exist·when·the·monitor·was·started.</p><p>Making·several·calls·to·<a·href="#monitor/1"><code·class="inline">socket:monitor/1</code></a>·for·the·same·<code·class="inline">Socket</code>·is·not·an |
| 4953 | error;·each·call·creates·an·independent·monitor·instance.</p> | 4953 | error;·each·call·creates·an·independent·monitor·instance.</p> |
| 4954 | ··</section> | 4954 | ··</section> |
| 4955 | </section> | 4955 | </section> |
| 4956 | <section·class="detail"·id="number_of/0"> | 4956 | <section·class="detail"·id="number_of/0"> |
| 4957 | ··<div·class="detail-header"> | 4957 | ··<div·class="detail-header"> |
| Offset 5354, 33 lines modified | Offset 5354, 33 lines modified | ||
| 5354 | if·no·data·has·arrived·after·<code·class="inline">Timeout</code>·milliseconds, | 5354 | if·no·data·has·arrived·after·<code·class="inline">Timeout</code>·milliseconds, |
| 5355 | or·<code·class="inline">{error, {timeout, Data}}</code>·if·some·but·not·enough·data | 5355 | or·<code·class="inline">{error, {timeout, Data}}</code>·if·some·but·not·enough·data |
| 5356 | has·been·received·on·a·socket·of·<a·href="#t:type/0">type·<code·class="inline">stream</code></a>. | 5356 | has·been·received·on·a·socket·of·<a·href="#t:type/0">type·<code·class="inline">stream</code></a>. |
| 5357 | It·<em>can</em>·also·return·directly·with·<code·class="inline">{ok, Data}</code>·(<a·href="#t:type/0">type·<code·class="inline">dgram</code></a>). | 5357 | It·<em>can</em>·also·return·directly·with·<code·class="inline">{ok, Data}</code>·(<a·href="#t:type/0">type·<code·class="inline">dgram</code></a>). |
| 5358 | On·Unix,·if·will·return·<code·class="inline">{error,·timeout}</code>·either·if·no·data | 5358 | On·Unix,·if·will·return·<code·class="inline">{error,·timeout}</code>·either·if·no·data |
| 5359 | has·arrived·or·if·not·enough·data·(Length·>·0)·has·arrived. | 5359 | has·arrived·or·if·not·enough·data·(Length·>·0)·has·arrived. |
| 5360 | It·is·then·up·to·the·caller·to·make·another·all·to·see·if· | 5360 | It·is·then·up·to·the·caller·to·make·another·all·to·see·if· |
| 5361 | some·data·has·arrived·(and·was·stored·internally):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 5361 | some·data·has·arrived·(and·was·stored·internally):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">socket</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="8938615606-1">(</span><span·class="n">Socket</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">10</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5000</span><span·class="p"·data-group-id="8938615606-1">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 5362 | ········</span><span·class="p"·data-group-id=" | 5362 | ········</span><span·class="p"·data-group-id="8938615606-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="8938615606-2">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="c1">%·10·bytes·of·data</span><span·class="w"> |
| Max diff block lines reached; 7277/42926 bytes (16.95%) of diff not shown. | |||
| Offset 142, 31 lines modified | Offset 142, 31 lines modified | ||
| 142 | </h2> | 142 | </h2> |
| 143 | <p>All·tracing·is·done·within·a·trace·session.·Trace·sessions·can·be | 143 | <p>All·tracing·is·done·within·a·trace·session.·Trace·sessions·can·be |
| 144 | <a·href="#session_create/3">created</a>·and·<a·href="#session_destroy/1">destroyed</a> | 144 | <a·href="#session_create/3">created</a>·and·<a·href="#session_destroy/1">destroyed</a> |
| 145 | dynamically.·Each·session·has·its·own·tracer·that·will·receive·all·trace | 145 | dynamically.·Each·session·has·its·own·tracer·that·will·receive·all·trace |
| 146 | messages.·Several·sessions·can·exist·at·the·same·time·without·interfering·with | 146 | messages.·Several·sessions·can·exist·at·the·same·time·without·interfering·with |
| 147 | each·other.·When·a·trace·session·is·destroyed,·all·its·trace·settings·are | 147 | each·other.·When·a·trace·session·is·destroyed,·all·its·trace·settings·are |
| 148 | automatically·cleaned·up.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Create·a·tracer·process·that·will·receive·the·trace·events</span><span·class="gp·unselectable"> | 148 | automatically·cleaned·up.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Create·a·tracer·process·that·will·receive·the·trace·events</span><span·class="gp·unselectable"> |
| 149 | 1>·</span><span·class="n">Tracer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 149 | 1>·</span><span·class="n">Tracer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="2036718991-1">(</span><span·class="k">fun</span><span·class="w">·</span><span·class="n">F</span><span·class="p"·data-group-id="2036718991-2">(</span><span·class="p"·data-group-id="2036718991-2">)</span><span·class="w">·</span><span·class="p">-></span><s[·...·truncated·by·diffoscope;·len:·945,·SHA:·73d032b5e038ac279f9d56b98bfaf8ecb78d08ae558d4a94d2dbea08e6ae954d·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="o"><</span><span·class="mf">0.91</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> | 150 | </span><span·class="o"><</span><span·class="mf">0.91</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> |
| 151 | </span><span·class="c1">%%·Create·a·session·using·the·Tracer</span><span·class="gp·unselectable"> | 151 | </span><span·class="c1">%%·Create·a·session·using·the·Tracer</span><span·class="gp·unselectable"> |
| 152 | 2>·</span><span·class="n">Session</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">session_create</span><span·class="p"·data-group-id=" | 152 | 2>·</span><span·class="n">Session</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">session_create</span><span·class="p"·data-group-id="2036718991-6">(</span><span·class="ss">my_session</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tracer</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2036718991-7">[</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·72,·SHA:·50472d53b19012ac6ed9689f49e7d89bc971aee04f3ab35f1aef0766507ec7ec·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="p"·data-group-id=" | 153 | </span><span·class="p"·data-group-id="2036718991-8">{</span><span·class="p">#</span><span·class="n">Ref</span><span·class="o"><</span><span·class="mf">0.1543805153</span><span·class="p">.</span><span·class="mf">1548353537.92331</span><span·class="o">></span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·248,·SHA:·85290ed24ee14da747ed6da8e90f52b7ff46b6d4358dd14b1ca68189fb2fe13a·...·]-8">}</span><span·class="w"> |
| 154 | </span><span·class="c1">%%·Setup·call·tracing·on·self()</span><span·class="gp·unselectable"> | 154 | </span><span·class="c1">%%·Setup·call·tracing·on·self()</span><span·class="gp·unselectable"> |
| 155 | 3>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">process</span><span·class="p"·data-group-id=" | 155 | 3>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">process</span><span·class="p"·data-group-id="2036718991-10">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="2036718991-11">(</span><span·class="p"·data-group-id="2036718991-11">)</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·282,·SHA:·66dbd268dd17d4dbb45e8b33f8832141efa44c655571093fd8ce5380c8a10f7e·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="mi">1</span><span·class="w"> | 156 | </span><span·class="mi">1</span><span·class="w"> |
| 157 | </span><span·class="c1">%%·Setup·call·tracing·on·lists:seq/2</span><span·class="gp·unselectable"> | 157 | </span><span·class="c1">%%·Setup·call·tracing·on·lists:seq/2</span><span·class="gp·unselectable"> |
| 158 | 4>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">function</span><span·class="p"·data-group-id=" | 158 | 4>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">function</span><span·class="p"·data-group-id="2036718991-13">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2036718991-14">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">seq</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·435,·SHA:·15b2b01c86922775beddc6a424bd3c0f9e935443d3664bc1d3f3096be937c74b·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="mi">1</span><span·class="w"> | 159 | </span><span·class="mi">1</span><span·class="w"> |
| 160 | </span><span·class="c1">%%·Call·the·traced·function</span><span·class="gp·unselectable"> | 160 | </span><span·class="c1">%%·Call·the·traced·function</span><span·class="gp·unselectable"> |
| 161 | 5>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 161 | 5>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="2036718991-17">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">10</span><span·class="p"·data-group-id="2036718991-17">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p"·data-group-id=" | 162 | </span><span·class="p"·data-group-id="2036718991-18">{</span><span·class="nb">trace</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.89</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="ss">call</sp[·...·truncated·by·diffoscope;·len:·463,·SHA:·a32b53c567806bcc30549a3bf1209b6621e137c2e690b22deb49590ed1e9244e·...·]-18">}</span><span·class="w">·</span><span·class="c1">%·The·trace·message</span><span·class="w"> |
| 163 | </span><span·class="p"·data-group-id=" | 163 | </span><span·class="p"·data-group-id="2036718991-21">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class=[·...·truncated·by·diffoscope;·len:·275,·SHA:·6a4bcdeb8ef720778fed2cbe8b2b0b7d6e1c57c60eded39909bde36ca975e1c5·...·]-21">]</span><span·class="w">·</span><span·class="c1">%·The·return·value</span><span·class="w"> |
| 164 | </span><span·class="c1">%%·Cleanup·the·trace·session</span><span·class="gp·unselectable"> | 164 | </span><span·class="c1">%%·Cleanup·the·trace·session</span><span·class="gp·unselectable"> |
| 165 | 6>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">session_destroy</span><span·class="p"·data-group-id=" | 165 | 6>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">session_destroy</span><span·class="p"·data-group-id="2036718991-22">(</span><span·class="n">Session</span><span·class="p"·data-group-id="2036718991-22">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="ss">ok</span></code></pre><h2·id="module-node-local-tracing-only"·class="section-heading"> | 166 | </span><span·class="ss">ok</span></code></pre><h2·id="module-node-local-tracing-only"·class="section-heading"> |
| 167 | ··<a·href="#module-node-local-tracing-only"·class="hover-link"> | 167 | ··<a·href="#module-node-local-tracing-only"·class="hover-link"> |
| 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 168 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 169 | ··</a> | 169 | ··</a> |
| 170 | ··<span·class="text">Node·Local·Tracing·Only</span> | 170 | ··<span·class="text">Node·Local·Tracing·Only</span> |
| 171 | </h2> | 171 | </h2> |
| 172 | <p>The·functions·in·this·module·only·operates·on·the·local·node.·That·is,·both·the | 172 | <p>The·functions·in·this·module·only·operates·on·the·local·node.·That·is,·both·the |
| Offset 1288, 17 lines modified | Offset 1288, 17 lines modified | ||
| 1288 | <code·class="inline">undefined</code>·if·the·sender·is·not·known·(which·can·be·the·case·for·remote | 1288 | <code·class="inline">undefined</code>·if·the·sender·is·not·known·(which·can·be·the·case·for·remote |
| 1289 | senders).·<code·class="inline">Msg</code>·is·the·message·term.·The·pid·of·the·receiving·process·can·be | 1289 | senders).·<code·class="inline">Msg</code>·is·the·message·term.·The·pid·of·the·receiving·process·can·be |
| 1290 | accessed·with·the·guard·function·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>.·An·empty·list·is·the·same·as | 1290 | accessed·with·the·guard·function·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>.·An·empty·list·is·the·same·as |
| 1291 | <code·class="inline">true</code>.·For·more·information,·see·section | 1291 | <code·class="inline">true</code>.·For·more·information,·see·section |
| 1292 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html">Match·Specifications·in·Erlang</a>·in·the·User's·Guide | 1292 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html">Match·Specifications·in·Erlang</a>·in·the·User's·Guide |
| 1293 | for·the·ERTS·application.</p></li><li><p><strong><code·class="inline">true</code></strong>·-·Enable·tracing·for·all·received·messages·(to·<code·class="inline">'receive'</code>·traced | 1293 | for·the·ERTS·application.</p></li><li><p><strong><code·class="inline">true</code></strong>·-·Enable·tracing·for·all·received·messages·(to·<code·class="inline">'receive'</code>·traced |
| 1294 | processes).·Any·match·specification·is·removed.·<em>This·is·the·default</em>.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Disable·tracing·for·all·received·messages.·Any·match | 1294 | processes).·Any·match·specification·is·removed.·<em>This·is·the·default</em>.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Disable·tracing·for·all·received·messages.·Any·match |
| 1295 | specification·is·removed.</p></li></ul><p>Argument·<code·class="inline">FlagList</code>·must·be·<code·class="inline">[]</code>·for·receive·tracing.</p><p>The·return·value·is·always·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><p>Only·trace·messages·from·a·specific·process·<code·class="inline">Pid</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="8065874101-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8065874101-2">[</span><span·class="p"·data-group-id="8065874101-3">{</span><span·class="p"·data-group-id="8065874101-4">[</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="8065874101-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="8065874101-5">[</span><span·class="p"·data-group-id="8065874101-5">]</span><span·class="p">,</span><span·class="p"·data-group-id="8065874101-6">[</span><span·class="p"·data-group-id="8065874101-6">]</span><span·class="p"·data-group-id="8065874101-3">}</span><span·class="p"·data-group-id="8065874101-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8065874101-7">[</span><span·class="p"·data-group-id="8065874101-7">]</span><span·class="p"·data-group-id="8065874101-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1296 | 1295 | specification·is·removed.</p></li></ul><p>Argument·<code·class="inline">FlagList</code>·must·be·<code·class="inline">[]</code>·for·receive·tracing.</p><p>The·return·value·is·always·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><p>Only·trace·me[·...·truncated·by·diffoscope;·len:·1310,·SHA:·2c6f1fa10433bdd7d75cb11bb6c7d4facccc62907364910e440dac1e49b912c5·...·]-1">)</span><span·class="p">.</span><span·class="w"> | |
| 1296 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·matching·<code·class="inline">{reply,·_}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="8349012062-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8349012062-2">[</span><span·class="p"·data-group-id="8349012062-3">{</span><span·class="p"·data-group-id="8349012062-4">[</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8349012062-5">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p"·data-group-id="8349012062-5">}</span><span·class="p"·data-group-id="8349012062-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="8349012062-6">[</span><span·class="p"·data-group-id="8349012062-6">]</span><span·class="p">,</span><span·class="p"·data-group-id="8349012062-7">[</span><span·class="p"·data-group-id="8349012062-7">]</span><span·class="p"·data-group-id="8349012062-3">}</span><span·class="p"·data-group-id="8349012062-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8349012062-8">[</span><span·class="p"·data-group-id="8349012062-8">]</span><span·class="p"·data-group-id="8349012062-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1297 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·from·other·nodes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id=" | 1297 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·from·other·nodes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">recv</span><span·class="p"·data-group-id="8160940606-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8160940606-2">[</span><span·class="p"·data-group-id="8160940606-3">{</span><span·class="p"·data-group-id="8160940606-4">[</sp[·...·truncated·by·diffoscope;·len:·1180,·SHA:·eaf1da609e7f938daf1a1b9d6100247987d070ba9db18c3d6f07cc1d428bbe03·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1298 | </span><span·class="mi">1</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·match·specification·for·<code·class="inline">'receive'</code>·trace·can·use·all·guard·and·body | 1298 | </span><span·class="mi">1</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·match·specification·for·<code·class="inline">'receive'</code>·trace·can·use·all·guard·and·body |
| 1299 | functions·except·<code·class="inline">caller</code>,·<code·class="inline">is_seq_trace</code>,·<code·class="inline">get_seq_token</code>,·<code·class="inline">set_seq_token</code>, | 1299 | functions·except·<code·class="inline">caller</code>,·<code·class="inline">is_seq_trace</code>,·<code·class="inline">get_seq_token</code>,·<code·class="inline">set_seq_token</code>, |
| 1300 | <code·class="inline">enable_trace</code>,·<code·class="inline">disable_trace</code>,·<code·class="inline">trace</code>,·<code·class="inline">silent</code>,·and·<code·class="inline">process_dump</code>.</p></section><p>Fails·by·raising·an·error·exception·with·an·error·reason·of:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·If·an·argument·is·invalid.</p></li><li><p><strong><code·class="inline">system_limit</code></strong>·-·If·a·match·specification·passed·as·argument·has·excessive | 1300 | <code·class="inline">enable_trace</code>,·<code·class="inline">disable_trace</code>,·<code·class="inline">trace</code>,·<code·class="inline">silent</code>,·and·<code·class="inline">process_dump</code>.</p></section><p>Fails·by·raising·an·error·exception·with·an·error·reason·of:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·If·an·argument·is·invalid.</p></li><li><p><strong><code·class="inline">system_limit</code></strong>·-·If·a·match·specification·passed·as·argument·has·excessive |
| 1301 | nesting·which·causes·scheduler·stack·exhaustion·for·the·scheduler·that·the | 1301 | nesting·which·causes·scheduler·stack·exhaustion·for·the·scheduler·that·the |
| 1302 | calling·process·is·executing·on. | 1302 | calling·process·is·executing·on. |
| 1303 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html#sched_thread_stack_size">Scheduler·stack·size</a>·can·be·configured | 1303 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html#sched_thread_stack_size">Scheduler·stack·size</a>·can·be·configured |
| 1304 | when·starting·the·runtime·system.</p></li></ul> | 1304 | when·starting·the·runtime·system.</p></li></ul> |
| Offset 1339, 18 lines modified | Offset 1339, 18 lines modified | ||
| 1339 | the·list·<code·class="inline">[Receiver,·Msg]</code>.·<code·class="inline">Receiver</code>·is·the·process·or·port·identity·of·the | 1339 | the·list·<code·class="inline">[Receiver,·Msg]</code>.·<code·class="inline">Receiver</code>·is·the·process·or·port·identity·of·the |
| 1340 | receiver·and·<code·class="inline">Msg</code>·is·the·message·term.·The·pid·of·the·sending·process·can·be | 1340 | receiver·and·<code·class="inline">Msg</code>·is·the·message·term.·The·pid·of·the·sending·process·can·be |
| 1341 | accessed·with·the·guard·function·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>.·An·empty·list·is·the·same·as | 1341 | accessed·with·the·guard·function·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>.·An·empty·list·is·the·same·as |
| 1342 | <code·class="inline">true</code>.·For·more·information,·see·section | 1342 | <code·class="inline">true</code>.·For·more·information,·see·section |
| 1343 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html">Match·Specifications·in·Erlang</a>·in·the·User's·Guide | 1343 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html">Match·Specifications·in·Erlang</a>·in·the·User's·Guide |
| 1344 | for·the·ERTS·application.</p></li><li><p><strong><code·class="inline">true</code></strong>·-·Enable·tracing·for·all·sent·messages·(from·<code·class="inline">send</code>·traced | 1344 | for·the·ERTS·application.</p></li><li><p><strong><code·class="inline">true</code></strong>·-·Enable·tracing·for·all·sent·messages·(from·<code·class="inline">send</code>·traced |
| 1345 | processes).·Any·match·specification·is·removed.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Disable·tracing·for·all·sent·messages.·Any·match·specification | 1345 | processes).·Any·match·specification·is·removed.</p></li><li><p><strong><code·class="inline">false</code></strong>·-·Disable·tracing·for·all·sent·messages.·Any·match·specification |
| 1346 | is·removed.</p></li></ul><p>Argument·<code·class="inline">FlagList</code>·must·be·<code·class="inline">[]</code>.</p><p>The·return·value·is·always·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><p>Only·trace·messages·to·a·specific·process·<code·class="inline">Pid</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="7393116951-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7393116951-2">[</span><span·class="p"·data-group-id="7393116951-3">{</span><span·class="p"·data-group-id="7393116951-4">[</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="7393116951-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="7393116951-5">[</span><span·class="p"·data-group-id="7393116951-5">]</span><span·class="p">,</span><span·class="p"·data-group-id="7393116951-6">[</span><span·class="p"·data-group-id="7393116951-6">]</span><span·class="p"·data-group-id="7393116951-3">}</span><span·class="p"·data-group-id="7393116951-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7393116951-7">[</span><span·class="p"·data-group-id="7393116951-7">]</span><span·class="p"·data-group-id="7393116951-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1347 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·matching·<code·class="inline">{reply,·_}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="4735051073-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4735051073-2">[</span><span·class="p"·data-group-id="4735051073-3">{</span><span·class="p"·data-group-id="4735051073-4">[</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4735051073-5">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p"·data-group-id="4735051073-5">}</span><span·class="p"·data-group-id="4735051073-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="4735051073-6">[</span><span·class="p"·data-group-id="4735051073-6">]</span><span·class="p">,</span><span·class="p"·data-group-id="4735051073-7">[</span><span·class="p"·data-group-id="4735051073-7">]</span><span·class="p"·data-group-id="4735051073-3">}</span><span·class="p"·data-group-id="4735051073-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4735051073-8">[</span><span·class="p"·data-group-id="4735051073-8">]</span><span·class="p"·data-group-id="4735051073-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1348 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·sent·to·the·sender·itself:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="7971300456-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7971300456-2">[</span><span·class="p"·data-group-id="7971300456-3">{</span><span·class="p"·data-group-id="7971300456-4">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="7971300456-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="7971300456-5">[</span><span·class="p"·data-group-id="7971300456-6">{</span><span·class="ss">'=:='</span><span·class="p">,</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="p"·data-group-id="7971300456-7">{</span><span·class="ss">self</span><span·class="p"·data-group-id="7971300456-7">}</span><span·class="p"·data-group-id="7971300456-6">}</span><span·class="p"·data-group-id="7971300456-5">]</span><span·class="p">,</span><span·class="p"·data-group-id="7971300456-8">[</span><span·class="p"·data-group-id="7971300456-8">]</span><span·class="p"·data-group-id="7971300456-3">}</span><span·class="p"·data-group-id="7971300456-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7971300456-9">[</span><span·class="p"·data-group-id="7971300456-9">]</span><span·class="p"·data-group-id="7971300456-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1349 | 1346 | is·removed.</p></li></ul><p>Argument·<code·class="inline">FlagList</code>·must·be·<code·class="inline">[]</code>.</p><p>The·return·value·is·always·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><p>Only·trace·messages·to·a·specific·process·<code[·...·truncated·by·diffoscope;·len:·1215,·SHA:·781c4f896ba1299e5e4b7bf4d10277dc68630ef4387f4a8cdbd75341689cb903·...·]-1">)</span><span·class="p">.</span><span·class="w"> | |
| 1347 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·matching·<code·class="inline">{reply,·_}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="1104015941-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1104015941-2">[</span><span·class="p"·data-group-id="1104015941-3">{</span><span·class="p"·data-group-id="1104015941-4">[</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1104015941-5">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="ss">'_'</span><span·class="p"·data-group-id="1104015941-5">}</span><span·class="p"·data-group-id="1104015941-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="1104015941-6">[</span><span·class="p"·data-group-id="1104015941-6">]</span><span·class="p">,</span><span·class="p"·data-group-id="1104015941-7">[</span><span·class="p"·data-group-id="1104015941-7">]</span><span·class="p"·data-group-id="1104015941-3">}</span><span·class="p"·data-group-id="1104015941-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1104015941-8">[</span><span·class="p"·data-group-id="1104015941-8">]</span><span·class="p"·data-group-id="1104015941-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1348 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·sent·to·the·sender·itself:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="3904009415-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3904009415-2">[</span><span·class="p"·data-group-id="3904009415-3">{</span><span·class="p"·data-group-id="3904009415-4">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="3904009415-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="3904009415-5">[</span><span·class="p"·data-group-id="3904009415-6">{</span><span·class="ss">'=:='</span><span·class="p">,</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="p"·data-group-id="3904009415-7">{</span><span·class="ss">self</span><span·class="p"·data-group-id="3904009415-7">}</span><span·class="p"·data-group-id="3904009415-6">}</span><span·class="p"·data-group-id="3904009415-5">]</span><span·class="p">,</span><span·class="p"·data-group-id="3904009415-8">[</span><span·class="p"·data-group-id="3904009415-8">]</span><span·class="p"·data-group-id="3904009415-3">}</span><span·class="p"·data-group-id="3904009415-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3904009415-9">[</span><span·class="p"·data-group-id="3904009415-9">]</span><span·class="p"·data-group-id="3904009415-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1349 | </span><span·class="mi">1</span></code></pre><p>Only·trace·messages·sent·to·other·nodes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">trace</span><span·class="p">:</span><span·class="nf">send</span><span·class="p"·data-group-id="7364807755-1">(</span><span·class="n">Session</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7364807755-2">[</span><span·class="p"·data-group-id="7364807755-3">{</span><span·class="p"·data-group-id="7364807755-4">[</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'_'</span><span·class="p"·data-group-id="7364807755-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="7364807755-5">[</span><span·class="p"·data-group-id="7364807755-6">{</span><span·class="ss">'=/='</span><span·class="p">,</span><span·class="p"·data-group-id="7364807755-7">{</span><span·class="nb">node</span><span·class="p">,</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="7364807755-7">}</span><span·class="p">,</span><span·class="p"·data-group-id="7364807755-8">{</span><span·class="nb">node</span><span·class="p"·data-group-id="7364807755-8">}</span><span·class="p"·data-group-id="7364807755-6">}</span><span·class="p"·data-group-id="7364807755-5">]</span><span·class="p">,</span><span·class="p"·data-group-id="7364807755-9">[</span><span·class="p"·data-group-id="7364807755-9">]</span><span·class="p"·data-group-id="7364807755-3">}</span><span·class="p"·data-group-id="7364807755-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7364807755-10">[</span><span·class="p"·data-group-id="7364807755-10">]</span><span·class="p"·data-group-id="7364807755-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1350 | </span><span·class="mi">1</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·match·specification·for·<code·class="inline">send</code>·trace·can·use·all·guard·and·body·functions | 1350 | </span><span·class="mi">1</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>A·match·specification·for·<code·class="inline">send</code>·trace·can·use·all·guard·and·body·functions |
| 1351 | except·<code·class="inline">caller</code>.</p></section><p>Fails·by·raising·an·error·exception·with·an·error·reason·of:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·If·an·argument·is·invalid.</p></li><li><p><strong><code·class="inline">system_limit</code></strong>·-·If·a·match·specification·passed·as·argument·has·excessive | 1351 | except·<code·class="inline">caller</code>.</p></section><p>Fails·by·raising·an·error·exception·with·an·error·reason·of:</p><ul><li><p><strong><code·class="inline">badarg</code></strong>·-·If·an·argument·is·invalid.</p></li><li><p><strong><code·class="inline">system_limit</code></strong>·-·If·a·match·specification·passed·as·argument·has·excessive |
| 1352 | nesting·which·causes·scheduler·stack·exhaustion·for·the·scheduler·that·the | 1352 | nesting·which·causes·scheduler·stack·exhaustion·for·the·scheduler·that·the |
| 1353 | calling·process·is·executing·on. | 1353 | calling·process·is·executing·on. |
| 1354 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html#sched_thread_stack_size">Scheduler·stack·size</a>·can·be·configured | 1354 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html#sched_thread_stack_size">Scheduler·stack·size</a>·can·be·configured |
| 1355 | when·starting·the·runtime·system.</p></li></ul> | 1355 | when·starting·the·runtime·system.</p></li></ul> |
| 1356 | ··</section> | 1356 | ··</section> |
| Offset 1482, 15 lines modified | Offset 1482, 15 lines modified | ||
| 1482 | ······<p·class="built-using"> | 1482 | ······<p·class="built-using"> |
| 1483 | ········Built·using | 1483 | ········Built·using |
| 1484 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1484 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1485 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1485 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1486 | ······</p> | 1486 | ······</p> |
| 1487 | <p>Copyright·©·1996-202 | 1487 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1488 | ····</footer> | 1488 | ····</footer> |
| 1489 | ··</div> | 1489 | ··</div> |
| 1490 | </main> | 1490 | </main> |
| 1491 | </div> | 1491 | </div> |
| 1492 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1492 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1493 | ··<script> | 1493 | ··<script> |
| 1494 | ··let·initialized·=·false; | 1494 | ··let·initialized·=·false; |
| Offset 530, 15 lines modified | Offset 530, 15 lines modified | ||
| 530 | ······<p·class="built-using"> | 530 | ······<p·class="built-using"> |
| 531 | ········Built·using | 531 | ········Built·using |
| 532 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 532 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 533 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 533 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 534 | ······</p> | 534 | ······</p> |
| 535 | <p>Copyright·©·1996-202 | 535 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 536 | ····</footer> | 536 | ····</footer> |
| 537 | ··</div> | 537 | ··</div> |
| 538 | </main> | 538 | </main> |
| 539 | </div> | 539 | </div> |
| 540 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 540 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 541 | ··<script> | 541 | ··<script> |
| 542 | ··let·initialized·=·false; | 542 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 298, 15 lines modified | Offset 298, 15 lines modified | ||
| 298 | ······<p·class="built-using"> | 298 | ······<p·class="built-using"> |
| 299 | ········Built·using | 299 | ········Built·using |
| 300 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 300 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 301 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 301 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 302 | ······</p> | 302 | ······</p> |
| 303 | <p>Copyright·©·1996-202 | 303 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 304 | ····</footer> | 304 | ····</footer> |
| 305 | ··</div> | 305 | ··</div> |
| 306 | </main> | 306 | </main> |
| 307 | </div> | 307 | </div> |
| 308 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 308 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 309 | ··<script> | 309 | ··<script> |
| 310 | ··let·initialized·=·false; | 310 | ··let·initialized·=·false; |
| Offset 3072, 15 lines modified | Offset 3072, 15 lines modified | ||
| 3072 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·print_version_info(Versions)·->·<a·href="#t:void/0">void</a>()·when·Versions·::·[VersionInfo],·VersionInfo·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3072 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·print_version_info(Versions)·->·<a·href="#t:void/0">void</a>()·when·Versions·::·[VersionInfo],·VersionInfo·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3073 | ······</div> | 3073 | ······</div> |
| 3074 | <p>Utility·function·to·produce·a·formated·printout·of·the·versions·info·generated | 3074 | <p>Utility·function·to·produce·a·formated·printout·of·the·versions·info·generated |
| 3075 | by·the·<code·class="inline">versions1</code>·and·<code·class="inline">versions2</code>·functions.</p><p>The·function·print_version_info/0·uses·the·result·of·function·version1/0·as | 3075 | by·the·<code·class="inline">versions1</code>·and·<code·class="inline">versions2</code>·functions.</p><p>The·function·print_version_info/0·uses·the·result·of·function·version1/0·as |
| 3076 | <code·class="inline">VersionInfo</code>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id=" | 3076 | <code·class="inline">VersionInfo</code>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id="1263246706-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">V</span><span·class="p"·data-group-id="1263246706-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·441,·SHA:·c2b2ff19a5b317c62ef387b55072759f39402c297424cbbb417f1d84bf53a5fd·...·]-3">)</span><span·class="p">.</span></code></pre> |
| 3077 | ··</section> | 3077 | ··</section> |
| 3078 | </section> | 3078 | </section> |
| 3079 | <section·class="detail"·id="process_received_message/4"> | 3079 | <section·class="detail"·id="process_received_message/4"> |
| 3080 | ··<div·class="detail-header"> | 3080 | ··<div·class="detail-header"> |
| 3081 | ····<a·href="#process_received_message/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3081 | ····<a·href="#process_received_message/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3082 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3082 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3930, 15 lines modified | Offset 3930, 15 lines modified | ||
| 3930 | ······<p·class="built-using"> | 3930 | ······<p·class="built-using"> |
| 3931 | ········Built·using | 3931 | ········Built·using |
| 3932 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3932 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3933 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3933 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3934 | ······</p> | 3934 | ······</p> |
| 3935 | <p>Copyright·©·1996-202 | 3935 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3936 | ····</footer> | 3936 | ····</footer> |
| 3937 | ··</div> | 3937 | ··</div> |
| 3938 | </main> | 3938 | </main> |
| 3939 | </div> | 3939 | </div> |
| 3940 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3940 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3941 | ··<script> | 3941 | ··<script> |
| 3942 | ··let·initialized·=·false; | 3942 | ··let·initialized·=·false; |
| Offset 255, 15 lines modified | Offset 255, 15 lines modified | ||
| 255 | ······<p·class="built-using"> | 255 | ······<p·class="built-using"> |
| 256 | ········Built·using | 256 | ········Built·using |
| 257 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 257 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 258 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 258 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 259 | ······</p> | 259 | ······</p> |
| 260 | <p>Copyright·©·1996-202 | 260 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 261 | ····</footer> | 261 | ····</footer> |
| 262 | ··</div> | 262 | ··</div> |
| 263 | </main> | 263 | </main> |
| 264 | </div> | 264 | </div> |
| 265 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 265 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 266 | ··<script> | 266 | ··<script> |
| 267 | ··let·initialized·=·false; | 267 | ··let·initialized·=·false; |
| Offset 243, 15 lines modified | Offset 243, 15 lines modified | ||
| 243 | ······<p·class="built-using"> | 243 | ······<p·class="built-using"> |
| 244 | ········Built·using | 244 | ········Built·using |
| 245 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 245 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 246 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 246 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 247 | ······</p> | 247 | ······</p> |
| 248 | <p>Copyright·©·1996-202 | 248 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 249 | ····</footer> | 249 | ····</footer> |
| 250 | ··</div> | 250 | ··</div> |
| 251 | </main> | 251 | </main> |
| 252 | </div> | 252 | </div> |
| 253 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 253 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 254 | ··<script> | 254 | ··<script> |
| 255 | ··let·initialized·=·false; | 255 | ··let·initialized·=·false; |
| Offset 575, 15 lines modified | Offset 575, 15 lines modified | ||
| 575 | ······<p·class="built-using"> | 575 | ······<p·class="built-using"> |
| 576 | ········Built·using | 576 | ········Built·using |
| 577 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 577 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 578 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 578 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 579 | ······</p> | 579 | ······</p> |
| 580 | <p>Copyright·©·1996-202 | 580 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 581 | ····</footer> | 581 | ····</footer> |
| 582 | ··</div> | 582 | ··</div> |
| 583 | </main> | 583 | </main> |
| 584 | </div> | 584 | </div> |
| 585 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 585 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 586 | ··<script> | 586 | ··<script> |
| 587 | ··let·initialized·=·false; | 587 | ··let·initialized·=·false; |
| Offset 249, 15 lines modified | Offset 249, 15 lines modified | ||
| 249 | ······<p·class="built-using"> | 249 | ······<p·class="built-using"> |
| 250 | ········Built·using | 250 | ········Built·using |
| 251 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 251 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 252 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 252 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 253 | ······</p> | 253 | ······</p> |
| 254 | <p>Copyright·©·1996-202 | 254 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 255 | ····</footer> | 255 | ····</footer> |
| 256 | ··</div> | 256 | ··</div> |
| 257 | </main> | 257 | </main> |
| 258 | </div> | 258 | </div> |
| 259 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 259 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 260 | ··<script> | 260 | ··<script> |
| 261 | ··let·initialized·=·false; | 261 | ··let·initialized·=·false; |
| Offset 246, 15 lines modified | Offset 246, 15 lines modified | ||
| 246 | ······<p·class="built-using"> | 246 | ······<p·class="built-using"> |
| 247 | ········Built·using | 247 | ········Built·using |
| 248 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 248 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 249 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 249 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 250 | ······</p> | 250 | ······</p> |
| 251 | <p>Copyright·©·1996-202 | 251 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 252 | ····</footer> | 252 | ····</footer> |
| 253 | ··</div> | 253 | ··</div> |
| 254 | </main> | 254 | </main> |
| 255 | </div> | 255 | </div> |
| 256 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 256 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 257 | ··<script> | 257 | ··<script> |
| 258 | ··let·initialized·=·false; | 258 | ··let·initialized·=·false; |
| Offset 168, 20 lines modified | Offset 168, 20 lines modified | ||
| 168 | file·(see·below·for·more·info).·The·messages·in·this·file·is·encoded·with·just | 168 | file·(see·below·for·more·info).·The·messages·in·this·file·is·encoded·with·just |
| 169 | one·codec.·During·measurement·initiation,·the·messages·are·read·and·then | 169 | one·codec.·During·measurement·initiation,·the·messages·are·read·and·then |
| 170 | transformed·to·all·codec·formats·used·in·the·measurement.</p><p>The·message·transformation·is·done·by·the·transformation·module.·It·is·used·to | 170 | transformed·to·all·codec·formats·used·in·the·measurement.</p><p>The·message·transformation·is·done·by·the·transformation·module.·It·is·used·to |
| 171 | transform·a·set·of·messages·encoded·with·one·codec·into·the·other·base·codec's.</p><h4>Measurement(s)</h4><p>There·are·two·different·measurement·tools:</p><ul><li><p><em>meas</em>:</p><p>Used·to·perform·codec·measurements.·That·is,·to·see·what·kind·of·performance | 171 | transform·a·set·of·messages·encoded·with·one·codec·into·the·other·base·codec's.</p><h4>Measurement(s)</h4><p>There·are·two·different·measurement·tools:</p><ul><li><p><em>meas</em>:</p><p>Used·to·perform·codec·measurements.·That·is,·to·see·what·kind·of·performance |
| 172 | can·be·expected·by·the·different·codecs·provided·by·the·megaco·application.</p><p>The·measurement·is·done·by·iterating·over·the·decode/encode·function·for | 172 | can·be·expected·by·the·different·codecs·provided·by·the·megaco·application.</p><p>The·measurement·is·done·by·iterating·over·the·decode/encode·function·for |
| 173 | approx·2·seconds·per·message·and·counting·the·number·of·decodes/encodes.</p><p>Is·best·run·by·modifying·the·meas.sh.skel·skeleton·script·provided·by·the | 173 | approx·2·seconds·per·message·and·counting·the·number·of·decodes/encodes.</p><p>Is·best·run·by·modifying·the·meas.sh.skel·skeleton·script·provided·by·the |
| 174 | tool.</p><p>To·run·it·manually·do·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="c1">%·erl·-pa·<path-megaco-ebin-dir>·-pa·<path-to-meas-module-dir></span><span·class="w"> | 174 | tool.</p><p>To·run·it·manually·do·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="c1">%·erl·-pa·<path-megaco-ebin-dir>·-pa·<path-to-meas-module-dir></span><span·class="w"> |
| 175 | ········</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id=" | 175 | ········</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id="5261414194-1">(</span><span·class="n">BEAM</span><span·class="p"·data-group-id="5261414194-1">)</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="mf">5.[·...·truncated·by·diffoscope;·len:·155,·SHA:·e3d25e53ed74d357eb3e6b40fc951d22989edf627a6f78f7f6357f48b885fec1·...·]4-2">]</span><span·class="w"> |
| 176 | ········</span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V12</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 176 | ········</span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V12</span><span·class="p">.</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="5261414194-3">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="5261414194-3">)</span><span·class="w"> |
| 177 | ········</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">megaco_codec_meas</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 177 | ········</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">megaco_codec_meas</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5261414194-4">(</span><span·class="p"·data-group-id="5261414194-4">)</span><span·class="p">.</span><span·class="w"> |
| 178 | ········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 178 | ········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 179 | ········</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nf">halt</span><span·class="p"·data-group-id=" | 179 | ········</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nf">halt</span><span·class="p"·data-group-id="5261414194-5">(</span><span·class="p"·data-group-id="5261414194-5">)</span><span·class="p">.</span></code></pre><p>or·to·make·it·even·easier,·assuming·a·measure·shall·be·done·on·all·the·codecs |
| 180 | (as·above):</p><pre><code·class="text">········%·erl·-noshell·-pa·<path-megaco-ebin-dir>·\\ | 180 | (as·above):</p><pre><code·class="text">········%·erl·-noshell·-pa·<path-megaco-ebin-dir>·\\ |
| 181 | ··············-pa·<path-to-meas-module-dir>·\\ | 181 | ··············-pa·<path-to-meas-module-dir>·\\ |
| 182 | ··············-s·megaco_codec_meas·-s·init·stop</code></pre><p>When·run·as·above·(this·will·take·some·time),·the·measurement·process·is·done | 182 | ··············-s·megaco_codec_meas·-s·init·stop</code></pre><p>When·run·as·above·(this·will·take·some·time),·the·measurement·process·is·done |
| 183 | as·follows:</p><pre><code·class="text">For·each·codec: | 183 | as·follows:</p><pre><code·class="text">For·each·codec: |
| 184 | ····For·each·message: | 184 | ····For·each·message: |
| 185 | ········Read·the·message·from·the·file | 185 | ········Read·the·message·from·the·file |
| 186 | ············Detect·message·version | 186 | ············Detect·message·version |
| Offset 195, 18 lines modified | Offset 195, 18 lines modified | ||
| 195 | tool.</p><p>The·<em>mstone2</em>·is·similar·to·the·<em>mstone1</em>·tool,·but·in·this·case,·each·created | 195 | tool.</p><p>The·<em>mstone2</em>·is·similar·to·the·<em>mstone1</em>·tool,·but·in·this·case,·each·created |
| 196 | process·makes·only·<em>one</em>·run·through·the·messages·and·then·exits.·A·soon·as·a | 196 | process·makes·only·<em>one</em>·run·through·the·messages·and·then·exits.·A·soon·as·a |
| 197 | process·exits,·a·new·process·(with·the·same·config·and·messages)·is·created·to | 197 | process·exits,·a·new·process·(with·the·same·config·and·messages)·is·created·to |
| 198 | takes·its·place.·The·number·of·messages·processed·in·total·is·the·mstone2(1) | 198 | takes·its·place.·The·number·of·messages·processed·in·total·is·the·mstone2(1) |
| 199 | value.</p></li></ul><p>Both·these·tools·use·the·message·package·(time_test.msgs)·provided·with·the | 199 | value.</p></li></ul><p>Both·these·tools·use·the·message·package·(time_test.msgs)·provided·with·the |
| 200 | tool(s),·although·it·can·run·on·any·message·package·as·long·as·it·has·the·same | 200 | tool(s),·although·it·can·run·on·any·message·package·as·long·as·it·has·the·same |
| 201 | structure.</p><h4>Message·package·file</h4><p>This·is·simply·an·erlang·compatible·text-file·with·the·following·structure: | 201 | structure.</p><h4>Message·package·file</h4><p>This·is·simply·an·erlang·compatible·text-file·with·the·following·structure: |
| 202 | <code·class="inline">{codec_name(),·messages_list()}</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">codec_name</span><span·class="p"·data-group-id="6 | 202 | <code·class="inline">{codec_name(),·messages_list()}</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">codec_name</span><span·class="p"·data-group-id="6317228336-1">(</span><span·class="p"·data-group-id="6317228336-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">pretty</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·686,·SHA:·f5ee4c3b830e6da997bf3ffb9110d0cac9dd7e20683d9ffd061c283e5e688b91·...·]-2">)</span><span·class="w"> |
| 203 | </span><span·class="nf">messages_list</span><span·class="p"·data-group-id="6429077415-3">(</span><span·class="p"·data-group-id="6429077415-3">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6429077415-4">[</span><span·class="p"·data-group-id="6429077415-5">{</span><span·class="nf">message_name</span><span·class="p"·data-group-id="6429077415-6">(</span><span·class="p"·data-group-id="6429077415-6">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">message</span><span·class="p"·data-group-id="6429077415-7">(</span><span·class="p"·data-group-id="6429077415-7">)</span><span·class="p"·data-group-id="6429077415-5">}</span><span·class="p"·data-group-id="6429077415-4">]</span><span·class="w"> | ||
| 204 | </span><span·class="nf">message_name</span><span·class="p"·data-group-id="6429077415-8">(</span><span·class="p"·data-group-id="6429077415-8">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6429077415-9">(</span><span·class="p"·data-group-id="6429077415-9">)</span><span·class="w"> | ||
| 205 | </span><span·class="nf">message</span><span·class="p"·data-group-id="6 | 203 | </span><span·class="nf">messages_list</span><span·class="p"·data-group-id="6317228336-3">(</span><span·class="p"·data-group-id="6317228336-3">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6317228336-4">[</span><span·class=[·...·truncated·by·diffoscope;·len:·490,·SHA:·2c586831844932e40438bcc6adfd03a5fe8fbdddac5e2174bfe3d56540bb6a33·...·] |
| 204 | </span><span·class="nf">message_name</span><span·class="p"·data-group-id="6317228336-8">(</span><span·class="p"·data-group-id="6317228336-8">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6317228336-9">(</span><span·class="p"·data-group-id="6317228336-9">)</span><span·class="w"> | ||
| 205 | </span><span·class="nf">message</span><span·class="p"·data-group-id="6317228336-10">(</span><span·class="p"·data-group-id="6317228336-10">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="6317228336-11">(</span><span·class="p"·data-group-id="6317228336-11">)</span></code></pre><p>The·codec·name·is·the·name·of·the·codec·with·which·all·messages·in·the | ||
| 206 | <code·class="inline">message_list()</code>·has·been·encoded.</p><p>This·file·can·be·<code·class="inline">exported</code>·to·a·file·structure·by·calling·the | 206 | <code·class="inline">message_list()</code>·has·been·encoded.</p><p>This·file·can·be·<code·class="inline">exported</code>·to·a·file·structure·by·calling·the |
| 207 | <a·href="megaco_codec_transform.html#export_messages">export_messages</a>·function.·This·can | 207 | <a·href="megaco_codec_transform.html#export_messages">export_messages</a>·function.·This·can |
| 208 | be·usefull·if·a·measurement·shall·be·done·with·an·external·tool.·Exporting·the | 208 | be·usefull·if·a·measurement·shall·be·done·with·an·external·tool.·Exporting·the |
| 209 | messages·creates·a·directory·tree·with·the·following·structure:</p><pre><code·class="text"><message·package>/pretty/<message-files> | 209 | messages·creates·a·directory·tree·with·the·following·structure:</p><pre><code·class="text"><message·package>/pretty/<message-files> |
| 210 | ··················compact/ | 210 | ··················compact/ |
| 211 | ··················per/ | 211 | ··················per/ |
| 212 | ··················ber/<message-files> | 212 | ··················ber/<message-files> |
| Offset 262, 15 lines modified | Offset 262, 15 lines modified | ||
| 262 | ······<p·class="built-using"> | 262 | ······<p·class="built-using"> |
| 263 | ········Built·using | 263 | ········Built·using |
| 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 266 | ······</p> | 266 | ······</p> |
| 267 | <p>Copyright·©·1996-202 | 267 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 268 | ····</footer> | 268 | ····</footer> |
| 269 | ··</div> | 269 | ··</div> |
| 270 | </main> | 270 | </main> |
| 271 | </div> | 271 | </div> |
| 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 273 | ··<script> | 273 | ··<script> |
| 274 | ··let·initialized·=·false; | 274 | ··let·initialized·=·false; |
| Offset 488, 15 lines modified | Offset 488, 15 lines modified | ||
| 488 | ······<p·class="built-using"> | 488 | ······<p·class="built-using"> |
| 489 | ········Built·using | 489 | ········Built·using |
| 490 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 490 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 491 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 491 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 492 | ······</p> | 492 | ······</p> |
| 493 | <p>Copyright·©·1996-202 | 493 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 494 | ····</footer> | 494 | ····</footer> |
| 495 | ··</div> | 495 | ··</div> |
| 496 | </main> | 496 | </main> |
| 497 | </div> | 497 | </div> |
| 498 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 498 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 499 | ··<script> | 499 | ··<script> |
| 500 | ··let·initialized·=·false; | 500 | ··let·initialized·=·false; |
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | ······<p·class="built-using"> | 273 | ······<p·class="built-using"> |
| 274 | ········Built·using | 274 | ········Built·using |
| 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 277 | ······</p> | 277 | ······</p> |
| 278 | <p>Copyright·©·1996-202 | 278 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 279 | ····</footer> | 279 | ····</footer> |
| 280 | ··</div> | 280 | ··</div> |
| 281 | </main> | 281 | </main> |
| 282 | </div> | 282 | </div> |
| 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 284 | ··<script> | 284 | ··<script> |
| 285 | ··let·initialized·=·false; | 285 | ··let·initialized·=·false; |
| Offset 170, 67 lines modified | Offset 170, 67 lines modified | ||
| 170 | ···························} | 170 | ···························} |
| 171 | ···················} | 171 | ···················} |
| 172 | ···········} | 172 | ···········} |
| 173 | ···}</code></pre><p>Then·the·compact·version·without·indentation·and·with·short·keywords:</p><pre><code·class="text"> | 173 | ···}</code></pre><p>Then·the·compact·version·without·indentation·and·with·short·keywords:</p><pre><code·class="text"> |
| 174 | ···!/1·[124.124.124.222] | 174 | ···!/1·[124.124.124.222] |
| 175 | ···T=9998{C=-{SC=ROOT{SV{MT=RS,AD=55555,PF=ResGW/1,RE="901·Cold·Boot"}}}}</code></pre><p>And·the·programmers·view·of·the·same·message.·First·a·list·of·ActionRequest | 175 | ···T=9998{C=-{SC=ROOT{SV{MT=RS,AD=55555,PF=ResGW/1,RE="901·Cold·Boot"}}}}</code></pre><p>And·the·programmers·view·of·the·same·message.·First·a·list·of·ActionRequest |
| 176 | records·are·constructed·and·then·it·is·sent·with·one·of·the·send·functions·in | 176 | records·are·constructed·and·then·it·is·sent·with·one·of·the·send·functions·in |
| 177 | the·API:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">Prof</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeProfile'</span><span·class="p"·data-group-id=" | 177 | the·API:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">Prof</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeProfile'</span><span·class="p"·data-group-id="9788834779-1">{</span><span·class="ss">profileName</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"resgw"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">version</span><span·cl[·...·truncated·by·diffoscope;·len:·130,·SHA:·b7a0e3b07ec84ef28b787d8b9b79eaeda46296aae03beaca3bf6e47a0749c622·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 178 | ··</span><span·class="n">Parm</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeParm'</span><span·class="p"·data-group-id=" | 178 | ··</span><span·class="n">Parm</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeParm'</span><span·class="p"·data-group-id="9788834779-2">{</span><span·class="ss">serviceChangeMethod</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">restart</span><span·class="p">,</span><span·class="w"> |
| 179 | ······························</span><span·class="ss">serviceChangeAddress</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 179 | ······························</span><span·class="ss">serviceChangeAddress</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9788834779-3">{</span><span·class="ss">portNumber</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">55555</span><span·class="p"·data-group-id="9788834779-3">}</span><span·class="p">,</span><span·class="w"> |
| 180 | ······························</span><span·class="ss">serviceChangeReason</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"901·Cold·Boot"</span><span·class="p">,</span><span·class="w"> | 180 | ······························</span><span·class="ss">serviceChangeReason</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"901·Cold·Boot"</span><span·class="p">,</span><span·class="w"> |
| 181 | ······························</span><span·class="ss">serviceChangeProfile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Prof</span><span·class="p"·data-group-id=" | 181 | ······························</span><span·class="ss">serviceChangeProfile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Prof</span><span·class="p"·data-group-id="9788834779-2">}</span><span·class="p">,</span><span·class="w"> |
| 182 | ··</span><span·class="n">Req</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeRequest'</span><span·class="p"·data-group-id=" | 182 | ··</span><span·class="n">Req</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ServiceChangeRequest'</span><span·class="p"·data-group-id="9788834779-4">{</span><span·class="ss">terminationID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9788834779-5">[</span><span·class="o">?</span><span·class="ss">megaco_root_termination_id</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·eb689daac7f7462df143c40f9c9216e3c34e49494d72f5f35c29431c0160fa9c·...·]-5">]</span><span·class="p">,</span><span·class="w"> |
| 183 | ································</span><span·class="ss">serviceChangeParms</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Parm</span><span·class="p"·data-group-id=" | 183 | ································</span><span·class="ss">serviceChangeParms</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Parm</span><span·class="p"·data-group-id="9788834779-4">}</span><span·class="p">,</span><span·class="w"> |
| 184 | ··</span><span·class="n">Actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 184 | ··</span><span·class="n">Actions</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9788834779-6">[</span><span·class="o">#</span><span·class="ss">'ActionRequest'</span><span·class="p"·data-group-id="9788834779-7">{</span><span·class="ss">contextId</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">megaco_null_context_id</span><span·class="p">,</span><span·class="w"> |
| 185 | ······························</span><span·class="ss">commandRequests</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 185 | ······························</span><span·class="ss">commandRequests</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9788834779-8">{</span><span·class="ss">serviceChangeReq</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Req</span><span·class="p"·data-group-id="9788834779-8">}</span><span·class="p"·data-group-id="9788834779-7">}</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·005ff9e09350c256a3fa6a5b8c7877a89c9c19155a8ec0224bcc2900cbc06a77·...·]-6">]</span><span·class="p">,</span><span·class="w"> |
| 186 | ··</span><span·class="nc">megaco</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 186 | ··</span><span·class="nc">megaco</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9788834779-9">(</span><span·class="n">ConnHandle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Actions</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="9788834779-9">)[·...·truncated·by·diffoscope;·len:·216,·SHA:·2c5e4b73fd332ec72eba5e2a375d2555196cbdd47ec6257a492b9538c3fcdbbc·...·]0-1">{</span><span·class="ss">'MegacoMessage'</span><span·class="p">,</span><span·class="w"> |
| 187 | ···</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 187 | ···</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 188 | ···</span><span·class="p"·data-group-id=" | 188 | ···</span><span·class="p"·data-group-id="4053875510-2">{</span><span·class="ss">'Message'</span><span·class="p">,</span><span·class="w"> |
| 189 | ····</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 189 | ····</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 190 | ····</span><span·class="p"·data-group-id=" | 190 | ····</span><span·class="p"·data-group-id="4053875510-3">{</span><span·class="ss">ip4Address</span><span·class="p">,</span><span·class="p"·data-group-id="4053875510-4">{</span><span·class="ss">'IP4Address'</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·432,·SHA:·d20d978507dd101585bde21e03c3482d4356dde52825989578575cf9522e01ed·...·]0-3">}</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="p"·data-group-id="4053875510-6">{</span><span·class="ss">transactions</span><span·class="p">,</span><span·class="w"> |
| 192 | ·····</span><span·class="p"·data-group-id=" | 192 | ·····</span><span·class="p"·data-group-id="4053875510-7">[</span><span·class="w"> |
| 193 | ······</span><span·class="p"·data-group-id=" | 193 | ······</span><span·class="p"·data-group-id="4053875510-8">{</span><span·class="ss">transactionRequest</span><span·class="p">,</span><span·class="w"> |
| 194 | ·······</span><span·class="p"·data-group-id=" | 194 | ·······</span><span·class="p"·data-group-id="4053875510-9">{</span><span·class="ss">'TransactionRequest'</span><span·class="p">,</span><span·class="w"> |
| 195 | ·········</span><span·class="mi">9998</span><span·class="p">,</span><span·class="w"> | 195 | ·········</span><span·class="mi">9998</span><span·class="p">,</span><span·class="w"> |
| 196 | ·········</span><span·class="p"·data-group-id=" | 196 | ·········</span><span·class="p"·data-group-id="4053875510-10">[</span><span·class="p"·data-group-id="4053875510-11">{</span><span·class="ss">'ActionRequest'</span><span·class="p">,</span><span·class="w"> |
| 197 | ···········</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> | 197 | ···········</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 198 | ···········</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 198 | ···········</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 199 | ···········</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 199 | ···········</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 200 | ···········</span><span·class="p"·data-group-id=" | 200 | ···········</span><span·class="p"·data-group-id="4053875510-12">[</span><span·class="w"> |
| 201 | ············</span><span·class="p"·data-group-id=" | 201 | ············</span><span·class="p"·data-group-id="4053875510-13">{</span><span·class="ss">'CommandRequest'</span><span·class="p">,</span><span·class="w"> |
| 202 | ·············</span><span·class="p"·data-group-id=" | 202 | ·············</span><span·class="p"·data-group-id="4053875510-14">{</span><span·class="ss">serviceChangeReq</span><span·class="p">,</span><span·class="w"> |
| 203 | ··············</span><span·class="p"·data-group-id=" | 203 | ··············</span><span·class="p"·data-group-id="4053875510-15">{</span><span·class="ss">'ServiceChangeRequest'</span><span·class="p">,</span><span·class="w"> |
| 204 | ···············</span><span·class="p"·data-group-id=" | 204 | ···············</span><span·class="p"·data-group-id="4053875510-16">[</span><span·class="w"> |
| 205 | ················</span><span·class="p"·data-group-id=" | 205 | ················</span><span·class="p"·data-group-id="4053875510-17">{</span><span·class="ss">megaco_term_id</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4053875510-18">[</span><span·class="s">[·...·truncated·by·diffoscope;·len:·171,·SHA:·07e6cbff0fb71a550a74f6f095e223499d3a3f2f48d3cbb07431bf30cda172a7·...·]0-16">]</span><span·class="p">,</span><span·class="w"> |
| 206 | ················</span><span·class="p"·data-group-id=" | 206 | ················</span><span·class="p"·data-group-id="4053875510-19">{</span><span·class="ss">'ServiceChangeParm'</span><span·class="p">,</span><span·class="w"> |
| 207 | ·················</span><span·class="ss">restart</span><span·class="p">,</span><span·class="w"> | 207 | ·················</span><span·class="ss">restart</span><span·class="p">,</span><span·class="w"> |
| 208 | ·················</span><span·class="p"·data-group-id=" | 208 | ·················</span><span·class="p"·data-group-id="4053875510-20">{</span><span·class="ss">portNumber</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">55555</span><span·class="p"·data-group-id="4053875510-20">}</span><span·class="p">,</span><span·class="w"> |
| 209 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 209 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 210 | ·················</span><span·class="p"·data-group-id=" | 210 | ·················</span><span·class="p"·data-group-id="4053875510-21">{</span><span·class="ss">'ServiceChangeProfile'</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"resgw"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">version</span><span·class=[·...·truncated·by·diffoscope;·len:·125,·SHA:·6e44eb76dc6aadcb3559144bcb19abab7fa6fcd07a7dc979ea3cc899556b443d·...·]0-21">}</span><span·class="p">,</span><span·class="w"> |
| 211 | ·················</span><span·class="s">"901·MG·Cold·Boot"</span><span·class="p">,</span><span·class="w"> | 211 | ·················</span><span·class="s">"901·MG·Cold·Boot"</span><span·class="p">,</span><span·class="w"> |
| 212 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 212 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 213 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 213 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 214 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="w"> | 214 | ·················</span><span·class="ss">asn1_NOVALUE</span><span·class="w"> |
| 215 | ················</span><span·class="p"·data-group-id=" | 215 | ················</span><span·class="p"·data-group-id="4053875510-19">}</span><span·class="w"> |
| 216 | ··············</span><span·class="p"·data-group-id=" | 216 | ··············</span><span·class="p"·data-group-id="4053875510-15">}</span><span·class="w"> |
| 217 | ·············</span><span·class="p"·data-group-id=" | 217 | ·············</span><span·class="p"·data-group-id="4053875510-14">}</span><span·class="p">,</span><span·class="w"> |
| 218 | ·············</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> | 218 | ·············</span><span·class="ss">asn1_NOVALUE</span><span·class="p">,</span><span·class="w"> |
| 219 | ·············</span><span·class="ss">asn1_NOVALUE</span><span·class="w"> | 219 | ·············</span><span·class="ss">asn1_NOVALUE</span><span·class="w"> |
| 220 | ············</span><span·class="p"·data-group-id=" | 220 | ············</span><span·class="p"·data-group-id="4053875510-13">}</span><span·class="w"> |
| 221 | ···········</span><span·class="p"·data-group-id=" | 221 | ···········</span><span·class="p"·data-group-id="4053875510-12">]</span><span·class="w"> |
| 222 | ··········</span><span·class="p"·data-group-id=" | 222 | ··········</span><span·class="p"·data-group-id="4053875510-11">}</span><span·class="w"> |
| 223 | ·········</span><span·class="p"·data-group-id=" | 223 | ·········</span><span·class="p"·data-group-id="4053875510-10">]</span><span·class="w"> |
| 224 | ·······</span><span·class="p"·data-group-id=" | 224 | ·······</span><span·class="p"·data-group-id="4053875510-9">}</span><span·class="w"> |
| 225 | ······</span><span·class="p"·data-group-id=" | 225 | ······</span><span·class="p"·data-group-id="4053875510-8">}</span><span·class="w"> |
| 226 | ·····</span><span·class="p"·data-group-id=" | 226 | ·····</span><span·class="p"·data-group-id="4053875510-7">]</span><span·class="w"> |
| 227 | ····</span><span·class="p"·data-group-id=" | 227 | ····</span><span·class="p"·data-group-id="4053875510-6">}</span><span·class="w"> |
| 228 | ···</span><span·class="p"·data-group-id=" | 228 | ···</span><span·class="p"·data-group-id="4053875510-2">}</span><span·class="w"> |
| 229 | ··</span><span·class="p"·data-group-id=" | 229 | ··</span><span·class="p"·data-group-id="4053875510-1">}</span></code></pre><p>The·following·encoding·modules·are·provided:</p><ul><li>megaco_pretty_text_encoder·-·encodes·messages·into·pretty·text·format,·decodes |
| 230 | both·pretty·as·well·as·compact·text.</li><li>megaco_compact_text_encoder·-·encodes·messages·into·compact·text·format, | 230 | both·pretty·as·well·as·compact·text.</li><li>megaco_compact_text_encoder·-·encodes·messages·into·compact·text·format, |
| 231 | decodes·both·pretty·as·well·as·compact·text.</li><li>megaco_binary_encoder·-·encode/decode·ASN.1·BER·messages.·This·encoder | 231 | decodes·both·pretty·as·well·as·compact·text.</li><li>megaco_binary_encoder·-·encode/decode·ASN.1·BER·messages.·This·encoder |
| 232 | implements·the·fastest·of·the·BER·encoders/decoders.·Recommended·binary·codec.</li><li>megaco_ber_encoder·-·encode/decode·ASN.1·BER·messages.</li><li>megaco_per_encoder·-·encode/decode·ASN.1·PER·messages.·N.B.·that·this·format | 232 | implements·the·fastest·of·the·BER·encoders/decoders.·Recommended·binary·codec.</li><li>megaco_ber_encoder·-·encode/decode·ASN.1·BER·messages.</li><li>megaco_per_encoder·-·encode/decode·ASN.1·PER·messages.·N.B.·that·this·format |
| 233 | is·not·included·in·the·Megaco·standard.</li><li>megaco_erl_dist_encoder·-·encodes·messages·into·Erlangs·distribution·format. | 233 | is·not·included·in·the·Megaco·standard.</li><li>megaco_erl_dist_encoder·-·encodes·messages·into·Erlangs·distribution·format. |
| 234 | It·is·rather·verbose·but·encoding·and·decoding·is·blinding·fast.·N.B.·that | 234 | It·is·rather·verbose·but·encoding·and·decoding·is·blinding·fast.·N.B.·that |
| 235 | this·format·is·not·included·in·the·Megaco·standard.</li></ul><p><a·href=""·id="erl_dist_config"></a></p><h2·id="configuration-of-erlang-distribution-encoding-module"·class="section-heading"> | 235 | this·format·is·not·included·in·the·Megaco·standard.</li></ul><p><a·href=""·id="erl_dist_config"></a></p><h2·id="configuration-of-erlang-distribution-encoding-module"·class="section-heading"> |
| 236 | ··<a·href="#configuration-of-erlang-distribution-encoding-module"·class="hover-link"> | 236 | ··<a·href="#configuration-of-erlang-distribution-encoding-module"·class="hover-link"> |
| Offset 353, 15 lines modified | Offset 353, 15 lines modified | ||
| 353 | ······<p·class="built-using"> | 353 | ······<p·class="built-using"> |
| 354 | ········Built·using | 354 | ········Built·using |
| 355 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 355 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 356 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 356 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 357 | ······</p> | 357 | ······</p> |
| 358 | <p>Copyright·©·1996-202 | 358 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 359 | ····</footer> | 359 | ····</footer> |
| 360 | ··</div> | 360 | ··</div> |
| 361 | </main> | 361 | </main> |
| 362 | </div> | 362 | </div> |
| 363 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 363 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 364 | ··<script> | 364 | ··<script> |
| 365 | ··let·initialized·=·false; | 365 | ··let·initialized·=·false; |
| Offset 1340, 15 lines modified | Offset 1340, 15 lines modified | ||
| 1340 | ······<p·class="built-using"> | 1340 | ······<p·class="built-using"> |
| 1341 | ········Built·using | 1341 | ········Built·using |
| 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1344 | ······</p> | 1344 | ······</p> |
| 1345 | <p>Copyright·©·1996-202 | 1345 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1346 | ····</footer> | 1346 | ····</footer> |
| 1347 | ··</div> | 1347 | ··</div> |
| 1348 | </main> | 1348 | </main> |
| 1349 | </div> | 1349 | </div> |
| 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1351 | ··<script> | 1351 | ··<script> |
| 1352 | ··let·initialized·=·false; | 1352 | ··let·initialized·=·false; |
| Offset 155, 18 lines modified | Offset 155, 18 lines modified | ||
| 155 | synchronously·for·a·reply.</p><p>After·this·initial·service·change·message·the·connection·between·the·MG·and·MGC | 155 | synchronously·for·a·reply.</p><p>After·this·initial·service·change·message·the·connection·between·the·MG·and·MGC |
| 156 | is·fully·established·and·supervised.</p><p>Assuming·that·the·MGC·is·started·on·the·local·host,·four·different·MG's,·using | 156 | is·fully·established·and·supervised.</p><p>Assuming·that·the·MGC·is·started·on·the·local·host,·four·different·MG's,·using |
| 157 | text·over·TCP/IP,·binary·over·TCP/IP,·text·over·UDP/IP·and·binary·over·UDP/IP | 157 | text·over·TCP/IP,·binary·over·TCP/IP,·text·over·UDP/IP·and·binary·over·UDP/IP |
| 158 | may·be·started·on·the·same·Erlang·node·with:</p><pre><code·class="text">······cd·megaco/examples/simple | 158 | may·be·started·on·the·same·Erlang·node·with:</p><pre><code·class="text">······cd·megaco/examples/simple |
| 159 | ······erl·-pa·../../../megaco/ebin·-s·megaco_filter·-s·megaco | 159 | ······erl·-pa·../../../megaco/ebin·-s·megaco_filter·-s·megaco |
| 160 | ······megaco_simple_mg:start().</code></pre><p>or·simply·'gmake·mg'.</p><p>If·you·"only"·want·to·start·a·single·MG·which·tries·to·connect·an·MG·on·a·host | 160 | ······megaco_simple_mg:start().</code></pre><p>or·simply·'gmake·mg'.</p><p>If·you·"only"·want·to·start·a·single·MG·which·tries·to·connect·an·MG·on·a·host |
| 161 | named·"baidarka",·you·may·use·one·of·these·functions·(instead·of·the | 161 | named·"baidarka",·you·may·use·one·of·these·functions·(instead·of·the |
| 162 | megaco_simple_mg:start/0·above):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_tcp_text</span><span·class="p"·data-group-id=" | 162 | megaco_simple_mg:start/0·above):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_tcp_text</span><span·class="p"·data-group-id="2680735950-1">(</span><span·class="s">"baidarka"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680735950-2">[</span><span·class="p"·data-group-id="2680735950-2">]</span><span·class="p"·data-group-id="268073[·...·truncated·by·diffoscope;·len:·4,·SHA:·8ae4ab086c08b256951245a39d006360abcc5e8feb5ccf9cfb50aea4f011fcdd·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 163 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_tcp_binary</span><span·class="p"·data-group-id=" | 163 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_tcp_binary</span><span·class="p"·data-group-id="2680735950-3">(</span><span·class="s">"baidarka"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680735950-4">[</span><span·class="p"·data-group-id="2680735950-4">]</span><span·class="p"·data-group-id="268073[·...·truncated·by·diffoscope;·len:·4,·SHA:·8ae4ab086c08b256951245a39d006360abcc5e8feb5ccf9cfb50aea4f011fcdd·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 164 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_udp_text</span><span·class="p"·data-group-id=" | 164 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_udp_text</span><span·class="p"·data-group-id="2680735950-5">(</span><span·class="s">"baidarka"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680735950-6">[</span><span·class="p"·data-group-id="2680735950-6">]</span><span·class="p"·data-group-id="268073[·...·truncated·by·diffoscope;·len:·4,·SHA:·8ae4ab086c08b256951245a39d006360abcc5e8feb5ccf9cfb50aea4f011fcdd·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 165 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_udp_binary</span><span·class="p"·data-group-id=" | 165 | ······</span><span·class="nc">megaco_simple_mg</span><span·class="p">:</span><span·class="nf">start_udp_binary</span><span·class="p"·data-group-id="2680735950-7">(</span><span·class="s">"baidarka"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2680735950-8">[</span><span·class="p"·data-group-id="2680735950-8">]</span><span·class="p"·data-group-id="268073[·...·truncated·by·diffoscope;·len:·4,·SHA:·8ae4ab086c08b256951245a39d006360abcc5e8feb5ccf9cfb50aea4f011fcdd·...·]-7">)</span><span·class="p">.</span></code></pre><p>The·-s·megaco_filter·option·to·erl·implies,·the·event·tracing·mechanism·to·be |
| 166 | enabled·and·an·interactive·sequence·chart·tool·to·be·started.·This·may·be·quite | 166 | enabled·and·an·interactive·sequence·chart·tool·to·be·started.·This·may·be·quite |
| 167 | useful·in·order·to·visualize·how·your·MG·interacts·with·the·Megaco/H.248 | 167 | useful·in·order·to·visualize·how·your·MG·interacts·with·the·Megaco/H.248 |
| 168 | protocol·stack.</p><p>The·event·traces·may·alternatively·be·directed·to·a·file·for·later·analyze.·By | 168 | protocol·stack.</p><p>The·event·traces·may·alternatively·be·directed·to·a·file·for·later·analyze.·By |
| 169 | default·the·event·tracing·is·disabled,·but·it·may·dynamically·be·enabled·without | 169 | default·the·event·tracing·is·disabled,·but·it·may·dynamically·be·enabled·without |
| 170 | any·need·for·re-compilation·of·the·code.</p> | 170 | any·need·for·re-compilation·of·the·code.</p> |
| 171 | </div> | 171 | </div> |
| Offset 214, 15 lines modified | Offset 214, 15 lines modified | ||
| 214 | ······<p·class="built-using"> | 214 | ······<p·class="built-using"> |
| 215 | ········Built·using | 215 | ········Built·using |
| 216 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 216 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 217 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 217 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 218 | ······</p> | 218 | ······</p> |
| 219 | <p>Copyright·©·1996-202 | 219 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 220 | ····</footer> | 220 | ····</footer> |
| 221 | ··</div> | 221 | ··</div> |
| 222 | </main> | 222 | </main> |
| 223 | </div> | 223 | </div> |
| 224 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 224 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 225 | ··<script> | 225 | ··<script> |
| 226 | ··let·initialized·=·false; | 226 | ··let·initialized·=·false; |
| Offset 435, 15 lines modified | Offset 435, 15 lines modified | ||
| 435 | ······<p·class="built-using"> | 435 | ······<p·class="built-using"> |
| 436 | ········Built·using | 436 | ········Built·using |
| 437 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 437 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 438 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 438 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 439 | ······</p> | 439 | ······</p> |
| 440 | <p>Copyright·©·1996-202 | 440 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 441 | ····</footer> | 441 | ····</footer> |
| 442 | ··</div> | 442 | ··</div> |
| 443 | </main> | 443 | </main> |
| 444 | </div> | 444 | </div> |
| 445 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 445 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 446 | ··<script> | 446 | ··<script> |
| 447 | ··let·initialized·=·false; | 447 | ··let·initialized·=·false; |
| Offset 210, 15 lines modified | Offset 210, 15 lines modified | ||
| 210 | ······<p·class="built-using"> | 210 | ······<p·class="built-using"> |
| 211 | ········Built·using | 211 | ········Built·using |
| 212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 214 | ······</p> | 214 | ······</p> |
| 215 | <p>Copyright·©·1996-202 | 215 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 216 | ····</footer> | 216 | ····</footer> |
| 217 | ··</div> | 217 | ··</div> |
| 218 | </main> | 218 | </main> |
| 219 | </div> | 219 | </div> |
| 220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 221 | ··<script> | 221 | ··<script> |
| 222 | ··let·initialized·=·false; | 222 | ··let·initialized·=·false; |
| Offset 202, 15 lines modified | Offset 202, 15 lines modified | ||
| 202 | ······<p·class="built-using"> | 202 | ······<p·class="built-using"> |
| 203 | ········Built·using | 203 | ········Built·using |
| 204 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 204 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 205 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 205 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 206 | ······</p> | 206 | ······</p> |
| 207 | <p>Copyright·©·1996-202 | 207 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 208 | ····</footer> | 208 | ····</footer> |
| 209 | ··</div> | 209 | ··</div> |
| 210 | </main> | 210 | </main> |
| 211 | </div> | 211 | </div> |
| 212 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 212 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 213 | ··<script> | 213 | ··<script> |
| 214 | ··let·initialized·=·false; | 214 | ··let·initialized·=·false; |
| Offset 253, 15 lines modified | Offset 253, 15 lines modified | ||
| 253 | ······<p·class="built-using"> | 253 | ······<p·class="built-using"> |
| 254 | ········Built·using | 254 | ········Built·using |
| 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 257 | ······</p> | 257 | ······</p> |
| 258 | <p>Copyright·©·1996-202 | 258 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 259 | ····</footer> | 259 | ····</footer> |
| 260 | ··</div> | 260 | ··</div> |
| 261 | </main> | 261 | </main> |
| 262 | </div> | 262 | </div> |
| 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 264 | ··<script> | 264 | ··<script> |
| 265 | ··let·initialized·=·false; | 265 | ··let·initialized·=·false; |
| Offset 331, 15 lines modified | Offset 331, 15 lines modified | ||
| 331 | ······<p·class="built-using"> | 331 | ······<p·class="built-using"> |
| 332 | ········Built·using | 332 | ········Built·using |
| 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 335 | ······</p> | 335 | ······</p> |
| 336 | <p>Copyright·©·1996-202 | 336 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 337 | ····</footer> | 337 | ····</footer> |
| 338 | ··</div> | 338 | ··</div> |
| 339 | </main> | 339 | </main> |
| 340 | </div> | 340 | </div> |
| 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 342 | ··<script> | 342 | ··<script> |
| 343 | ··let·initialized·=·false; | 343 | ··let·initialized·=·false; |
| Offset 1184, 15 lines modified | Offset 1184, 15 lines modified | ||
| 1184 | ······<p·class="built-using"> | 1184 | ······<p·class="built-using"> |
| 1185 | ········Built·using | 1185 | ········Built·using |
| 1186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1186 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1187 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1188 | ······</p> | 1188 | ······</p> |
| 1189 | <p>Copyright·©·1996-202 | 1189 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1190 | ····</footer> | 1190 | ····</footer> |
| 1191 | ··</div> | 1191 | ··</div> |
| 1192 | </main> | 1192 | </main> |
| 1193 | </div> | 1193 | </div> |
| 1194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1194 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1195 | ··<script> | 1195 | ··<script> |
| 1196 | ··let·initialized·=·false; | 1196 | ··let·initialized·=·false; |
| Offset 825, 15 lines modified | Offset 825, 15 lines modified | ||
| 825 | ······<p·class="built-using"> | 825 | ······<p·class="built-using"> |
| 826 | ········Built·using | 826 | ········Built·using |
| 827 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 827 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 828 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 828 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 829 | ······</p> | 829 | ······</p> |
| 830 | <p>Copyright·©·1996-202 | 830 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 831 | ····</footer> | 831 | ····</footer> |
| 832 | ··</div> | 832 | ··</div> |
| 833 | </main> | 833 | </main> |
| 834 | </div> | 834 | </div> |
| 835 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 835 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 836 | ··<script> | 836 | ··<script> |
| 837 | ··let·initialized·=·false; | 837 | ··let·initialized·=·false; |
| Offset 324, 15 lines modified | Offset 324, 15 lines modified | ||
| 324 | ······<p·class="built-using"> | 324 | ······<p·class="built-using"> |
| 325 | ········Built·using | 325 | ········Built·using |
| 326 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 326 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 327 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 327 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 328 | ······</p> | 328 | ······</p> |
| 329 | <p>Copyright·©·1996-202 | 329 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 330 | ····</footer> | 330 | ····</footer> |
| 331 | ··</div> | 331 | ··</div> |
| 332 | </main> | 332 | </main> |
| 333 | </div> | 333 | </div> |
| 334 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 334 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 335 | ··<script> | 335 | ··<script> |
| 336 | ··let·initialized·=·false; | 336 | ··let·initialized·=·false; |
| Offset 187, 15 lines modified | Offset 187, 15 lines modified | ||
| 187 | ······<p·class="built-using"> | 187 | ······<p·class="built-using"> |
| 188 | ········Built·using | 188 | ········Built·using |
| 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 191 | ······</p> | 191 | ······</p> |
| 192 | <p>Copyright·©·1996-202 | 192 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 193 | ····</footer> | 193 | ····</footer> |
| 194 | ··</div> | 194 | ··</div> |
| 195 | </main> | 195 | </main> |
| 196 | </div> | 196 | </div> |
| 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 198 | ··<script> | 198 | ··<script> |
| 199 | ··let·initialized·=·false; | 199 | ··let·initialized·=·false; |
| Offset 853, 15 lines modified | Offset 853, 15 lines modified | ||
| 853 | ······<p·class="built-using"> | 853 | ······<p·class="built-using"> |
| 854 | ········Built·using | 854 | ········Built·using |
| 855 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 855 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 856 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 856 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 857 | ······</p> | 857 | ······</p> |
| 858 | <p>Copyright·©·1996-202 | 858 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 859 | ····</footer> | 859 | ····</footer> |
| 860 | ··</div> | 860 | ··</div> |
| 861 | </main> | 861 | </main> |
| 862 | </div> | 862 | </div> |
| 863 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 863 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 864 | ··<script> | 864 | ··<script> |
| 865 | ··let·initialized·=·false; | 865 | ··let·initialized·=·false; |
| Offset 127, 31 lines modified | Offset 127, 31 lines modified | ||
| 127 | ··</h1> | 127 | ··</h1> |
| 128 | ····<section·id="moduledoc"> | 128 | ····<section·id="moduledoc"> |
| 129 | <p>Callback·module·for·users·of·the·Megaco·application</p><p>This·module·defines·the·callback·behaviour·of·Megaco·users.·A·megaco_user | 129 | <p>Callback·module·for·users·of·the·Megaco·application</p><p>This·module·defines·the·callback·behaviour·of·Megaco·users.·A·megaco_user |
| 130 | compliant·callback·module·must·export·the·following·functions:</p><ul><li><a·href="#c:handle_connect/3">handle_connect/2,3</a></li><li><a·href="#c:handle_disconnect/3">handle_disconnect/3</a></li><li><a·href="#c:handle_syntax_error/4">handle_syntax_error/3,4</a></li><li><a·href="#c:handle_message_error/4">handle_message_error/3,4</a></li><li><a·href="#c:handle_trans_request/4">handle_trans_request/3,4</a></li><li><a·href="#c:handle_trans_long_request/4">handle_trans_long_request/3,4</a></li><li><a·href="#c:handle_trans_reply/5">handle_trans_reply/4,5</a></li><li><a·href="#c:handle_trans_ack/5">handle_trans_ack/4,5</a></li><li><a·href="#c:handle_unexpected_trans/4">handle_unexpected_trans/3,4</a></li><li><a·href="#c:handle_trans_request_abort/5">handle_trans_request_abort/4,5</a></li><li><a·href="#c:handle_segment_reply/6">handle_segment_reply/5,6</a></li></ul><p>The·semantics·of·them·and·their·exact·signatures·are·explained·below.</p><p>The·<code·class="inline">user_args</code>·configuration·parameter·which·may·be·used·to·extend·the·argument | 130 | compliant·callback·module·must·export·the·following·functions:</p><ul><li><a·href="#c:handle_connect/3">handle_connect/2,3</a></li><li><a·href="#c:handle_disconnect/3">handle_disconnect/3</a></li><li><a·href="#c:handle_syntax_error/4">handle_syntax_error/3,4</a></li><li><a·href="#c:handle_message_error/4">handle_message_error/3,4</a></li><li><a·href="#c:handle_trans_request/4">handle_trans_request/3,4</a></li><li><a·href="#c:handle_trans_long_request/4">handle_trans_long_request/3,4</a></li><li><a·href="#c:handle_trans_reply/5">handle_trans_reply/4,5</a></li><li><a·href="#c:handle_trans_ack/5">handle_trans_ack/4,5</a></li><li><a·href="#c:handle_unexpected_trans/4">handle_unexpected_trans/3,4</a></li><li><a·href="#c:handle_trans_request_abort/5">handle_trans_request_abort/4,5</a></li><li><a·href="#c:handle_segment_reply/6">handle_segment_reply/5,6</a></li></ul><p>The·semantics·of·them·and·their·exact·signatures·are·explained·below.</p><p>The·<code·class="inline">user_args</code>·configuration·parameter·which·may·be·used·to·extend·the·argument |
| 131 | list·of·the·callback·functions.·For·example,·the·handle_connect·function·takes | 131 | list·of·the·callback·functions.·For·example,·the·handle_connect·function·takes |
| 132 | by·default·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_connect</span><span·class="p"·data-group-id=" | 132 | by·default·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_connect</span><span·class="p"·data-group-id="3972070170-1">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Version</span><span·class="p"·data-group-id="3972070170-1">)</span></code></pre><p>but·if·the·<code·class="inline">user_args</code>·parameter·is·set·to·a·longer·list,·such·as |
| 133 | <code·class="inline">[SomePid,SomeTableRef]</code>,·the·callback·function·is·expected·to·have·these·(in | 133 | <code·class="inline">[SomePid,SomeTableRef]</code>,·the·callback·function·is·expected·to·have·these·(in |
| 134 | this·case·two)·extra·arguments·last·in·the·argument·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_connect</span><span·class="p"·data-group-id="9 | 134 | this·case·two)·extra·arguments·last·in·the·argument·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">handle_connect</span><span·class="p"·data-group-id="9896464255-1">(</span><span·class="n">Handle</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Version</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SomePid</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·74,·SHA:·dfc4c77985e87751989cf1690fa8d9648b894fe436a6a96550f9da474f2791a3·...·]-1">)</span></code></pre><p><a·href=""·id="extra_argument"></a></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Must·of·the·functions·below·has·an·optional·<code·class="inline">Extra</code>·argument·(e.g. |
| 135 | <a·href="#c:handle_unexpected_trans/4">handle_unexpected_trans/4</a>).·The·functions | 135 | <a·href="#c:handle_unexpected_trans/4">handle_unexpected_trans/4</a>).·The·functions |
| 136 | which·takes·this·argument·will·be·called·if·and·only·if·one·of·the·functions | 136 | which·takes·this·argument·will·be·called·if·and·only·if·one·of·the·functions |
| 137 | <a·href="megaco.html#receive_message/5"><code·class="inline">receive_message/5</code></a>·or | 137 | <a·href="megaco.html#receive_message/5"><code·class="inline">receive_message/5</code></a>·or |
| 138 | <a·href="megaco.html#process_received_message/5"><code·class="inline">process_received_message/5</code></a>·was·called | 138 | <a·href="megaco.html#process_received_message/5"><code·class="inline">process_received_message/5</code></a>·was·called |
| 139 | with·the·<code·class="inline">Extra</code>·argument·different·than·<code·class="inline">ignore_extra</code>.</p></section><h2·id="module-data-types"·class="section-heading"> | 139 | with·the·<code·class="inline">Extra</code>·argument·different·than·<code·class="inline">ignore_extra</code>.</p></section><h2·id="module-data-types"·class="section-heading"> |
| 140 | ··<a·href="#module-data-types"·class="hover-link"> | 140 | ··<a·href="#module-data-types"·class="hover-link"> |
| 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 142 | ··</a> | 142 | ··</a> |
| 143 | ··<span·class="text">DATA·TYPES</span> | 143 | ··<span·class="text">DATA·TYPES</span> |
| 144 | </h2> | 144 | </h2> |
| 145 | <pre><code·class="makeup·erlang"·translate="no"><span·class="nf">action_request</span><span·class="p"·data-group-id=" | 145 | <pre><code·class="makeup·erlang"·translate="no"><span·class="nf">action_request</span><span·class="p"·data-group-id="8619896670-1">(</span><span·class="p"·data-group-id="8619896670-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ActionRequest'</span><span·class="p"·data-group-id="8619896[·...·truncated·by·diffoscope;·len:·56,·SHA:·f8f1189e7b5ef3d22a9c37d3c824710871e4d278be5426e160248bffe51e49ae·...·]-2">}</span><span·class="w"> |
| 146 | </span><span·class="nf">action_reply</span><span·class="p"·data-group-id=" | 146 | </span><span·class="nf">action_reply</span><span·class="p"·data-group-id="8619896670-3">(</span><span·class="p"·data-group-id="8619896670-3">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ActionReply'</span><span·class="p"·data-group-id="861989667[·...·truncated·by·diffoscope;·len:·54,·SHA:·57be1f4a3ffaab0dcadc6ff5a5d428c4d96eb07bbcfc9ecc1b040a3e3756b761·...·]-4">}</span><span·class="w"> |
| 147 | </span><span·class="nf">error_desc</span><span·class="p"·data-group-id=" | 147 | </span><span·class="nf">error_desc</span><span·class="p"·data-group-id="8619896670-5">(</span><span·class="p"·data-group-id="8619896670-5">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'ErrorDescriptor'</span><span·class="p"·data-group-id="86198[·...·truncated·by·diffoscope;·len:·58,·SHA:·3122bad1e13d168105bb11964f6a2a7b9b605ad730c45e876ebeb4926ee72994·...·]-6">}</span><span·class="w"> |
| 148 | </span><span·class="nf">segment_no</span><span·class="p"·data-group-id=" | 148 | </span><span·class="nf">segment_no</span><span·class="p"·data-group-id="8619896670-7">(</span><span·class="p"·data-group-id="8619896670-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="8619896670-8">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·462,·SHA:·28aad8761034faeaa5f5f818fddc434662164a54e694659c21beb6f35f3a1881·...·]-2">}</span></code></pre><p>The·record·initially·returned·by·<code·class="inline">megaco:connect/4,5</code>.·It·identifies·a·"virtual" |
| 149 | connection·and·may·be·reused·after·a·reconnect·(disconnect·+·connect).</p><pre><code·class="text">protocol_version()·=·integer()</code></pre><p>Is·the·actual·protocol·version.·In·most·cases·the·protocol·version·is·retrieved | 149 | connection·and·may·be·reused·after·a·reconnect·(disconnect·+·connect).</p><pre><code·class="text">protocol_version()·=·integer()</code></pre><p>Is·the·actual·protocol·version.·In·most·cases·the·protocol·version·is·retrieved |
| 150 | from·the·processed·message,·but·there·are·exceptions:</p><ul><li>When·<code·class="inline">handle_connect/2,3</code>·is·triggered·by·an·explicit·call·to | 150 | from·the·processed·message,·but·there·are·exceptions:</p><ul><li>When·<code·class="inline">handle_connect/2,3</code>·is·triggered·by·an·explicit·call·to |
| 151 | <code·class="inline">megaco:connect/4,5</code>.</li><li><a·href="#c:handle_disconnect/3"><code·class="inline">handle_disconnect/3</code></a></li><li><a·href="#c:handle_syntax_error/3"><code·class="inline">handle_syntax_error/3</code></a></li></ul><p>In·these·cases,·the·ProtocolVersion·default·version·is·obtained·from·the·static | 151 | <code·class="inline">megaco:connect/4,5</code>.</li><li><a·href="#c:handle_disconnect/3"><code·class="inline">handle_disconnect/3</code></a></li><li><a·href="#c:handle_syntax_error/3"><code·class="inline">handle_syntax_error/3</code></a></li></ul><p>In·these·cases,·the·ProtocolVersion·default·version·is·obtained·from·the·static |
| 152 | connection·configuration:</p><ul><li><code·class="inline">megaco:conn_info(ConnHandle,·protocol_version)</code>.</li></ul> | 152 | connection·configuration:</p><ul><li><code·class="inline">megaco:conn_info(ConnHandle,·protocol_version)</code>.</li></ul> |
| 153 | ····</section> | 153 | ····</section> |
| 154 | </div> | 154 | </div> |
| Offset 1503, 15 lines modified | Offset 1503, 15 lines modified | ||
| 1503 | ······<p·class="built-using"> | 1503 | ······<p·class="built-using"> |
| 1504 | ········Built·using | 1504 | ········Built·using |
| 1505 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1505 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1506 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1506 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1507 | ······</p> | 1507 | ······</p> |
| 1508 | <p>Copyright·©·1996-202 | 1508 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1509 | ····</footer> | 1509 | ····</footer> |
| 1510 | ··</div> | 1510 | ··</div> |
| 1511 | </main> | 1511 | </main> |
| 1512 | </div> | 1512 | </div> |
| 1513 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1513 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1514 | ··<script> | 1514 | ··<script> |
| 1515 | ··let·initialized·=·false; | 1515 | ··let·initialized·=·false; |
| Offset 1016, 15 lines modified | Offset 1016, 15 lines modified | ||
| 1016 | ······<p·class="built-using"> | 1016 | ······<p·class="built-using"> |
| 1017 | ········Built·using | 1017 | ········Built·using |
| 1018 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1018 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1019 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1019 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1020 | ······</p> | 1020 | ······</p> |
| 1021 | <p>Copyright·©·1996-202 | 1021 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1022 | ····</footer> | 1022 | ····</footer> |
| 1023 | ··</div> | 1023 | ··</div> |
| 1024 | </main> | 1024 | </main> |
| 1025 | </div> | 1025 | </div> |
| 1026 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1026 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1027 | ··<script> | 1027 | ··<script> |
| 1028 | ··let·initialized·=·false; | 1028 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 199, 15 lines modified | Offset 199, 15 lines modified | ||
| 199 | ······<p·class="built-using"> | 199 | ······<p·class="built-using"> |
| 200 | ········Built·using | 200 | ········Built·using |
| 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 201 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 202 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 203 | ······</p> | 203 | ······</p> |
| 204 | <p>Copyright·©·1996-202 | 204 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 205 | ····</footer> | 205 | ····</footer> |
| 206 | ··</div> | 206 | ··</div> |
| 207 | </main> | 207 | </main> |
| 208 | </div> | 208 | </div> |
| 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 209 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 210 | ··<script> | 210 | ··<script> |
| 211 | ··let·initialized·=·false; | 211 | ··let·initialized·=·false; |
| Offset 162, 19 lines modified | Offset 162, 19 lines modified | ||
| 162 | <code·class="inline">true</code>,·a·majority·of·the·table·replicas·must·be·available·for·an·update·to | 162 | <code·class="inline">true</code>,·a·majority·of·the·table·replicas·must·be·available·for·an·update·to |
| 163 | succeed.·Majority·checking·can·be·enabled·on·tables·with·mission-critical | 163 | succeed.·Majority·checking·can·be·enabled·on·tables·with·mission-critical |
| 164 | data,·where·it·is·vital·to·avoid·inconsistencies·because·of·network·splits.</p></li><li><p><code·class="inline">snmp</code>.·Each·(set-based)·Mnesia·table·can·be·automatically·turned·into·a | 164 | data,·where·it·is·vital·to·avoid·inconsistencies·because·of·network·splits.</p></li><li><p><code·class="inline">snmp</code>.·Each·(set-based)·Mnesia·table·can·be·automatically·turned·into·a |
| 165 | Simple·Network·Management·Protocol·(SNMP)·ordered·table·as·well.·This·property | 165 | Simple·Network·Management·Protocol·(SNMP)·ordered·table·as·well.·This·property |
| 166 | specifies·the·types·of·the·SNMP·keys.</p></li><li><p><code·class="inline">attributes</code>.·The·names·of·the·attributes·for·the·records·that·are·inserted·in | 166 | specifies·the·types·of·the·SNMP·keys.</p></li><li><p><code·class="inline">attributes</code>.·The·names·of·the·attributes·for·the·records·that·are·inserted·in |
| 167 | the·table.</p></li></ul><p>For·information·about·the·complete·set·of·table·properties·and·their·details, | 167 | the·table.</p></li></ul><p>For·information·about·the·complete·set·of·table·properties·and·their·details, |
| 168 | see·<a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>.</p><p>This·Reference·Manual·uses·a·table·of·persons·to·illustrate·various·examples. | 168 | see·<a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>.</p><p>This·Reference·Manual·uses·a·table·of·persons·to·illustrate·various·examples. |
| 169 | The·following·record·definition·is·assumed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="3 | 169 | The·following·record·definition·is·assumed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="3802362945-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3802362945-2">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> |
| 170 | ·················</span><span·class="ss">age</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> | 170 | ·················</span><span·class="ss">age</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 171 | ·················</span><span·class="ss">address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">unknown</span><span·class="p">,</span><span·class="w"> | 171 | ·················</span><span·class="ss">address</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">unknown</span><span·class="p">,</span><span·class="w"> |
| 172 | ·················</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> | 172 | ·················</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 173 | ·················</span><span·class="ss">children</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 173 | ·················</span><span·class="ss">children</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3802362945-3">[</span><span·class="p"·data-group-id="3802362945-3">]</span><span·class="p"·data-group-id="3802362945-2">}</span><span·class="p"·data-group-id="3802362945-1">)</span><span·class="p">,</span></code></pre><p>The·first·record·attribute·is·the·primary·key,·or·key·for·short.</p><p>The·function·descriptions·are·sorted·in·alphabetical·order.·It·is·recommended·to |
| 174 | start·to·read·about·<a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>,·<a·href="#lock/2"><code·class="inline">mnesia:lock/2</code></a>,·and | 174 | start·to·read·about·<a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>,·<a·href="#lock/2"><code·class="inline">mnesia:lock/2</code></a>,·and |
| 175 | ·<a·href="#activity/4"><code·class="inline">mnesia:activity/4</code></a>·before·you·continue·and·learn·about·the·rest.</p><p>Writing·or·deleting·in·transaction-context·creates·a·local·copy·of·each·modified | 175 | ·<a·href="#activity/4"><code·class="inline">mnesia:activity/4</code></a>·before·you·continue·and·learn·about·the·rest.</p><p>Writing·or·deleting·in·transaction-context·creates·a·local·copy·of·each·modified |
| 176 | record·during·the·transaction.·During·iteration,·that·is,·<a·href="#foldl/4"><code·class="inline">mnesia:foldl/4</code></a>, | 176 | record·during·the·transaction.·During·iteration,·that·is,·<a·href="#foldl/4"><code·class="inline">mnesia:foldl/4</code></a>, |
| 177 | <a·href="#foldr/4"><code·class="inline">mnesia:foldr/4</code></a>,·<a·href="#next/2"><code·class="inline">mnesia:next/2</code></a>,·<a·href="#prev/2"><code·class="inline">mnesia:prev/2</code></a>,·and·<a·href="#snmp_get_next_index/2"><code·class="inline">mnesia:snmp_get_next_index/2</code></a>,·Mnesia | 177 | <a·href="#foldr/4"><code·class="inline">mnesia:foldr/4</code></a>,·<a·href="#next/2"><code·class="inline">mnesia:next/2</code></a>,·<a·href="#prev/2"><code·class="inline">mnesia:prev/2</code></a>,·and·<a·href="#snmp_get_next_index/2"><code·class="inline">mnesia:snmp_get_next_index/2</code></a>,·Mnesia |
| 178 | compensates·for·every·written·or·deleted·record,·which·can·reduce·the | 178 | compensates·for·every·written·or·deleted·record,·which·can·reduce·the |
| 179 | performance.</p><p>If·possible,·avoid·writing·or·deleting·records·in·the·same·transaction·before | 179 | performance.</p><p>If·possible,·avoid·writing·or·deleting·records·in·the·same·transaction·before |
| 180 | iterating·over·the·table.</p><h2·id="module-configuration-parameters"·class="section-heading"> | 180 | iterating·over·the·table.</p><h2·id="module-configuration-parameters"·class="section-heading"> |
| Offset 2793, 15 lines modified | Offset 2793, 15 lines modified | ||
| 2793 | ······<div·class="specs"> | 2793 | ······<div·class="specs"> |
| 2794 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·change_table_copy_type(Tab·::·<a·href="#t:table/0">table</a>(),·Node·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:node/0">node</a>(),·To·::·<a·href="#t:storage_type/0">storage_type</a>())·->·<a·href="#t:t_result/1">t_result</a>(ok).</pre> | 2794 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·change_table_copy_type(Tab·::·<a·href="#t:table/0">table</a>(),·Node·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:node/0">node</a>(),·To·::·<a·href="#t:storage_type/0">storage_type</a>())·->·<a·href="#t:t_result/1">t_result</a>(ok).</pre> |
| 2795 | ······</div> | 2795 | ······</div> |
| 2796 | <p>Change·the·storage·type·of·a·table.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_copy_type</span><span·class="p"·data-group-id=" | 2796 | <p>Change·the·storage·type·of·a·table.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_copy_type</span><span·class="p"·data-group-id="3327383382-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="3327383382-2">(</span><span·class="p"·data-group-id="3327383382-2">)</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·102,·SHA:·a9e0916eaafcb21e4453750dc2062248f95b9a7cfce4d023a2957fb5e5cdb349·...·]-1">)</span></code></pre><p>Transforms·the·<code·class="inline">person</code>·table·from·a·RAM·table·into·a·disc-based·table·at |
| 2797 | <code·class="inline">Node</code>.</p><p>This·function·can·also·be·used·to·change·the·storage·type·of·the·table·named | 2797 | <code·class="inline">Node</code>.</p><p>This·function·can·also·be·used·to·change·the·storage·type·of·the·table·named |
| 2798 | <code·class="inline">schema</code>.·The·schema·table·can·only·have·<code·class="inline">ram_copies</code>·or·<code·class="inline">disc_copies</code>·as·the | 2798 | <code·class="inline">schema</code>.·The·schema·table·can·only·have·<code·class="inline">ram_copies</code>·or·<code·class="inline">disc_copies</code>·as·the |
| 2799 | storage·type.·If·the·storage·type·of·the·schema·is·<code·class="inline">ram_copies</code>,·no·other·table | 2799 | storage·type.·If·the·storage·type·of·the·schema·is·<code·class="inline">ram_copies</code>,·no·other·table |
| 2800 | can·be·disc-resident·on·that·node.</p> | 2800 | can·be·disc-resident·on·that·node.</p> |
| 2801 | ··</section> | 2801 | ··</section> |
| 2802 | </section> | 2802 | </section> |
| 2803 | <section·class="detail"·id="change_table_frag/2"> | 2803 | <section·class="detail"·id="change_table_frag/2"> |
| Offset 3032, 30 lines modified | Offset 3032, 30 lines modified | ||
| 3032 | Therefore·applications·that·use·SNMP·to·manipulate·and·control·the·system·can | 3032 | Therefore·applications·that·use·SNMP·to·manipulate·and·control·the·system·can |
| 3033 | be·designed·easily,·since·Mnesia·provides·a·direct·mapping·between·the·logical | 3033 | be·designed·easily,·since·Mnesia·provides·a·direct·mapping·between·the·logical |
| 3034 | tables·that·make·up·an·SNMP·control·application·and·the·physical·data·that | 3034 | tables·that·make·up·an·SNMP·control·application·and·the·physical·data·that |
| 3035 | makes·up·a·Mnesia·table.</p></li><li><p><code·class="inline">{storage_properties,·[{Backend,·Properties}]</code>·forwards·more·properties·to·the | 3035 | makes·up·a·Mnesia·table.</p></li><li><p><code·class="inline">{storage_properties,·[{Backend,·Properties}]</code>·forwards·more·properties·to·the |
| 3036 | back·end·storage.·<code·class="inline">Backend</code>·can·currently·be·<code·class="inline">ets</code>·or·<code·class="inline">dets</code>.·<code·class="inline">Properties</code>·is | 3036 | back·end·storage.·<code·class="inline">Backend</code>·can·currently·be·<code·class="inline">ets</code>·or·<code·class="inline">dets</code>.·<code·class="inline">Properties</code>·is |
| 3037 | a·list·of·options·sent·to·the·back·end·storage·during·table·creation. | 3037 | a·list·of·options·sent·to·the·back·end·storage·during·table·creation. |
| 3038 | <code·class="inline">Properties</code>·cannot·contain·properties·already·used·by·Mnesia,·such·as·<code·class="inline">type</code> | 3038 | <code·class="inline">Properties</code>·cannot·contain·properties·already·used·by·Mnesia,·such·as·<code·class="inline">type</code> |
| 3039 | or·<code·class="inline">named_table</code>.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 3039 | or·<code·class="inline">named_table</code>.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="0547150013-1">(</span><span·class="ss">table</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0547150013-2">[</span><span·class="p"·data-group-id="0547150013-3">{</span><span·class="ss">ram_copies</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·689,·SHA:·7009f2214af580fb538fa142f413576919c7a5dc80298ba700567426675fe873·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 3040 | ·······</span><span·class="p"·data-group-id=" | 3040 | ·······</span><span·class="p"·data-group-id="0547150013-8">{</span><span·class="ss">storage_properties</span><span·class="p">,</span><span·class="w"> |
| 3041 | ········</span><span·class="p"·data-group-id=" | 3041 | ········</span><span·class="p"·data-group-id="0547150013-9">[</span><span·class="p"·data-group-id="0547150013-10">{</span><span·class="ss">ets</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0547150013-11">[</span><span·class="ss">compressed</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·872,·SHA:·c85a7f95892bf19df8bb5178d35344377929addd8c70b008f5abe3b72d91ed70·...·]-1">)</span></code></pre></li><li><p><code·class="inline">{type,·Type}</code>,·where·<code·class="inline">Type</code>·must·be·either·of·the·atoms·<code·class="inline">set</code>,·<code·class="inline">ordered_set</code>, |
| 3042 | or·<code·class="inline">bag</code>.·Default·is·<code·class="inline">set</code>.·In·a·<code·class="inline">set</code>,·all·records·have·unique·keys.·In·a | 3042 | or·<code·class="inline">bag</code>.·Default·is·<code·class="inline">set</code>.·In·a·<code·class="inline">set</code>,·all·records·have·unique·keys.·In·a |
| 3043 | <code·class="inline">bag</code>,·several·records·can·have·the·same·key,·but·the·record·content·is | 3043 | <code·class="inline">bag</code>,·several·records·can·have·the·same·key,·but·the·record·content·is |
| 3044 | unique.·If·a·non-unique·record·is·stored,·the·old·conflicting·records·are | 3044 | unique.·If·a·non-unique·record·is·stored,·the·old·conflicting·records·are |
| 3045 | overwritten.</p><p>Notice·that·currently·<code·class="inline">ordered_set</code>·is·not·supported·for·<code·class="inline">disc_only_copies</code>.</p></li><li><p><code·class="inline">{local_content,·Bool}</code>,·where·<code·class="inline">Bool</code>·is·<code·class="inline">true</code>·or·<code·class="inline">false</code>.·Default·is | 3045 | overwritten.</p><p>Notice·that·currently·<code·class="inline">ordered_set</code>·is·not·supported·for·<code·class="inline">disc_only_copies</code>.</p></li><li><p><code·class="inline">{local_content,·Bool}</code>,·where·<code·class="inline">Bool</code>·is·<code·class="inline">true</code>·or·<code·class="inline">false</code>.·Default·is |
| 3046 | <code·class="inline">false</code>.</p></li></ul><p>For·example,·the·following·call·creates·the·<code·class="inline">person</code>·table·(defined·earlier)·and | 3046 | <code·class="inline">false</code>.</p></li></ul><p>For·example,·the·following·call·creates·the·<code·class="inline">person</code>·table·(defined·earlier)·and |
| 3047 | replicates·it·on·two·nodes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="2 | 3047 | replicates·it·on·two·nodes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="2009384994-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w"> |
| 3048 | ····</span><span·class="p"·data-group-id="2 | 3048 | ····</span><span·class="p"·data-group-id="2009384994-2">[</span><span·class="p"·data-group-id="2009384994-3">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2009384994-4">[</span><span·class="n">N1</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·145,·SHA:·668663131e08e57a8e8a4b79619de2a11d3ebaa1e2f8a5400daf9c278b89ab6c·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 3049 | ·····</span><span·class="p"·data-group-id="2 | 3049 | ·····</span><span·class="p"·data-group-id="2009384994-5">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="2009384994-6">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·243,·SHA:·951d73f247349afbfbc8acde8b23cc7bdc9803868bd13885de7c98f95565ff69·...·]-1">)</span><span·class="p">.</span></code></pre><p>If·it·is·required·that·Mnesia·must·build·and·maintain·an·extra·index·table·on |
| 3050 | attribute·<code·class="inline">address</code>·of·all·the·<code·class="inline">person</code>·records·that·are·inserted·in·the·table, | 3050 | attribute·<code·class="inline">address</code>·of·all·the·<code·class="inline">person</code>·records·that·are·inserted·in·the·table, |
| 3051 | the·following·code·would·be·issued:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 3051 | the·following·code·would·be·issued:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4947380872-1">(</span><span·class="ss">person</span><span·class="p">,</span><span·class="w"> |
| 3052 | ····</span><span·class="p"·data-group-id=" | 3052 | ····</span><span·class="p"·data-group-id="4947380872-2">[</span><span·class="p"·data-group-id="4947380872-3">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4947380872-4">[</span><span·class="n">N1</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·146,·SHA:·c071b9d4a541842481a1b3e43de9844da36b511349b969d41d81c94e054a65f3·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 3053 | ·····</span><span·class="p"·data-group-id=" | 3053 | ·····</span><span·class="p"·data-group-id="4947380872-5">{</span><span·class="ss">index</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4947380872-6">[</span><span·class="ss">address</span><span·class="p"·data-group-id="4947380872-6">]</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·de2b1b0086565afa611d89441f0f93f811de413a156926e2b4368440028f4381·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 3054 | ·····</span><span·class="p"·data-group-id=" | 3054 | ·····</span><span·class="p"·data-group-id="4947380872-7">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4947380872-8">(</span><span·class="ss">fields</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·244,·SHA:·fb45692df3b7f0194331a601c7a7e7b12860bdf3b557f254c071f821c6954eca·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·specification·of·<code·class="inline">index</code>·and·<code·class="inline">attributes</code>·can·be·hard-coded·as |
| 3055 | <code·class="inline">{index,·[2]}</code>·and·<code·class="inline">{attributes,·[name,·age,·address,·salary,·children]}</code>, | 3055 | <code·class="inline">{index,·[2]}</code>·and·<code·class="inline">{attributes,·[name,·age,·address,·salary,·children]}</code>, |
| 3056 | respectively.</p><p><a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>·writes·records·into·the·table·<code·class="inline">schema</code>.·This·function, | 3056 | respectively.</p><p><a·href="#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>·writes·records·into·the·table·<code·class="inline">schema</code>.·This·function, |
| 3057 | and·all·other·schema·manipulation·functions,·are·implemented·with·the·normal | 3057 | and·all·other·schema·manipulation·functions,·are·implemented·with·the·normal |
| 3058 | transaction·management·system.·This·guarantees·that·schema·updates·are·performed | 3058 | transaction·management·system.·This·guarantees·that·schema·updates·are·performed |
| 3059 | on·all·nodes·in·an·atomic·manner.</p> | 3059 | on·all·nodes·in·an·atomic·manner.</p> |
| 3060 | ··</section> | 3060 | ··</section> |
| 3061 | </section> | 3061 | </section> |
| Offset 5155, 18 lines modified | Offset 5155, 18 lines modified | ||
| 5155 | ······</div> | 5155 | ······</div> |
| 5156 | <p>Select·the·objects·in·<code·class="inline">Tab</code>·against·<code·class="inline">MatchSpec</code>.</p><p>Matches·the·objects·in·table·<code·class="inline">Tab</code>·using·a·<code·class="inline">match_spec</code>·as·described·in·the | 5156 | <p>Select·the·objects·in·<code·class="inline">Tab</code>·against·<code·class="inline">MatchSpec</code>.</p><p>Matches·the·objects·in·table·<code·class="inline">Tab</code>·using·a·<code·class="inline">match_spec</code>·as·described·in·the |
| 5157 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/ets.html#select/3"><code·class="inline">ets:select/3</code></a>.·Optionally·a·lock·<code·class="inline">read</code>·or·<code·class="inline">write</code>·can·be·given·as·the·third | 5157 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/ets.html#select/3"><code·class="inline">ets:select/3</code></a>.·Optionally·a·lock·<code·class="inline">read</code>·or·<code·class="inline">write</code>·can·be·given·as·the·third |
| 5158 | argument.·Default·is·<code·class="inline">read</code>.·The·return·value·depends·on·<code·class="inline">MatchSpec</code>.</p><p>Notice·that·for·best·performance,·<code·class="inline">select</code>·is·to·be·used·before·any·modifying | 5158 | argument.·Default·is·<code·class="inline">read</code>.·The·return·value·depends·on·<code·class="inline">MatchSpec</code>.</p><p>Notice·that·for·best·performance,·<code·class="inline">select</code>·is·to·be·used·before·any·modifying |
| 5159 | operations·are·done·on·that·table·in·the·same·transaction.·That·is,·do·not·use | 5159 | operations·are·done·on·that·table·in·the·same·transaction.·That·is,·do·not·use |
| 5160 | <code·class="inline">write</code>·or·<code·class="inline">delete</code>·before·a·<code·class="inline">select</code>.</p><p>In·its·simplest·forms,·the·<code·class="inline">match_spec</code>·look·as·follows:</p><ul><li><code·class="inline">MatchSpec·=·[MatchFunction]</code></li><li><code·class="inline">MatchFunction·=·{MatchHead,·[Guard],·[Result]}</code></li><li><p><code·class="inline">MatchHead·=·tuple()·|·record()</code></p></li><li><code·class="inline">Guard·=·{"Guardtest·name",·...}</code></li><li><code·class="inline">Result·=·"Term·construct"</code></li></ul><p>For·a·complete·description·of·<code·class="inline">select</code>,·see·the·<a·href="../../../../erts-15.2.7/doc/html/index.html">ERTS</a> | 5160 | <code·class="inline">write</code>·or·<code·class="inline">delete</code>·before·a·<code·class="inline">select</code>.</p><p>In·its·simplest·forms,·the·<code·class="inline">match_spec</code>·look·as·follows:</p><ul><li><code·class="inline">MatchSpec·=·[MatchFunction]</code></li><li><code·class="inline">MatchFunction·=·{MatchHead,·[Guard],·[Result]}</code></li><li><p><code·class="inline">MatchHead·=·tuple()·|·record()</code></p></li><li><code·class="inline">Guard·=·{"Guardtest·name",·...}</code></li><li><code·class="inline">Result·=·"Term·construct"</code></li></ul><p>For·a·complete·description·of·<code·class="inline">select</code>,·see·the·<a·href="../../../../erts-15.2.7/doc/html/index.html">ERTS</a> |
| 5161 | User's·Guide·and·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/ets.html"><code·class="inline">ets</code></a>·manual·page·in·STDLIB.</p><p>For·example,·to·find·the·names·of·all·male·persons·older·than·30·in·table·<code·class="inline">Tab</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MatchHead</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id=" | 5161 | User's·Guide·and·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/ets.html"><code·class="inline">ets</code></a>·manual·page·in·STDLIB.</p><p>For·example,·to·find·the·names·of·all·male·persons·older·than·30·in·table·<code·class="inline">Tab</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">MatchHead</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="0869564468-1">{</span><span·class="ss">name</span><span·class="o">=</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sex</span><span·class="o">=</span><span·class="ss">male</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·287,·SHA:·08cf1028724102c0865b15daefd4ca05d086ba2204a1259f80628f6041a268ac·...·]8-1">}</span><span·class="p">,</span><span·class="w"> |
| 5162 | </span><span·class="n">Guard</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 5162 | </span><span·class="n">Guard</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0869564468-2">{</span><span·class="ss">'>'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">30</span><span·class="p"·data-group-id="0869564[·...·truncated·by·diffoscope;·len:·2,·SHA:·25fc0e7096fc653718202dc30b0c580b8ab87eac11a700cba03a7c021bc35b0c·...·]8-2">}</span><span·class="p">,</span><span·class="w"> |
| 5163 | </span><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> | 5163 | </span><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w"> |
| 5164 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 5164 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="0869564468-3">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="p"·data-group-id="0869564468-4">[</span><span·class="p"·data-group-id="0869564468-5">{</span><span·class="n">MatchHead</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·465,·SHA:·753cf828eada37b1305488929ba3594ca9a394b0c4c5a65d8e9b3324bb19ed98·...·]8-3">)</span><span·class="p">,</span></code></pre> |
| 5165 | ··</section> | 5165 | ··</section> |
| 5166 | </section> | 5166 | </section> |
| 5167 | <section·class="detail"·id="select/4"> | 5167 | <section·class="detail"·id="select/4"> |
| 5168 | ··<div·class="detail-header"> | 5168 | ··<div·class="detail-header"> |
| 5169 | ····<a·href="#select/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5169 | ····<a·href="#select/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 5170 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 5170 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 5435, 17 lines modified | Offset 5435, 17 lines modified | ||
| 5435 | information·needed·is·information·about·the·key·types·in·the·table.·Multiple | 5435 | information·needed·is·information·about·the·key·types·in·the·table.·Multiple |
| 5436 | keys·cannot·be·handled·in·Mnesia,·but·many·SNMP·tables·have·multiple·keys. | 5436 | keys·cannot·be·handled·in·Mnesia,·but·many·SNMP·tables·have·multiple·keys. |
| 5437 | Therefore,·the·following·convention·is·used:·if·a·table·has·multiple·keys,·these | 5437 | Therefore,·the·following·convention·is·used:·if·a·table·has·multiple·keys,·these |
| 5438 | must·always·be·stored·as·a·tuple·of·the·keys.·Information·about·the·key·types·is | 5438 | must·always·be·stored·as·a·tuple·of·the·keys.·Information·about·the·key·types·is |
| 5439 | specified·as·a·tuple·of·atoms·describing·the·types.·The·only·significant·type·is | 5439 | specified·as·a·tuple·of·atoms·describing·the·types.·The·only·significant·type·is |
| 5440 | <code·class="inline">fix_string</code>.·This·means·that·a·string·has·a·fixed·size.</p><p>For·example,·the·following·causes·table·<code·class="inline">person</code>·to·be·ordered·as·an·SNMP·table:</p><pre><code·class="text">mnesia:snmp_open_table(person,·[{key,·string}])</code></pre><p>Consider·the·following·schema·for·a·table·of·company·employees.·Each·employee·is | 5440 | <code·class="inline">fix_string</code>.·This·means·that·a·string·has·a·fixed·size.</p><p>For·example,·the·following·causes·table·<code·class="inline">person</code>·to·be·ordered·as·an·SNMP·table:</p><pre><code·class="text">mnesia:snmp_open_table(person,·[{key,·string}])</code></pre><p>Consider·the·following·schema·for·a·table·of·company·employees.·Each·employee·is |
| 5441 | identified·by·department·number·and·name.·The·other·table·column·stores·the | 5441 | identified·by·department·number·and·name.·The·other·table·column·stores·the |
| 5442 | telephone·number:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="3 | 5442 | telephone·number:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="3100773253-1">(</span><span·class="ss">employee</span><span·class="p">,</span><span·class="w"> |
| 5443 | ····</span><span·class="p"·data-group-id="3 | 5443 | ····</span><span·class="p"·data-group-id="3100773253-2">[</span><span·class="p"·data-group-id="3100773253-3">{</span><span·class="ss">snmp</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3100773253-4">[</span><span·class="p"·data-group-id="3100773253-5">{</span>[·...·truncated·by·diffoscope;·len:·437,·SHA:·aee52d02d990c5f73bfb226fefe2516ad15487e17e7ccbbb8181752c0ae53b78·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 5444 | ·····</span><span·class="p"·data-group-id="3 | 5444 | ·····</span><span·class="p"·data-group-id="3100773253-7">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="3100773253-8">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·246,·SHA:·8623909b6bd464b8c7a4e21c69dba8b8d7866ff9a6223b4aa3595b74ad6f1f76·...·]-1">)</span><span·class="p">,</span></code></pre><p>The·corresponding·SNMP·table·would·have·three·columns:·<code·class="inline">department</code>,·<code·class="inline">name</code>,·and |
| 5445 | <code·class="inline">telno</code>.</p><p>An·option·is·to·have·table·columns·that·are·not·visible·through·the·SNMP | 5445 | <code·class="inline">telno</code>.</p><p>An·option·is·to·have·table·columns·that·are·not·visible·through·the·SNMP |
| 5446 | protocol.·These·columns·must·be·the·last·columns·of·the·table.·In·the·previous | 5446 | protocol.·These·columns·must·be·the·last·columns·of·the·table.·In·the·previous |
| 5447 | example,·the·SNMP·table·could·have·columns·<code·class="inline">department</code>·and·<code·class="inline">name</code>·only.·The | 5447 | example,·the·SNMP·table·could·have·columns·<code·class="inline">department</code>·and·<code·class="inline">name</code>·only.·The |
| 5448 | application·could·then·use·column·<code·class="inline">telno</code>·internally,·but·it·would·not·be | 5448 | application·could·then·use·column·<code·class="inline">telno</code>·internally,·but·it·would·not·be |
| 5449 | visible·to·the·SNMP·managers.</p><p>In·a·table·monitored·by·SNMP,·all·elements·must·be·integers,·strings,·or·lists | 5449 | visible·to·the·SNMP·managers.</p><p>In·a·table·monitored·by·SNMP,·all·elements·must·be·integers,·strings,·or·lists |
| 5450 | of·integers.</p><p>When·a·table·is·SNMP·ordered,·modifications·are·more·expensive·than·usual, | 5450 | of·integers.</p><p>When·a·table·is·SNMP·ordered,·modifications·are·more·expensive·than·usual, |
| 5451 | O(logN).·Also,·more·memory·is·used.</p><p>Notice·that·only·the·lexicographical·SNMP·ordering·is·implemented·in·Mnesia,·not | 5451 | O(logN).·Also,·more·memory·is·used.</p><p>Notice·that·only·the·lexicographical·SNMP·ordering·is·implemented·in·Mnesia,·not |
| Offset 6008, 43 lines modified | Offset 6008, 43 lines modified | ||
| 6008 | <p>Execute·<code·class="inline">Fun</code>·with·arguments·<code·class="inline">Args</code>·as·a·transaction.</p><p>The·code·that·executes·inside·the·transaction·can·consist·of·a·series·of·table | 6008 | <p>Execute·<code·class="inline">Fun</code>·with·arguments·<code·class="inline">Args</code>·as·a·transaction.</p><p>The·code·that·executes·inside·the·transaction·can·consist·of·a·series·of·table |
| 6009 | manipulation·functions.·If·something·goes·wrong·inside·the·transaction·as·a | 6009 | manipulation·functions.·If·something·goes·wrong·inside·the·transaction·as·a |
| 6010 | result·of·a·user·error·or·a·certain·table·not·being·available,·the·entire | 6010 | result·of·a·user·error·or·a·certain·table·not·being·available,·the·entire |
| 6011 | transaction·is·terminated·and·the·function·<a·href="#transaction/1"><code·class="inline">transaction/1</code></a> | 6011 | transaction·is·terminated·and·the·function·<a·href="#transaction/1"><code·class="inline">transaction/1</code></a> |
| 6012 | returns·the·tuple·<code·class="inline">{aborted,·Reason}</code>.</p><p>If·all·is·going·well,·<code·class="inline">{atomic,·ResultOfFun}</code>·is·returned,·where·<code·class="inline">ResultOfFun</code> | 6012 | returns·the·tuple·<code·class="inline">{aborted,·Reason}</code>.</p><p>If·all·is·going·well,·<code·class="inline">{atomic,·ResultOfFun}</code>·is·returned,·where·<code·class="inline">ResultOfFun</code> |
| 6013 | is·the·value·of·the·last·expression·in·<code·class="inline">Fun</code>.</p><p>A·function·that·adds·a·family·to·the·database·can·be·written·as·follows·if·there | 6013 | is·the·value·of·the·last·expression·in·<code·class="inline">Fun</code>.</p><p>A·function·that·adds·a·family·to·the·database·can·be·written·as·follows·if·there |
| 6014 | is·a·structure·<code·class="inline">{family,·Father,·Mother,·ChildrenList}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">add_family</span><span·class="p"·data-group-id="6 | 6014 | is·a·structure·<code·class="inline">{family,·Father,·Mother,·ChildrenList}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">add_family</span><span·class="p"·data-group-id="6837514063-1">(</span><span·class="p"·data-group-id="6837514063-2">{</span><span·class="ss">family</span><span·class="p">,</span><span·class="w">·</span><span·class="n">F</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·cl[·...·truncated·by·diffoscope;·len:·165,·SHA:·2bf4bfc9743a09bb92ee127dd6f50dbdd9e5b2f9e09a127b490c13b8f8a568ff·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 6015 | ····</span><span·class="n">ChildOids</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="6 | 6015 | ····</span><span·class="n">ChildOids</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="6837514063-3">(</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">oid</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Children</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·b6599830e21e945658ff85389a6c304bc58650dafb2520c7102fd97aa72309da·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 6016 | ····</span><span·class="n">Trans</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="6 | 6016 | ····</span><span·class="n">Trans</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="6837514063-4">(</span><span·class="p"·data-group-id="6837514063-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 6017 | ········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="6296432596-5">(</span><span·class="n">F</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="6296432596-6">{</span><span·class="ss">children</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">ChildOids</span><span·class="p"·data-group-id="6296432596-6">}</span><span·class="p"·data-group-id="6296432596-5">)</span><span·class="p">,</span><span·class="w"> | ||
| 6018 | ········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="6 | 6017 | ········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="6837514063-5">(</span><span·class="n">F</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="6837514063-6">{</span><span·class="ss">children</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·128,·SHA:·f3f7be1266f4738d9b84934d6c39d609398fe379856490781521718ba896fef0·...·]">)</span><span·class="p">,</span><span·class="w"> |
| 6018 | ········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="6837514063-7">(</span><span·class="n">M</span><span·class="o">#</span><span·class="ss">person</span><span·class="p"·data-group-id="6837514063-8">{</span><span·class="ss">children</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">ChildOids</span><span·class="p"·data-group-id="6837514063-8">}</span><span·class="p"·data-group-id="6837514063-7">)</span><span·class="p">,</span><span·class="w"> | ||
| 6019 | ········</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="6 | 6019 | ········</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="6837514063-9">(</span><span·class="n">Child</span><span·class="p"·data-group-id="6837514063-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</[·...·truncated·by·diffoscope;·len:·128,·SHA:·2f59ffb3090f35195aea295cda39f6dd69a7654feb0f0ea9c15e1d336dbd8e7a·...·]-10">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 6020 | ········</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id="6 | 6020 | ········</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id="6837514063-11">(</span><span·class="n">Write</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Children</span><span·class="p"·data-group-id="6837514063-11">)</span><span·class="w"> |
| 6021 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 6021 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 6022 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="6 | 6022 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="6837514063-12">(</span><span·class="n">Trans</span><span·class="p"·data-group-id="6837514063-12">)</span><span·class="p">.</span><span·class="w"> |
| 6023 | </span><span·class="nf">oid</span><span·class="p"·data-group-id="6 | 6023 | </span><span·class="nf">oid</span><span·class="p"·data-group-id="6837514063-13">(</span><span·class="n">Rec</span><span·class="p"·data-group-id="6837514063-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="6837514063-14">{</span><span·class="nf">element[·...·truncated·by·diffoscope;·len:·541,·SHA:·30795989ee3bb6593dfdbaab9d4629f35f01fcb57a154ae2a0929928837a500b·...·]-14">}</span><span·class="p">.</span></code></pre><p>This·code·adds·a·set·of·people·to·the·database.·Running·this·code·within·one |
| 6024 | transaction·ensures·that·either·the·whole·family·is·added·to·the·database,·or | 6024 | transaction·ensures·that·either·the·whole·family·is·added·to·the·database,·or |
| 6025 | the·whole·transaction·terminates.·For·example,·if·the·last·child·is·badly | 6025 | the·whole·transaction·terminates.·For·example,·if·the·last·child·is·badly |
| 6026 | formatted,·or·the·executing·process·terminates·because·of·an·<code·class="inline">'EXIT'</code>·signal | 6026 | formatted,·or·the·executing·process·terminates·because·of·an·<code·class="inline">'EXIT'</code>·signal |
| 6027 | while·executing·the·family·code,·the·transaction·terminates.·Thus,·the·situation | 6027 | while·executing·the·family·code,·the·transaction·terminates.·Thus,·the·situation |
| Max diff block lines reached; 7773/52537 bytes (14.80%) of diff not shown. | |||
| Offset 155, 160 lines modified | Offset 155, 160 lines modified | ||
| 155 | </span><span·class="c1">%%</span><span·class="w"> | 155 | </span><span·class="c1">%%</span><span·class="w"> |
| 156 | </span><span·class="c1">%%·The·NewOpaqueData·arguments·returned·by·restore·callback·functions·will</span><span·class="w"> | 156 | </span><span·class="c1">%%·The·NewOpaqueData·arguments·returned·by·restore·callback·functions·will</span><span·class="w"> |
| 157 | </span><span·class="c1">%%·be·given·as·input·when·the·next·restore·callback·function·is·invoked</span><span·class="w"> | 157 | </span><span·class="c1">%%·be·given·as·input·when·the·next·restore·callback·function·is·invoked</span><span·class="w"> |
| 158 | </span><span·class="c1">%%·If·any·return·value·does·not·match·{ok,·_}·the·restore·will·be·aborted.</span><span·class="w"> | 158 | </span><span·class="c1">%%·If·any·return·value·does·not·match·{ok,·_}·the·restore·will·be·aborted.</span><span·class="w"> |
| 159 | </span><span·class="c1">%%</span><span·class="w"> | 159 | </span><span·class="c1">%%</span><span·class="w"> |
| 160 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 160 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 161 | </span><span·class="w"> | 161 | </span><span·class="w"> |
| 162 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 162 | </span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="1713220279-1">(</span><span·class="ss">mnesia_backup</span><span·class="p"·data-group-id="1713220279-1">)</span><span·class="p">.</span><span·class="w"> |
| 163 | </span><span·class="w"> | 163 | </span><span·class="w"> |
| 164 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 164 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="1713220279-2">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="1713220279-2">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="w"> | 165 | </span><span·class="w"> |
| 166 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 166 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="1713220279-3">(</span><span·class="p"·data-group-id="1713220279-4">[</span><span·class="w"> |
| 167 | ·········</span><span·class="c1">%%·Write·access</span><span·class="w"> | 167 | ·········</span><span·class="c1">%%·Write·access</span><span·class="w"> |
| 168 | ·········</span><span·class="ss">open_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 168 | ·········</span><span·class="ss">open_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 169 | ·········</span><span·class="ss">write</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> | 169 | ·········</span><span·class="ss">write</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 170 | ·········</span><span·class="ss">commit_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 170 | ·········</span><span·class="ss">commit_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 171 | ·········</span><span·class="ss">abort_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 171 | ·········</span><span·class="ss">abort_write</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 172 | ·········</span><span·class="c1">%%·Read·access</span><span·class="w"> | 172 | ·········</span><span·class="c1">%%·Read·access</span><span·class="w"> |
| 173 | ·········</span><span·class="ss">open_read</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 173 | ·········</span><span·class="ss">open_read</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 174 | ·········</span><span·class="ss">read</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 174 | ·········</span><span·class="ss">read</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 175 | ·········</span><span·class="ss">close_read</span><span·class="p">/</span><span·class="mi">1</span><span·class="w"> | 175 | ·········</span><span·class="ss">close_read</span><span·class="p">/</span><span·class="mi">1</span><span·class="w"> |
| 176 | ········</span><span·class="p"·data-group-id=" | 176 | ········</span><span·class="p"·data-group-id="1713220279-4">]</span><span·class="p"·data-group-id="1713220279-3">)</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 177 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 178 | </span><span·class="c1">%%·Backup·callback·interface</span><span·class="w"> | 178 | </span><span·class="c1">%%·Backup·callback·interface</span><span·class="w"> |
| 179 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 179 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="1713220279-5">(</span><span·class="ss">backup</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1713220279-6">{</span><span·class="ss">tmp_file</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">file</[·...·truncated·by·diffoscope;·len:·180,·SHA:·d05ec588650653967e5dce1cddaa9ccccb626e090afbf28f5e41a06bf978255f·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="c1">%%·Opens·backup·media·for·write</span><span·class="w"> | 180 | </span><span·class="c1">%%·Opens·backup·media·for·write</span><span·class="w"> |
| 181 | </span><span·class="c1">%%</span><span·class="w"> | 181 | </span><span·class="c1">%%</span><span·class="w"> |
| 182 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> | 182 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> |
| 183 | </span><span·class="nf">open_write</span><span·class="p"·data-group-id=" | 183 | </span><span·class="nf">open_write</span><span·class="p"·data-group-id="1713220279-7">(</span><span·class="n">OpaqueData</span><span·class="p"·data-group-id="1713220279-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 184 | ····</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> | 184 | ····</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> |
| 185 | ····</span><span·class="n">Tmp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">concat</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="n">Tmp</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">concat</span><span·class="p"·data-group-id="1713220279-8">(</span><span·class="p"·data-group-id="1713220279-9">[</span><span·class="n">File</span><span·class="p">,</span><span·class="s">".BUPTMP"</span><span·class="p"·data-group-id="1713220279-9">]</span><span·class="p"·data-group-id="1713[·...·truncated·by·diffoscope;·len:·6,·SHA:·934151c32dab03ae4aaaf404b924d59433296b5d53a51ce56392052b38b436de·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 186 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 186 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="1713220279-10">(</span><span·class="n">Tmp</span><span·class="p"·data-group-id="1713220279-10">)</span><span·class="p">,</span><span·class="w"> |
| 187 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="1713220279-11">(</span><span·class="p"·data-group-id="1713220279-12">[</span><span·class="p"·data-group-id="1713220279-13">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·132,·SHA:·212b882d48af800367867afb48e90f5dca2659acea7473290df7539b1e7d13f7·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 188 | ························</span><span·class="p"·data-group-id=" | 188 | ························</span><span·class="p"·data-group-id="1713220279-15">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tmp</span><span·class="p"·data-group-id="1713220279-15">}</span><span·class="p">,</span><span·class="w"> |
| 189 | ························</span><span·class="p"·data-group-id=" | 189 | ························</span><span·class="p"·data-group-id="1713220279-16">{</span><span·class="ss">repair</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="1713220279-16">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ························</span><span·class="p"·data-group-id=" | 190 | ························</span><span·class="p"·data-group-id="1713220279-17">{</span><span·class="ss">linkto</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="1713220279-18">(</span><span·class="p"·data-group-id="1713220279-18">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·130,·SHA:·e7c649ad9e9261dd1bd77504c2941b42493fb2b252776198ce99286236b93e3f·...·]-11">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 191 | ········</span><span·class="p"·data-group-id=" | 191 | ········</span><span·class="p"·data-group-id="1713220279-19">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="1713220279-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ············</span><span·class="p"·data-group-id=" | 192 | ············</span><span·class="p"·data-group-id="1713220279-20">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p"·data-group-id="1713220279-21">{</span><span·class="ss">tmp_file</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·527,·SHA:·9436327c38120c10c7d651e20c0d2d3237ab7c25dcb38be436741d015bc73236·...·]-20">}</span><span·class="p">;</span><span·class="w"> |
| 193 | ········</span><span·class="p"·data-group-id=" | 193 | ········</span><span·class="p"·data-group-id="1713220279-22">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-22">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ············</span><span·class="p"·data-group-id=" | 194 | ············</span><span·class="p"·data-group-id="1713220279-23">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-23">}</span><span·class="w"> |
| 195 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 195 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="c1">%%·Writes·BackupItems·to·the·backup·media</span><span·class="w"> | 196 | </span><span·class="c1">%%·Writes·BackupItems·to·the·backup·media</span><span·class="w"> |
| 197 | </span><span·class="c1">%%</span><span·class="w"> | 197 | </span><span·class="c1">%%</span><span·class="w"> |
| 198 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> | 198 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> |
| 199 | </span><span·class="nf">write</span><span·class="p"·data-group-id=" | 199 | </span><span·class="nf">write</span><span·class="p"·data-group-id="1713220279-24">(</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BackupItems</span><span·class="p"·data-group-id="1713220279-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 200 | ····</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> | 200 | ····</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> |
| 201 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">log_terms</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">log_terms</span><span·class="p"·data-group-id="1713220279-25">(</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file_desc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BackupItems</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·d75eb8f5e8cd50676d0daddfdc87abecc7ff0c35fe9ccb266191d74ef4459a52·...·]-25">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 202 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 202 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 203 | ············</span><span·class="p"·data-group-id=" | 203 | ············</span><span·class="p"·data-group-id="1713220279-26">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="p"·data-group-id="1713220279-26">}</span><span·class="p">;</span><span·class="w"> |
| 204 | ········</span><span·class="p"·data-group-id=" | 204 | ········</span><span·class="p"·data-group-id="1713220279-27">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-27">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 205 | ············</span><span·class="nf">abort_write</span><span·class="p"·data-group-id=" | 205 | ············</span><span·class="nf">abort_write</span><span·class="p"·data-group-id="1713220279-28">(</span><span·class="n">B</span><span·class="p"·data-group-id="1713220279-28">)</span><span·class="p">,</span><span·class="w"> |
| 206 | ············</span><span·class="p"·data-group-id=" | 206 | ············</span><span·class="p"·data-group-id="1713220279-29">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-29">}</span><span·class="w"> |
| 207 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 207 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 208 | </span><span·class="c1">%%·Closes·the·backup·media·after·a·successful·backup</span><span·class="w"> | 208 | </span><span·class="c1">%%·Closes·the·backup·media·after·a·successful·backup</span><span·class="w"> |
| 209 | </span><span·class="c1">%%</span><span·class="w"> | 209 | </span><span·class="c1">%%</span><span·class="w"> |
| 210 | </span><span·class="c1">%%·Returns·{ok,·ReturnValueToUser}·or·{error,·Reason}</span><span·class="w"> | 210 | </span><span·class="c1">%%·Returns·{ok,·ReturnValueToUser}·or·{error,·Reason}</span><span·class="w"> |
| 211 | </span><span·class="nf">commit_write</span><span·class="p"·data-group-id=" | 211 | </span><span·class="nf">commit_write</span><span·class="p"·data-group-id="1713220279-30">(</span><span·class="n">OpaqueData</span><span·class="p"·data-group-id="1713220279-30">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 212 | ····</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> | 212 | ····</span><span·class="n">B</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> |
| 213 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">sync</span><span·class="p"·data-group-id=" | 213 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">sync</span><span·class="p"·data-group-id="1713220279-31">(</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file_desc</span><span·class="p"·data-group-id="1713220279-31">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 214 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 214 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 215 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="1713220279-32">(</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file_desc</span><span·class="p"·data-group-id="1713220279-32">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 216 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 216 | ················</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ····················</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 217 | ····················</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="1713220279-33">(</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file</span><span·class="p"·data-group-id="1713220279-33">)</span><span·class="p">,</span><span·class="w"> |
| 218 | ····················</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">rename</span><span·class="p"·data-group-id=" | 218 | ····················</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">rename</span><span·class="p"·data-group-id="1713220279-34">(</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">tmp_file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="o">#</span><sp[·...·truncated·by·diffoscope;·len:·120,·SHA:·201e5e41106fe28c0bbbb02c2b68c134f1a8f4287dad512ea7bbc5853ce46923·...·]-34">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 219 | ························</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 219 | ························</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ····························</span><span·class="p"·data-group-id=" | 220 | ····························</span><span·class="p"·data-group-id="1713220279-35">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">B</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·cbedc4f08b3e192bc1f133ab61830192a4f3f9d0754933fbe9f0a2b6fe7a4930·...·]-35">}</span><span·class="p">;</span><span·class="w"> |
| 221 | ························</span><span·class="p"·data-group-id=" | 221 | ························</span><span·class="p"·data-group-id="1713220279-36">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-36">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 222 | ····························</span><span·class="p"·data-group-id=" | 222 | ····························</span><span·class="p"·data-group-id="1713220279-37">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-37">}</span><span·class="w"> |
| 223 | ····················</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 223 | ····················</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 224 | ················</span><span·class="p"·data-group-id=" | 224 | ················</span><span·class="p"·data-group-id="1713220279-38">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-38">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ····················</span><span·class="p"·data-group-id=" | 225 | ····················</span><span·class="p"·data-group-id="1713220279-39">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-39">}</span><span·class="w"> |
| 226 | ············</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 226 | ············</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 227 | ········</span><span·class="p"·data-group-id=" | 227 | ········</span><span·class="p"·data-group-id="1713220279-40">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-40">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ············</span><span·class="p"·data-group-id=" | 228 | ············</span><span·class="p"·data-group-id="1713220279-41">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-41">}</span><span·class="w"> |
| 229 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 229 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="c1">%%·Closes·the·backup·media·after·an·interrupted·backup</span><span·class="w"> | 230 | </span><span·class="c1">%%·Closes·the·backup·media·after·an·interrupted·backup</span><span·class="w"> |
| 231 | </span><span·class="c1">%%</span><span·class="w"> | 231 | </span><span·class="c1">%%</span><span·class="w"> |
| 232 | </span><span·class="c1">%%·Returns·{ok,·ReturnValueToUser}·or·{error,·Reason}</span><span·class="w"> | 232 | </span><span·class="c1">%%·Returns·{ok,·ReturnValueToUser}·or·{error,·Reason}</span><span·class="w"> |
| 233 | </span><span·class="nf">abort_write</span><span·class="p"·data-group-id=" | 233 | </span><span·class="nf">abort_write</span><span·class="p"·data-group-id="1713220279-42">(</span><span·class="n">BackupRef</span><span·class="p"·data-group-id="1713220279-42">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 234 | ····</span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 234 | ····</span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="1713220279-43">(</span><span·class="n">BackupRef</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file_desc</span><span·class="p"·data-group-id="1713220279-43">)</span><span·class="p">,</span><span·class="w"> |
| 235 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 235 | ····</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="1713220279-44">(</span><span·class="n">BackupRef</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">tmp_file</span><span·class="p"·data-group-id="1713220279-44">)</span><span·class="p">,</span><span·class="w"> |
| 236 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Res</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 236 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Res</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 237 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 237 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 238 | ············</span><span·class="p"·data-group-id=" | 238 | ············</span><span·class="p"·data-group-id="1713220279-45">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BackupRef</span><span·class="o">#</span><span·class="ss">backup</span><span·class="p">.</span><span·class="ss">file</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·d0d38d4b1502599df60e269c8b5acfa1393dd1e909131c35f00d386e67997d8e·...·]-45">}</span><span·class="p">;</span><span·class="w"> |
| 239 | ········</span><span·class="p"·data-group-id=" | 239 | ········</span><span·class="p"·data-group-id="1713220279-46">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-46">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 240 | ············</span><span·class="p"·data-group-id=" | 240 | ············</span><span·class="p"·data-group-id="1713220279-47">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-47">}</span><span·class="w"> |
| 241 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 241 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 242 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 242 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 243 | </span><span·class="c1">%%·Restore·callback·interface</span><span·class="w"> | 243 | </span><span·class="c1">%%·Restore·callback·interface</span><span·class="w"> |
| 244 | </span><span·class="w"> | 244 | </span><span·class="w"> |
| 245 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 245 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="1713220279-48">(</span><span·class="ss">restore</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1713220279-49">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">file_de[·...·truncated·by·diffoscope;·len:·180,·SHA:·3fec7755bd53144a46802900b27051c6b4434f142954d498d2dcb466ad174874·...·]-48">)</span><span·class="p">.</span><span·class="w"> |
| 246 | </span><span·class="c1">%%·Opens·backup·media·for·read</span><span·class="w"> | 246 | </span><span·class="c1">%%·Opens·backup·media·for·read</span><span·class="w"> |
| 247 | </span><span·class="c1">%%</span><span·class="w"> | 247 | </span><span·class="c1">%%</span><span·class="w"> |
| 248 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> | 248 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData}·or·{error,·Reason}</span><span·class="w"> |
| 249 | </span><span·class="nf">open_read</span><span·class="p"·data-group-id=" | 249 | </span><span·class="nf">open_read</span><span·class="p"·data-group-id="1713220279-50">(</span><span·class="n">OpaqueData</span><span·class="p"·data-group-id="1713220279-50">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 250 | ····</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> | 250 | ····</span><span·class="n">File</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">OpaqueData</span><span·class="p">,</span><span·class="w"> |
| 251 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">read_file_info</span><span·class="p"·data-group-id=" | 251 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">read_file_info</span><span·class="p"·data-group-id="1713220279-51">(</span><span·class="n">File</span><span·class="p"·data-group-id="1713220279-51">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 252 | ········</span><span·class="p"·data-group-id=" | 252 | ········</span><span·class="p"·data-group-id="1713220279-52">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-52">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 253 | ············</span><span·class="p"·data-group-id=" | 253 | ············</span><span·class="p"·data-group-id="1713220279-53">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-53">}</span><span·class="p">;</span><span·class="w"> |
| 254 | ········</span><span·class="p">_</span><span·class="n">FileInfo</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="c1">%%·file·exists</span><span·class="w"> | 254 | ········</span><span·class="p">_</span><span·class="n">FileInfo</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="c1">%%·file·exists</span><span·class="w"> |
| 255 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 255 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="1713220279-54">(</span><span·class="p"·data-group-id="1713220279-55">[</span><span·class="p"·data-group-id="1713220279-56">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·1b62490235dcc87dcd949f9115b22fd2f914b79e08d3cb1a4990061cadd95eb3·...·]-56">}</span><span·class="p">,</span><span·class="w"> |
| 256 | ································</span><span·class="p"·data-group-id=" | 256 | ································</span><span·class="p"·data-group-id="1713220279-57">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id="1713220279-58">(</span><span·class="p"·data-group-id="1713220279-58">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·b5a7ce9bc3f3fbbbc55d2c05e1f073d2f379b9552b0606e5ba0aa4fca28e5b08·...·]-57">}</span><span·class="p">,</span><span·class="w"> |
| 257 | ································</span><span·class="p"·data-group-id=" | 257 | ································</span><span·class="p"·data-group-id="1713220279-59">{</span><span·class="ss">repair</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="1713220279-59">}</span><span·class="p">,</span><span·class="w"> |
| 258 | ································</span><span·class="p"·data-group-id=" | 258 | ································</span><span·class="p"·data-group-id="1713220279-60">{</span><span·class="ss">mode</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">read_only</span><span·class="p"·data-group-id="1713220279-60">}</span><span·class="p">,</span><span·class="w"> |
| 259 | ································</span><span·class="p"·data-group-id=" | 259 | ································</span><span·class="p"·data-group-id="1713220279-61">{</span><span·class="ss">linkto</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="1713220279-62">(</span><span·class="p"·data-group-id="1713220279-62">)</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·130,·SHA:·6c6f3a7ba50bf72eb7218f348dc5baecb6fc77aa9f0ade910c295eb30028f8a6·...·]-54">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 260 | ················</span><span·class="p"·data-group-id=" | 260 | ················</span><span·class="p"·data-group-id="1713220279-63">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="1713220279-63">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 261 | ····················</span><span·class="p"·data-group-id=" | 261 | ····················</span><span·class="p"·data-group-id="1713220279-64">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">restore</span><span·class="p"·data-group-id="1713220279-65">{</span><span·class="ss">file</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·527,·SHA:·854b6609db413e44031a123aead66ddf281d88a7b361c9d53152edfad1fa8662·...·]-64">}</span><span·class="p">;</span><span·class="w"> |
| 262 | ················</span><span·class="p"·data-group-id=" | 262 | ················</span><span·class="p"·data-group-id="1713220279-66">{</span><span·class="ss">repaired</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·246,·SHA:·8e1bbc2420dbd9f773fa18993e84d0746bf2ddbc972add027da45148a37fa00d·...·]-66">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 263 | ····················</span><span·class="p"·data-group-id=" | 263 | ····················</span><span·class="p"·data-group-id="1713220279-68">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">restore</span><span·class="p"·data-group-id="1713220279-69">{</span><span·class="ss">file</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·527,·SHA:·53e594391161b9bcbe75b41307bba5ff751d1092342902ef9de99d5fcd1699fb·...·]-68">}</span><span·class="p">;</span><span·class="w"> |
| 264 | ················</span><span·class="p"·data-group-id=" | 264 | ················</span><span·class="p"·data-group-id="1713220279-70">{</span><span·class="ss">repaired</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·57,·SHA:·2d2d25765c4e2b1426cb53dafd0a97f6a68e767a7b930e549f18051d3ce74e0d·...·]-70">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 265 | ····················</span><span·class="p"·data-group-id=" | 265 | ····················</span><span·class="p"·data-group-id="1713220279-71">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">restore</span><span·class="p"·data-group-id="1713220279-72">{</span><span·class="ss">file</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·527,·SHA:·0af5aaf548923f58dfbb5cc74e065240d50d327a1b4b9ccfbaf8f1ddb7feff8c·...·]-71">}</span><span·class="p">;</span><span·class="w"> |
| 266 | ················</span><span·class="p"·data-group-id=" | 266 | ················</span><span·class="p"·data-group-id="1713220279-73">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-73">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 267 | ····················</span><span·class="p"·data-group-id=" | 267 | ····················</span><span·class="p"·data-group-id="1713220279-74">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="1713220279-74">}</span><span·class="w"> |
| 268 | ············</span><span·class="k">end</span><span·class="w"> | 268 | ············</span><span·class="k">end</span><span·class="w"> |
| 269 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 269 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 270 | </span><span·class="c1">%%·Reads·BackupItems·from·the·backup·media</span><span·class="w"> | 270 | </span><span·class="c1">%%·Reads·BackupItems·from·the·backup·media</span><span·class="w"> |
| 271 | </span><span·class="c1">%%</span><span·class="w"> | 271 | </span><span·class="c1">%%</span><span·class="w"> |
| 272 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData,·BackupItems}·or·{error,·Reason}</span><span·class="w"> | 272 | </span><span·class="c1">%%·Returns·{ok,·OpaqueData,·BackupItems}·or·{error,·Reason}</span><span·class="w"> |
| Max diff block lines reached; 15217/66606 bytes (22.85%) of diff not shown. | |||
| Offset 127, 262 lines modified | Offset 127, 262 lines modified | ||
| 127 | <h2·id="mnesia_access-callback-behavior"·class="section-heading"> | 127 | <h2·id="mnesia_access-callback-behavior"·class="section-heading"> |
| 128 | ··<a·href="#mnesia_access-callback-behavior"·class="hover-link"> | 128 | ··<a·href="#mnesia_access-callback-behavior"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">mnesia_access·Callback·Behavior</span> | 131 | ··<span·class="text">mnesia_access·Callback·Behavior</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7131543274-1">(</span><span·class="ss">mnesia_frag</span><span·class="p"·data-group-id="7131543274-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="c1">%%·Callback·functions·when·accessed·within·an·activity</span><span·class="w"> | 134 | </span><span·class="c1">%%·Callback·functions·when·accessed·within·an·activity</span><span·class="w"> |
| 135 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 135 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7131543274-2">(</span><span·class="p"·data-group-id="7131543274-3">[</span><span·class="w"> |
| 136 | ·········</span><span·class="ss">lock</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> | 136 | ·········</span><span·class="ss">lock</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> |
| 137 | ·········</span><span·class="ss">write</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete_object</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w"> | 137 | ·········</span><span·class="ss">write</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">delete_object</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w"> |
| 138 | ·········</span><span·class="ss">read</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">match_object</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">all_keys</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> | 138 | ·········</span><span·class="ss">read</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">match_object</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">all_keys</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> |
| 139 | ·········</span><span·class="ss">select</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">select</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">select_cont</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> | 139 | ·········</span><span·class="ss">select</span><span·class="p">/</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">select</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">select_cont</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> |
| 140 | ·········</span><span·class="ss">index_match_object</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">index_read</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w"> | 140 | ·········</span><span·class="ss">index_match_object</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">index_read</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w"> |
| 141 | ·········</span><span·class="ss">foldl</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foldr</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">table_info</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> | 141 | ·········</span><span·class="ss">foldl</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foldr</span><span·class="p">/</span><span·class="mi">6</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">table_info</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w"> |
| 142 | ·········</span><span·class="ss">first</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">next</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">prev</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">last</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> | 142 | ·········</span><span·class="ss">first</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">next</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">prev</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">last</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> |
| 143 | ·········</span><span·class="ss">clear_table</span><span·class="p">/</span><span·class="mi">4</span><span·class="w"> | 143 | ·········</span><span·class="ss">clear_table</span><span·class="p">/</span><span·class="mi">4</span><span·class="w"> |
| 144 | ········</span><span·class="p"·data-group-id=" | 144 | ········</span><span·class="p"·data-group-id="7131543274-3">]</span><span·class="p"·data-group-id="7131543274-2">)</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="c1">%%·Callback·functions·which·provides·transparent</span><span·class="w"> | 145 | </span><span·class="c1">%%·Callback·functions·which·provides·transparent</span><span·class="w"> |
| 146 | </span><span·class="c1">%%·access·of·fragmented·tables·from·any·activity</span><span·class="w"> | 146 | </span><span·class="c1">%%·access·of·fragmented·tables·from·any·activity</span><span·class="w"> |
| 147 | </span><span·class="c1">%%·access·context.</span><span·class="w"> | 147 | </span><span·class="c1">%%·access·context.</span><span·class="w"> |
| 148 | </span><span·class="nf">lock</span><span·class="p"·data-group-id=" | 148 | </span><span·class="nf">lock</span><span·class="p"·data-group-id="7131543274-4">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-5">{</span><span·class="ss">table<[·...·truncated·by·diffoscope;·len:·277,·SHA:·0e0ee266fa387831a317544821f7dff02ad4db0070644151bc3f062d7e5bad06·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id=" | 149 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-6">(</span><span·class="n">Tab</span><span·class="p"·data-group-id="7131543274-6">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 150 | ········</span><span·class="p"·data-group-id=" | 150 | ········</span><span·class="p"·data-group-id="7131543274-7">[</span><span·class="n">Tab</span><span·class="p"·data-group-id="7131543274-7">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 151 | ············</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id=" | 151 | ············</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id="7131543274-8">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-9">{</span><span·class="ss">table<[·...·truncated·by·diffoscope;·len:·253,·SHA:·168e7ee38f1f9591830232d223b9e8ff3aa0c6b9fe32391b631ad53cb251be57·...·]-8">)</span><span·class="p">;</span><span·class="w"> |
| 152 | ········</span><span·class="n">Frags</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 152 | ········</span><span·class="n">Frags</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ············</span><span·class="n">DeepNs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 153 | ············</span><span·class="n">DeepNs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-10">[</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id="7131543274-11">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">[·...·truncated·by·diffoscope;·len:·390,·SHA:·cf9968681c8199977cb15a7665ce89af78596426c02a7ac37e9738f21ffe47eb·...·]-11">)</span><span·class="w">·</span><span·class="p">||</span><span·class="w"> |
| 154 | ·························</span><span·class="n">F</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="n">Frags</span><span·class="p"·data-group-id=" | 154 | ·························</span><span·class="n">F</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="n">Frags</span><span·class="p"·data-group-id="7131543274-10">]</span><span·class="p">,</span><span·class="w"> |
| 155 | ············</span><span·class="nc">mnesia_lib</span><span·class="p">:</span><span·class="nf">uniq</span><span·class="p"·data-group-id=" | 155 | ············</span><span·class="nc">mnesia_lib</span><span·class="p">:</span><span·class="nf">uniq</span><span·class="p"·data-group-id="7131543274-13">(</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="7131543274-14">(</span><span·class="n">DeepNs</span><span·class="p"·data-group-id="7131543274-14">)</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·972fabecc5800a787468609cfd484798613af0c5af16808733a3a92f35cd16ff·...·]-13">)</span><span·class="w"> |
| 156 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 156 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 157 | </span><span·class="nf">lock</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">lock</span><span·class="p"·data-group-id="7131543274-15">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">LockItem</span><span·class="p">,</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·76,·SHA:·04e4d2d13a41a9691a6fc5104a03abacae3f3f11475da39e984949618665e87b·...·]-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id="7131543274-16">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">LockItem</span><span·class="p">,</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·76,·SHA:·04e4d2d13a41a9691a6fc5104a03abacae3f3f11475da39e984949618665e87b·...·]-16">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="nf">write</span><span·class="p"·data-group-id=" | 159 | </span><span·class="nf">write</span><span·class="p"·data-group-id="7131543274-17">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·145,·SHA:·8cf2881bda6bee2aa09ad12c8ae563c7d2bea74ff4e5db14a02e629d512963d5·...·]-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record_to_frag_name</span><span·class="p"·data-group-id=" | 160 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record_to_frag_name</span><span·class="p"·data-group-id="7131543274-18">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Rec</span><span·class="p"·data-group-id="7131543274-18">)</span><span·class="p">,</span><span·class="w"> |
| 161 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 161 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="7131543274-19">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·146,·SHA:·236db92a1d85a8b355db619c68786c19302b56b30b6e5bf5b7f544272f85195a·...·]-19">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 162 | </span><span·class="nf">delete</span><span·class="p"·data-group-id="7131543274-20">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·145,·SHA:·d381dfc7a3b0e93f19920d253b9fb514d27ad2107be390413528d95cdbb5d967·...·]-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 163 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id=" | 163 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id="7131543274-21">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="7131543274-21">)</span><span·class="p">,</span><span·class="w"> |
| 164 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 164 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="7131543274-22">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·146,·SHA:·d78473b2256b5189bf9822c04c95638bf93cdefa663d477d1d3e6dacaf207482·...·]-22">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="nf">delete_object</span><span·class="p"·data-group-id=" | 165 | </span><span·class="nf">delete_object</span><span·class="p"·data-group-id="7131543274-23">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·145,·SHA:·8cf2881bda6bee2aa09ad12c8ae563c7d2bea74ff4e5db14a02e629d512963d5·...·]-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 166 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record_to_frag_name</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">record_to_frag_name</span><span·class="p"·data-group-id="7131543274-24">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Rec</span><span·class="p"·data-group-id="7131543274-24">)</span><span·class="p">,</span><span·class="w"> |
| 167 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">delete_object</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">delete_object</span><span·class="p"·data-group-id="7131543274-25">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·146,·SHA:·236db92a1d85a8b355db619c68786c19302b56b30b6e5bf5b7f544272f85195a·...·]-25">)</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="nf">read</span><span·class="p"·data-group-id=" | 168 | </span><span·class="nf">read</span><span·class="p"·data-group-id="7131543274-26">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·145,·SHA:·d381dfc7a3b0e93f19920d253b9fb514d27ad2107be390413528d95cdbb5d967·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id=" | 169 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id="7131543274-27">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="7131543274-27">)</span><span·class="p">,</span><span·class="w"> |
| 170 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id=" | 170 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id="7131543274-28">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·146,·SHA:·d78473b2256b5189bf9822c04c95638bf93cdefa663d477d1d3e6dacaf207482·...·]-28">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="nf">match_object</span><span·class="p"·data-group-id=" | 171 | </span><span·class="nf">match_object</span><span·class="p"·data-group-id="7131543274-29">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·149,·SHA:·cf5a067eb144f5e206949b2674d9b4a1bd8967b053db38007f47412d028f2b97·...·]-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ····</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 172 | ····</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-30">[</span><span·class="p"·data-group-id="7131543274-31">{</span><span·class="n">HeadPat</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-32">[</span><span·class="p"·data-group-id="7131543274-32">][·...·truncated·by·diffoscope;·len:·294,·SHA:·66269ba972f7817586e7a1a4cf40d6ce6f274086c796b7cc8dc1e3784d93e701·...·]-30">]</span><span·class="p">,</span><span·class="w"> |
| 173 | ····</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 173 | ····</span><span·class="nf">select</span><span·class="p"·data-group-id="7131543274-34">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·151,·SHA:·6a802cb71e2afd89274f9e6bcf0944066d3ff9a129b3b1682a1d40a149a7f056·...·]-34">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="nf">select</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nf">select</span><span·class="p"·data-group-id="7131543274-35">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·151,·SHA:·6a802cb71e2afd89274f9e6bcf0944066d3ff9a129b3b1682a1d40a149a7f056·...·]-35">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 175 | ····</span><span·class="nf">do_select</span><span·class="p"·data-group-id=" | 175 | ····</span><span·class="nf">do_select</span><span·class="p"·data-group-id="7131543274-36">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·151,·SHA:·6a802cb71e2afd89274f9e6bcf0944066d3ff9a129b3b1682a1d40a149a7f056·...·]-36">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="nf">select</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nf">select</span><span·class="p"·data-group-id="7131543274-37">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·227,·SHA:·063062be79c121da3a3afe98799f87d86b5007df825b883ce35368b02c5c8ead·...·]-37">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ····</span><span·class="nf">init_select</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="nf">init_select</span><span·class="p"·data-group-id="7131543274-38">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·227,·SHA:·063062be79c121da3a3afe98799f87d86b5007df825b883ce35368b02c5c8ead·...·]-38">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-39">(</span><span·class="p">_</span><span·class="n">Tid</span><span·class="p">,</span><span·class="p">_</span><span·class="p">,</span><span·class="p"·data-group-id="7131543274-40">{</span><span·class="ss">frag_cont</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·370,·SHA:·466813ef59b6c6fc46443e9f2cc702d3ab013d81266c446ff439642402b31ee1·...·]-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">'$end_of_table'</span><span·class="p">;</span><span·class="w"> |
| 179 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id=" | 179 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-42">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p">,</span><span·class="p"·data-group-id="7131543274-43">{</span><span·class="ss">frag_cont</span><span·class="p">,</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·637,·SHA:·a9f2b8b536875e0d21b401d99de6a71007c117c195f10bb0c338827a69916cd5·...·]-42">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="7131543274-46">{</span><span·class="n">Spec</span><span·class="p">,</span><span·class="n">LockKind</span><span·class="p">,</span><span·class="n">Limit</span><span·class="p"·data-group-id="7131543274-46">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Args</span><span·class="p">,</span><span·class="w"> |
| 181 | ····</span><span·class="n">InitFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 181 | ····</span><span·class="n">InitFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7131543274-47">(</span><span·class="n">FixedSpec</span><span·class="p"·data-group-id="7131543274-47">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">[·...·truncated·by·diffoscope;·len:·352,·SHA:·fe115d5d10ed47beaf88cc3525a5bf602cbe4cc0f9cf94c4721630c5b26f71d6·...·]-48">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 182 | ····</span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">fun_select</span><span·class="p"·data-group-id=" | 182 | ····</span><span·class="n">Res</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">fun_select</span><span·class="p"·data-group-id="7131543274-49">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p">,</span><span·class="n">Tab</span><span·class="p">,</span><span·class="n">Spec</span><span·class="p">,</span><span·class="n">LockKind</span><s[·...·truncated·by·diffoscope;·len:·297,·SHA:·e50556761b874151baac42af71b194cc40df5ff561e56eac70c6ee4eaea8ac72·...·]-49">)</span><span·class="p">,</span><span·class="w"> |
| 183 | ····</span><span·class="nf">frag_sel_cont</span><span·class="p"·data-group-id=" | 183 | ····</span><span·class="nf">frag_sel_cont</span><span·class="p"·data-group-id="7131543274-50">(</span><span·class="n">Res</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Rest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Args</span><span·class="p"·data-group-id="7131543274-50">)</span><span·class="p">;</span><span·class="w"> |
| 184 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id=" | 184 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-51">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p">,</span><span·class="p"·data-group-id="7131543274-52">{</span><span·class="ss">frag_cont</span><span·class="p">,</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·273,·SHA:·b748eecf8c1104ee67649d22bf129750375b3a50bd89d67c64ee2c1149a18fed·...·]-51">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ····</span><span·class="nf">frag_sel_cont</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="nf">frag_sel_cont</span><span·class="p"·data-group-id="7131543274-53">(</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-54">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p"[·...·truncated·by·diffoscope;·len:·233,·SHA:·0711bc92f62cbbff1c998d50eabaa3f9501d861de8211a6d428946fdae2b6ae1·...·]-53">)</span><span·class="p">;</span><span·class="w"> |
| 186 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id=" | 186 | </span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-55">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p">,</span><span·class="n">Else</span><span·class="p"·data-group-id="7131543274-55">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 187 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">select_cont</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">select_cont</span><span·class="p"·data-group-id="7131543274-56">(</span><span·class="n">Tid</span><span·class="p">,</span><span·class="n">Ts</span><span·class="p">,</span><span·class="n">Else</span><span·class="p"·data-group-id="7131543274-56">)</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="nf">all_keys</span><span·class="p"·data-group-id=" | 188 | </span><span·class="nf">all_keys</span><span·class="p"·data-group-id="7131543274-57">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·71,·SHA:·a8d3c91833433e0d2bbd623ded5dfcb55da292c5912c2ae9763f8605a416b5b4·...·]-57">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 189 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 189 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-58">[</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">all_keys</span><span·class="p"·data-group-id="7131543274-59">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·212,·SHA:·00a9576562706efdf3a5f1c452939137f5e020e7d4a393d22594653b22eb597e·...·]-59">)</span><span·class="w"> |
| 190 | ·············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id=" | 190 | ·············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-60">(</span><span·class="n">Tab</span><span·class="p"·data-group-id="7131543274-60">)</span><span·class="p"·data-group-id="7131543274-58">]</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="7131543274-61">(</span><span·class="n">Match</span><span·class="p"·data-group-id="7131543274-61">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="nf">clear_table</span><span·class="p"·data-group-id=" | 192 | </span><span·class="nf">clear_table</span><span·class="p"·data-group-id="7131543274-62">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·66,·SHA:·c3536f2d3cb18e945d876ab29299350b2e4a210ff145c8a60a07443a24e7469b·...·]-62">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="p"·data-group-id="7131543274-63">[</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">clear_table</span><span·class="p"·data-group-id="7131543274-64">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·609,·SHA:·f20282ae91a975a02da765466eda759bf43eae7d36889a6829e71499f5374d26·...·]-63">]</span><span·class="p">,</span><span·class="w"> |
| 194 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 194 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="nf">index_match_object</span><span·class="p"·data-group-id=" | 195 | </span><span·class="nf">index_match_object</span><span·class="p"·data-group-id="7131543274-66">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·220,·SHA:·81520110366cd3f3ce439dd175dc042c0b2ae3260fee2a7603e4bc0d99a78e24·...·]-66">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 196 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 196 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 197 | ········</span><span·class="p"·data-group-id=" | 197 | ········</span><span·class="p"·data-group-id="7131543274-67">[</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">index_match_object</span><span·class="p"·data-group-id="7131543274-68">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·371,·SHA:·a1c38bbb72821c322fd0fdd7761645486f11f63faccba18dd52249399ea3902b·...·]-68">)</span><span·class="w"> |
| 198 | ·········</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id=" | 198 | ·········</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-69">(</span><span·class="n">Tab</span><span·class="p"·data-group-id="7131543274-69">)</span><span·class="p"·data-group-id="7131543274-67">]</span><span·class="p">,</span><span·class="w"> |
| 199 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="7131543274-70">(</span><span·class="n">Match</span><span·class="p"·data-group-id="7131543274-70">)</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="nf">index_read</span><span·class="p"·data-group-id=" | 200 | </span><span·class="nf">index_read</span><span·class="p"·data-group-id="7131543274-71">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·220,·SHA:·a426588fcd48662222cc5689f4c6675cad0c583ea9d12afa8084f3613a7a0bec·...·]-71">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 201 | ····</span><span·class="n">Match</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 202 | ········</span><span·class="p"·data-group-id=" | 202 | ········</span><span·class="p"·data-group-id="7131543274-72">[</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">index_read</span><span·class="p"·data-group-id="7131543274-73">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·363,·SHA:·e3ce3673f7a2c3b1eca61d84b04cc602ebe918b26f29196058c0bf3a3a3bf090·...·]-73">)</span><span·class="w"> |
| 203 | ·········</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id=" | 203 | ·········</span><span·class="p">||</span><span·class="w">·</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-74">(</span><span·class="n">Tab</span><span·class="p"·data-group-id="7131543274-74">)</span><span·class="p"·data-group-id="7131543274-72">]</span><span·class="p">,</span><span·class="w"> |
| 204 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 204 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="7131543274-75">(</span><span·class="n">Match</span><span·class="p"·data-group-id="7131543274-75">)</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 205 | </span><span·class="nf">foldl</span><span·class="p"·data-group-id="7131543274-76">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·219,·SHA:·842a548bb591e79557d7ba824879ec29dca0b855404f26712024a022b29fe1b4·...·]-76">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ····</span><span·class="n">Fun2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 206 | ····</span><span·class="n">Fun2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7131543274-77">(</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·class="p"·data-group-id="7131543274-77">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ···················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 207 | ···················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="7131543274-78">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·218,·SHA:·03cb685a7089e31c814e9b6bb123c83d228ff3f0b8b7816fba282428432142ce·...·]-78">)</span><span·class="w"> |
| 208 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 208 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 209 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 209 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="7131543274-79">(</span><span·class="n">Fun2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-80">(</s[·...·truncated·by·diffoscope;·len:·125,·SHA:·ec57e713bff1fc9f3a6608e0e221f14bba22c153f20e3ec2c6a1dba892ecfb2b·...·]-79">)</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">foldr</span><span·class="p"·data-group-id=" | 210 | </span><span·class="nf">foldr</span><span·class="p"·data-group-id="7131543274-81">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·219,·SHA:·842a548bb591e79557d7ba824879ec29dca0b855404f26712024a022b29fe1b4·...·]-81">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="n">Fun2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 211 | ····</span><span·class="n">Fun2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7131543274-82">(</span><span·class="n">Frag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·class="p"·data-group-id="7131543274-82">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 212 | ···················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id=" | 212 | ···················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="7131543274-83">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·218,·SHA:·03cb685a7089e31c814e9b6bb123c83d228ff3f0b8b7816fba282428432142ce·...·]-83">)</span><span·class="w"> |
| 213 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 213 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 214 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id=" | 214 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="7131543274-84">(</span><span·class="n">Fun2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">frag_names</span><span·class="p"·data-group-id="7131543274-85">(</s[·...·truncated·by·diffoscope;·len:·125,·SHA:·2968cf0b79ff9653d473b9b5c1e7d0e70c189384619c3ea7dbf9d8fb247dafb5·...·]-84">)</span><span·class="p">.</span><span·class="w"> |
| 215 | </span><span·class="nf">table_info</span><span·class="p"·data-group-id=" | 215 | </span><span·class="nf">table_info</span><span·class="p"·data-group-id="7131543274-86">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7131543274-87">{</span><span·class="n">Tab</[·...·truncated·by·diffoscope;·len:·249,·SHA:·e89e83e4b9eba5e8b6aa05997612fc8c84542b570797cc23c6b962c7c3e37777·...·]-86">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 216 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id=" | 216 | ····</span><span·class="n">Frag</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">key_to_frag_name</span><span·class="p"·data-group-id="7131543274-88">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="7131543274-88">)</span><span·class="p">,</span><span·class="w"> |
| 217 | ····</span><span·class="nf">table_info2</span><span·class="p"·data-group-id=" | 217 | ····</span><span·class="nf">table_info2</span><span·class="p"·data-group-id="7131543274-89">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·142,·SHA:·3dede78c26e68cde4b1781fad94d7eb992943567bebfb3742cf7ec1f96a3b867·...·]-89">)</span><span·class="p">;</span><span·class="w"> |
| 218 | </span><span·class="nf">table_info</span><span·class="p"·data-group-id=" | 218 | </span><span·class="nf">table_info</span><span·class="p"·data-group-id="7131543274-90">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·67,·SHA:·0c1f31071ce2a7e6015ad038f4e6d9d77a846ac114b4d38ddfe49840975743a9·...·]-90">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 219 | ····</span><span·class="nf">table_info2</span><span·class="p"·data-group-id=" | 219 | ····</span><span·class="nf">table_info2</span><span·class="p"·data-group-id="7131543274-91">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·141,·SHA:·1aa07e0ce30c6057dc932fcc0d958feb5814ef708135945b44d07076e6381abe·...·]-91">)</span><span·class="p">.</span><span·class="w"> |
| 220 | </span><span·class="nf">table_info2</span><span·class="p"·data-group-id=" | 220 | </span><span·class="nf">table_info2</span><span·class="p"·data-group-id="7131543274-92">(</span><span·class="n">ActivityId</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Opaque</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·142,·SHA:·3dede78c26e68cde4b1781fad94d7eb992943567bebfb3742cf7ec1f96a3b867·...·]-92">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 221 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Item</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 221 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Item</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 222 | ········</span><span·class="nb">size</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 222 | ········</span><span·class="nb">size</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ············</span><span·class="n">SumFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 223 | ············</span><span·class="n">SumFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7131543274-93">(</span><span·class="p"·data-group-id="7131543274-94">{</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Size</span><span·class="p"·data-group-id="7131543274-94">}</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·89,·SHA:·3d7b63adbe2887f474936af812019a4f53358523dc420a40e85acb2be7f547a9·...·]-93">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Size</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 224 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 224 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="7131543274-95">(</span><span·class="n">SumFun</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">frag_size</span><span·class="p"·data-group-id="7131543274-96">(</s[·...·truncated·by·diffoscope;·len:·283,·SHA:·0cc8d9add1acc10fa16ec1ba32fa8e6fd95f47a15f730d9b03db082b306ab30b·...·]-95">)</span><span·class="p">;</span><span·class="w"> |
| 225 | ········</span><span·class="nb">memory</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 225 | ········</span><span·class="nb">memory</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 226 | ············</span><span·class="n">SumFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 226 | ············</span><span·class="n">SumFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7131543274-97">(</span><span·class="p"·data-group-id="7131543274-98">{</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Size</span><span·class="p"·data-group-id="7131543274-98">}</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·89,·SHA:·3d7b63adbe2887f474936af812019a4f53358523dc420a40e85acb2be7f547a9·...·]-97">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Size</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 227 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 227 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="7131543274-99">(</span><span·class="n">SumFun</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">frag_memory</span><span·class="p"·data-group-id="7131543274-100">([·...·truncated·by·diffoscope;·len:·287,·SHA:·18cccde049f63a4ec6e959b1c8e7c5cd9e30268f5d179de7ad4472167e30eaaf·...·]-99">)</span><span·class="p">;</span><span·class="w"> |
| 228 | ········</span><span·class="ss">base_table</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 228 | ········</span><span·class="ss">base_table</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 229 | ············</span><span·class="nf">lookup_prop</span><span·class="p"·data-group-id=" | 229 | ············</span><span·class="nf">lookup_prop</span><span·class="p"·data-group-id="7131543274-101">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">base_table</span><span·class="p"·data-group-id="7131543274-101">)</span><span·class="p">;</span><span·class="w"> |
| 230 | ········</span><span·class="ss">node_pool</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 230 | ········</span><span·class="ss">node_pool</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 231 | ············</span><span·class="nf">lookup_prop</span><span·class="p"·data-group-id=" | 231 | ············</span><span·class="nf">lookup_prop</span><span·class="p"·data-group-id="7131543274-102">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">node_pool</span><span·class="p"·data-group-id="7131543274-102">)</span><span·class="p">;</span><span·class="w"> |
| Max diff block lines reached; 65493/151451 bytes (43.24%) of diff not shown. | |||
| Offset 127, 148 lines modified | Offset 127, 148 lines modified | ||
| 127 | <h2·id="mnesia_frag_hash-callback-behavior"·class="section-heading"> | 127 | <h2·id="mnesia_frag_hash-callback-behavior"·class="section-heading"> |
| 128 | ··<a·href="#mnesia_frag_hash-callback-behavior"·class="hover-link"> | 128 | ··<a·href="#mnesia_frag_hash-callback-behavior"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">mnesia_frag_hash·Callback·Behavior</span> | 131 | ··<span·class="text">mnesia_frag_hash·Callback·Behavior</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0398711322-1">(</span><span·class="ss">mnesia_frag_hash</span><span·class="p"·data-group-id="0398711322-1">)</span><span·class="p">.</span><span·class="w"> |
| 134 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id=" | 134 | </span><span·class="p">-</span><span·class="na">compile</span><span·class="p"·data-group-id="0398711322-2">(</span><span·class="p"·data-group-id="0398711322-3">[</span><span·class="p"·data-group-id="0398711322-4">{</span><span·class="ss">nowarn_deprecated_function</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·461,·SHA:·d239c03163b498331995a0962164a2c65b2d2c93dd74645e22c78f7da002e6df·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 135 | </span><span·class="c1">%%·Fragmented·Table·Hashing·callback·functions</span><span·class="w"> | 135 | </span><span·class="c1">%%·Fragmented·Table·Hashing·callback·functions</span><span·class="w"> |
| 136 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 136 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0398711322-7">(</span><span·class="p"·data-group-id="0398711322-8">[</span><span·class="w"> |
| 137 | ·········</span><span·class="ss">init_state</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> | 137 | ·········</span><span·class="ss">init_state</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 138 | ·········</span><span·class="ss">add_frag</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 138 | ·········</span><span·class="ss">add_frag</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 139 | ·········</span><span·class="ss">del_frag</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 139 | ·········</span><span·class="ss">del_frag</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 140 | ·········</span><span·class="ss">key_to_frag_number</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> | 140 | ·········</span><span·class="ss">key_to_frag_number</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 141 | ·········</span><span·class="ss">match_spec_to_frag_numbers</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> | 141 | ·········</span><span·class="ss">match_spec_to_frag_numbers</span><span·class="p">/</span><span·class="mi">2</span><span·class="w"> |
| 142 | ········</span><span·class="p"·data-group-id=" | 142 | ········</span><span·class="p"·data-group-id="0398711322-8">]</span><span·class="p"·data-group-id="0398711322-7">)</span><span·class="p">.</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="1816699639-1">(</span><span·class="ss">hash_state</span><span·class="p">,</span><span·class="w"> |
| 143 | ····</span><span·class="p"·data-group-id=" | 143 | ····</span><span·class="p"·data-group-id="1816699639-2">{</span><span·class="ss">n_fragments</span><span·class="p">,</span><span·class="w"> |
| 144 | ·····</span><span·class="ss">next_n_to_split</span><span·class="p">,</span><span·class="w"> | 144 | ·····</span><span·class="ss">next_n_to_split</span><span·class="p">,</span><span·class="w"> |
| 145 | ·····</span><span·class="ss">n_doubles</span><span·class="p">,</span><span·class="w"> | 145 | ·····</span><span·class="ss">n_doubles</span><span·class="p">,</span><span·class="w"> |
| 146 | ·····</span><span·class="ss">function</span><span·class="p"·data-group-id=" | 146 | ·····</span><span·class="ss">function</span><span·class="p"·data-group-id="1816699639-2">}</span><span·class="p"·data-group-id="1816699639-1">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 147 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 148 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">init_state</span><span·class="p"·data-group-id=" | 148 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">init_state</span><span·class="p"·data-group-id="1816699639-3">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="1816699639-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">NewState</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 149 | ······</span><span·class="n">Tab</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 149 | ······</span><span·class="n">Tab</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1816699639-4">(</span><span·class="p"·data-group-id="1816699639-4">)</span><span·class="p">,</span><span·class="w"> |
| 150 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 150 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-5">(</span><span·class="p"·data-group-id="1816699639-5">)</span><span·class="p">,</span><span·class="w"> |
| 151 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 151 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-6">(</span><span·class="p"·data-group-id="1816699639-6">)</span><span·class="p">.</span><span·class="w"> |
| 152 | </span><span·class="nf">init_state</span><span·class="p"·data-group-id=" | 152 | </span><span·class="nf">init_state</span><span·class="p"·data-group-id="1816699639-7">(</span><span·class="p">_</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="1816699639-7">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">State</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ····</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 153 | ····</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-8">{</span><span·class="ss">n_fragments</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 154 | ················</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 154 | ················</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 155 | ················</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> | 155 | ················</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 156 | ················</span><span·class="ss">function</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">phash2</span><span·class="p"·data-group-id=" | 156 | ················</span><span·class="ss">function</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">phash2</span><span·class="p"·data-group-id="1816699639-8">}</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id="1816699639-9">(</span><span·class="p"·data-group-id="1816699639-10">{</span><span·class="ss">hash_state</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">P</span><s[·...·truncated·by·diffoscope;·len:·165,·SHA:·edca4376f289c1ff39faf5a63432e9cb80ce9f47094aa85c2122637c6c8f2dde·...·]-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 158 | ····</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-11">{</span><span·class="ss">n_fragments</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="n">N</span><span·class="p">,</span><span·class="w"> |
| 159 | ················</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p">,</span><span·class="w"> | 159 | ················</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p">,</span><span·class="w"> |
| 160 | ················</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="p">,</span><span·class="w"> | 160 | ················</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="p">,</span><span·class="w"> |
| 161 | ················</span><span·class="ss">function</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">phash</span><span·class="p"·data-group-id=" | 161 | ················</span><span·class="ss">function</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">phash</span><span·class="p"·data-group-id="1816699639-11">}</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 162 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 163 | </span><span·class="w"> | 163 | </span><span·class="w"> |
| 164 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">add_frag</span><span·class="p"·data-group-id=" | 164 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">add_frag</span><span·class="p"·data-group-id="1816699639-12">(</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-13">(</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·453,·SHA:·151de5c89014604b9756724fe76fb0c3c10e8ffc6dc6fd1be07d182b063227c8·...·]-14">}</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 165 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 165 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-15">(</span><span·class="p"·data-group-id="1816699639-15">)</span><span·class="p">,</span><span·class="w"> |
| 166 | ······</span><span·class="n">IterFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 166 | ······</span><span·class="n">IterFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-16">[</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-17">(</span><span·class="p"·data-group-id="1816699639-17">)</span><span·class="p"·data-group-id="1816699639-16">]</span><span·class="p">,</span><span·class="w"> |
| 167 | ······</span><span·class="n">AdditionalLockFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 167 | ······</span><span·class="n">AdditionalLockFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-18">[</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-19">(</span><span·class="p"·data-group-id="1816699639-19">)</span><span·class="p"·data-group-id="1816699639-18">]</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="nf">add_frag</span><span·class="p"·data-group-id=" | 168 | </span><span·class="nf">add_frag</span><span·class="p"·data-group-id="1816699639-20">(</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-21">{</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·570,·SHA:·b869cdc6adddf98da3b94d723c2549f78c7e06ce242c5ee9f752bd1787274a14·...·]-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 169 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">SplitN</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 169 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">SplitN</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 170 | ····</span><span·class="n">NewN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 170 | ····</span><span·class="n">NewN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 171 | ····</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id=" | 171 | ····</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-22">(</span><span·class="n">L</span><span·class="p"·data-group-id="1816699639-22">)</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 172 | ········</span><span·class="n">P2</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">P</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 172 | ········</span><span·class="n">P2</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">P2</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">P</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ············</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 173 | ············</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-23">{</span><span·class="ss">n_fragments</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="n">NewN</span><span·class="p">,</span><span·class="w"> |
| 174 | ·····························</span><span·class="ss">n_doubles</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 174 | ·····························</span><span·class="ss">n_doubles</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 175 | ·····························</span><span·class="ss">next_n_to_split</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id=" | 175 | ·····························</span><span·class="ss">next_n_to_split</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="1816699639-23">}</span><span·class="p">;</span><span·class="w"> |
| 176 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 176 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ············</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 177 | ············</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-24">{</span><span·class="ss">n_fragments</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="n">NewN</span><span·class="p">,</span><span·class="w"> |
| 178 | ·····························</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p"·data-group-id=" | 178 | ·····························</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p"·data-group-id="1816699639-24">}</span><span·class="w"> |
| 179 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 179 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="1816699639-25">{</span><span·class="n">State2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-26">[</span><span·class="n">SplitN</span><span·class="p"·data-group-id="1816699639-26">]</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·205,·SHA:·6bbffe4ef6df1ff856691282ad812c7f06a4d665aa0fc5a62ec9c83b768d65ef·...·]-25">}</span><span·class="p">;</span><span·class="w"> |
| 181 | </span><span·class="nf">add_frag</span><span·class="p"·data-group-id=" | 181 | </span><span·class="nf">add_frag</span><span·class="p"·data-group-id="1816699639-28">(</span><span·class="n">OldState</span><span·class="p"·data-group-id="1816699639-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 182 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id=" | 182 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id="1816699639-29">(</span><span·class="n">OldState</span><span·class="p"·data-group-id="1816699639-29">)</span><span·class="p">,</span><span·class="w"> |
| 183 | ····</span><span·class="nf">add_frag</span><span·class="p"·data-group-id=" | 183 | ····</span><span·class="nf">add_frag</span><span·class="p"·data-group-id="1816699639-30">(</span><span·class="n">State</span><span·class="p"·data-group-id="1816699639-30">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 184 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 185 | </span><span·class="w"> | 185 | </span><span·class="w"> |
| 186 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">del_frag</span><span·class="p"·data-group-id=" | 186 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">del_frag</span><span·class="p"·data-group-id="1816699639-31">(</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-32">(</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·453,·SHA:·b7dea296d9459d704bbfc3e0d7a544e0f839df57e8354037c71acd859bddbd66·...·]-33">}</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 187 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 187 | ······</span><span·class="n">NewState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-34">(</span><span·class="p"·data-group-id="1816699639-34">)</span><span·class="p">,</span><span·class="w"> |
| 188 | ······</span><span·class="n">IterFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 188 | ······</span><span·class="n">IterFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-35">[</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-36">(</span><span·class="p"·data-group-id="1816699639-36">)</span><span·class="p"·data-group-id="1816699639-35">]</span><span·class="p">,</span><span·class="w"> |
| 189 | ······</span><span·class="n">AdditionalLockFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 189 | ······</span><span·class="n">AdditionalLockFrags</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-37">[</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-38">(</span><span·class="p"·data-group-id="1816699639-38">)</span><span·class="p"·data-group-id="1816699639-37">]</span><span·class="p">.</span><span·class="w"> |
| 190 | </span><span·class="nf">del_frag</span><span·class="p"·data-group-id=" | 190 | </span><span·class="nf">del_frag</span><span·class="p"·data-group-id="1816699639-39">(</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-40">{</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·570,·SHA:·b04d7a816dad8d19671a6bfb2ac7f12377172b3eba44ee2ff287d7f358915704·...·]-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 191 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">SplitN</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 191 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">SplitN</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 192 | ····</span><span·class="k">if</span><span·class="w"> | 192 | ····</span><span·class="k">if</span><span·class="w"> |
| 193 | ········</span><span·class="n">P</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">1</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 193 | ········</span><span·class="n">P</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">1</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 194 | ············</span><span·class="n">L2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 194 | ············</span><span·class="n">L2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 195 | ············</span><span·class="n">MergeN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id=" | 195 | ············</span><span·class="n">MergeN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-41">(</span><span·class="n">L2</span><span·class="p"·data-group-id="1816699639-41">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 196 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-42">{</span><span·class="ss">n_fragments</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 197 | ······································</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">MergeN</span><span·class="p">,</span><span·class="w"> | 197 | ······································</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">MergeN</span><span·class="p">,</span><span·class="w"> |
| 198 | ······································</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L2</span><span·class="p"·data-group-id=" | 198 | ······································</span><span·class="ss">n_doubles</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="n">L2</span><span·class="p"·data-group-id="1816699639-42">}</span><span·class="p">,</span><span·class="w"> |
| 199 | ············</span><span·class="p"·data-group-id=" | 199 | ············</span><span·class="p"·data-group-id="1816699639-43">{</span><span·class="n">State2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-44">[</span><span·class="n">N</span><span·class="p"·data-group-id="1816699639-44">]</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·202,·SHA:·a42722ff929cc75e12600524ed19c22914dd89d96bf52c7e00991e554057e511·...·]-43">}</span><span·class="p">;</span><span·class="w"> |
| 200 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 200 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 201 | ············</span><span·class="n">MergeN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p">,</span><span·class="w"> | 201 | ············</span><span·class="n">MergeN</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">P</span><span·class="p">,</span><span·class="w"> |
| 202 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id=" | 202 | ············</span><span·class="n">State2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-46">{</span><span·class="ss">n_fragments</span><span·class="w">·····</span><span·class="o">=</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 203 | ······································</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">MergeN</span><span·class="p"·data-group-id=" | 203 | ······································</span><span·class="ss">next_n_to_split</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">MergeN</span><span·class="p"·data-group-id="1816699639-46">}</span><span·class="p">,</span><span·class="w"> |
| 204 | ············</span><span·class="p"·data-group-id=" | 204 | ············</span><span·class="p"·data-group-id="1816699639-47">{</span><span·class="n">State2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-48">[</span><span·class="n">N</span><span·class="p"·data-group-id="1816699639-48">]</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·202,·SHA:·c08d82aae48ba2034ba0a6a24967a77e0c60031bc65024159a7e6240148f5d1f·...·]-47">}</span><span·class="w"> |
| 205 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 205 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 206 | </span><span·class="nf">del_frag</span><span·class="p"·data-group-id=" | 206 | </span><span·class="nf">del_frag</span><span·class="p"·data-group-id="1816699639-50">(</span><span·class="n">OldState</span><span·class="p"·data-group-id="1816699639-50">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id=" | 207 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id="1816699639-51">(</span><span·class="n">OldState</span><span·class="p"·data-group-id="1816699639-51">)</span><span·class="p">,</span><span·class="w"> |
| 208 | ····</span><span·class="nf">del_frag</span><span·class="p"·data-group-id=" | 208 | ····</span><span·class="nf">del_frag</span><span·class="p"·data-group-id="1816699639-52">(</span><span·class="n">State</span><span·class="p"·data-group-id="1816699639-52">)</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 209 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 210 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id=" | 210 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-53">(</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="1816699639-53">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Fragnum</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 211 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 211 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-54">(</span><span·class="p"·data-group-id="1816699639-54">)</span><span·class="p">,</span><span·class="w"> |
| 212 | ······</span><span·class="n">Key</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 212 | ······</span><span·class="n">Key</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-55">(</span><span·class="p"·data-group-id="1816699639-55">)</span><span·class="p">,</span><span·class="w"> |
| 213 | ······</span><span·class="n">Fragnum</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id=" | 213 | ······</span><span·class="n">Fragnum</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-56">(</span><span·class="p"·data-group-id="1816699639-56">)</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id=" | 214 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-57">(</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-58">{</span><span·class="ss">function</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">[·...·truncated·by·diffoscope;·len:·537,·SHA:·0569dba81e0f263923cc5cb0acc59a113822bb08d7523bba32dd1916249f4e5f·...·]-57">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">phash</span><span·class="p"·data-group-id=" | 215 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">phash</span><span·class="p"·data-group-id="1816699639-59">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-60">(</span><span·class="n">L</span><span·class="w">·</span><span·class="o">+</span><sp[·...·truncated·by·diffoscope;·len:·141,·SHA:·9b9030e645f3ab48417959da799c42fe376d3d3102380cd279562293f2230738·...·]-59">)</span><span·class="p">,</span><span·class="w"> |
| 216 | ····</span><span·class="k">if</span><span·class="w"> | 216 | ····</span><span·class="k">if</span><span·class="w"> |
| 217 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 217 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 218 | ············</span><span·class="n">A</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id=" | 218 | ············</span><span·class="n">A</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-61">(</span><span·class="n">L</span><span·class="p"·data-group-id="1816699639-61">)</span><span·class="p">;</span><span·class="w"> |
| 219 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 219 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ············</span><span·class="n">A</span><span·class="w"> | 220 | ············</span><span·class="n">A</span><span·class="w"> |
| 221 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 221 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 222 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id=" | 222 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-62">(</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-63">{</span><span·class="ss">function</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nb">[·...·truncated·by·diffoscope;·len:·538,·SHA:·3b25952d1bbc5e889b56d6ed1b7b5c5c26d6d149ccd00c9d8e4d4cead792d3fb·...·]-62">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 223 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">phash2</span><span·class="p"·data-group-id=" | 223 | ····</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">phash2</span><span·class="p"·data-group-id="1816699639-64">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-65">(</span><span·class="n">L</span><span·class="w">·</span><span·class="o">+</span><sp[·...·truncated·by·diffoscope;·len:·141,·SHA:·41d3db064500a5cbd5854236d40d7b5abf29167ac981326d7df6b3486bad5402·...·]-64">)</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 224 | ····</span><span·class="k">if</span><span·class="w"> | 224 | ····</span><span·class="k">if</span><span·class="w"> |
| 225 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 225 | ········</span><span·class="n">A</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 226 | ············</span><span·class="n">A</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id=" | 226 | ············</span><span·class="n">A</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="nf">power2</span><span·class="p"·data-group-id="1816699639-66">(</span><span·class="n">L</span><span·class="p"·data-group-id="1816699639-66">)</span><span·class="p">;</span><span·class="w"> |
| 227 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 227 | ········</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ············</span><span·class="n">A</span><span·class="w"> | 228 | ············</span><span·class="n">A</span><span·class="w"> |
| 229 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 229 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 230 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id=" | 230 | </span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-67">(</span><span·class="n">OldState</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="1816699639-67">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 231 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id=" | 231 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">convert_old_state</span><span·class="p"·data-group-id="1816699639-68">(</span><span·class="n">OldState</span><span·class="p"·data-group-id="1816699639-68">)</span><span·class="p">,</span><span·class="w"> |
| 232 | ····</span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id=" | 232 | ····</span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-69">(</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="1816699639-69">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> | 233 | </span><span·class="c1">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span><span·class="w"> |
| 234 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">match_spec_to_frag_numbers</span><span·class="p"·data-group-id=" | 234 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">match_spec_to_frag_numbers</span><span·class="p"·data-group-id="1816699639-70">(</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MatchSpec</span><span·class="p"·data-group-id="1816699639-70">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Fragnums</span><span·class="w">·</span><span·class="k">when</span><span·class="w"> |
| 235 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 235 | ······</span><span·class="n">State</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="1816699639-71">(</span><span·class="p"·data-group-id="1816699639-71">)</span><span·class="p">,</span><span·class="w"> |
| 236 | ······</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec</span><span·class="p"·data-group-id=" | 236 | ······</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec</span><span·class="p"·data-group-id="1816699639-72">(</span><span·class="p"·data-group-id="1816699639-72">)</span><span·class="p">,</span><span·class="w"> |
| 237 | ······</span><span·class="n">Fragnums</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 237 | ······</span><span·class="n">Fragnums</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1816699639-73">[</span><span·class="nf">integer</span><span·class="p"·data-group-id="1816699639-74">(</span><span·class="p"·data-group-id="1816699639-74">)</span><span·class="p"·data-group-id="1816699639-73">]</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="nf">match_spec_to_frag_numbers</span><span·class="p"·data-group-id=" | 238 | </span><span·class="nf">match_spec_to_frag_numbers</span><span·class="p"·data-group-id="1816699639-75">(</span><span·class="o">#</span><span·class="ss">hash_state</span><span·class="p"·data-group-id="1816699639-76">{</span><span·class="ss">n_fragments</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n[·...·truncated·by·diffoscope;·len:·285,·SHA:·a6543b88e0266ed74ff39dfc84ce1ae90554a85bed3df819a488d59b2549969a·...·]-75">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 239 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 239 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 240 | ········</span><span·class="p"·data-group-id=" | 240 | ········</span><span·class="p"·data-group-id="1816699639-77">[</span><span·class="p"·data-group-id="1816699639-78">{</span><span·class="n">HeadPat</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span[·...·truncated·by·diffoscope;·len:·555,·SHA:·01f278ac9ad895f44926b5b3417e138b51c3e5906c3dd0c9a9226cd6cecec834·...·]-80">)</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 241 | ············</span><span·class="n">KeyPat</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 241 | ············</span><span·class="n">KeyPat</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="1816699639-81">(</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HeadPat</span><span·class="p"·data-group-id="1816699639-81">)</span><span·class="p">,</span><span·class="w"> |
| 242 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">has_var</span><span·class="p"·data-group-id=" | 242 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">has_var</span><span·class="p"·data-group-id="1816699639-82">(</span><span·class="n">KeyPat</span><span·class="p"·data-group-id="1816699639-82">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 243 | ················</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 243 | ················</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 244 | ····················</span><span·class="p"·data-group-id=" | 244 | ····················</span><span·class="p"·data-group-id="1816699639-83">[</span><span·class="nf">key_to_frag_number</span><span·class="p"·data-group-id="1816699639-84">(</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">KeyPat</span><span·class="p"·data-group-id="1[·...·truncated·by·diffoscope;·len:·63,·SHA:·5ae1e393e27adfc5dcad0fa2856918089daa01431762db4b216702e12ea5b729·...·]-83">]</span><span·class="p">;</span><span·class="w"> |
| 245 | ················</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 245 | ················</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 5490/72799 bytes (7.54%) of diff not shown. | |||
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 133, 47 lines modified | Offset 133, 47 lines modified | ||
| 133 | ··<a·href="#starting-mnesia-for-the-first-time"·class="hover-link"> | 133 | ··<a·href="#starting-mnesia-for-the-first-time"·class="hover-link"> |
| 134 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 134 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 135 | ··</a> | 135 | ··</a> |
| 136 | ··<span·class="text">Starting·Mnesia·for·the·First·Time</span> | 136 | ··<span·class="text">Starting·Mnesia·for·the·First·Time</span> |
| 137 | </h2> | 137 | </h2> |
| 138 | <p>This·section·provides·a·simplified·demonstration·of·a·<code·class="inline">Mnesia</code>·system·startup. | 138 | <p>This·section·provides·a·simplified·demonstration·of·a·<code·class="inline">Mnesia</code>·system·startup. |
| 139 | The·dialogue·from·the·Erlang·shell·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-mnesia·dir·'"/tmp/funky"'</span><span·class="w"> | 139 | The·dialogue·from·the·Erlang·shell·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-mnesia·dir·'"/tmp/funky"'</span><span·class="w"> |
| 140 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id=" | 140 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">15.1</span><span·class="p">.</span><span·class="mi">2</span><span·class="p"·data-group-id="8255837813-1">]</span><span·class="w"> |
| 141 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 141 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-2">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·d87f9d307bfcf56e9c723565725166b0cf987230f975fe295fff59341fdc73aa·...·]-2">)</span><span·class="gp·unselectable"> |
| 142 | 1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id=" | 142 | 1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id="8255837813-4">(</span><span·class="p"·data-group-id="8255837813-5">[</span><span·class="nf">node</span><span·class="p"·data-group-id="8255837813-6">(</span><span·class="p"·data-group-id="8255837813-6">)</span><span·class="p"·data-group-id="8255837813-5">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·af8cc1d7ee5160faba78ae94f3dd7a783e2abda861b637b10b58d7aa7868e1b6·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 143 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 144 | 2>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 144 | 2>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="8255837813-7">(</span><span·class="p"·data-group-id="8255837813-7">)</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 145 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 146 | 3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 146 | 3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="8255837813-8">(</span><span·class="ss">funky</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-9">[</span><span·class="p"·data-group-id="8255837813-9">]</span><span·class="p"·data-group-id="8255837813-8">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="p"·data-group-id=" | 147 | </span><span·class="p"·data-group-id="8255837813-10">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="8255837813-10">}</span><span·class="gp·unselectable"> |
| 148 | 4>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id=" | 148 | 4>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id="8255837813-11">(</span><span·class="p"·data-group-id="8255837813-11">)</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Processes</span><span·class="w">·</span><span·class="ss">holding</span><span·class="w">·</span><span·class="ss">locks</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· | 149 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Processes</span><span·class="w">·</span><span·class="ss">holding</span><span·class="w">·</span><span·class="ss">locks</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· |
| 150 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Processes</span><span·class="w">·</span><span·class="ss">waiting</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">locks</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· | 150 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Processes</span><span·class="w">·</span><span·class="ss">waiting</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">locks</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· |
| 151 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Participant</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· | 151 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Participant</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· |
| 152 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Coordinator</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w"> | 152 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Coordinator</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w"> |
| 153 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Uncertain</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· | 153 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Uncertain</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· |
| 154 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Active</span><span·class="w">·</span><span·class="ss">tables</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· | 154 | </span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Active</span><span·class="w">·</span><span·class="ss">tables</span><span·class="w">·</span><span·class="o"><-</span><span·class="o">--</span><span·class="w">· |
| 155 | </span><span·class="ss">funky</span><span·class="w">··········</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">········</span><span·class="ss">records</span><span·class="w">·</span><span·class="ss">occupying</span><span·class="w">·</span><span·class="mi">305</span><span·class="w">······</span><span·class="ss">words</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">mem</span><span·class="w"> | 155 | </span><span·class="ss">funky</span><span·class="w">··········</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">········</span><span·class="ss">records</span><span·class="w">·</span><span·class="ss">occupying</span><span·class="w">·</span><span·class="mi">305</span><span·class="w">······</span><span·class="ss">words</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">mem</span><span·class="w"> |
| 156 | </span><span·class="ss">schema</span><span·class="w">·········</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="mi">2</span><span·class="w">········</span><span·class="ss">records</span><span·class="w">·</span><span·class="ss">occupying</span><span·class="w">·</span><span·class="mi">533</span><span·class="w">······</span><span·class="ss">words</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">mem</span><span·class="w"> | 156 | </span><span·class="ss">schema</span><span·class="w">·········</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="mi">2</span><span·class="w">········</span><span·class="ss">records</span><span·class="w">·</span><span·class="ss">occupying</span><span·class="w">·</span><span·class="mi">533</span><span·class="w">······</span><span·class="ss">words</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">mem</span><span·class="w"> |
| 157 | </span><span·class="o">==</span><span·class="p">=></span><span·class="w">·</span><span·class="n">System</span><span·class="w">·</span><span·class="ss">info</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="s">"4.23.2"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">debug</span><span·class="w">·</span><span·class="ss">level</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">none</span><span·class="w">·</span><span·class="o"><=</span><span·class="o">==</span><span·class="w"> | 157 | </span><span·class="o">==</span><span·class="p">=></span><span·class="w">·</span><span·class="n">System</span><span·class="w">·</span><span·class="ss">info</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="s">"4.23.2"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">debug</span><span·class="w">·</span><span·class="ss">level</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">none</span><span·class="w">·</span><span·class="o"><=</span><span·class="o">==</span><span·class="w"> |
| 158 | </span><span·class="ss">opt_disc</span><span·class="p">.</span><span·class="w">·</span><span·class="n">Directory</span><span·class="w">·</span><span·class="s">"/tmp/funky"</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">used</span><span·class="p">.</span><span·class="w"> | 158 | </span><span·class="ss">opt_disc</span><span·class="p">.</span><span·class="w">·</span><span·class="n">Directory</span><span·class="w">·</span><span·class="s">"/tmp/funky"</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">used</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="ss">use</span><span·class="w">·</span><span·class="ss">fallback</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">restart</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> | 159 | </span><span·class="ss">use</span><span·class="w">·</span><span·class="ss">fallback</span><span·class="w">·</span><span·class="ss">at</span><span·class="w">·</span><span·class="ss">restart</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> |
| 160 | </span><span·class="ss">running</span><span·class="w">·</span><span·class="ss">db</span><span·class="w">·</span><span·class="nb">nodes</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 160 | </span><span·class="ss">running</span><span·class="w">·</span><span·class="ss">db</span><span·class="w">·</span><span·class="nb">nodes</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-12">[</span><span·class="ss">nonode@nohost</span><span·class="p"·data-group-id="8255837813-12">]</span><span·class="w"> |
| 161 | </span><span·class="ss">stopped</span><span·class="w">·</span><span·class="ss">db</span><span·class="w">·</span><span·class="nb">nodes</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 161 | </span><span·class="ss">stopped</span><span·class="w">·</span><span·class="ss">db</span><span·class="w">·</span><span·class="nb">nodes</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-13">[</span><span·class="p"·data-group-id="8255837813-13">]</span><span·class="w"> |
| 162 | </span><span·class="ss">master</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">tables</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 162 | </span><span·class="ss">master</span><span·class="w">·</span><span·class="nb">node</span><span·class="w">·</span><span·class="ss">tables</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-14">[</span><span·class="p"·data-group-id="8255837813-14">]</span><span·class="w"> |
| 163 | </span><span·class="ss">remote</span><span·class="w">·············</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 163 | </span><span·class="ss">remote</span><span·class="w">·············</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-15">[</span><span·class="p"·data-group-id="8255837813-15">]</span><span·class="w"> |
| 164 | </span><span·class="ss">ram_copies</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 164 | </span><span·class="ss">ram_copies</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-16">[</span><span·class="ss">funky</span><span·class="p"·data-group-id="8255837813-16">]</span><span·class="w"> |
| 165 | </span><span·class="ss">disc_copies</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 165 | </span><span·class="ss">disc_copies</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-17">[</span><span·class="ss">schema</span><span·class="p"·data-group-id="8255837813-17">]</span><span·class="w"> |
| 166 | </span><span·class="ss">disc_only_copies</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 166 | </span><span·class="ss">disc_only_copies</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-18">[</span><span·class="p"·data-group-id="8255837813-18">]</span><span·class="w"> |
| 167 | </span><span·class="p"·data-group-id=" | 167 | </span><span·class="p"·data-group-id="8255837813-19">[</span><span·class="p"·data-group-id="8255837813-20">{</span><span·class="ss">nonode@nohost</span><span·class="p">,</span><span·class="ss">disc_copies</span><span·class="p"·data-group-id="8255837813-20">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·222,·SHA:·c36d69acd94bbdc32a2372adb73b2a783e18300c092ad58e8ea30e28d4927863·...·]-21">]</span><span·class="w"> |
| 168 | </span><span·class="p"·data-group-id=" | 168 | </span><span·class="p"·data-group-id="8255837813-22">[</span><span·class="p"·data-group-id="8255837813-23">{</span><span·class="ss">nonode@nohost</span><span·class="p">,</span><span·class="ss">ram_copies</span><span·class="p"·data-group-id="8255837813-23">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·220,·SHA:·d9c44c1f26a8b9961de73ada2fc3d0716148a544a48b75060979ca19888bfbc3·...·]-24">]</span><span·class="w"> |
| 169 | </span><span·class="mi">3</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="ss">committed</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">aborted</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">restarted</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="ss">logged</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">disc</span><span·class="w"> | 169 | </span><span·class="mi">3</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="ss">committed</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">aborted</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">restarted</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="ss">logged</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">disc</span><span·class="w"> |
| 170 | </span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">held</span><span·class="w">·</span><span·class="ss">locks</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">queue</span><span·class="p">;</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">local</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">remote</span><span·class="w"> | 170 | </span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">held</span><span·class="w">·</span><span·class="ss">locks</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">queue</span><span·class="p">;</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">local</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">remote</span><span·class="w"> |
| 171 | </span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="ss">waits</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">other</span><span·class="w">·</span><span·class="nc">nodes</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 171 | </span><span·class="mi">0</span><span·class="w">·</span><span·class="ss">transactions</span><span·class="w">·</span><span·class="ss">waits</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">other</span><span·class="w">·</span><span·class="nc">nodes</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8255837813-25">[</span><span·class="p"·data-group-id="8255837813-25">]</span><span·class="w"> |
| 172 | </span><span·class="ss">ok</span></code></pre><p>In·this·example,·the·following·actions·are·performed:</p><ul><li><em>Step·1:</em>·The·Erlang·system·is·started·from·the·UNIX·prompt·with·a·flag | 172 | </span><span·class="ss">ok</span></code></pre><p>In·this·example,·the·following·actions·are·performed:</p><ul><li><em>Step·1:</em>·The·Erlang·system·is·started·from·the·UNIX·prompt·with·a·flag |
| 173 | <code·class="inline">-mnesia·dir·'"/tmp/funky"'</code>,·which·indicates·in·which·directory·to·store·the | 173 | <code·class="inline">-mnesia·dir·'"/tmp/funky"'</code>,·which·indicates·in·which·directory·to·store·the |
| 174 | data.</li><li><em>Step·2:</em>·A·new·empty·schema·is·initialized·on·the·local·node·by·evaluating | 174 | data.</li><li><em>Step·2:</em>·A·new·empty·schema·is·initialized·on·the·local·node·by·evaluating |
| 175 | <a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema([node()])</code></a>.·The·schema | 175 | <a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema([node()])</code></a>.·The·schema |
| 176 | contains·information·about·the·database·in·general.·This·is·explained·in | 176 | contains·information·about·the·database·in·general.·This·is·explained·in |
| 177 | detail·later.</li><li><em>Step·3:</em>·The·DBMS·is·started·by·evaluating | 177 | detail·later.</li><li><em>Step·3:</em>·The·DBMS·is·started·by·evaluating |
| 178 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>.</li><li><em>Step·4:</em>·A·first·table·is·created,·called·<code·class="inline">funky</code>,·by·evaluating·the | 178 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>.</li><li><em>Step·4:</em>·A·first·table·is·created,·called·<code·class="inline">funky</code>,·by·evaluating·the |
| Offset 225, 36 lines modified | Offset 225, 36 lines modified | ||
| 225 | relationship.</li></ol></li></ul><h3·id="defining-structure-and-content"·class="section-heading"> | 225 | relationship.</li></ol></li></ul><h3·id="defining-structure-and-content"·class="section-heading"> |
| 226 | ··<a·href="#defining-structure-and-content"·class="hover-link"> | 226 | ··<a·href="#defining-structure-and-content"·class="hover-link"> |
| 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 227 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 228 | ··</a> | 228 | ··</a> |
| 229 | ··<span·class="text">Defining·Structure·and·Content</span> | 229 | ··<span·class="text">Defining·Structure·and·Content</span> |
| 230 | </h3> | 230 | </h3> |
| 231 | <p>First·the·record·definitions·are·entered·into·a·text·file·named·<code·class="inline">company.hrl</code>. | 231 | <p>First·the·record·definitions·are·entered·into·a·text·file·named·<code·class="inline">company.hrl</code>. |
| 232 | This·file·defines·the·following·structure·for·the·example·database:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 232 | This·file·defines·the·following·structure·for·the·example·database:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-1">(</span><span·class="ss">employee</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-2">{</span><span·class="ss">emp_no</span><span·class="p">,</span><span·class="w"> |
| 233 | ···················</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> | 233 | ···················</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> |
| 234 | ···················</span><span·class="ss">salary</span><span·class="p">,</span><span·class="w"> | 234 | ···················</span><span·class="ss">salary</span><span·class="p">,</span><span·class="w"> |
| 235 | ···················</span><span·class="ss">sex</span><span·class="p">,</span><span·class="w"> | 235 | ···················</span><span·class="ss">sex</span><span·class="p">,</span><span·class="w"> |
| 236 | ···················</span><span·class="ss">phone</span><span·class="p">,</span><span·class="w"> | 236 | ···················</span><span·class="ss">phone</span><span·class="p">,</span><span·class="w"> |
| 237 | ···················</span><span·class="ss">room_no</span><span·class="p"·data-group-id=" | 237 | ···················</span><span·class="ss">room_no</span><span·class="p"·data-group-id="7413342441-2">}</span><span·class="p"·data-group-id="7413342441-1">)</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="w"> | 238 | </span><span·class="w"> |
| 239 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 239 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-3">(</span><span·class="ss">dept</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-4">{</span><span·class="ss">id</span><span·class="p">,</span><span·class="w"> |
| 240 | ···············</span><span·class="ss">name</span><span·class="p"·data-group-id=" | 240 | ···············</span><span·class="ss">name</span><span·class="p"·data-group-id="7413342441-4">}</span><span·class="p"·data-group-id="7413342441-3">)</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="w"> | 241 | </span><span·class="w"> |
| 242 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 242 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-5">(</span><span·class="ss">project</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-6">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> |
| 243 | ··················</span><span·class="ss">number</span><span·class="p"·data-group-id=" | 243 | ··················</span><span·class="ss">number</span><span·class="p"·data-group-id="7413342441-6">}</span><span·class="p"·data-group-id="7413342441-5">)</span><span·class="p">.</span><span·class="w"> |
| 244 | </span><span·class="w"> | 244 | </span><span·class="w"> |
| 245 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 245 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-7">(</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-8">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="w"> |
| 246 | ··················</span><span·class="ss">dept</span><span·class="p"·data-group-id=" | 246 | ··················</span><span·class="ss">dept</span><span·class="p"·data-group-id="7413342441-8">}</span><span·class="p"·data-group-id="7413342441-7">)</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="w"> | 247 | </span><span·class="w"> |
| 248 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 248 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-9">(</span><span·class="ss">at_dep</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-10">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="w"> |
| 249 | ·················</span><span·class="ss">dept_id</span><span·class="p"·data-group-id=" | 249 | ·················</span><span·class="ss">dept_id</span><span·class="p"·data-group-id="7413342441-10">}</span><span·class="p"·data-group-id="7413342441-9">)</span><span·class="p">.</span><span·class="w"> |
| 250 | </span><span·class="w"> | 250 | </span><span·class="w"> |
| 251 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 251 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="7413342441-11">(</span><span·class="ss">in_proj</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7413342441-12">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="w"> |
| 252 | ··················</span><span·class="ss">proj_name</span><span·class="p"·data-group-id=" | 252 | ··················</span><span·class="ss">proj_name</span><span·class="p"·data-group-id="7413342441-12">}</span><span·class="p"·data-group-id="7413342441-11">)</span><span·class="p">.</span></code></pre><p>The·structure·defines·six·tables·in·the·database.·In·<code·class="inline">Mnesia</code>,·the·function |
| 253 | <a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table(Name,·Opts)</code></a>·creates·tables. | 253 | <a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table(Name,·Opts)</code></a>·creates·tables. |
| 254 | <code·class="inline">Name</code>·is·the·table·name.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·current·version·of·<code·class="inline">Mnesia</code>·does·not·require·that·the·name·of·the·table·is | 254 | <code·class="inline">Name</code>·is·the·table·name.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·current·version·of·<code·class="inline">Mnesia</code>·does·not·require·that·the·name·of·the·table·is |
| 255 | the·same·as·the·record·name,·see | 255 | the·same·as·the·record·name,·see |
| 256 | <a·href="mnesia_chap4.html#recordnames_tablenames">Record·Names·versus·Table·Names.</a>.</p></section><p>For·example,·the·table·for·employees·is·created·with·the·function | 256 | <a·href="mnesia_chap4.html#recordnames_tablenames">Record·Names·versus·Table·Names.</a>.</p></section><p>For·example,·the·table·for·employees·is·created·with·the·function |
| 257 | <code·class="inline">mnesia:create_table(employee,·[{attributes,·record_info(fields,·employee)}])</code>. | 257 | <code·class="inline">mnesia:create_table(employee,·[{attributes,·record_info(fields,·employee)}])</code>. |
| 258 | The·table·name·<code·class="inline">employee</code>·matches·the·name·for·records·specified·in·<code·class="inline">Opts</code>. | 258 | The·table·name·<code·class="inline">employee</code>·matches·the·name·for·records·specified·in·<code·class="inline">Opts</code>. |
| 259 | The·expression·<code·class="inline">record_info(fields,·RecordName)</code>·is·processed·by·the·Erlang | 259 | The·expression·<code·class="inline">record_info(fields,·RecordName)</code>·is·processed·by·the·Erlang |
| Offset 263, 52 lines modified | Offset 263, 52 lines modified | ||
| 263 | ··<a·href="#program"·class="hover-link"> | 263 | ··<a·href="#program"·class="hover-link"> |
| 264 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 264 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 265 | ··</a> | 265 | ··</a> |
| 266 | ··<span·class="text">Program</span> | 266 | ··<span·class="text">Program</span> |
| 267 | </h3> | 267 | </h3> |
| 268 | <p>The·following·shell·interaction·starts·<code·class="inline">Mnesia</code>·and·initializes·the·schema·for | 268 | <p>The·following·shell·interaction·starts·<code·class="inline">Mnesia</code>·and·initializes·the·schema·for |
| 269 | the·<code·class="inline">Company</code>·database:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</span><span·class="w"> | 269 | the·<code·class="inline">Company</code>·database:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</span><span·class="w"> |
| 270 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id=" | 270 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="6638401696-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">15.1</span><span·class="p">.</span><span·class="mi">2</span><span·class="p"·data-group-id="6638401696-1">]</span><span·class="w"> |
| 271 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 271 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id="6638401696-2">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·1f0b12e5e3465e50aa9a9703b5b062cf508176d49e52a99ddbe495e0d9f4bd35·...·]-2">)</span><span·class="gp·unselectable"> |
| 272 | 1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id=" | 272 | 1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id="6638401696-4">(</span><span·class="p"·data-group-id="6638401696-5">[</span><span·class="nf">node</span><span·class="p"·data-group-id="6638401696-6">(</span><span·class="p"·data-group-id="6638401696-6">)</span><span·class="p"·data-group-id="6638401696-5">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·fbc352af43026dfada67535efd7e79bf6a48701d78ac2d434b57265d7d2201f2·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 273 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 273 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 274 | 2>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 274 | 2>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="6638401696-7">(</span><span·class="p"·data-group-id="6638401696-7">)</span><span·class="p">.</span><span·class="w"> |
| 275 | </span><span·class="ss">ok</span></code></pre><p>The·following·program·module·creates·and·populates·previously·defined·tables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 275 | </span><span·class="ss">ok</span></code></pre><p>The·following·program·module·creates·and·populates·previously·defined·tables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="4320915853-1">(</span><span·class="s">"stdlib/include/qlc.hrl"</span><span·class="p"·data-group-id="4320915853-1">)</span><span·class="p">.</span><span·class="w"> |
| 276 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 276 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="4320915853-2">(</span><span·class="s">"company.hrl"</span><span·class="p"·data-group-id="4320915853-2">)</span><span·class="p">.</span><span·class="w"> |
| 277 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 277 | </span><span·class="nf">init</span><span·class="p"·data-group-id="4320915853-3">(</span><span·class="p"·data-group-id="4320915853-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 278 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 278 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-4">(</span><span·class="ss">employee</span><span·class="p">,</span><span·class="w"> |
| 279 | ························</span><span·class="p"·data-group-id=" | 279 | ························</span><span·class="p"·data-group-id="4320915853-5">[</span><span·class="p"·data-group-id="4320915853-6">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-7">(</span><span·class[·...·truncated·by·diffoscope;·len:·299,·SHA:·e2010c77016c83ee454a9dd84ac17d6e2e8bb1dc13c99be64f7721922b345030·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 280 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 280 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-8">(</span><span·class="ss">dept</span><span·class="p">,</span><span·class="w"> |
| 281 | ························</span><span·class="p"·data-group-id=" | 281 | ························</span><span·class="p"·data-group-id="4320915853-9">[</span><span·class="p"·data-group-id="4320915853-10">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-11">(</span><span·cla[·...·truncated·by·diffoscope;·len:·299,·SHA:·6c31a2c862f14ee615490c1e9af6227c5a17dce912374efec07075e4a1f541df·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 282 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 282 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-12">(</span><span·class="ss">project</span><span·class="p">,</span><span·class="w"> |
| 283 | ························</span><span·class="p"·data-group-id=" | 283 | ························</span><span·class="p"·data-group-id="4320915853-13">[</span><span·class="p"·data-group-id="4320915853-14">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-15">(</span><span·cl[·...·truncated·by·diffoscope;·len:·304,·SHA:·1c285d768fe360cd730c2bb2b177141afedc642f9e5dc95bf3cc867b64600c5b·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| 284 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 284 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-16">(</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4320915853-17">[</span><span·class="p"·data-group-id="4320915853-18">{</span><span·class="ss">type</span><span·class="p">,<[·...·truncated·by·diffoscope;·len:·98,·SHA:·a1dddd3c19c338667c1b2841bd6255a2228e4250ac4b25ec7ab09bcbfaa083a7·...·]-18">}</span><span·class="p">,</span><span·class="w"> |
| 285 | ··································</span><span·class="p"·data-group-id=" | 285 | ··································</span><span·class="p"·data-group-id="4320915853-19">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-20">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·250,·SHA:·d38c5dc22bf29ed5c3adf54755684e12b7cc3f12c6e68161b97c094da26954fb·...·]-16">)</span><span·class="p">,</span><span·class="w"> |
| 286 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 286 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-21">(</span><span·class="ss">at_dep</span><span·class="p">,</span><span·class="w"> |
| 287 | ·························</span><span·class="p"·data-group-id=" | 287 | ·························</span><span·class="p"·data-group-id="4320915853-22">[</span><span·class="p"·data-group-id="4320915853-23">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-24">(</span><span·cl[·...·truncated·by·diffoscope;·len:·303,·SHA:·6a9112b6094445d4665a369055826183abb18c483c66bce2e0668efbc09e4876·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 288 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 288 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="4320915853-25">(</span><span·class="ss">in_proj</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4320915853-26">[</span><span·class="p"·data-group-id="4320915853-27">{</span><span·class="ss">type</span><span·class="p">,<[·...·truncated·by·diffoscope;·len:·98,·SHA:·a1dddd3c19c338667c1b2841bd6255a2228e4250ac4b25ec7ab09bcbfaa083a7·...·]-27">}</span><span·class="p">,</span><span·class="w"> |
| 289 | ··································</span><span·class="p"·data-group-id=" | 289 | ··································</span><span·class="p"·data-group-id="4320915853-28">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="4320915853-29">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·250,·SHA:·ba069cc7da0fe0626a78153ca0925b7e1dbfbe01a38aab5e0f50a1abf4010d0e·...·]-25">)</span><span·class="p">.</span></code></pre><h3·id="program-explained"·class="section-heading"> |
| 290 | ··<a·href="#program-explained"·class="hover-link"> | 290 | ··<a·href="#program-explained"·class="hover-link"> |
| 291 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 291 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 292 | ··</a> | 292 | ··</a> |
| 293 | ··<span·class="text">Program·Explained</span> | 293 | ··<span·class="text">Program·Explained</span> |
| 294 | </h3> | 294 | </h3> |
| 295 | <p>The·following·commands·and·functions·are·used·to·initiate·the·<code·class="inline">Company</code> | 295 | <p>The·following·commands·and·functions·are·used·to·initiate·the·<code·class="inline">Company</code> |
| 296 | database:</p><ul><li><code·class="inline">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</code>.·This·is·a·UNIX | 296 | database:</p><ul><li><code·class="inline">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</code>.·This·is·a·UNIX |
| 297 | command-line·entry·that·starts·the·Erlang·system.·The·flag·<code·class="inline">-mnesia·dir·Dir</code> | 297 | command-line·entry·that·starts·the·Erlang·system.·The·flag·<code·class="inline">-mnesia·dir·Dir</code> |
| 298 | specifies·the·location·of·the·database·directory.·The·system·responds·and | 298 | specifies·the·location·of·the·database·directory.·The·system·responds·and |
| 299 | waits·for·further·input·with·the·prompt·<code·class="inline">1></code>.</li><li><a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema([node()])</code></a>.·This·function·has | 299 | waits·for·further·input·with·the·prompt·<code·class="inline">1></code>.</li><li><a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema([node()])</code></a>.·This·function·has |
| 300 | the·format·<code·class="inline">mnesia:create_schema(DiscNodeList)</code>·and·initiates·a·new·schema.·In | 300 | the·format·<code·class="inline">mnesia:create_schema(DiscNodeList)</code>·and·initiates·a·new·schema.·In |
| 301 | this·example,·a·non-distributed·system·using·only·one·node·is·created.·Schemas | 301 | this·example,·a·non-distributed·system·using·only·one·node·is·created.·Schemas |
| 302 | are·fully·explained·in·<a·href="mnesia_chap3.html#def_schema">Define·a·Schema</a>.</li><li><a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>.·This·function·starts·<code·class="inline">Mnesia</code>·and·is·fully | 302 | are·fully·explained·in·<a·href="mnesia_chap3.html#def_schema">Define·a·Schema</a>.</li><li><a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>.·This·function·starts·<code·class="inline">Mnesia</code>·and·is·fully |
| Max diff block lines reached; 115145/165725 bytes (69.48%) of diff not shown. | |||
| Offset 171, 26 lines modified | Offset 171, 26 lines modified | ||
| 171 | there·as·well.·This·action·extends·the·set·of·nodes·that·comprise·this | 171 | there·as·well.·This·action·extends·the·set·of·nodes·that·comprise·this |
| 172 | particular·<code·class="inline">Mnesia</code>·system.</p></li><li><p><a·href="mnesia.html#del_table_copy/2"><code·class="inline">mnesia:del_table_copy(Tab,·Node)</code></a>·deletes·the | 172 | particular·<code·class="inline">Mnesia</code>·system.</p></li><li><p><a·href="mnesia.html#del_table_copy/2"><code·class="inline">mnesia:del_table_copy(Tab,·Node)</code></a>·deletes·the |
| 173 | replica·of·table·<code·class="inline">Tab</code>·at·node·<code·class="inline">Node</code>.·When·the·last·replica·of·a·table·is | 173 | replica·of·table·<code·class="inline">Tab</code>·at·node·<code·class="inline">Node</code>.·When·the·last·replica·of·a·table·is |
| 174 | removed,·the·table·is·deleted.</p></li><li><p><a·href="mnesia.html#transform_table/4"><code·class="inline">mnesia:transform_table(Tab,·Fun,·NewAttributeList,·NewRecordName)</code></a> | 174 | removed,·the·table·is·deleted.</p></li><li><p><a·href="mnesia.html#transform_table/4"><code·class="inline">mnesia:transform_table(Tab,·Fun,·NewAttributeList,·NewRecordName)</code></a> |
| 175 | changes·the·format·on·all·records·in·table·<code·class="inline">Tab</code>.·It·applies·argument·<code·class="inline">Fun</code>·to | 175 | changes·the·format·on·all·records·in·table·<code·class="inline">Tab</code>.·It·applies·argument·<code·class="inline">Fun</code>·to |
| 176 | all·records·in·the·table.·<code·class="inline">Fun</code>·must·be·a·function·that·takes·a·record·of·the | 176 | all·records·in·the·table.·<code·class="inline">Fun</code>·must·be·a·function·that·takes·a·record·of·the |
| 177 | old·type,·and·returns·the·record·of·the·new·type.·The·table·key·must·not·be | 177 | old·type,·and·returns·the·record·of·the·new·type.·The·table·key·must·not·be |
| 178 | changed.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 178 | changed.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8627651253-1">(</span><span·class="ss">old</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8627651253-2">{</span><span·class="ss">key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">val</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·1d416ecd87c1a0d1e76d2cf54891af237866e2b7a45e1b5b6cf9577abf453e80·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 179 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="8627651253-3">(</span><span·class="ss">new</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8627651253-4">{</span><span·class="ss">key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">val</span><spa[·...·truncated·by·diffoscope;·len:·167,·SHA:·be5edeeba1edb8b2b7231c94eba79a6d3024ac4ae07370448f67828f2405ec8b·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="n">Transformer</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 180 | </span><span·class="n">Transformer</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 181 | ···</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 181 | ···</span><span·class="nf">fun</span><span·class="p"·data-group-id="8627651253-5">(</span><span·class="n">X</span><span·class="p"·data-group-id="8627651253-5">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">record</span><span·class="p"·data-group-id="8627651253-6">(</span[·...·truncated·by·diffoscope;·len:·141,·SHA:·b8ea7ac614a7ea7b4ea6b7d8ab465a7ca847c455bc1e616882ab540b6dec0255·...·]-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 182 | ······</span><span·class="o">#</span><span·class="ss">new</span><span·class="p"·data-group-id=" | 182 | ······</span><span·class="o">#</span><span·class="ss">new</span><span·class="p"·data-group-id="8627651253-7">{</span><span·class="ss">key</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">old</span><span·class="p">.</span><span·class="ss">key</span><span·class="p">,</span><span·class="w"> |
| 183 | ···········</span><span·class="ss">val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">old</span><span·class="p">.</span><span·class="ss">val</span><span·class="p">,</span><span·class="w"> | 183 | ···········</span><span·class="ss">val</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">X</span><span·class="o">#</span><span·class="ss">old</span><span·class="p">.</span><span·class="ss">val</span><span·class="p">,</span><span·class="w"> |
| 184 | ···········</span><span·class="ss">extra</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p"·data-group-id=" | 184 | ···········</span><span·class="ss">extra</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p"·data-group-id="8627651253-7">}</span><span·class="w"> |
| 185 | ···</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 185 | ···</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 186 | </span><span·class="p"·data-group-id=" | 186 | </span><span·class="p"·data-group-id="8627651253-8">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p"·data-group-id="8627651253-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·129,·SHA:·6356e52af033e243fd27806b6ec2c3e416bdc1970e0d6860fdac23343d2510a8·...·]-9">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Transformer</span><span·class="p">,</span><span·class="w"> |
| 187 | ······································</span><span·class="nf">record_info</span><span·class="p"·data-group-id=" | 187 | ······································</span><span·class="nf">record_info</span><span·class="p"·data-group-id="8627651253-10">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">new</span><span·class="p"·data-group-id="8627651253-10">)</span><span·class="p">,</span><span·class="w"> |
| 188 | ······································</span><span·class="ss">new</span><span·class="p"·data-group-id=" | 188 | ······································</span><span·class="ss">new</span><span·class="p"·data-group-id="8627651253-9">)</span><span·class="p">,</span></code></pre><p>Argument·<code·class="inline">Fun</code>·can·also·be·the·atom·<code·class="inline">ignore</code>,·which·indicates·that·only·the |
| 189 | metadata·about·the·table·is·updated.·Use·of·<code·class="inline">ignore</code>·is·not·recommended·(as·it | 189 | metadata·about·the·table·is·updated.·Use·of·<code·class="inline">ignore</code>·is·not·recommended·(as·it |
| 190 | creates·inconsistencies·between·the·metadata·and·the·actual·data)·but·it·is | 190 | creates·inconsistencies·between·the·metadata·and·the·actual·data)·but·it·is |
| 191 | included·as·a·possibility·for·the·user·do·to·an·own·(offline)·transform.</p></li><li><p><a·href="mnesia.html#change_table_copy_type/3"><code·class="inline">mnesia:change_table_copy_type(Tab,·Node,·ToType)</code></a> | 191 | included·as·a·possibility·for·the·user·do·to·an·own·(offline)·transform.</p></li><li><p><a·href="mnesia.html#change_table_copy_type/3"><code·class="inline">mnesia:change_table_copy_type(Tab,·Node,·ToType)</code></a> |
| 192 | changes·the·storage·type·of·a·table.·For·example,·a·RAM·table·is·changed·to·a | 192 | changes·the·storage·type·of·a·table.·For·example,·a·RAM·table·is·changed·to·a |
| 193 | <code·class="inline">disc_table</code>·at·the·node·specified·as·<code·class="inline">Node</code>.</p></li></ul><h2·id="data-model"·class="section-heading"> | 193 | <code·class="inline">disc_table</code>·at·the·node·specified·as·<code·class="inline">Node</code>.</p></li></ul><h2·id="data-model"·class="section-heading"> |
| 194 | ··<a·href="#data-model"·class="hover-link"> | 194 | ··<a·href="#data-model"·class="hover-link"> |
| 195 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 195 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 234, 37 lines modified | Offset 234, 37 lines modified | ||
| 234 | <a·href="mnesia_chap2.html#getting_started">Getting·Started</a>·to·illustrate·how·to·run·a | 234 | <a·href="mnesia_chap2.html#getting_started">Getting·Started</a>·to·illustrate·how·to·run·a |
| 235 | database·on·two·separate·nodes,·called·<code·class="inline">a@gin</code>·and·<code·class="inline">b@skeppet</code>.·Each·of·these | 235 | database·on·two·separate·nodes,·called·<code·class="inline">a@gin</code>·and·<code·class="inline">b@skeppet</code>.·Each·of·these |
| 236 | nodes·must·have·a·<code·class="inline">Mnesia</code>·directory·and·an·initialized·schema·before·<code·class="inline">Mnesia</code> | 236 | nodes·must·have·a·<code·class="inline">Mnesia</code>·directory·and·an·initialized·schema·before·<code·class="inline">Mnesia</code> |
| 237 | can·be·started.·There·are·two·ways·to·specify·the·<code·class="inline">Mnesia</code>·directory·to·be·used:</p><ul><li><p>Specify·the·<code·class="inline">Mnesia</code>·directory·by·providing·an·application·parameter·either | 237 | can·be·started.·There·are·two·ways·to·specify·the·<code·class="inline">Mnesia</code>·directory·to·be·used:</p><ul><li><p>Specify·the·<code·class="inline">Mnesia</code>·directory·by·providing·an·application·parameter·either |
| 238 | when·starting·the·Erlang·shell·or·in·the·application·script.·Previously,·the | 238 | when·starting·the·Erlang·shell·or·in·the·application·script.·Previously,·the |
| 239 | following·example·was·used·to·create·the·directory·for·the·<code·class="inline">Company</code>·database:</p><pre><code·class="text">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</code></pre></li><li><p>If·no·command-line·flag·is·entered,·the·<code·class="inline">Mnesia</code>·directory·becomes·the·current | 239 | following·example·was·used·to·create·the·directory·for·the·<code·class="inline">Company</code>·database:</p><pre><code·class="text">%·erl·-mnesia·dir·'"/ldisc/scratch/Mnesia.Company"'</code></pre></li><li><p>If·no·command-line·flag·is·entered,·the·<code·class="inline">Mnesia</code>·directory·becomes·the·current |
| 240 | working·directory·on·the·node·where·the·Erlang·shell·is·started.</p></li></ul><p>To·start·the·<code·class="inline">Company</code>·database·and·get·it·running·on·the·two·specified·nodes, | 240 | working·directory·on·the·node·where·the·Erlang·shell·is·started.</p></li></ul><p>To·start·the·<code·class="inline">Company</code>·database·and·get·it·running·on·the·two·specified·nodes, |
| 241 | enter·the·following·commands:</p><ol><li>On·the·node·<code·class="inline">a@gin</code>:</li></ol><pre><code·class="text">·gin·%·erl·-sname·a··-mnesia·dir·'"/ldisc/scratch/Mnesia.company"'</code></pre><ol·start="2"><li>On·the·node·<code·class="inline">b@skeppet</code>:</li></ol><pre><code·class="text">skeppet·%·erl·-sname·b·-mnesia·dir·'"/ldisc/scratch/Mnesia.company"'</code></pre><ol·start="3"><li>On·one·of·the·two·nodes:</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(a@gin)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id=" | 241 | enter·the·following·commands:</p><ol><li>On·the·node·<code·class="inline">a@gin</code>:</li></ol><pre><code·class="text">·gin·%·erl·-sname·a··-mnesia·dir·'"/ldisc/scratch/Mnesia.company"'</code></pre><ol·start="2"><li>On·the·node·<code·class="inline">b@skeppet</code>:</li></ol><pre><code·class="text">skeppet·%·erl·-sname·b·-mnesia·dir·'"/ldisc/scratch/Mnesia.company"'</code></pre><ol·start="3"><li>On·one·of·the·two·nodes:</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(a@gin)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id="4189773044-1">(</span><span·class="p"·data-group-id="4189773044-2">[</span><span·class="ss">a@gin</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b@skeppet</span><span·class="p"·data-group-id="4189773044-2">]</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·24ffbce4b284f9dceb386410d92507a66b8ec32752f92e020ca03ff741545996·...·]-1">)</span><span·class="p">.</span></code></pre><ol·start="4"><li>The·function·<a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>·is·called·on·both·nodes.</li><li>To·initialize·the·database,·execute·the·following·code·on·one·of·the·two |
| 242 | nodes:</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">dist_init</span><span·class="p"·data-group-id=" | 242 | nodes:</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">dist_init</span><span·class="p"·data-group-id="9480810219-1">(</span><span·class="p"·data-group-id="9480810219-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 243 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 243 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-2">(</span><span·class="ss">employee</span><span·class="p">,</span><span·class="w"> |
| 244 | ·························</span><span·class="p"·data-group-id=" | 244 | ·························</span><span·class="p"·data-group-id="9480810219-3">[</span><span·class="p"·data-group-id="9480810219-4">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-5">[</span><span·class="ss">a@gin</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·158,·SHA:·70e29caacc09f728bb1d8f1597174646c370b29b6b1411142ace34ab11e84ae3·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 245 | ··························</span><span·class="p"·data-group-id=" | 245 | ··························</span><span·class="p"·data-group-id="9480810219-6">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-7">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w"> |
| 246 | ···················································</span><span·class="ss">employee</span><span·class="p"·data-group-id=" | 246 | ···················································</span><span·class="ss">employee</span><span·class="p"·data-group-id="9480810219-7">)</span><span·class="p"·data-group-id="9480810219-6">}</span><span·class="p"·data-group-id="9480810219-3">]</span><span·class="p"·data-group-id="9480810219-2">)</span><span·class="p">,</span><span·class="w"> |
| 247 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 247 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-8">(</span><span·class="ss">dept</span><span·class="p">,</span><span·class="w"> |
| 248 | ·························</span><span·class="p"·data-group-id=" | 248 | ·························</span><span·class="p"·data-group-id="9480810219-9">[</span><span·class="p"·data-group-id="9480810219-10">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-11">[</span><span·class="ss">a@gin</span><span·class="p"[·...·truncated·by·diffoscope;·len:·161,·SHA:·7890b9201c95e07af3dcd74b75abf8e82af86e4ad1351a38c56b98a501e7c9a6·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 249 | ··························</span><span·class="p"·data-group-id=" | 249 | ··························</span><span·class="p"·data-group-id="9480810219-12">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-13">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·246,·SHA:·1f1821932b985b9e96ce8d3ddf019502e56fd20b2865a455a38362dba0b4c890·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 250 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-14">(</span><span·class="ss">project</span><span·class="p">,</span><span·class="w"> |
| 251 | ·························</span><span·class="p"·data-group-id=" | 251 | ·························</span><span·class="p"·data-group-id="9480810219-15">[</span><span·class="p"·data-group-id="9480810219-16">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-17">[</span><span·class="ss">a@gin</span><span·class="p[·...·truncated·by·diffoscope;·len:·162,·SHA:·f14a0fe5af0f3bdc4ba2f82572676d008106aae0982e135fd340148e0adb93f9·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 252 | ··························</span><span·class="p"·data-group-id=" | 252 | ··························</span><span·class="p"·data-group-id="9480810219-18">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-19">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·250,·SHA:·d9dd99d0d64a1937a89a64d8f51ed2189de5fb4b83c8919e3b54da94b5a1ac86·...·]-14">)</span><span·class="p">,</span><span·class="w"> |
| 253 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 253 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-20">(</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-21">[</span><span·class="p"·data-group-id="9480810219-22">{</span><span·class="ss">type</span><span·class="p">,<[·...·truncated·by·diffoscope;·len:·98,·SHA:·7af19a3dd3c5d21c0bcdbda1a5053b64d0b87ae37920073add5b57f2f2b2b010·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ··································</span><span·class="p"·data-group-id=" | 254 | ··································</span><span·class="p"·data-group-id="9480810219-23">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-24">[</span><span·class="ss">a@gin</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b@s[·...·truncated·by·diffoscope;·len:·108,·SHA:·bbcffa9f6284f8256c9d0929c02caacdfbc3d1e5a1aa6b96c8d52432957d1fb0·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 255 | ··································</span><span·class="p"·data-group-id=" | 255 | ··································</span><span·class="p"·data-group-id="9480810219-25">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-26">(</span><span·class="ss">fields</span><span·class="p">,</span><span·class="w"> |
| 256 | ···························································</span><span·class="ss">manager</span><span·class="p"·data-group-id=" | 256 | ···························································</span><span·class="ss">manager</span><span·class="p"·data-group-id="9480810219-26">)</span><span·class="p"·data-group-id="9480810219-25">}</span><span·class="p"·data-group-id="9480810219-21">]</span><span·class="p"·data-group-id="9480810219-20">)</span><span·class="p">,</span><span·class="w"> |
| 257 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 257 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-27">(</span><span·class="ss">at_dep</span><span·class="p">,</span><span·class="w"> |
| 258 | ·························</span><span·class="p"·data-group-id=" | 258 | ·························</span><span·class="p"·data-group-id="9480810219-28">[</span><span·class="p"·data-group-id="9480810219-29">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-30">[</span><span·class="ss">a@gin</span><span·class="p[·...·truncated·by·diffoscope;·len:·162,·SHA:·bb919697e7189d6b7c95dab6b25ff96fead1dd96cf2df2cab27c0fb4c2b73979·...·]-29">}</span><span·class="p">,</span><span·class="w"> |
| 259 | ··························</span><span·class="p"·data-group-id=" | 259 | ··························</span><span·class="p"·data-group-id="9480810219-31">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-32">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·249,·SHA:·da8e927677f624289031bf3f7491ec77f3fbc7d3fb9f96a9e4e0b67bd0d83fc9·...·]-27">)</span><span·class="p">,</span><span·class="w"> |
| 260 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 260 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="9480810219-33">(</span><span·class="ss">in_proj</span><span·class="p">,</span><span·class="w"> |
| 261 | ························</span><span·class="p"·data-group-id=" | 261 | ························</span><span·class="p"·data-group-id="9480810219-34">[</span><span·class="p"·data-group-id="9480810219-35">{</span><span·class="ss">type</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bag</span><span·class="p"·data-group-id="9480810219-35">}</span><span·class="p">,</span><span·class="w"> |
| 262 | ·························</span><span·class="p"·data-group-id=" | 262 | ·························</span><span·class="p"·data-group-id="9480810219-36">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9480810219-37">[</span><span·class="ss">a@gin</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b@s[·...·truncated·by·diffoscope;·len:·108,·SHA:·890922d12cddf575b5dff6fe0bc6a96445f11e61e6ce502b06d4548c008610b4·...·]-36">}</span><span·class="p">,</span><span·class="w"> |
| 263 | ·························</span><span·class="p"·data-group-id=" | 263 | ·························</span><span·class="p"·data-group-id="9480810219-38">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="9480810219-39">(</span><span·class="ss">fields</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·250,·SHA:·b3fad9b01f64acdf14dda8f7b32250b1911fc2b7c0c3d268026481ceffb066f9·...·]-33">)</span><span·class="p">.</span></code></pre><p>As·illustrated,·the·two·directories·reside·on·different·nodes,·because |
| 264 | <code·class="inline">/ldisc/scratch</code>·(the·"local"·disc)·exists·on·the·two·different·nodes.</p><p>By·executing·these·commands,·two·Erlang·nodes·are·configured·to·run·the | 264 | <code·class="inline">/ldisc/scratch</code>·(the·"local"·disc)·exists·on·the·two·different·nodes.</p><p>By·executing·these·commands,·two·Erlang·nodes·are·configured·to·run·the |
| 265 | <code·class="inline">Company</code>·database,·and·therefore,·initialize·the·database.·This·is·required | 265 | <code·class="inline">Company</code>·database,·and·therefore,·initialize·the·database.·This·is·required |
| 266 | only·once·when·setting·up.·The·next·time·the·system·is·started, | 266 | only·once·when·setting·up.·The·next·time·the·system·is·started, |
| 267 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>·is·called·on·both·nodes,·to·initialize·the | 267 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>·is·called·on·both·nodes,·to·initialize·the |
| 268 | system·from·disc.</p><p>In·a·system·of·<code·class="inline">Mnesia</code>·nodes,·every·node·is·aware·of·the·current·location·of | 268 | system·from·disc.</p><p>In·a·system·of·<code·class="inline">Mnesia</code>·nodes,·every·node·is·aware·of·the·current·location·of |
| 269 | all·tables.·In·this·example,·data·is·replicated·on·both·nodes·and·functions·that | 269 | all·tables.·In·this·example,·data·is·replicated·on·both·nodes·and·functions·that |
| 270 | manipulate·the·data·in·the·tables·can·be·executed·on·either·of·the·two·nodes. | 270 | manipulate·the·data·in·the·tables·can·be·executed·on·either·of·the·two·nodes. |
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | the·function·is·executed.·The·functions·<a·href="mnesia.html#start/0"><code·class="inline">mnesia:start/0</code></a>·and·<a·href="mnesia.html#stop/0"><code·class="inline">mnesia:stop/0</code></a> | 273 | the·function·is·executed.·The·functions·<a·href="mnesia.html#start/0"><code·class="inline">mnesia:start/0</code></a>·and·<a·href="mnesia.html#stop/0"><code·class="inline">mnesia:stop/0</code></a> |
| 274 | work·on·the·"local"·<code·class="inline">Mnesia</code>·system.·No·functions·start·or·stop·a·set·of·nodes.</p><h3·id="startup-procedure"·class="section-heading"> | 274 | work·on·the·"local"·<code·class="inline">Mnesia</code>·system.·No·functions·start·or·stop·a·set·of·nodes.</p><h3·id="startup-procedure"·class="section-heading"> |
| 275 | ··<a·href="#startup-procedure"·class="hover-link"> | 275 | ··<a·href="#startup-procedure"·class="hover-link"> |
| 276 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 276 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 277 | ··</a> | 277 | ··</a> |
| 278 | ··<span·class="text">Startup·Procedure</span> | 278 | ··<span·class="text">Startup·Procedure</span> |
| 279 | </h3> | 279 | </h3> |
| 280 | <p>Start·<code·class="inline">Mnesia</code>·by·calling·the·following·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 280 | <p>Start·<code·class="inline">Mnesia</code>·by·calling·the·following·function:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7008889149-1">(</span><span·class="p"·data-group-id="7008889149-1">)</span><span·class="p">.</span></code></pre><p>This·function·initiates·the·DBMS·locally.</p><p>The·choice·of·configuration·alters·the·location·and·load·order·of·the·tables. |
| 281 | The·alternatives·are·as·follows:</p><ol><li>Tables·that·are·only·stored·locally·are·initialized·from·the·local·<code·class="inline">Mnesia</code> | 281 | The·alternatives·are·as·follows:</p><ol><li>Tables·that·are·only·stored·locally·are·initialized·from·the·local·<code·class="inline">Mnesia</code> |
| 282 | directory.</li><li>Replicated·tables·that·reside·locally·as·well·as·somewhere·else·are·either | 282 | directory.</li><li>Replicated·tables·that·reside·locally·as·well·as·somewhere·else·are·either |
| 283 | initiated·from·disc·or·by·copying·the·entire·table·from·the·other·node, | 283 | initiated·from·disc·or·by·copying·the·entire·table·from·the·other·node, |
| 284 | depending·on·which·of·the·different·replicas·are·the·most·recent.·<code·class="inline">Mnesia</code> | 284 | depending·on·which·of·the·different·replicas·are·the·most·recent.·<code·class="inline">Mnesia</code> |
| 285 | determines·which·of·the·tables·are·the·most·recent.</li><li>Tables·that·reside·on·remote·nodes·are·available·to·other·nodes·as·soon·as | 285 | determines·which·of·the·tables·are·the·most·recent.</li><li>Tables·that·reside·on·remote·nodes·are·available·to·other·nodes·as·soon·as |
| 286 | they·are·loaded.</li></ol><p>Table·initialization·is·asynchronous.·The·function·call | 286 | they·are·loaded.</li></ol><p>Table·initialization·is·asynchronous.·The·function·call |
| 287 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>·returns·the·atom·<code·class="inline">ok</code>·and·then·starts·to | 287 | <a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a>·returns·the·atom·<code·class="inline">ok</code>·and·then·starts·to |
| Offset 296, 17 lines modified | Offset 296, 17 lines modified | ||
| 296 | situation,·a·call·to·<a·href="mnesia.html#wait_for_tables/2"><code·class="inline">mnesia:wait_for_tables/2</code></a>,·suspends·the·caller·until·the | 296 | situation,·a·call·to·<a·href="mnesia.html#wait_for_tables/2"><code·class="inline">mnesia:wait_for_tables/2</code></a>,·suspends·the·caller·until·the |
| 297 | remote·node·has·initialized·the·table·from·its·local·disc·and·the·node·has | 297 | remote·node·has·initialized·the·table·from·its·local·disc·and·the·node·has |
| 298 | copied·the·table·over·the·network·to·the·local·node.</p><p>However,·this·procedure·can·be·time-consuming,·the·shortcut·function | 298 | copied·the·table·over·the·network·to·the·local·node.</p><p>However,·this·procedure·can·be·time-consuming,·the·shortcut·function |
| 299 | <a·href="mnesia.html#force_load_table/1"><code·class="inline">mnesia:force_load_table(Tab)</code></a>·loads·all·the·tables | 299 | <a·href="mnesia.html#force_load_table/1"><code·class="inline">mnesia:force_load_table(Tab)</code></a>·loads·all·the·tables |
| 300 | from·disc·at·a·faster·rate.·The·function·forces·tables·to·be·loaded·from·disc | 300 | from·disc·at·a·faster·rate.·The·function·forces·tables·to·be·loaded·from·disc |
| 301 | regardless·of·the·network·situation.</p><p>Thus,·it·can·be·assumed·that·if·an·application·wants·to·use·tables·<code·class="inline">a</code>·and·<code·class="inline">b</code>, | 301 | regardless·of·the·network·situation.</p><p>Thus,·it·can·be·assumed·that·if·an·application·wants·to·use·tables·<code·class="inline">a</code>·and·<code·class="inline">b</code>, |
| 302 | the·application·must·perform·some·action·similar·to·following·before·it·can·use | 302 | the·application·must·perform·some·action·similar·to·following·before·it·can·use |
| 303 | the·tables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id=" | 303 | the·tables:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">wait_for_tables</span><span·class="p"·data-group-id="7567624654-1">(</span><span·class="p"·data-group-id="7567624654-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p"·data-group-id="7567624654-2">]</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·88,·SHA:·1d62e2769e42dd94f72df4b6cc5df6f588bc32aed0c8cfbfbe5447a3053d8d15·...·]-1">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 304 | ··</span><span·class="p"·data-group-id=" | 304 | ··</span><span·class="p"·data-group-id="7567624654-3">{</span><span·class="ss">timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RemainingTabs</span><span·class="p"·data-group-id="7567624654-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 305 | ····</span><span·class="nf">panic</span><span·class="p"·data-group-id=" | 305 | ····</span><span·class="nf">panic</span><span·class="p"·data-group-id="7567624654-4">(</span><span·class="n">RemainingTabs</span><span·class="p"·data-group-id="7567624654-4">)</span><span·class="p">;</span><span·class="w"> |
| 306 | ··</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 306 | ··</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 307 | ····</span><span·class="ss">synced</span><span·class="w"> | 307 | ····</span><span·class="ss">synced</span><span·class="w"> |
| 308 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>When·tables·are·forcefully·loaded·from·the·local·disc,·all·operations·that | 308 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>When·tables·are·forcefully·loaded·from·the·local·disc,·all·operations·that |
| 309 | were·performed·on·the·replicated·table·while·the·local·node·was·down,·and·the | 309 | were·performed·on·the·replicated·table·while·the·local·node·was·down,·and·the |
| 310 | remote·replica·was·alive,·are·lost.·This·can·cause·the·database·to·become | 310 | remote·replica·was·alive,·are·lost.·This·can·cause·the·database·to·become |
| 311 | inconsistent.</p></section><p>If·the·startup·procedure·fails,·the·function·<a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a> | 311 | inconsistent.</p></section><p>If·the·startup·procedure·fails,·the·function·<a·href="mnesia.html#start/0"><code·class="inline">mnesia:start()</code></a> |
| 312 | returns·the·cryptic·tuple | 312 | returns·the·cryptic·tuple |
| Offset 324, 21 lines modified | Offset 324, 21 lines modified | ||
| 324 | the·records·that·constitute·the·table.·For·details,·see·<code·class="inline">record_name</code>.</li><li><code·class="inline">Opts</code>·is·a·list·of·<code·class="inline">{Key,Value}</code>·tuples.·The·following·options·are | 324 | the·records·that·constitute·the·table.·For·details,·see·<code·class="inline">record_name</code>.</li><li><code·class="inline">Opts</code>·is·a·list·of·<code·class="inline">{Key,Value}</code>·tuples.·The·following·options·are |
| 325 | valid:<ul><li><p><code·class="inline">{type,·Type}</code>,·where·<code·class="inline">Type</code>·must·be·either·of·the·atoms·<code·class="inline">set</code>, | 325 | valid:<ul><li><p><code·class="inline">{type,·Type}</code>,·where·<code·class="inline">Type</code>·must·be·either·of·the·atoms·<code·class="inline">set</code>, |
| 326 | <code·class="inline">ordered_set</code>,·or·<code·class="inline">bag</code>.·Default·is·<code·class="inline">set</code>.</p><p>Notice·that·currently·<code·class="inline">ordered_set</code>·is·not·supported·for·<code·class="inline">disc_only_copies</code> | 326 | <code·class="inline">ordered_set</code>,·or·<code·class="inline">bag</code>.·Default·is·<code·class="inline">set</code>.</p><p>Notice·that·currently·<code·class="inline">ordered_set</code>·is·not·supported·for·<code·class="inline">disc_only_copies</code> |
| 327 | tables.</p><p>A·table·of·type·<code·class="inline">set</code>·or·<code·class="inline">ordered_set</code>·has·either·zero·or·one·record·per | 327 | tables.</p><p>A·table·of·type·<code·class="inline">set</code>·or·<code·class="inline">ordered_set</code>·has·either·zero·or·one·record·per |
| 328 | key,·whereas·a·table·of·type·<code·class="inline">bag</code>·can·have·an·arbitrary·number·of·records | 328 | key,·whereas·a·table·of·type·<code·class="inline">bag</code>·can·have·an·arbitrary·number·of·records |
| 329 | per·key.·The·key·for·each·record·is·always·the·first·attribute·of·the | 329 | per·key.·The·key·for·each·record·is·always·the·first·attribute·of·the |
| 330 | record.</p><p>The·following·example·illustrates·the·difference·between·type·<code·class="inline">set</code>·and | 330 | record.</p><p>The·following·example·illustrates·the·difference·between·type·<code·class="inline">set</code>·and |
| 331 | <code·class="inline">bag</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 331 | <code·class="inline">bag</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">f</span><span·class="p"·data-group-id="5555803396-1">(</span><span·class="p"·data-group-id="5555803396-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 332 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 332 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5555803396-2">(</span><span·class="p"·data-group-id="5555803396-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 333 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 333 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="5555803396-3">(</span><span·class="p"·data-group-id="5555803396-4">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·cl[·...·truncated·by·diffoscope;·len:·86,·SHA:·a4e56cfb8d960c8e1b732392bce2395ba6683fdf8525e518d33638ff99add3f5·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 334 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 334 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="5555803396-5">(</span><span·class="p"·data-group-id="5555803396-6">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">3</span><span·cl[·...·truncated·by·diffoscope;·len:·86,·SHA:·54f5fd9fd148830e4378477e2e65be9ddbc2c46bd27c8ec4e004a098d8696f74·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 335 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id=" | 335 | ··········</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id="5555803396-7">(</span><span·class="p"·data-group-id="5555803396-8">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="5555803396-8">}</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·df484d9171403ba19826ed545d63485c90932660c9a9bb26cb3b1eaf27e78c4c·...·]-7">)</span><span·class="w"> |
| 336 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 336 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 337 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 337 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="5555803396-9">(</span><span·class="n">F</span><span·class="p"·data-group-id="5555803396-9">)</span><span·class="p">.</span></code></pre><p>This·transaction·returns·the·list·<code·class="inline">[{foo,1,3}]</code>·if·table·<code·class="inline">foo</code>·is·of·type |
| 338 | <code·class="inline">set</code>.·However,·the·list·<code·class="inline">[{foo,1,2},·{foo,1,3}]</code>·is·returned·if·the·table | 338 | <code·class="inline">set</code>.·However,·the·list·<code·class="inline">[{foo,1,2},·{foo,1,3}]</code>·is·returned·if·the·table |
| 339 | is·of·type·<code·class="inline">bag</code>.</p><p><code·class="inline">Mnesia</code>·tables·can·never·contain·duplicates·of·the·same·record·in·the·same | 339 | is·of·type·<code·class="inline">bag</code>.</p><p><code·class="inline">Mnesia</code>·tables·can·never·contain·duplicates·of·the·same·record·in·the·same |
| 340 | table.·Duplicate·records·have·attributes·with·the·same·contents·and·key.</p></li><li><p><code·class="inline">{disc_copies,·NodeList}</code>,·where·<code·class="inline">NodeList</code>·is·a·list·of·the·nodes·where | 340 | table.·Duplicate·records·have·attributes·with·the·same·contents·and·key.</p></li><li><p><code·class="inline">{disc_copies,·NodeList}</code>,·where·<code·class="inline">NodeList</code>·is·a·list·of·the·nodes·where |
| 341 | this·table·is·to·reside·on·disc.</p><p>Write·operations·to·a·table·replica·of·type·<code·class="inline">disc_copies</code>·write·data·to·the | 341 | this·table·is·to·reside·on·disc.</p><p>Write·operations·to·a·table·replica·of·type·<code·class="inline">disc_copies</code>·write·data·to·the |
| 342 | disc·copy·and·to·the·RAM·copy·of·the·table.</p><p>It·is·possible·to·have·a·replicated·table·of·type·<code·class="inline">disc_copies</code>·on·one·node, | 342 | disc·copy·and·to·the·RAM·copy·of·the·table.</p><p>It·is·possible·to·have·a·replicated·table·of·type·<code·class="inline">disc_copies</code>·on·one·node, |
| 343 | and·the·same·table·stored·as·a·different·type·on·another·node.·Default·is | 343 | and·the·same·table·stored·as·a·different·type·on·another·node.·Default·is |
| 344 | <code·class="inline">[]</code>.·This·arrangement·is·desirable·if·the·following·operational | 344 | <code·class="inline">[]</code>.·This·arrangement·is·desirable·if·the·following·operational |
| Offset 374, 19 lines modified | Offset 374, 19 lines modified | ||
| 374 | possible·for·you·to·provide·the·attribute·names·or·to·use·the | 374 | possible·for·you·to·provide·the·attribute·names·or·to·use·the |
| 375 | <code·class="inline">record_info/2</code>·notation.</p><p>It·is·recommended·to·use·the·<code·class="inline">record_info/2</code>·notation,·as·it·becomes·easier | 375 | <code·class="inline">record_info/2</code>·notation.</p><p>It·is·recommended·to·use·the·<code·class="inline">record_info/2</code>·notation,·as·it·becomes·easier |
| 376 | to·maintain·the·program·and·the·program·becomes·more·robust·with·regards·to | 376 | to·maintain·the·program·and·the·program·becomes·more·robust·with·regards·to |
| 377 | future·record·changes.</p></li><li><p><code·class="inline">{record_name,·Atom}</code>·specifies·the·common·name·of·all·records·stored·in·the | 377 | future·record·changes.</p></li><li><p><code·class="inline">{record_name,·Atom}</code>·specifies·the·common·name·of·all·records·stored·in·the |
| 378 | table.·All·records·stored·in·the·table·must·have·this·name·as·their·first | 378 | table.·All·records·stored·in·the·table·must·have·this·name·as·their·first |
| 379 | element.·<code·class="inline">record_name</code>·defaults·to·the·name·of·the·table.·For·more | 379 | element.·<code·class="inline">record_name</code>·defaults·to·the·name·of·the·table.·For·more |
| Max diff block lines reached; 7902/54099 bytes (14.61%) of diff not shown. | |||
| Offset 141, 22 lines modified | Offset 141, 22 lines modified | ||
| 141 | <p>Transactions·are·important·when·designing·fault-tolerant,·distributed·systems.·A | 141 | <p>Transactions·are·important·when·designing·fault-tolerant,·distributed·systems.·A |
| 142 | <code·class="inline">Mnesia</code>·transaction·is·a·mechanism·by·which·a·series·of·database·operations·can | 142 | <code·class="inline">Mnesia</code>·transaction·is·a·mechanism·by·which·a·series·of·database·operations·can |
| 143 | be·executed·as·one·functional·block.·The·functional·block·that·is·run·as·a | 143 | be·executed·as·one·functional·block.·The·functional·block·that·is·run·as·a |
| 144 | transaction·is·called·a·Functional·Object·(Fun),·and·this·code·can·read,·write, | 144 | transaction·is·called·a·Functional·Object·(Fun),·and·this·code·can·read,·write, |
| 145 | and·delete·<code·class="inline">Mnesia</code>·records.·The·Fun·is·evaluated·as·a·transaction·that·either | 145 | and·delete·<code·class="inline">Mnesia</code>·records.·The·Fun·is·evaluated·as·a·transaction·that·either |
| 146 | commits·or·terminates.·If·a·transaction·succeeds·in·executing·the·Fun,·it | 146 | commits·or·terminates.·If·a·transaction·succeeds·in·executing·the·Fun,·it |
| 147 | replicates·the·action·on·all·nodes·involved,·or·terminates·if·an·error·occurs.</p><p>The·following·example·shows·a·transaction·that·raises·the·salary·of·certain | 147 | replicates·the·action·on·all·nodes·involved,·or·terminates·if·an·error·occurs.</p><p>The·following·example·shows·a·transaction·that·raises·the·salary·of·certain |
| 148 | employee·numbers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">raise</span><span·class="p"·data-group-id=" | 148 | employee·numbers:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">raise</span><span·class="p"·data-group-id="5652547665-1">(</span><span·class="n">Eno</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p"·data-group-id="5652547665-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 149 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5652547665-2">(</span><span·class="p"·data-group-id="5652547665-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | ················</span><span·class="p"·data-group-id=" | 150 | ················</span><span·class="p"·data-group-id="5652547665-3">[</span><span·class="n">E</span><span·class="p"·data-group-id="5652547665-3">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><sp[·...·truncated·by·diffoscope;·len:·274,·SHA:·2e106cf867e1f01027199ec670bf7d38dbd544b28e723756c35d5214267a15b2·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 151 | ················</span><span·class="n">Salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p">.</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p">,</span><span·class="w"> | 151 | ················</span><span·class="n">Salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p">.</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p">,</span><span·class="w"> |
| 152 | ················</span><span·class="n">New</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p"·data-group-id=" | 152 | ················</span><span·class="n">New</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p"·data-group-id="5652547665-5">{</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Salary</span><span·class="p"·data-group-id="5652547665-5">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 153 | ················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="5652547665-6">(</span><span·class="n">New</span><span·class="p"·data-group-id="5652547665-6">)</span><span·class="w"> |
| 154 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 154 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 155 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 155 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="5652547665-7">(</span><span·class="n">F</span><span·class="p"·data-group-id="5652547665-7">)</span><span·class="p">.</span></code></pre><p>The·function·<code·class="inline">raise/2</code>·contains·a·Fun·made·up·of·four·code·lines.·This·Fun·is |
| 156 | called·by·the·statement·<code·class="inline">mnesia:transaction(F)</code>·and·returns·a·value.</p><p>The·<code·class="inline">Mnesia</code>·transaction·system·facilitates·the·construction·of·reliable, | 156 | called·by·the·statement·<code·class="inline">mnesia:transaction(F)</code>·and·returns·a·value.</p><p>The·<code·class="inline">Mnesia</code>·transaction·system·facilitates·the·construction·of·reliable, |
| 157 | distributed·systems·by·providing·the·following·important·properties:</p><ul><li>The·transaction·handler·ensures·that·a·Fun,·which·is·placed·inside·a | 157 | distributed·systems·by·providing·the·following·important·properties:</p><ul><li>The·transaction·handler·ensures·that·a·Fun,·which·is·placed·inside·a |
| 158 | transaction,·does·not·interfere·with·operations·embedded·in·other·transactions | 158 | transaction,·does·not·interfere·with·operations·embedded·in·other·transactions |
| 159 | when·it·executes·a·series·of·operations·on·tables.</li><li>The·transaction·handler·ensures·that·either·all·operations·in·the·transaction | 159 | when·it·executes·a·series·of·operations·on·tables.</li><li>The·transaction·handler·ensures·that·either·all·operations·in·the·transaction |
| 160 | are·performed·successfully·on·all·nodes·atomically,·or·the·transaction·fails | 160 | are·performed·successfully·on·all·nodes·atomically,·or·the·transaction·fails |
| 161 | without·permanent·effect·on·any·node.</li><li>The·<code·class="inline">Mnesia</code>·transactions·have·four·important·properties,·called·<em>A</em>tomicity, | 161 | without·permanent·effect·on·any·node.</li><li>The·<code·class="inline">Mnesia</code>·transactions·have·four·important·properties,·called·<em>A</em>tomicity, |
| 162 | <em>C</em>onsistency,·<em>I</em>solation,·and·<em>D</em>urability·(ACID).·These·properties·are | 162 | <em>C</em>onsistency,·<em>I</em>solation,·and·<em>D</em>urability·(ACID).·These·properties·are |
| Offset 242, 23 lines modified | Offset 242, 23 lines modified | ||
| 242 | code·these·operations.</p><p>Deadlocks·can·occur·when·concurrent·processes·set·and·release·locks·on·the·same | 242 | code·these·operations.</p><p>Deadlocks·can·occur·when·concurrent·processes·set·and·release·locks·on·the·same |
| 243 | records.·<code·class="inline">Mnesia</code>·employs·a·"wait-die"·strategy·to·resolve·these·situations.·If | 243 | records.·<code·class="inline">Mnesia</code>·employs·a·"wait-die"·strategy·to·resolve·these·situations.·If |
| 244 | <code·class="inline">Mnesia</code>·suspects·that·a·deadlock·can·occur·when·a·transaction·tries·to·set·a | 244 | <code·class="inline">Mnesia</code>·suspects·that·a·deadlock·can·occur·when·a·transaction·tries·to·set·a |
| 245 | lock,·the·transaction·is·forced·to·release·all·its·locks·and·sleep·for·a·while. | 245 | lock,·the·transaction·is·forced·to·release·all·its·locks·and·sleep·for·a·while. |
| 246 | The·Fun·in·the·transaction·is·evaluated·once·more.</p><p>It·is·therefore·important·that·the·code·inside·the·Fun·given·to | 246 | The·Fun·in·the·transaction·is·evaluated·once·more.</p><p>It·is·therefore·important·that·the·code·inside·the·Fun·given·to |
| 247 | <a·href="mnesia.html#transaction/1"><code·class="inline">mnesia:transaction/1</code></a>·is·pure.·Some·strange·results·can·occur·if,·for·example, | 247 | <a·href="mnesia.html#transaction/1"><code·class="inline">mnesia:transaction/1</code></a>·is·pure.·Some·strange·results·can·occur·if,·for·example, |
| 248 | messages·are·sent·by·the·transaction·Fun.·The·following·example·illustrates·this | 248 | messages·are·sent·by·the·transaction·Fun.·The·following·example·illustrates·this |
| 249 | situation:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bad_raise</span><span·class="p"·data-group-id=" | 249 | situation:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">bad_raise</span><span·class="p"·data-group-id="2098657476-1">(</span><span·class="n">Eno</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p"·data-group-id="2098657476-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 250 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2098657476-2">(</span><span·class="p"·data-group-id="2098657476-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 251 | ················</span><span·class="p"·data-group-id=" | 251 | ················</span><span·class="p"·data-group-id="2098657476-3">[</span><span·class="n">E</span><span·class="p"·data-group-id="2098657476-3">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><sp[·...·truncated·by·diffoscope;·len:·303,·SHA:·3b37d18f212bf901f1063903dbfef389ca74e0a73088d5c6c8472248e7170e4b·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 252 | ················</span><span·class="n">Salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p">.</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p">,</span><span·class="w"> | 252 | ················</span><span·class="n">Salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p">.</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">Raise</span><span·class="p">,</span><span·class="w"> |
| 253 | ················</span><span·class="n">New</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p"·data-group-id=" | 253 | ················</span><span·class="n">New</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span·class="o">#</span><span·class="ss">employee</span><span·class="p"·data-group-id="2098657476-6">{</span><span·class="ss">salary</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Salary</span><span·class="p"·data-group-id="2098657476-6">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 254 | ················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2098657476-7">(</span><span·class="s">"Trying·to·write·...·</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2098657476-8">[</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·65,·SHA:·72ea81128dc53977f527a1ce7bd06fcf6af35c9f350fdf1e18e75610e9636787·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 255 | ················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 255 | ················</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="2098657476-9">(</span><span·class="n">New</span><span·class="p"·data-group-id="2098657476-9">)</span><span·class="w"> |
| 256 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 256 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 257 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 257 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="2098657476-10">(</span><span·class="n">F</span><span·class="p"·data-group-id="2098657476-10">)</span><span·class="p">.</span></code></pre><p>This·transaction·can·write·the·text·<code·class="inline">"Trying·to·write·...·"</code>·1000·times·to·the |
| 258 | terminal.·However,·<code·class="inline">Mnesia</code>·guarantees·that·each·transaction·will·eventually | 258 | terminal.·However,·<code·class="inline">Mnesia</code>·guarantees·that·each·transaction·will·eventually |
| 259 | run.·As·a·result,·<code·class="inline">Mnesia</code>·is·not·only·deadlock·free,·but·also·livelock·free.</p><p>The·<code·class="inline">Mnesia</code>·programmer·cannot·prioritize·one·particular·transaction·to·execute | 259 | run.·As·a·result,·<code·class="inline">Mnesia</code>·is·not·only·deadlock·free,·but·also·livelock·free.</p><p>The·<code·class="inline">Mnesia</code>·programmer·cannot·prioritize·one·particular·transaction·to·execute |
| 260 | before·other·transactions·that·are·waiting·to·execute.·As·a·result,·the·<code·class="inline">Mnesia</code> | 260 | before·other·transactions·that·are·waiting·to·execute.·As·a·result,·the·<code·class="inline">Mnesia</code> |
| 261 | DBMS·transaction·system·is·not·suitable·for·hard·real-time·applications. | 261 | DBMS·transaction·system·is·not·suitable·for·hard·real-time·applications. |
| 262 | However,·<code·class="inline">Mnesia</code>·contains·other·features·that·have·real-time·properties.</p><p><code·class="inline">Mnesia</code>·dynamically·sets·and·releases·locks·as·transactions·execute.·It·is | 262 | However,·<code·class="inline">Mnesia</code>·contains·other·features·that·have·real-time·properties.</p><p><code·class="inline">Mnesia</code>·dynamically·sets·and·releases·locks·as·transactions·execute.·It·is |
| 263 | therefore·dangerous·to·execute·code·with·transaction·side-effects.·In | 263 | therefore·dangerous·to·execute·code·with·transaction·side-effects.·In |
| 264 | particular,·a·<code·class="inline">receive</code>·statement·inside·a·transaction·can·lead·to·a·situation | 264 | particular,·a·<code·class="inline">receive</code>·statement·inside·a·transaction·can·lead·to·a·situation |
| Offset 297, 21 lines modified | Offset 297, 21 lines modified | ||
| 297 | record·when·reading·a·record,·and·lock·all·replicas·of·a·record·when·writing·a | 297 | record·when·reading·a·record,·and·lock·all·replicas·of·a·record·when·writing·a |
| 298 | record.·However,·some·applications·use·<code·class="inline">Mnesia</code>·mainly·for·its·fault-tolerant | 298 | record.·However,·some·applications·use·<code·class="inline">Mnesia</code>·mainly·for·its·fault-tolerant |
| 299 | qualities.·These·applications·can·be·configured·with·one·node·doing·all·the | 299 | qualities.·These·applications·can·be·configured·with·one·node·doing·all·the |
| 300 | heavy·work,·and·a·standby·node·that·is·ready·to·take·over·if·the·main·node | 300 | heavy·work,·and·a·standby·node·that·is·ready·to·take·over·if·the·main·node |
| 301 | fails.·Such·applications·can·benefit·from·using·sticky·locks·instead·of·the | 301 | fails.·Such·applications·can·benefit·from·using·sticky·locks·instead·of·the |
| 302 | normal·locking·scheme.</p><p>A·sticky·lock·is·a·lock·that·stays·in·place·at·a·node,·after·the·transaction | 302 | normal·locking·scheme.</p><p>A·sticky·lock·is·a·lock·that·stays·in·place·at·a·node,·after·the·transaction |
| 303 | that·first·acquired·the·lock·has·terminated.·To·illustrate·this,·assume·that·the | 303 | that·first·acquired·the·lock·has·terminated.·To·illustrate·this,·assume·that·the |
| 304 | following·transaction·is·executed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 304 | following·transaction·is·executed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="6806055247-1">(</span><span·class="p"·data-group-id="6806055247-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 305 | ······</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 305 | ······</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="6806055247-2">(</span><span·class="o">#</span><span·class="ss">foo</span><span·class="p"·data-group-id="6806055247-3">{</span><span·class="ss">a</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">kalle</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·d731065010c7cd948df8f523ce9501bd24667f3bf2693455eb735cd9226f6fd9·...·]-2">)</span><span·class="w"> |
| 306 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 306 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 307 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 307 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="6806055247-4">(</span><span·class="n">F</span><span·class="p"·data-group-id="6806055247-4">)</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">foo</code>·table·is·replicated·on·the·two·nodes·<code·class="inline">N1</code>·and·<code·cla[·...·truncated·by·diffoscope;·len:·557,·SHA:·cc98bf6bbc922122e8d1867492b5ce7508b9a96c790c247c153ba9cee33f6bcb·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 308 | ······</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">s_write</span><span·class="p"·data-group-id=" | 308 | ······</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">s_write</span><span·class="p"·data-group-id="6880250519-2">(</span><span·class="o">#</span><span·class="ss">foo</span><span·class="p"·data-group-id="6880250519-3">{</span><span·class="ss">a</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">kalle</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·ed7a6c6b377a77cd37b36b4c38bf96b297f39e0cda827a9d41cf04264a70caaf·...·]-2">)</span><span·class="w"> |
| 309 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 309 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 310 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id=" | 310 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">transaction</span><span·class="p"·data-group-id="6880250519-4">(</span><span·class="n">F</span><span·class="p"·data-group-id="6880250519-4">)</span><span·class="p">.</span></code></pre><p>This·code·uses·the·function·<a·href="mnesia.html#s_write/1"><code·class="inline">s_write/1</code></a>·instead·of·the |
| 311 | function·<a·href="mnesia.html#write/1"><code·class="inline">write/1</code></a>·The·function·<code·class="inline">s_write/1</code>·sets·a·sticky·lock | 311 | function·<a·href="mnesia.html#write/1"><code·class="inline">write/1</code></a>·The·function·<code·class="inline">s_write/1</code>·sets·a·sticky·lock |
| 312 | instead·of·a·normal·lock.·If·the·table·is·not·replicated,·sticky·locks·have·no | 312 | instead·of·a·normal·lock.·If·the·table·is·not·replicated,·sticky·locks·have·no |
| 313 | special·effect.·If·the·table·is·replicated,·and·a·sticky·lock·is·set·on·node | 313 | special·effect.·If·the·table·is·replicated,·and·a·sticky·lock·is·set·on·node |
| 314 | <code·class="inline">N1</code>,·this·lock·then·sticks·to·node·<code·class="inline">N1</code>.·The·next·time·you·try·to·set·a·sticky | 314 | <code·class="inline">N1</code>,·this·lock·then·sticks·to·node·<code·class="inline">N1</code>.·The·next·time·you·try·to·set·a·sticky |
| 315 | lock·on·the·same·record·at·node·<code·class="inline">N1</code>,·<code·class="inline">Mnesia</code>·detects·that·the·lock·is·already | 315 | lock·on·the·same·record·at·node·<code·class="inline">N1</code>,·<code·class="inline">Mnesia</code>·detects·that·the·lock·is·already |
| 316 | set·and·do·no·network·operation·to·acquire·the·lock.</p><p>It·is·more·efficient·to·set·a·local·lock·than·it·is·to·set·a·networked·lock. | 316 | set·and·do·no·network·operation·to·acquire·the·lock.</p><p>It·is·more·efficient·to·set·a·local·lock·than·it·is·to·set·a·networked·lock. |
| 317 | Sticky·locks·can·therefore·benefit·an·application·that·uses·a·replicated·table | 317 | Sticky·locks·can·therefore·benefit·an·application·that·uses·a·replicated·table |
| Offset 329, 16 lines modified | Offset 329, 16 lines modified | ||
| 329 | locks·automatically,·and·the·programmer·does·not·need·to·code·these·operations. | 329 | locks·automatically,·and·the·programmer·does·not·need·to·code·these·operations. |
| 330 | However,·transactions·that·read·and·write·many·records·in·a·specific·table | 330 | However,·transactions·that·read·and·write·many·records·in·a·specific·table |
| 331 | execute·more·efficiently·if·the·transaction·is·started·by·setting·a·table·lock | 331 | execute·more·efficiently·if·the·transaction·is·started·by·setting·a·table·lock |
| 332 | on·this·table.·This·blocks·other·concurrent·transactions·from·the·table.·The | 332 | on·this·table.·This·blocks·other·concurrent·transactions·from·the·table.·The |
| 333 | following·two·functions·are·used·to·set·explicit·table·locks·for·read·and·write | 333 | following·two·functions·are·used·to·set·explicit·table·locks·for·read·and·write |
| 334 | operations:</p><ul><li><a·href="mnesia.html#read_lock_table/1"><code·class="inline">mnesia:read_lock_table(Tab)</code></a>·sets·a·read·lock·on | 334 | operations:</p><ul><li><a·href="mnesia.html#read_lock_table/1"><code·class="inline">mnesia:read_lock_table(Tab)</code></a>·sets·a·read·lock·on |
| 335 | table·<code·class="inline">Tab</code>.</li><li><a·href="mnesia.html#write_lock_table/1"><code·class="inline">mnesia:write_lock_table(Tab)</code></a>·sets·a·write·lock | 335 | table·<code·class="inline">Tab</code>.</li><li><a·href="mnesia.html#write_lock_table/1"><code·class="inline">mnesia:write_lock_table(Tab)</code></a>·sets·a·write·lock |
| 336 | on·table·<code·class="inline">Tab</code>.</li></ul><p>Alternative·syntax·for·acquisition·of·table·locks·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id="9665453832-1">(</span><span·class="p"·data-group-id="9665453832-2">{</span><span·class="ss">table</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p"·data-group-id="9665453832-2">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">read</span><span·class="p"·data-group-id="9665453832-1">)</span><span·class="w"> | ||
| 337 | 336 | on·table·<code·class="inline">Tab</code>.</li></ul><p>Alternative·syntax·for·acquisition·of·table·locks·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><spa[·...·truncated·by·diffoscope;·len:·403,·SHA:·2af55c199de999d23c3cfda29052700fdaad07ad8ff53127cbdf6215ea784685·...·] | |
| 337 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">lock</span><span·class="p"·data-group-id="0877176363-3">(</span><span·class="p"·data-group-id="0877176363-4">{</span><span·class="ss">table</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p"·data-group-id="0877176363-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">write</span><span·class="p"·data-group-id="0877176363-3">)</span></code></pre><p>The·matching·operations·in·<code·class="inline">Mnesia</code>·can·either·lock·the·entire·table·or·only·a | ||
| 338 | single·record·(when·the·key·is·bound·in·the·pattern).</p><h3·id="global-locks"·class="section-heading"> | 338 | single·record·(when·the·key·is·bound·in·the·pattern).</p><h3·id="global-locks"·class="section-heading"> |
| 339 | ··<a·href="#global-locks"·class="hover-link"> | 339 | ··<a·href="#global-locks"·class="hover-link"> |
| 340 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 340 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 341 | ··</a> | 341 | ··</a> |
| 342 | ··<span·class="text">Global·Locks</span> | 342 | ··<span·class="text">Global·Locks</span> |
| 343 | </h3> | 343 | </h3> |
| 344 | <p>Write·locks·are·normally·acquired·on·all·nodes·where·a·replica·of·the·table | 344 | <p>Write·locks·are·normally·acquired·on·all·nodes·where·a·replica·of·the·table |
| Offset 421, 86 lines modified | Offset 421, 86 lines modified | ||
| 421 | ··<span·class="text">Record·Names·versus·Table·Names</span> | 421 | ··<span·class="text">Record·Names·versus·Table·Names</span> |
| 422 | </h2> | 422 | </h2> |
| 423 | <p>In·<code·class="inline">Mnesia</code>,·all·records·in·a·table·must·have·the·same·name.·All·the·records | 423 | <p>In·<code·class="inline">Mnesia</code>,·all·records·in·a·table·must·have·the·same·name.·All·the·records |
| 424 | must·be·instances·of·the·same·record·type.·The·record·name,·however,·does·not | 424 | must·be·instances·of·the·same·record·type.·The·record·name,·however,·does·not |
| 425 | necessarily·have·to·be·the·same·as·the·table·name,·although·this·is·the·case·in | 425 | necessarily·have·to·be·the·same·as·the·table·name,·although·this·is·the·case·in |
| 426 | most·of·the·examples·in·this·User's·Guide.·If·a·table·is·created·without | 426 | most·of·the·examples·in·this·User's·Guide.·If·a·table·is·created·without |
| 427 | property·<code·class="inline">record_name</code>,·the·following·code·ensures·that·all·records·in·the | 427 | property·<code·class="inline">record_name</code>,·the·following·code·ensures·that·all·records·in·the |
| 428 | tables·have·the·same·name·as·the·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 428 | tables·have·the·same·name·as·the·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="6099114435-1">(</span><span·class="ss">subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6099114435-2">[</span><span·class="p"·data-group-id="6099114435-2">]</span><span·class="p"·data-group-id="6099114435-1">)</span></code></pre><p>However,·if·the·table·is·created·with·an·explicit·record·name·as·argument,·as |
| 429 | shown·in·the·following·example,·subscriber·records·can·be·stored·in·both·of·the | 429 | shown·in·the·following·example,·subscriber·records·can·be·stored·in·both·of·the |
| 430 | tables·regardless·of·the·table·names:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TabDef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 430 | tables·regardless·of·the·table·names:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TabDef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3519048151-1">[</span><span·class="p"·data-group-id="3519048151-2">{</span><span·class="ss">record_name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">subscriber</span><span·class="p"·data-group-id="3519048151-2">}</span><span·class[·...·truncated·by·diffoscope;·len:·30,·SHA:·78d89a3e9cfb14b4782e4565f9aca0ebac10d33d5bd4907ce4904f7899f75687·...·]-1">]</span><span·class="p">,</span><span·class="w"> |
| 431 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 431 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="3519048151-3">(</span><span·class="ss">my_subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TabDef</span><span·class="p"·data-group-id="3519048151-3">)</span><span·class="p">,</span><span·class="w"> |
| 432 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 432 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="3519048151-4">(</span><span·class="ss">your_subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TabDef</span><span·class="p"·data-group-id="3519048151-4">)</span><span·class="p">.</span></code></pre><p>To·access·such·tables,·simplified·access·functions·(as·described·earlier)·cannot |
| 433 | be·used.·For·example,·writing·a·subscriber·record·into·a·table·requires·the | 433 | be·used.·For·example,·writing·a·subscriber·record·into·a·table·requires·the |
| 434 | function·<a·href="mnesia.html#write/3"><code·class="inline">mnesia:write/3</code></a>·instead·of·the·simplified·functions·<a·href="mnesia.html#write/1"><code·class="inline">mnesia:write/1</code></a> | 434 | function·<a·href="mnesia.html#write/3"><code·class="inline">mnesia:write/3</code></a>·instead·of·the·simplified·functions·<a·href="mnesia.html#write/1"><code·class="inline">mnesia:write/1</code></a> |
| 435 | and·<a·href="mnesia.html#s_write/1"><code·class="inline">mnesia:s_write/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 435 | and·<a·href="mnesia.html#s_write/1"><code·class="inline">mnesia:s_write/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="3082169844-1">(</span><span·class="ss">subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">subscriber</span><span·class="p"·data-group-id="3082169844-2">{</span><span·class="p"·data-group-id="3082169844[·...·truncated·by·diffoscope;·len:·130,·SHA:·ee5e199e68cae8e4a85cf626e4f5fcccd34faf4cd2b969e240466588f9d4bc5b·...·]-1">)</span><span·class="w"> |
| 436 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 436 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="3082169844-3">(</span><span·class="ss">my_subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">subscriber</span><span·class="p"·data-group-id="3082169844-4">{</span><span·class="p"·data-group-id="3082169[·...·truncated·by·diffoscope;·len:·140,·SHA:·dc284b256d6c391f3eeda71b78286587cf90f92c1c52aafb090fe2f9c2f7c0a4·...·]-3">)</span><span·class="w"> |
| 437 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 437 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="3082169844-5">(</span><span·class="ss">your_subscriber</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">subscriber</span><span·class="p"·data-group-id="3082169844-6">{</span><span·class="p"·data-group-id="30821[·...·truncated·by·diffoscope;·len:·135,·SHA:·0931c8781b3ac9a2d7fe775c43dc2ce26086e5a81c42a29dd22b074431fc29c1·...·]-5">)</span></code></pre><p>The·following·simple·code·illustrates·the·relationship·between·the·simplified |
| 438 | access·functions·used·in·most·of·the·examples·and·their·more·flexible | 438 | access·functions·used·in·most·of·the·examples·and·their·more·flexible |
| 439 | counterparts:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_write</span><span·class="p"·data-group-id=" | 439 | counterparts:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_write</span><span·class="p"·data-group-id="6599108430-1">(</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 440 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 440 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="6599108430-2">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-2">)</span><span·class="p">,</span><span·class="w"> |
| 441 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_write</span><span·class="p"·data-group-id=" | 441 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_write</span><span·class="p"·data-group-id="6599108430-3">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-3">)</span><span·class="p">.</span><span·class="w"> |
| 442 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete</span><span·class="p"·data-group-id=" | 442 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete</span><span·class="p"·data-group-id="6599108430-4">(</span><span·class="p"·data-group-id="6599108430-5">{</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="6599108430-5">}</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·43a2131dbbd933fae6e886c4db3721ed2362dddbebc151151adecc8ee3e53b3f·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 443 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete</span><span·class="p"·data-group-id=" | 443 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete</span><span·class="p"·data-group-id="6599108430-6">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="6599108430-6">)</span><span·class="p">.</span><span·class="w"> |
| 444 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete_object</span><span·class="p"·data-group-id=" | 444 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete_object</span><span·class="p"·data-group-id="6599108430-7">(</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 445 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 445 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="6599108430-8">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-8">)</span><span·class="p">,</span><span·class="w"> |
| 446 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete_object</span><span·class="p"·data-group-id=" | 446 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_delete_object</span><span·class="p"·data-group-id="6599108430-9">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-9">)</span><span·class="w"> |
| 447 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_update_counter</span><span·class="p"·data-group-id=" | 447 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_update_counter</span><span·class="p"·data-group-id="6599108430-10">(</span><span·class="p"·data-group-id="6599108430-11">{</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="6599108430-11">}</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·91,·SHA:·c6ca2bb4554c9e5dd8f5055e507e617231da6302cd4b829bb1690ad02b23ad72·...·]-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 448 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_update_counter</span><span·class="p"·data-group-id=" | 448 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_update_counter</span><span·class="p"·data-group-id="6599108430-12">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Incr</span><span·class="p"·data-group-id="6599108430-12">)</span><span·class="p">.</span><span·class="w"> |
| 449 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_read</span><span·class="p"·data-group-id=" | 449 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_read</span><span·class="p"·data-group-id="6599108430-13">(</span><span·class="p"·data-group-id="6599108430-14">{</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="6599108430-14">}</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·7357d37cf475a7b911b2bf60115e7650f0ff3c1b080a34292b13c120acb7569a·...·]-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 450 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 450 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="6599108430-15">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Record</span><span·class="p"·data-group-id="6599108430-15">)</span><span·class="p">,</span><span·class="w"> |
| 451 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_read</span><span·class="p"·data-group-id=" | 451 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_read</span><span·class="p"·data-group-id="6599108430-16">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Key</span><span·class="p"·data-group-id="6599108430-16">)</span><span·class="p">.</span><span·class="w"> |
| 452 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_match_object</span><span·class="p"·data-group-id=" | 452 | </span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_match_object</span><span·class="p"·data-group-id="6599108430-17">(</span><span·class="n">Pattern</span><span·class="p"·data-group-id="6599108430-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 453 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 453 | ··</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">element</span><span·class="p"·data-group-id="6599108430-18">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pattern</span><span·class="p"·data-group-id="6599108430-18">)</span><span·class="p">,</span><span·class="w"> |
| 454 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_match_object</span><span·class="p"·data-group-id=" | 454 | ··</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">dirty_match_object</span><span·class="p"·data-group-id="6599108430-19">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pattern</span><span·class="p"·data-group-id="6599108430-19">)</span><span·class="p">.</span><span·class="w"> |
| Max diff block lines reached; 95652/144820 bytes (66.05%) of diff not shown. | |||
| Offset 163, 17 lines modified | Offset 163, 17 lines modified | ||
| 163 | different·Erlang·nodes·in·various·ways.·The·<code·class="inline">Mnesia</code>·programmer·does·not·need·to | 163 | different·Erlang·nodes·in·various·ways.·The·<code·class="inline">Mnesia</code>·programmer·does·not·need·to |
| 164 | state·where·the·different·tables·reside,·only·the·names·of·the·different·tables | 164 | state·where·the·different·tables·reside,·only·the·names·of·the·different·tables |
| 165 | need·to·be·specified·in·the·program·code.·This·is·known·as·"location | 165 | need·to·be·specified·in·the·program·code.·This·is·known·as·"location |
| 166 | transparency"·and·is·an·important·concept.·In·particular:</p><ul><li><p>A·program·works·regardless·of·the·data·location.·It·makes·no·difference | 166 | transparency"·and·is·an·important·concept.·In·particular:</p><ul><li><p>A·program·works·regardless·of·the·data·location.·It·makes·no·difference |
| 167 | whether·the·data·resides·on·the·local·node·or·on·a·remote·node.</p><p>Notice·that·the·program·runs·slower·if·the·data·is·located·on·a·remote·node.</p></li><li><p>The·database·can·be·reconfigured,·and·tables·can·be·moved·between·nodes.·These | 167 | whether·the·data·resides·on·the·local·node·or·on·a·remote·node.</p><p>Notice·that·the·program·runs·slower·if·the·data·is·located·on·a·remote·node.</p></li><li><p>The·database·can·be·reconfigured,·and·tables·can·be·moved·between·nodes.·These |
| 168 | operations·do·not·affect·the·user·programs.</p></li></ul><p>It·has·previously·been·shown·that·each·table·has·a·number·of·system·attributes, | 168 | operations·do·not·affect·the·user·programs.</p></li></ul><p>It·has·previously·been·shown·that·each·table·has·a·number·of·system·attributes, |
| 169 | such·as·<code·class="inline">index</code>·and·<code·class="inline">type</code>.</p><p>Table·attributes·are·specified·when·the·table·is·created.·For·example,·the | 169 | such·as·<code·class="inline">index</code>·and·<code·class="inline">type</code>.</p><p>Table·attributes·are·specified·when·the·table·is·created.·For·example,·the |
| 170 | following·function·creates·a·table·with·two·RAM·replicas:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 170 | following·function·creates·a·table·with·two·RAM·replicas:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="8945343337-1">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w"> |
| 171 | ····················</span><span·class="p"·data-group-id=" | 171 | ····················</span><span·class="p"·data-group-id="8945343337-2">[</span><span·class="p"·data-group-id="8945343337-3">{</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8945343337-4">[</span><span·class="n">N1</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·145,·SHA:·19f3f0dd83903b3118135feb8cca4d74c271055a7c4487f244c5b379f7b43e22·...·]7-3">}</span><span·class="p">,</span><span·class="w"> |
| 172 | ·····················</span><span·class="p"·data-group-id=" | 172 | ·····················</span><span·class="p"·data-group-id="8945343337-5">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">record_info</span><span·class="p"·data-group-id="8945343337-6">(</span><span·class="ss">fields</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·240,·SHA:·0a95373e95ae6d3fa86c23af82ca35a25960420a02f0890c1800a41d7214eb53·...·]7-1">)</span><span·class="p">.</span></code></pre><p>Tables·can·also·have·the·following·properties,·where·each·attribute·has·a·list |
| 173 | of·Erlang·nodes·as·its·value:</p><ul><li><p><code·class="inline">ram_copies</code>.·The·value·of·the·node·list·is·a·list·of·Erlang·nodes,·and·a·RAM | 173 | of·Erlang·nodes·as·its·value:</p><ul><li><p><code·class="inline">ram_copies</code>.·The·value·of·the·node·list·is·a·list·of·Erlang·nodes,·and·a·RAM |
| 174 | replica·of·the·table·resides·on·each·node·in·the·list.</p><p>Notice·that·no·disc·operations·are·performed·when·a·program·executes·write | 174 | replica·of·the·table·resides·on·each·node·in·the·list.</p><p>Notice·that·no·disc·operations·are·performed·when·a·program·executes·write |
| 175 | operations·to·these·replicas.·However,·if·permanent·RAM·replicas·are·required, | 175 | operations·to·these·replicas.·However,·if·permanent·RAM·replicas·are·required, |
| 176 | the·following·alternatives·are·available:</p><ol><li>The·function·<a·href="mnesia.html#dump_tables/1"><code·class="inline">mnesia:dump_tables/1</code></a>·can·be·used·to·dump·RAM·table·replicas | 176 | the·following·alternatives·are·available:</p><ol><li>The·function·<a·href="mnesia.html#dump_tables/1"><code·class="inline">mnesia:dump_tables/1</code></a>·can·be·used·to·dump·RAM·table·replicas |
| 177 | to·disc.</li><li>The·table·replicas·can·be·backed·up,·either·from·RAM,·or·from·disc·if | 177 | to·disc.</li><li>The·table·replicas·can·be·backed·up,·either·from·RAM,·or·from·disc·if |
| 178 | dumped·there·with·this·function.</li></ol></li><li><p><code·class="inline">disc_copies</code>.·The·value·of·the·attribute·is·a·list·of·Erlang·nodes,·and·a | 178 | dumped·there·with·this·function.</li></ol></li><li><p><code·class="inline">disc_copies</code>.·The·value·of·the·attribute·is·a·list·of·Erlang·nodes,·and·a |
| 179 | replica·of·the·table·resides·both·in·RAM·and·on·disc·on·each·node·in·the·list. | 179 | replica·of·the·table·resides·both·in·RAM·and·on·disc·on·each·node·in·the·list. |
| Offset 218, 60 lines modified | Offset 218, 60 lines modified | ||
| 218 | <code·class="inline">mnesia_frag</code>·can·be·used·as·a·<code·class="inline">mnesia_access</code>·callback·module.</p><p>At·each·record·access,·<code·class="inline">mnesia_frag</code>·first·computes·a·hash·value·from·the·record | 218 | <code·class="inline">mnesia_frag</code>·can·be·used·as·a·<code·class="inline">mnesia_access</code>·callback·module.</p><p>At·each·record·access,·<code·class="inline">mnesia_frag</code>·first·computes·a·hash·value·from·the·record |
| 219 | key.·Second,·the·name·of·the·table·fragment·is·determined·from·the·hash·value. | 219 | key.·Second,·the·name·of·the·table·fragment·is·determined·from·the·hash·value. |
| 220 | Finally·the·actual·table·access·is·performed·by·the·same·functions·as·for | 220 | Finally·the·actual·table·access·is·performed·by·the·same·functions·as·for |
| 221 | non-fragmented·tables.·When·the·key·is·not·known·beforehand,·all·fragments·are | 221 | non-fragmented·tables.·When·the·key·is·not·known·beforehand,·all·fragments·are |
| 222 | searched·for·matching·records.</p><p>Notice·that·in·<code·class="inline">ordered_set</code>·tables,·the·records·are·ordered·per·fragment,·and | 222 | searched·for·matching·records.</p><p>Notice·that·in·<code·class="inline">ordered_set</code>·tables,·the·records·are·ordered·per·fragment,·and |
| 223 | the·order·is·undefined·in·results·returned·by·<code·class="inline">select</code>·and·<code·class="inline">match_object</code>,·as | 223 | the·order·is·undefined·in·results·returned·by·<code·class="inline">select</code>·and·<code·class="inline">match_object</code>,·as |
| 224 | well·as·<code·class="inline">first</code>,·<code·class="inline">next</code>,·<code·class="inline">prev</code>·and·<code·class="inline">last</code>.</p><p>The·following·code·illustrates·how·a·<code·class="inline">Mnesia</code>·table·is·converted·to·be·a | 224 | well·as·<code·class="inline">first</code>,·<code·class="inline">next</code>,·<code·class="inline">prev</code>·and·<code·class="inline">last</code>.</p><p>The·following·code·illustrates·how·a·<code·class="inline">Mnesia</code>·table·is·converted·to·be·a |
| 225 | fragmented·table·and·how·more·fragments·are·added·later:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 225 | fragmented·table·and·how·more·fragments·are·added·later:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-1">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·89de90765f51b0e5c8211e777ee55b1f6773e3409bc4abb4bef244343e670ea3·...·]-1">)</span><span·class="gp·unselectable"> |
| 226 | (a@sam)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 226 | (a@sam)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="2764446990-3">(</span><span·class="p"·data-group-id="2764446990-3">)</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="nf">ok</span><span·class="w"> | 227 | </span><span·class="nf">ok</span><span·class="w"> |
| 228 | </span><span·class="p"·data-group-id=" | 228 | </span><span·class="p"·data-group-id="2764446990-4">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="2764446990-4">)</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">syste[·...·truncated·by·diffoscope;·len:·147,·SHA:·b18692f68a9999fba7361d516a665943e0dff48e70446479c3cfb0dff2391a35·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 229 | </span><span·class="p"·data-group-id=" | 229 | </span><span·class="p"·data-group-id="2764446990-6">[</span><span·class="ss">b@sam</span><span·class="p">,</span><span·class="ss">c@sam</span><span·class="p">,</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="2764446990-6">]</span><span·class="gp·unselectable"> |
| 230 | (a@sam)3>·</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">dictionary</span><span·class="p">.</span><span·class="w"> | 230 | (a@sam)3>·</span><span·class="n">Tab</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">dictionary</span><span·class="p">.</span><span·class="w"> |
| 231 | </span><span·class="nf">dictionary</span><span·class="w"> | 231 | </span><span·class="nf">dictionary</span><span·class="w"> |
| 232 | </span><span·class="p"·data-group-id=" | 232 | </span><span·class="p"·data-group-id="2764446990-7">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="2764446990-7">)</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">creat[·...·truncated·by·diffoscope;·len:·692,·SHA:·7639890cfbeb2dac33abdb631525c1c5bf8ee37e48533c9eb2b08aa4690011ed·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="p"·data-group-id=" | 233 | </span><span·class="p"·data-group-id="2764446990-12">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="2764446990-12">}</span><span·class="gp·unselectable"> |
| 234 | (a@sam)5>·</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 234 | (a@sam)5>·</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2764446990-13">(</span><span·class="n">Keys</span><span·class="p"·data-group-id="2764446990-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-14">[</span><span·class="nc">mnesi[·...·truncated·by·diffoscope;·len:·664,·SHA:·8e9150f07390792cc748db5db7864d3db53764740ecf66dbfbab635266e9b20a·...·]-14">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 235 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 235 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 236 | (a@sam)6>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 236 | (a@sam)6>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-17">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Write</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-18">[</span><span·class="nc">list[·...·truncated·by·diffoscope;·len:·445,·SHA:·862e44c3e4a77e4bdf8fa6e73277ae53d9487e4696d2077e7a7b197e34a94566·...·]-17">)</span><span·class="p">.</span><span·class="w"> |
| 237 | </span><span·class="nf">ok</span><span·class="w"> | 237 | </span><span·class="nf">ok</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id=" | 238 | </span><span·class="p"·data-group-id="2764446990-20">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="2764446990-20">)</span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">cha[·...·truncated·by·diffoscope;·len:·486,·SHA:·a0eb6de7ea19c693356efd8d4265cc36e052308cefb18a30ef2297f60a1d0833·...·]-21">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="p"·data-group-id=" | 239 | </span><span·class="p"·data-group-id="2764446990-24">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="2764446990-24">}</span><span·class="gp·unselectable"> |
| 240 | (a@sam)8>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">table_info</span><span·class="p"·data-group-id=" | 240 | (a@sam)8>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">table_info</span><span·class="p"·data-group-id="2764446990-25">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">frag_properties</span><span·class="p"·data-group-id="2764446990-25">)</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="p"·data-group-id=" | 241 | </span><span·class="p"·data-group-id="2764446990-26">[</span><span·class="p"·data-group-id="2764446990-27">{</span><span·class="ss">base_table</span><span·class="p">,</span><span·class="ss">dictionary</span><span·class="p"·data-group-id="2764446990-27">}</span><span·class="p">,</span><span·class="w"> |
| 242 | ·</span><span·class="p"·data-group-id=" | 242 | ·</span><span·class="p"·data-group-id="2764446990-28">{</span><span·class="ss">foreign_key</span><span·class="p">,</span><span·class="ss">undefined</span><span·class="p"·data-group-id="2764446990-28">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ·</span><span·class="p"·data-group-id=" | 243 | ·</span><span·class="p"·data-group-id="2764446990-29">{</span><span·class="ss">hash_module</span><span·class="p">,</span><span·class="ss">mnesia_frag_hash</span><span·class="p"·data-group-id="2764446990-29">}</span><span·class="p">,</span><span·class="w"> |
| 244 | ·</span><span·class="p"·data-group-id=" | 244 | ·</span><span·class="p"·data-group-id="2764446990-30">{</span><span·class="ss">hash_state</span><span·class="p">,</span><span·class="p"·data-group-id="2764446990-31">{</span><span·class="ss">hash_state</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="m[·...·truncated·by·diffoscope;·len:·209,·SHA:·c04978479905221d44756076f37639ade44ea5dacb654ede770403337e4f3e7c·...·]-30">}</span><span·class="p">,</span><span·class="w"> |
| 245 | ·</span><span·class="p"·data-group-id=" | 245 | ·</span><span·class="p"·data-group-id="2764446990-32">{</span><span·class="ss">n_fragments</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="2764446990-32">}</span><span·class="p">,</span><span·class="w"> |
| 246 | ·</span><span·class="p"·data-group-id=" | 246 | ·</span><span·class="p"·data-group-id="2764446990-33">{</span><span·class="ss">node_pool</span><span·class="p">,</span><span·class="p"·data-group-id="2764446990-34">[</span><span·class="ss">a@sam</span><span·class="p">,</span><span·class="ss">b@sam</span><span·class="p">,</span><span·class="ss"[·...·truncated·by·diffoscope;·len:·162,·SHA:·ffe9cb48a8554703abb24efc38ede5922fdbeadf95aa33c115d415d596275ec8·...·]-26">]</span><span·class="gp·unselectable"> |
| 247 | (a@sam)9>·</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 247 | (a@sam)9>·</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2764446990-35">(</span><span·class="n">Item</span><span·class="p"·data-group-id="2764446990-35">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">table[·...·truncated·by·diffoscope;·len:·208,·SHA:·4c4154ec3c9b0be5e5ce82f5b529bf2cb725ea8357e47a717c6b21bab47e1349·...·]-36">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 248 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 249 | (a@sam)10>·</span><span·class="n">Dist</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 249 | (a@sam)10>·</span><span·class="n">Dist</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-37">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-38">[</span><span·class="ss">frag_[·...·truncated·by·diffoscope;·len:·189,·SHA:·6af78569812fb5f71f77158dcf7409fdec2885faa9d507bfcb23f1761e5d9f78·...·]-37">)</span><span·class="p">.</span><span·class="w"> |
| 250 | </span><span·class="p"·data-group-id=" | 250 | </span><span·class="p"·data-group-id="2764446990-39">[</span><span·class="p"·data-group-id="2764446990-40">{</span><span·class="ss">c@sam</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="2764446990-40">}</span><span·class="p">,</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·414,·SHA:·f41c073a96e5c72e33c38b55d357e3a2f55ade0a9688c28125c7201ef8136c5f·...·]-39">]</span><span·class="gp·unselectable"> |
| 251 | (a@sam)11>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id=" | 251 | (a@sam)11>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id="2764446990-43">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-44">{</span><span·class="ss">add_frag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dist</spa[·...·truncated·by·diffoscope;·len:·97,·SHA:·92d9750b098bb2f5e384daad9cfb7987771b4c368f28762011cb43883ab55c71·...·]-43">)</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="p"·data-group-id=" | 252 | </span><span·class="p"·data-group-id="2764446990-45">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="2764446990-45">}</span><span·class="gp·unselectable"> |
| 253 | (a@sam)12>·</span><span·class="n">Dist2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 253 | (a@sam)12>·</span><span·class="n">Dist2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-46">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-47">[</span><span·class="ss">frag_[·...·truncated·by·diffoscope;·len:·189,·SHA:·e80b47ea68a6f8051cd6ec7032c15113518cfcd8280b7a6347d24834b019dc7c·...·]-46">)</span><span·class="p">.</span><span·class="w"> |
| 254 | </span><span·class="p"·data-group-id=" | 254 | </span><span·class="p"·data-group-id="2764446990-48">[</span><span·class="p"·data-group-id="2764446990-49">{</span><span·class="ss">b@sam</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="2764446990-49">}</span><span·class="p">,</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·414,·SHA:·0ef6dfff6e8f2e2438c52ef6f63422dfe209d5496529497cab53ea464ef1c8e4·...·]-48">]</span><span·class="gp·unselectable"> |
| 255 | (a@sam)13>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id=" | 255 | (a@sam)13>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id="2764446990-52">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-53">{</span><span·class="ss">add_frag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dist2</sp[·...·truncated·by·diffoscope;·len:·98,·SHA:·d1f7e413914b886fac43c9e45fb5f302465db7e8d24ac592f3f66d1b72604a0c·...·]-52">)</span><span·class="p">.</span><span·class="w"> |
| 256 | </span><span·class="p"·data-group-id=" | 256 | </span><span·class="p"·data-group-id="2764446990-54">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="2764446990-54">}</span><span·class="gp·unselectable"> |
| 257 | (a@sam)14>·</span><span·class="n">Dist3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 257 | (a@sam)14>·</span><span·class="n">Dist3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-55">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-56">[</span><span·class="ss">frag_[·...·truncated·by·diffoscope;·len:·189,·SHA:·018f3e43e59b1f6f3aabba605f8f1a618043aa014c69544a0165161862cb11e5·...·]-55">)</span><span·class="p">.</span><span·class="w"> |
| 258 | </span><span·class="p"·data-group-id=" | 258 | </span><span·class="p"·data-group-id="2764446990-57">[</span><span·class="p"·data-group-id="2764446990-58">{</span><span·class="ss">a@sam</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="2764446990-58">}</span><span·class="p">,</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·414,·SHA:·7940eb883081157ef75899e7d352a103711b3f30314f23ce6b96cacbd1311165·...·]-57">]</span><span·class="gp·unselectable"> |
| 259 | (a@sam)15>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id=" | 259 | (a@sam)15>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">change_table_frag</span><span·class="p"·data-group-id="2764446990-61">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-62">{</span><span·class="ss">add_frag</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dist3</sp[·...·truncated·by·diffoscope;·len:·98,·SHA:·861c20c2dec8453bc1f36bfebf6e7daa240a5f80795e8bef73d228f8f926f7e0·...·]-61">)</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="p"·data-group-id=" | 260 | </span><span·class="p"·data-group-id="2764446990-63">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="2764446990-63">}</span><span·class="gp·unselectable"> |
| 261 | (a@sam)16>·</span><span·class="n">Read</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 261 | (a@sam)16>·</span><span·class="n">Read</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2764446990-64">(</span><span·class="n">Key</span><span·class="p"·data-group-id="2764446990-64">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</[·...·truncated·by·diffoscope;·len:·308,·SHA:·b390abba62b8bbd2e0b1fe2a6e92744ecf00e0f8756e524e724be96045a63bcd·...·]-65">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 262 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 262 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 263 | (a@sam)17>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 263 | (a@sam)17>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-67">(</span><span·class="ss">transaction</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Read</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-68">[</span><span·class="mi">12</[·...·truncated·by·diffoscope;·len:·183,·SHA:·42963a4421ce55013cb844d6283a20cbc8983abf2ce8d20f4a6722b0a45c09a1·...·]-67">)</span><span·class="p">.</span><span·class="w"> |
| 264 | </span><span·class="p"·data-group-id=" | 264 | </span><span·class="p"·data-group-id="2764446990-69">[</span><span·class="p"·data-group-id="2764446990-70">{</span><span·class="ss">dictionary</span><span·class="p">,</span><span·class="mi">12</span><span·class="p">,</span><span·class="o">-</span><span·class="mi">12</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·74,·SHA:·3cd46579312ec49313b14794ba29bf9545f836774b4913f475e59730b8798aa7·...·]-69">]</span><span·class="gp·unselectable"> |
| 265 | (a@sam)18>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 265 | (a@sam)18>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="2764446990-71">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2764446990-72">[</span><span·class="ss">frag_[·...·truncated·by·diffoscope;·len:·189,·SHA:·d5bd8ebd6752c0030d53410730977181316210beb5c9dc834d6758f1d95dd50f·...·]-71">)</span><span·class="p">.</span><span·class="w"> |
| 266 | </span><span·class="p"·data-group-id=" | 266 | </span><span·class="p"·data-group-id="2764446990-73">[</span><span·class="p"·data-group-id="2764446990-74">{</span><span·class="ss">dictionary</span><span·class="p">,</span><span·class="mi">57</span><span·class="p"·data-group-id="2764446990-74">}</span><span·class="p">,</span><span·class="w"> |
| 267 | ·</span><span·class="p"·data-group-id=" | 267 | ·</span><span·class="p"·data-group-id="2764446990-75">{</span><span·class="ss">dictionary_frag2</span><span·class="p">,</span><span·class="mi">63</span><span·class="p"·data-group-id="2764446990-75">}</span><span·class="p">,</span><span·class="w"> |
| 268 | ·</span><span·class="p"·data-group-id=" | 268 | ·</span><span·class="p"·data-group-id="2764446990-76">{</span><span·class="ss">dictionary_frag3</span><span·class="p">,</span><span·class="mi">62</span><span·class="p"·data-group-id="2764446990-76">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ·</span><span·class="p"·data-group-id="3092061724-77">{</span><span·class="ss">dictionary_frag4</span><span·class="p">,</span><span·class="mi">74</span><span·class="p"·data-group-id="3092061724-77">}</span><span·class="p"·data-group-id="3092061724-73">]</span><span·class="w"> | ||
| 270 | </span><span·class="p"·data-group-id=" | 269 | ·</span><span·class="p"·data-group-id="2764446990-77">{</span><span·class="ss">dictionary_frag4</span><span·class="p">,</span><span·class="mi">74</span><span·class="p"·data-group-id="2764446990-77">}</span><span·class="p"·data-group-id="2764446990-73">]</s[·...·truncated·by·diffoscope;·len:·18,·SHA:·7f5c6b1212d3eb04fd43abf1652541570d6ef0d2bed264ce2c2977e5b9aeee63·...·]"> |
| 270 | </span><span·class="p"·data-group-id="2764446990-78">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="2764446990-78">)</span><span·class="mi">19</span><span·class="o">></span></code></pre><h3·id="fragmentation-properties"·class="section-heading"> | ||
| 271 | ··<a·href="#fragmentation-properties"·class="hover-link"> | 271 | ··<a·href="#fragmentation-properties"·class="hover-link"> |
| 272 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 272 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 273 | ··</a> | 273 | ··</a> |
| 274 | ··<span·class="text">Fragmentation·Properties</span> | 274 | ··<span·class="text">Fragmentation·Properties</span> |
| 275 | </h3> | 275 | </h3> |
| 276 | <p>The·table·property·<code·class="inline">frag_properties</code>·can·be·read·with·the·function | 276 | <p>The·table·property·<code·class="inline">frag_properties</code>·can·be·read·with·the·function |
| 277 | <a·href="mnesia.html#table_info/2"><code·class="inline">mnesia:table_info(Tab,·frag_properties)</code></a>.·The | 277 | <a·href="mnesia.html#table_info/2"><code·class="inline">mnesia:table_info(Tab,·frag_properties)</code></a>.·The |
| Offset 305, 72 lines modified | Offset 305, 72 lines modified | ||
| 305 | defaults·to·<code·class="inline">undefined</code>.·However,·if·the·foreign·key·is·set·to·something·else, | 305 | defaults·to·<code·class="inline">undefined</code>.·However,·if·the·foreign·key·is·set·to·something·else, |
| 306 | it·causes·the·default·values·of·the·other·fragmentation·properties·to·be·the | 306 | it·causes·the·default·values·of·the·other·fragmentation·properties·to·be·the |
| 307 | same·values·as·the·actual·fragmentation·properties·of·the·foreign·table.</p></li><li><p><strong><code·class="inline">{hash_module,·Atom}</code></strong>·-·Enables·definition·of·an·alternative·hashing | 307 | same·values·as·the·actual·fragmentation·properties·of·the·foreign·table.</p></li><li><p><strong><code·class="inline">{hash_module,·Atom}</code></strong>·-·Enables·definition·of·an·alternative·hashing |
| 308 | scheme.·The·module·must·implement·the·<a·href="mnesia_frag_hash.html"><code·class="inline">mnesia_frag_hash</code></a>·callback·behavior. | 308 | scheme.·The·module·must·implement·the·<a·href="mnesia_frag_hash.html"><code·class="inline">mnesia_frag_hash</code></a>·callback·behavior. |
| 309 | This·property·can·explicitly·be·set·at·table·creation.·Default·is | 309 | This·property·can·explicitly·be·set·at·table·creation.·Default·is |
| 310 | <code·class="inline">mnesia_frag_hash</code>.</p></li><li><p><strong><code·class="inline">{hash_state,·Term}</code></strong>·-·Enables·a·table-specific·parameterization·of·a | 310 | <code·class="inline">mnesia_frag_hash</code>.</p></li><li><p><strong><code·class="inline">{hash_state,·Term}</code></strong>·-·Enables·a·table-specific·parameterization·of·a |
| 311 | generic·hash·module.·This·property·can·explicitly·be·set·at·table·creation. | 311 | generic·hash·module.·This·property·can·explicitly·be·set·at·table·creation. |
| 312 | Default·is·<code·class="inline">undefined</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 312 | Default·is·<code·class="inline">undefined</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id="0303395184-1">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·840d839e8b9c188c587f2a0fc7356b993208ffcfac28f8d781f7e1bf9b5f1f27·...·]-1">)</span><span·class="gp·unselectable"> |
| 313 | (a@sam)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 313 | (a@sam)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="0303395184-3">(</span><span·class="p"·data-group-id="0303395184-3">)</span><span·class="p">.</span><span·class="w"> |
| 314 | </span><span·class="nf">ok</span><span·class="w"> | 314 | </span><span·class="nf">ok</span><span·class="w"> |
| 315 | </span><span·class="p"·data-group-id="9272668713-4">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="9272668713-4">)</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">PrimProps</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9272668713-5">[</span><span·class="p"·data-group-id="9272668713-6">{</span><span·class="ss">n_fragments</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">7</span><span·class="p"·data-group-id="9272668713-6">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9272668713-7">{</span><span·class="ss">node_pool</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9272668713-8">[</span><span·class="nf">node</span><span·class="p"·data-group-id="9272668713-9">(</span><span·class="p"·data-group-id="9272668713-9">)</span><span·class="p"·data-group-id="9272668713-8">]</span><span·class="p"·data-group-id="9272668713-7">}</span><span·class="p"·data-group-id="9272668713-5">]</span><span·class="p">.</span><span·class="w"> | ||
| 316 | </span><span·class="p"·data-group-id="9 | 315 | </span><span·class="p"·data-group-id="0303395184-4">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="0303395184-4">)</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="n">PrimProps</span><span·class="w">·</span><span·class="o">=</s[·...·truncated·by·diffoscope;·len:·861,·SHA:·523ab393e004e2b25b916d0ce76c12ffc473251f61e595962ab196246480a10f·...·]"> |
| 316 | </span><span·class="p"·data-group-id="0303395184-10">[</span><span·class="p"·data-group-id="0303395184-11">{</span><span·class="ss">n_fragments</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="0303395184-11">}</span><span·class="p">,</span><span·class="p"·data-group-id="0303395184-12">{</span><span·class="ss">node_pool</span><span·class="p">,</span><span·class="p"·data-group-id="0303395184-13">[</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="0303395184-13">]</span><span·class="p"·data-group-id="0303395184-12">}</span><span·class="p"·data-group-id="0303395184-10">]</span><span·class="gp·unselectable"> | ||
| 317 | (a@sam)3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 317 | (a@sam)3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="0303395184-14">(</span><span·class="ss">prim_dict</span><span·class="p">,</span><span·class="w"> |
| 318 | ······························</span><span·class="p"·data-group-id=" | 318 | ······························</span><span·class="p"·data-group-id="0303395184-15">[</span><span·class="p"·data-group-id="0303395184-16">{</span><span·class="ss">frag_properties</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PrimProps</span><span·class="p"·data-group-id="0303395184-16">}</span><span·class="p">,</span><span·class="w"> |
| 319 | ·······························</span><span·class="p"·data-group-id=" | 319 | ·······························</span><span·class="p"·data-group-id="0303395184-17">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0303395184-18">[</span><span·class="ss">prim_key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·218,·SHA:·304ddb4beb202d381f0cff3af4ce7ea519c095eff4f75cca660341c45e265bde·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 320 | </span><span·class="p"·data-group-id=" | 320 | </span><span·class="p"·data-group-id="0303395184-19">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="0303395184-19">}</span><span·class="gp·unselectable"> |
| 321 | (a@sam)4>·</span><span·class="n">SecProps</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 321 | (a@sam)4>·</span><span·class="n">SecProps</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0303395184-20">[</span><span·class="p"·data-group-id="0303395184-21">{</span><span·class="ss">foreign_key</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0303395184-22">{</span><span·class="ss">prim_dict</span><span·cla[·...·truncated·by·diffoscope;·len:·219,·SHA:·dd41636328b6a3c686bb4dedfa2605c5af448948463699f9a33d4f90af339698·...·]-20">]</span><span·class="p">.</span><span·class="w"> |
| 322 | </span><span·class="p"·data-group-id=" | 322 | </span><span·class="p"·data-group-id="0303395184-23">[</span><span·class="p"·data-group-id="0303395184-24">{</span><span·class="ss">foreign_key</span><span·class="p">,</span><span·class="p"·data-group-id="0303395184-25">{</span><span·class="ss">prim_dict</span><span·class="p">,</span><span·cla[·...·truncated·by·diffoscope;·len:·171,·SHA:·228bbff3b5212359a25f338006e1cc23b51a064af7fef35c498afe4b3becd26b·...·]-23">]</span><span·class="gp·unselectable"> |
| 323 | (a@sam)5>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 323 | (a@sam)5>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="0303395184-26">(</span><span·class="ss">sec_dict</span><span·class="p">,</span><span·class="w"> |
| 324 | ······························</span><span·class="p"·data-group-id=" | 324 | ······························</span><span·class="p"·data-group-id="0303395184-27">[</span><span·class="p"·data-group-id="0303395184-28">{</span><span·class="ss">frag_properties</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecProps</span><span·class="p"·data-group-id="0303395184-28">}</span><span·class="p">,</span><span·class="w"> |
| 325 | ·······························</span><span·class="p"·data-group-id=" | 325 | ·······························</span><span·class="p"·data-group-id="0303395184-29">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0303395184-30">[</span><span·class="ss">sec_key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">s[·...·truncated·by·diffoscope;·len:·216,·SHA:·342e4d99995e1b24b8757d445b062b926a008d150e3272551f5e629f319f70ab·...·]-26">)</span><span·class="p">.</span><span·class="w"> |
| 326 | </span><span·class="p"·data-group-id=" | 326 | </span><span·class="p"·data-group-id="0303395184-31">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="0303395184-31">}</span><span·class="gp·unselectable"> |
| 327 | (a@sam)6>·</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 327 | (a@sam)6>·</span><span·class="n">Write</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0303395184-32">(</span><span·class="n">Rec</span><span·class="p"·data-group-id="0303395184-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">write<[·...·truncated·by·diffoscope;·len:·127,·SHA:·ada521fb054f03e424b14bfe322de80a6af43d39bebc346a4c3f775f48dd1785·...·]-33">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 328 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 328 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 329 | (a@sam)7>·</span><span·class="n">PrimKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">11</span><span·class="p">.</span><span·class="w"> | 329 | (a@sam)7>·</span><span·class="n">PrimKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">11</span><span·class="p">.</span><span·class="w"> |
| 330 | </span><span·class="mi">11</span><span·class="gp·unselectable"> | 330 | </span><span·class="mi">11</span><span·class="gp·unselectable"> |
| 331 | (a@sam)8>·</span><span·class="n">SecKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">.</span><span·class="w"> | 331 | (a@sam)8>·</span><span·class="n">SecKey</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">.</span><span·class="w"> |
| 332 | </span><span·class="mi">42</span><span·class="gp·unselectable"> | 332 | </span><span·class="mi">42</span><span·class="gp·unselectable"> |
| 333 | (a@sam)9>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 333 | (a@sam)9>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="0303395184-34">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Write</span><span·class="p">,</span><span·class="w"> |
| 334 | ··························</span><span·class="p"·data-group-id=" | 334 | ··························</span><span·class="p"·data-group-id="0303395184-35">[</span><span·class="p"·data-group-id="0303395184-36">{</span><span·class="ss">prim_dict</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PrimKey</span><span·class="p">,</span><span·class="w">·</span><span·class="o">-</s[·...·truncated·by·diffoscope;·len:·262,·SHA:·8e5bd9d83ee84fd91ad501103758bff1d13ed19a2e3bd7b2a680fdc12dac5e81·...·]-34">)</span><span·class="p">.</span><span·class="w"> |
| 335 | </span><span·class="nf">ok</span><span·class="w"> | 335 | </span><span·class="nf">ok</span><span·class="w"> |
| 336 | </span><span·class="p"·data-group-id=" | 336 | </span><span·class="p"·data-group-id="0303395184-37">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="0303395184-37">)</span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">ac[·...·truncated·by·diffoscope;·len:·54,·SHA:·af958ba06ba2eb3c045359af4f6e8b95aada3a9408e2ffbc15d25abd77d5402e·...·]-38">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Write</span><span·class="p">,</span><span·class="w"> |
| 337 | ···························</span><span·class="p"·data-group-id=" | 337 | ···························</span><span·class="p"·data-group-id="0303395184-39">[</span><span·class="p"·data-group-id="0303395184-40">{</span><span·class="ss">sec_dict</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PrimKe[·...·truncated·by·diffoscope;·len:·240,·SHA:·688972d01c139d6e3711e5205ae5a43564474754b63a40103876af7d3b14ed7b·...·]-38">)</span><span·class="p">.</span><span·class="w"> |
| 338 | </span><span·class="nf">ok</span><span·class="w"> | 338 | </span><span·class="nf">ok</span><span·class="w"> |
| 339 | </span><span·class="p"·data-group-id=" | 339 | </span><span·class="p"·data-group-id="0303395184-41">(</span><span·class="ss">a@sam</span><span·class="p"·data-group-id="0303395184-41">)</span><span·class="mi">11</span><span·class="o">></span><span·class="w">·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">ch[·...·truncated·by·diffoscope;·len:·630,·SHA:·7d6c8ff1d61ee998d6d52d2771a71a72db6b4d2c6cdc5bfc628d4b0114b79a3c·...·]-42">)</span><span·class="p">.</span><span·class="w"> |
| 340 | </span><span·class="p"·data-group-id=" | 340 | </span><span·class="p"·data-group-id="0303395184-46">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="0303395184-46">}</span><span·class="gp·unselectable"> |
| 341 | (a@sam)12>·</span><span·class="n">SecRead</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 341 | (a@sam)12>·</span><span·class="n">SecRead</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0303395184-47">(</span><span·class="n">PrimKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecKey</span><span·class="p"·data-group-id="0303395184-47">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 342 | ···············</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id=" | 342 | ···············</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">read</span><span·class="p"·data-group-id="0303395184-48">(</span><span·class="p"·data-group-id="0303395184-49">{</span><span·class="ss">sec_dict</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PrimKey</span><span·class="p"·data-group-id="0303395184-49">}</span><span·class="p"[·...·truncated·by·diffoscope;·len:·179,·SHA:·cea8db4236efa44814f974f1357c8a5986607dca5a748c629b0ee288e26bf1be·...·]-48">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 343 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 343 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 344 | (a@sam)13>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 344 | (a@sam)13>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="0303395184-50">(</span><span·class="ss">transaction</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecRead</span><span·class="p">,</span><span·class="w"> |
| 345 | ···························</span><span·class="p"·data-group-id=" | 345 | ···························</span><span·class="p"·data-group-id="0303395184-51">[</span><span·class="n">PrimKey</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecKey</span><span·class="p"·data-group-id="0303395184-51">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">mnesia_[·...·truncated·by·diffoscope;·len:·52,·SHA:·9ff8b19f71046c76a6267d717f8c1b1e89c5251bc7c25feedb4b2b8d89a4d01c·...·]-50">)</span><span·class="p">.</span><span·class="w"> |
| 346 | </span><span·class="p"·data-group-id=" | 346 | </span><span·class="p"·data-group-id="0303395184-52">[</span><span·class="p"·data-group-id="0303395184-53">{</span><span·class="ss">sec_dict</span><span·class="p">,</span><span·class="mi">42</span><span·class="p">,</span><span·class="mi">11</span><span·class="p"·data-group-id="0303395184-53">}[·...·truncated·by·diffoscope;·len:·48,·SHA:·84f13f22bab42bb9c5de9b512f2e74b9b19a834a0f635dacfa68898d0fded59d·...·]-52">]</span><span·class="gp·unselectable"> |
| 347 | (a@sam)14>·</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 347 | (a@sam)14>·</span><span·class="n">Info</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0303395184-54">(</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Item</span><span·class="p"·data-group-id="0303395184-54">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·282,·SHA:·81f351478f5be13d16b96f927db6dfd038ce9983c0604f13bb42db2681db476c·...·]-55">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 348 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> | 348 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="o"><</span><span·class="ss">erl_eval</span><span·class="o">></span><span·class="gp·unselectable"> |
| 349 | (a@sam)15>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id=" | 349 | (a@sam)15>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">activity</span><span·class="p"·data-group-id="0303395184-56">(</span><span·class="ss">sync_dirty</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w"> |
| 350 | ···························</span><span·class="p"·data-group-id=" | 350 | ···························</span><span·class="p"·data-group-id="0303395184-57">[</span><span·class="ss">prim_dict</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">frag_size</span><span·class="p"·data-group-id="0303395184-57">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·59,·SHA:·278abc29a33b5c0806781e36e4f2298855b48ad53321b7d3fae62529042e3320·...·]-56">)</span><span·class="p">.</span><span·class="w"> |
| Max diff block lines reached; 63550/153707 bytes (41.34%) of diff not shown. | |||
| Offset 229, 34 lines modified | Offset 229, 34 lines modified | ||
| 229 | ··</a> | 229 | ··</a> |
| 230 | ··<span·class="text">Startup·Files</span> | 230 | ··<span·class="text">Startup·Files</span> |
| 231 | </h3> | 231 | </h3> |
| 232 | <p><a·href="mnesia_chap3.html#start_mnesia">Start·Mnesia</a>·states·the·following·prerequisites | 232 | <p><a·href="mnesia_chap3.html#start_mnesia">Start·Mnesia</a>·states·the·following·prerequisites |
| 233 | for·starting·<code·class="inline">Mnesia</code>:</p><ul><li>An·Erlang·session·must·be·started·and·a·<code·class="inline">Mnesia</code>·directory·must·be·specified | 233 | for·starting·<code·class="inline">Mnesia</code>:</p><ul><li>An·Erlang·session·must·be·started·and·a·<code·class="inline">Mnesia</code>·directory·must·be·specified |
| 234 | for·the·database.</li><li>A·database·schema·must·be·initiated,·using·the·function | 234 | for·the·database.</li><li>A·database·schema·must·be·initiated,·using·the·function |
| 235 | <a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema/1</code></a>.</li></ul><p>The·following·example·shows·how·these·tasks·are·performed:</p><p><em>Step·1:</em>·Start·an·Erlang·session·and·specify·a·<code·class="inline">Mnesia</code>·directory·for·the | 235 | <a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema/1</code></a>.</li></ul><p>The·following·example·shows·how·these·tasks·are·performed:</p><p><em>Step·1:</em>·Start·an·Erlang·session·and·specify·a·<code·class="inline">Mnesia</code>·directory·for·the |
| 236 | database:</p><pre><code·class="text">%·erl·-sname·klacke·-mnesia·dir·'"/ldisc/scratch/klacke"'</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id=" | 236 | database:</p><pre><code·class="text">%·erl·-sname·klacke·-mnesia·dir·'"/ldisc/scratch/klacke"'</code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="1208565100-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">15.1</span><span·class="p">.</span><span·class="mi">2</span><span·class="p"·data-group-id="1208565100-1">]</span><span·class="w"> |
| 237 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id=" | 237 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mf">1.2</span><span·class="w">·</span><span·class="p"·data-group-id="1208565100-2">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><sp[·...·truncated·by·diffoscope;·len:·399,·SHA:·6e71340365214e996b93779895364de7423201c16e0dd10e7dc812db6a3adddc·...·]-2">)</span><span·class="gp·unselectable"> |
| 238 | (klacke@gin)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id=" | 238 | (klacke@gin)1>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_schema</span><span·class="p"·data-group-id="1208565100-4">(</span><span·class="p"·data-group-id="1208565100-5">[</span><span·class="nf">node</span><span·class="p"·data-group-id="1208565100-6">(</span><span·class="p"·data-group-id="1208565100-6">)</span><span·class="p"·data-group-id="1208565100-5">]<[·...·truncated·by·diffoscope;·len:·47,·SHA:·82db0b2c3695f6b6f644dc0d540ae6614bc7aff3f097f0dbfba8d984596e97c1·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="nf">ok</span><span·class="w"> | 239 | </span><span·class="nf">ok</span><span·class="w"> |
| 240 | </span><span·class="p"·data-group-id=" | 240 | </span><span·class="p"·data-group-id="1208565100-7">(</span><span·class="ss">klacke@gin</span><span·class="p"·data-group-id="1208565100-7">)</span><span·class="mi">2</span><span·class="o">></span><span·class="w"> |
| 241 | </span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">Z</span><span·class="w"> | 241 | </span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">Z</span><span·class="w"> |
| 242 | </span><span·class="p"·data-group-id=" | 242 | </span><span·class="p"·data-group-id="1208565100-8">[</span><span·class="mi">1</span><span·class="p"·data-group-id="1208565100-8">]</span><span·class="o">+</span><span·class="w">··</span><span·class="n">Stopped</span><span·class="w">·················</span><span·class="ss">erl</span></code></pre><p><em>Step·2:</em>·You·can·inspect·the·<code·class="inline">Mnesia</code>·directory·to·see·what·files·have·been |
| 243 | created:</p><pre><code·class="text">%·ls·-l·/ldisc/scratch/klacke | 243 | created:</p><pre><code·class="text">%·ls·-l·/ldisc/scratch/klacke |
| 244 | -rw-rw-r--···1·klacke···staff·······247·Aug·12·15:06·FALLBACK.BUP</code></pre><p>The·response·shows·that·the·file·<code·class="inline">FALLBACK.BUP</code>·has·been·created.·This·is·called | 244 | -rw-rw-r--···1·klacke···staff·······247·Aug·12·15:06·FALLBACK.BUP</code></pre><p>The·response·shows·that·the·file·<code·class="inline">FALLBACK.BUP</code>·has·been·created.·This·is·called |
| 245 | a·backup·file,·and·it·contains·an·initial·schema.·If·more·than·one·node·in·the | 245 | a·backup·file,·and·it·contains·an·initial·schema.·If·more·than·one·node·in·the |
| 246 | function·<a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema/1</code></a>·had·been·specified,·identical·backup·files | 246 | function·<a·href="mnesia.html#create_schema/1"><code·class="inline">mnesia:create_schema/1</code></a>·had·been·specified,·identical·backup·files |
| 247 | would·have·been·created·on·all·nodes.</p><p><em>Step·3:</em>·Start·<code·class="inline">Mnesia</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(klacke@gin)3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 247 | would·have·been·created·on·all·nodes.</p><p><em>Step·3:</em>·Start·<code·class="inline">Mnesia</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(klacke@gin)3>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="8014969368-1">(</span><span·class="p"·data-group-id="8014969368-1">)</span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="ss">ok</span></code></pre><p><em>Step·4:</em>·You·can·see·the·following·listing·in·the·<code·class="inline">Mnesia</code>·directory:</p><pre><code·class="text">-rw-rw-r--···1·klacke···staff·········86·May·26·19:03·LATEST.LOG | 248 | </span><span·class="ss">ok</span></code></pre><p><em>Step·4:</em>·You·can·see·the·following·listing·in·the·<code·class="inline">Mnesia</code>·directory:</p><pre><code·class="text">-rw-rw-r--···1·klacke···staff·········86·May·26·19:03·LATEST.LOG |
| 249 | -rw-rw-r--···1·klacke···staff······34507·May·26·19:03·schema.DAT</code></pre><p>The·schema·in·the·backup·file·<code·class="inline">FALLBACK.BUP</code>·has·been·used·to·generate·the·file | 249 | -rw-rw-r--···1·klacke···staff······34507·May·26·19:03·schema.DAT</code></pre><p>The·schema·in·the·backup·file·<code·class="inline">FALLBACK.BUP</code>·has·been·used·to·generate·the·file |
| 250 | <code·class="inline">schema.DAT</code>.·Since·there·are·no·other·disc·resident·tables·than·the·schema,·no | 250 | <code·class="inline">schema.DAT</code>.·Since·there·are·no·other·disc·resident·tables·than·the·schema,·no |
| 251 | other·data·files·were·created.·The·file·<code·class="inline">FALLBACK.BUP</code>·was·removed·after·the | 251 | other·data·files·were·created.·The·file·<code·class="inline">FALLBACK.BUP</code>·was·removed·after·the |
| 252 | successful·"restoration".·You·also·see·some·files·that·are·for·internal·use·by | 252 | successful·"restoration".·You·also·see·some·files·that·are·for·internal·use·by |
| 253 | <code·class="inline">Mnesia</code>.</p><p><em>Step·5:</em>·Create·a·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(klacke@gin)4>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="8525299243-1">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="p"·data-group-id="8525299243-2">[</span><span·class="p"·data-group-id="8525299243-3">{</span><span·class="ss">disc_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8525299243-4">[</span><span·class="nf">node</span><span·class="p"·data-group-id="8525299243-5">(</span><span·class="p"·data-group-id="8525299243-5">)</span><span·class="p"·data-group-id="8525299243-4">]</span><span·class="p"·data-group-id="8525299243-3">}</span><span·class="p"·data-group-id="8525299243-2">]</span><span·class="p"·data-group-id="8525299243-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 254 | < | 253 | <code·class="inline">Mnesia</code>.</p><p><em>Step·5:</em>·Create·a·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(klacke@gin)4>·</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">creat[·...·truncated·by·diffoscope;·len:·746,·SHA:·4e6956fc64406fc017979cb60d760f491d12c1919275c1d977688dc6f7751bf1·...·] |
| 254 | </span><span·class="p"·data-group-id="6908464232-6">{</span><span·class="ss">atomic</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p"·data-group-id="6908464232-6">}</span></code></pre><p><em>Step·6:</em>·You·can·see·the·following·listing·in·the·<code·class="inline">Mnesia</code>·directory:</p><pre><code·class="text">%·ls·-l·/ldisc/scratch/klacke | ||
| 255 | -rw-rw-r--·1·klacke·staff····86·May·26·19:07·LATEST.LOG | 255 | -rw-rw-r--·1·klacke·staff····86·May·26·19:07·LATEST.LOG |
| 256 | -rw-rw-r--·1·klacke·staff····94·May·26·19:07·foo.DCD | 256 | -rw-rw-r--·1·klacke·staff····94·May·26·19:07·foo.DCD |
| 257 | -rw-rw-r--·1·klacke·staff··6679·May·26·19:07·schema.DAT</code></pre><p>The·file·<code·class="inline">foo.DCD</code>·has·been·created.·This·file·will·eventually·store·all·data | 257 | -rw-rw-r--·1·klacke·staff··6679·May·26·19:07·schema.DAT</code></pre><p>The·file·<code·class="inline">foo.DCD</code>·has·been·created.·This·file·will·eventually·store·all·data |
| 258 | that·is·written·into·the·<code·class="inline">foo</code>·table.</p><h3·id="log-file"·class="section-heading"> | 258 | that·is·written·into·the·<code·class="inline">foo</code>·table.</p><h3·id="log-file"·class="section-heading"> |
| 259 | ··<a·href="#log-file"·class="hover-link"> | 259 | ··<a·href="#log-file"·class="hover-link"> |
| 260 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 260 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 261 | ··</a> | 261 | ··</a> |
| Offset 292, 19 lines modified | Offset 292, 19 lines modified | ||
| 292 | and·it·is·efficient·to·insert·and·search·for·records·in·these·files·with·a | 292 | and·it·is·efficient·to·insert·and·search·for·records·in·these·files·with·a |
| 293 | specific·key.·The·<code·class="inline">.DAT</code>·files·are·used·for·the·schema·and·for | 293 | specific·key.·The·<code·class="inline">.DAT</code>·files·are·used·for·the·schema·and·for |
| 294 | <code·class="inline">disc_only_copies</code>·tables.·The·<code·class="inline">Mnesia</code>·data·files·are·currently·implemented·in | 294 | <code·class="inline">disc_only_copies</code>·tables.·The·<code·class="inline">Mnesia</code>·data·files·are·currently·implemented·in |
| 295 | the·standard·library·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/dets.html"><code·class="inline">dets</code></a>·in·<code·class="inline">STDLIB</code>.</p><p>All·operations·that·can·be·performed·on·<code·class="inline">dets</code>·files·can·also·be·performed·on | 295 | the·standard·library·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/dets.html"><code·class="inline">dets</code></a>·in·<code·class="inline">STDLIB</code>.</p><p>All·operations·that·can·be·performed·on·<code·class="inline">dets</code>·files·can·also·be·performed·on |
| 296 | the·<code·class="inline">Mnesia</code>·data·files.·For·example,·<code·class="inline">dets</code>·contains·the·function | 296 | the·<code·class="inline">Mnesia</code>·data·files.·For·example,·<code·class="inline">dets</code>·contains·the·function |
| 297 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/dets.html#traverse/2"><code·class="inline">dets:traverse/2</code></a>,·which·can·be·used·to·view·the·contents·of·a·<code·class="inline">Mnesia</code>·<code·class="inline">DAT</code> | 297 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/dets.html#traverse/2"><code·class="inline">dets:traverse/2</code></a>,·which·can·be·used·to·view·the·contents·of·a·<code·class="inline">Mnesia</code>·<code·class="inline">DAT</code> |
| 298 | file.·However,·this·can·only·be·done·when·<code·class="inline">Mnesia</code>·is·not·running.·So,·to·view | 298 | file.·However,·this·can·only·be·done·when·<code·class="inline">Mnesia</code>·is·not·running.·So,·to·view |
| 299 | the·schema·file,·do·as·follows;</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 299 | the·schema·file,·do·as·follows;</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8448177331-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="8448177331-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·688,·SHA:·07c64e9ea01d993293017108de411cfaae2616e70a4c75ca89c048866f9fee13·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 300 | </span><span·class="p"·data-group-id=" | 300 | </span><span·class="p"·data-group-id="8448177331-6">{</span><span·class="ss">keypos</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="8448177331-6">}</span><span·class="p"·data-group-id="8448177331-3">]</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·03b6554a6a1766374cadea5b6562e6ca6bc8ca5edb7f9ee45a876aa61dc64cb3·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 301 | </span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 301 | </span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="8448177331-7">(</span><span·class="n">X</span><span·class="p"·data-group-id="8448177331-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><[·...·truncated·by·diffoscope;·len:·381,·SHA:·3b8562b028fd8f5c3d00b132eaf73a13cf61f5eff820ba078db27ab96d087fca·...·]-8">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">continue</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 302 | </span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">traverse</span><span·class="p"·data-group-id=" | 302 | </span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">traverse</span><span·class="p"·data-group-id="8448177331-10">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">F</span><span·class="p"·data-group-id="8448177331-10">)</span><span·class="p">,</span><span·class="w"> |
| 303 | </span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 303 | </span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="8448177331-11">(</span><span·class="n">N</span><span·class="p"·data-group-id="8448177331-11">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>The·<code·class="inline">DAT</code>·files·must·always·be·opened·with·option·<code·class="inline">{repair,·false}</code>.·This |
| 304 | ensures·that·these·files·are·not·automatically·repaired.·Without·this·option, | 304 | ensures·that·these·files·are·not·automatically·repaired.·Without·this·option, |
| 305 | the·database·can·become·inconsistent,·because·<code·class="inline">Mnesia</code>·can·believe·that·the | 305 | the·database·can·become·inconsistent,·because·<code·class="inline">Mnesia</code>·can·believe·that·the |
| 306 | files·were·properly·closed.·For·information·about·configuration·parameter | 306 | files·were·properly·closed.·For·information·about·configuration·parameter |
| 307 | <code·class="inline">auto_repair</code>,·see·the·Reference·Manual.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>It·is·recommended·that·the·data·files·are·not·tampered·with·while·<code·class="inline">Mnesia</code>·is | 307 | <code·class="inline">auto_repair</code>,·see·the·Reference·Manual.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>It·is·recommended·that·the·data·files·are·not·tampered·with·while·<code·class="inline">Mnesia</code>·is |
| 308 | running.·While·not·prohibited,·the·behavior·of·<code·class="inline">Mnesia</code>·is·unpredictable.</p></section><p>The·<code·class="inline">disc_copies</code>·tables·are·stored·on·disk·with·<code·class="inline">.DCL</code>·and·<code·class="inline">.DCD</code>·files,·which | 308 | running.·While·not·prohibited,·the·behavior·of·<code·class="inline">Mnesia</code>·is·unpredictable.</p></section><p>The·<code·class="inline">disc_copies</code>·tables·are·stored·on·disk·with·<code·class="inline">.DCL</code>·and·<code·class="inline">.DCD</code>·files,·which |
| 309 | are·standard·<code·class="inline">disk_log</code>·files.</p><h2·id="loading-tables-at-startup"·class="section-heading"> | 309 | are·standard·<code·class="inline">disk_log</code>·files.</p><h2·id="loading-tables-at-startup"·class="section-heading"> |
| 310 | ··<a·href="#loading-tables-at-startup"·class="hover-link"> | 310 | ··<a·href="#loading-tables-at-startup"·class="hover-link"> |
| Offset 530, 46 lines modified | Offset 530, 46 lines modified | ||
| 530 | of·what·<code·class="inline">record_name</code>·is·set·to.</li></ul><p>The·backup·data·is·divided·into·two·sections.·The·first·section·contains | 530 | of·what·<code·class="inline">record_name</code>·is·set·to.</li></ul><p>The·backup·data·is·divided·into·two·sections.·The·first·section·contains |
| 531 | information·related·to·the·schema.·All·schema-related·items·are·tuples·where·the | 531 | information·related·to·the·schema.·All·schema-related·items·are·tuples·where·the |
| 532 | first·field·equals·the·atom·schema.·The·second·section·is·the·record·section. | 532 | first·field·equals·the·atom·schema.·The·second·section·is·the·record·section. |
| 533 | Schema·records·cannot·be·mixed·with·other·records·and·all·schema·records·must·be | 533 | Schema·records·cannot·be·mixed·with·other·records·and·all·schema·records·must·be |
| 534 | located·first·in·the·backup.</p><p>The·schema·itself·is·a·table·and·is·possibly·included·in·the·backup.·Each·node | 534 | located·first·in·the·backup.</p><p>The·schema·itself·is·a·table·and·is·possibly·included·in·the·backup.·Each·node |
| 535 | where·the·schema·table·resides·is·regarded·as·a·<code·class="inline">db_node</code>.</p><p>The·following·example·shows·how | 535 | where·the·schema·table·resides·is·regarded·as·a·<code·class="inline">db_node</code>.</p><p>The·following·example·shows·how |
| 536 | <a·href="mnesia.html#traverse_backup/4"><code·class="inline">mnesia:traverse_backup</code></a>·can·be·used·to·rename·a | 536 | <a·href="mnesia.html#traverse_backup/4"><code·class="inline">mnesia:traverse_backup</code></a>·can·be·used·to·rename·a |
| 537 | <code·class="inline">db_node</code>·in·a·backup·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">change_node_name</span><span·class="p"·data-group-id=" | 537 | <code·class="inline">db_node</code>·in·a·backup·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">change_node_name</span><span·class="p"·data-group-id="2467625400-1">(</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">To</span><span·class="p">,</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·135,·SHA:·ae50e95eafbe7c1bcc360a49f92ccad15a60b99caef2e0ca718a58ae6920e377·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 538 | ····</span><span·class="n">Switch</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 538 | ····</span><span·class="n">Switch</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 539 | ········</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 539 | ········</span><span·class="nf">fun</span><span·class="p"·data-group-id="2467625400-2">(</span><span·class="n">Node</span><span·class="p"·data-group-id="2467625400-2">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="n">From</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">To</span><span·class="p">;</span><span·class="w"> |
| 540 | ···········</span><span·class="p"·data-group-id=" | 540 | ···········</span><span·class="p"·data-group-id="2467625400-3">(</span><span·class="n">Node</span><span·class="p"·data-group-id="2467625400-3">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">==</span><sp[·...·truncated·by·diffoscope;·len:·466,·SHA:·1857072fbf15a2a62b7499b1fc77d9f213107dc6a66ee9cf1a6b25905ba18af7·...·]-4">)</span><span·class="p">;</span><span·class="w"> |
| 541 | ···········</span><span·class="p"·data-group-id=" | 541 | ···········</span><span·class="p"·data-group-id="2467625400-6">(</span><span·class="n">Node</span><span·class="p"·data-group-id="2467625400-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Node</span><span·class="w"> |
| 542 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 542 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 543 | ····</span><span·class="n">Convert</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 543 | ····</span><span·class="n">Convert</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 544 | ········</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 544 | ········</span><span·class="nf">fun</span><span·class="p"·data-group-id="2467625400-7">(</span><span·class="p"·data-group-id="2467625400-8">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Version<[·...·truncated·by·diffoscope;·len:·174,·SHA:·37b46683fa33712eaefa9ed3016495014e67b186be93ac56d2437644bd0a8fc1·...·]-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 545 | ················</span><span·class="p"·data-group-id=" | 545 | ················</span><span·class="p"·data-group-id="2467625400-9">{</span><span·class="p"·data-group-id="2467625400-10">[</span><span·class="p"·data-group-id="2467625400-11">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">version</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·284,·SHA:·9b5afdd4ada87973617248bb540874eed225cf66e67d8c8fa60e16f2d00eaa32·...·]-9">}</span><span·class="p">;</span><span·class="w"> |
| 546 | ···········</span><span·class="p"·data-group-id=" | 546 | ···········</span><span·class="p"·data-group-id="2467625400-12">(</span><span·class="p"·data-group-id="2467625400-13">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">cookie</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cookie<[·...·truncated·by·diffoscope;·len:·175,·SHA:·dc981665a0868827e6e6d3a749c71713404d5f25fad55db07325a12e0796f81c·...·]-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 547 | ················</span><span·class="p"·data-group-id=" | 547 | ················</span><span·class="p"·data-group-id="2467625400-14">{</span><span·class="p"·data-group-id="2467625400-15">[</span><span·class="p"·data-group-id="2467625400-16">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">cookie</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·283,·SHA:·778933fcf17109cd334fc6d0a8fad25e48dd8c2196c03e4b8be6cd7a5878405c·...·]-14">}</span><span·class="p">;</span><span·class="w"> |
| 548 | ···········</span><span·class="p"·data-group-id=" | 548 | ···········</span><span·class="p"·data-group-id="2467625400-17">(</span><span·class="p"·data-group-id="2467625400-18">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CreateList<[·...·truncated·by·diffoscope;·len:·175,·SHA:·613a71788ffd6a9072f23e6143e87e87c22c900ac3ede88f84c0623daf55db17·...·]-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 549 | ················</span><span·class="n">Keys</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 549 | ················</span><span·class="n">Keys</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2467625400-19">[</span><span·class="ss">ram_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disc_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disc_only_copies</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·13,·SHA:·a3087ddb14dd60a28de6d0ad21021c3288d5382492641308881446ec2ea57f31·...·]-19">]</span><span·class="p">,</span><span·class="w"> |
| 550 | ················</span><span·class="n">OptSwitch</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 550 | ················</span><span·class="n">OptSwitch</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 551 | ····················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 551 | ····················</span><span·class="nf">fun</span><span·class="p"·data-group-id="2467625400-20">(</span><span·class="p"·data-group-id="2467625400-21">{</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Val</span><span·class="p"·data-group-id="2467625400-21">}</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·e5e319b507465b0d28f63529ec2516ea23130d627a1c8da40375759a78ada6de·...·]-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 552 | ····························</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id=" | 552 | ····························</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id="2467625400-22">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Keys</span><span·class="p"·data-group-id="2467625400-22">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 553 | ································</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id=" | 553 | ································</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2467625400-23">{</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="2467625400-24">(</span><span·class="n">Switch</s[·...·truncated·by·diffoscope;·len:·173,·SHA:·0bb99c362b7a2fddbd02bd4a01eff31e691dd16f7009565330e59e8d92937d62·...·]-23">}</span><span·class="p">;</span><span·class="w"> |
| 554 | ································</span><span·class="ss">false</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id=" | 554 | ································</span><span·class="ss">false</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2467625400-25">{</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Val</span><span·class="p"·data-group-id="2467625400-25">}</span><span·class="w"> |
| 555 | ····························</span><span·class="k">end</span><span·class="w"> | 555 | ····························</span><span·class="k">end</span><span·class="w"> |
| 556 | ····················</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 556 | ····················</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 557 | ················</span><span·class="p"·data-group-id=" | 557 | ················</span><span·class="p"·data-group-id="2467625400-26">{</span><span·class="p"·data-group-id="2467625400-27">[</span><span·class="p"·data-group-id="2467625400-28">{</span><span·class="ss">schema</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tab</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·551,·SHA:·746dc8910e186f6e51b68cb510a987036fe5dd9e78f1d206b6513cf104f51482·...·]-26">}</span><span·class="p">;</span><span·class="w"> |
| 558 | ···········</span><span·class="p"·data-group-id=" | 558 | ···········</span><span·class="p"·data-group-id="2467625400-30">(</span><span·class="n">Other</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="2467625400-30">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 559 | ················</span><span·class="p"·data-group-id=" | 559 | ················</span><span·class="p"·data-group-id="2467625400-31">{</span><span·class="p"·data-group-id="2467625400-32">[</span><span·class="n">Other</span><span·class="p"·data-group-id="2467625400-32">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·64098232a0e8bbdf435e0e860047559d3e7fe71c2bd13491aa51e6a759b4714f·...·]-31">}</span><span·class="w"> |
| 560 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 560 | ········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 561 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">traverse_backup</span><span·class="p"·data-group-id=" | 561 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">traverse_backup</span><span·class="p"·data-group-id="2467625400-33">(</span><span·class="n">Source</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Target</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·220,·SHA:·f92e61ede113738af5d10ac8438baf72cd9b15525a340b2f9913b29acaa1da57·...·]-33">)</span><span·class="p">.</span><span·class="w"> |
| 562 | </span><span·class="nf">view</span><span·class="p"·data-group-id=" | 562 | </span><span·class="nf">view</span><span·class="p"·data-group-id="2467625400-34">(</span><span·class="n">Source</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p"·data-group-id="2467625400-34">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 563 | ····</span><span·class="n">View</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 563 | ····</span><span·class="n">View</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2467625400-35">(</span><span·class="n">Item</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="2467625400-35">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 564 | ···················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 564 | ···················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2467625400-36">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">.</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="2467625400-37">[</span><span·class="n">Item<[·...·truncated·by·diffoscope;·len:·101,·SHA:·32769ef3e6aabac5471a4d9b7f035088b9f0d555447ff97be33bcd8662e3d6dc·...·]-36">)</span><span·class="p">,</span><span·class="w"> |
| 565 | ···················</span><span·class="p"·data-group-id=" | 565 | ···················</span><span·class="p"·data-group-id="2467625400-38">{</span><span·class="p"·data-group-id="2467625400-39">[</span><span·class="n">Item</span><span·class="p"·data-group-id="2467625400-39">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·114,·SHA:·278a426a694154b46c1ab14c391ea6474e43c8c4e4531757aabacf52449fc97c·...·]-38">}</span><span·class="w"> |
| 566 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 566 | ···········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 567 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">traverse_backup</span><span·class="p"·data-group-id=" | 567 | ····</span><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">traverse_backup</span><span·class="p"·data-group-id="2467625400-40">(</span><span·class="n">Source</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">dummy</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·217,·SHA:·c7d18d2bb1a860f4471f336460ae8379706da4a4ad4463eb1431a5524e54149a·...·]-40">)</span><span·class="p">.</span></code></pre><h3·id="restore"·class="section-heading"> |
| 568 | ··<a·href="#restore"·class="hover-link"> | 568 | ··<a·href="#restore"·class="hover-link"> |
| 569 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 569 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 570 | ··</a> | 570 | ··</a> |
| 571 | ··<span·class="text">Restore</span> | 571 | ··<span·class="text">Restore</span> |
| 572 | </h3> | 572 | </h3> |
| 573 | <p>Tables·can·be·restored·online·from·a·backup·without·restarting·<code·class="inline">Mnesia</code>.·A | 573 | <p>Tables·can·be·restored·online·from·a·backup·without·restarting·<code·class="inline">Mnesia</code>.·A |
| 574 | restore·is·performed·with·the·function | 574 | restore·is·performed·with·the·function |
| Offset 705, 15 lines modified | Offset 705, 15 lines modified | ||
| 705 | ······<p·class="built-using"> | 705 | ······<p·class="built-using"> |
| 706 | ········Built·using | 706 | ········Built·using |
| 707 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 707 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 708 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 708 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 709 | ······</p> | 709 | ······</p> |
| 710 | <p>Copyright·©·1996-202 | 710 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 711 | ····</footer> | 711 | ····</footer> |
| 712 | ··</div> | 712 | ··</div> |
| 713 | </main> | 713 | </main> |
| 714 | </div> | 714 | </div> |
| 715 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 715 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 716 | ··<script> | 716 | ··<script> |
| 717 | ··let·initialized·=·false; | 717 | ··let·initialized·=·false; |
| Offset 187, 15 lines modified | Offset 187, 15 lines modified | ||
| 187 | ······<p·class="built-using"> | 187 | ······<p·class="built-using"> |
| 188 | ········Built·using | 188 | ········Built·using |
| 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 189 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 190 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 191 | ······</p> | 191 | ······</p> |
| 192 | <p>Copyright·©·1996-202 | 192 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 193 | ····</footer> | 193 | ····</footer> |
| 194 | ··</div> | 194 | ··</div> |
| 195 | </main> | 195 | </main> |
| 196 | </div> | 196 | </div> |
| 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 197 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 198 | ··<script> | 198 | ··<script> |
| 199 | ··let·initialized·=·false; | 199 | ··let·initialized·=·false; |
| Offset 405, 15 lines modified | Offset 405, 15 lines modified | ||
| 405 | ······<p·class="built-using"> | 405 | ······<p·class="built-using"> |
| 406 | ········Built·using | 406 | ········Built·using |
| 407 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 407 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 408 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 408 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 409 | ······</p> | 409 | ······</p> |
| 410 | <p>Copyright·©·1996-202 | 410 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 411 | ····</footer> | 411 | ····</footer> |
| 412 | ··</div> | 412 | ··</div> |
| 413 | </main> | 413 | </main> |
| 414 | </div> | 414 | </div> |
| 415 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 415 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 416 | ··<script> | 416 | ··<script> |
| 417 | ··let·initialized·=·false; | 417 | ··let·initialized·=·false; |
| Offset 239, 15 lines modified | Offset 239, 15 lines modified | ||
| 239 | ······<p·class="built-using"> | 239 | ······<p·class="built-using"> |
| 240 | ········Built·using | 240 | ········Built·using |
| 241 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 241 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 242 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 242 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 243 | ······</p> | 243 | ······</p> |
| 244 | <p>Copyright·©·1996-202 | 244 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 245 | ····</footer> | 245 | ····</footer> |
| 246 | ··</div> | 246 | ··</div> |
| 247 | </main> | 247 | </main> |
| 248 | </div> | 248 | </div> |
| 249 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 249 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 250 | ··<script> | 250 | ··<script> |
| 251 | ··let·initialized·=·false; | 251 | ··let·initialized·=·false; |
| Offset 250, 16 lines modified | Offset 250, 16 lines modified | ||
| 250 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·create_table(Tab·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·Opt·::·[{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()}])·->·ok.</pre> | 250 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·create_table(Tab·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·Opt·::·[{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()}])·->·ok.</pre> |
| 251 | ······</div> | 251 | ······</div> |
| 252 | <section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p><em>This·function·is·deprecated.·Do·not·use·it.</em></p></section><p>A·wrapper·function·for·<a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>,·which·creates·a·table·(if·there | 252 | <section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p><em>This·function·is·deprecated.·Do·not·use·it.</em></p></section><p>A·wrapper·function·for·<a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>,·which·creates·a·table·(if·there |
| 253 | is·no·existing·table)·with·an·appropriate·set·of·<code·class="inline">attributes</code>.·The·attributes | 253 | is·no·existing·table)·with·an·appropriate·set·of·<code·class="inline">attributes</code>.·The·attributes |
| 254 | and·<code·class="inline">TabDef</code>·are·forwarded·to·<a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>.·For·example,·if·the·table | 254 | and·<code·class="inline">TabDef</code>·are·forwarded·to·<a·href="mnesia.html#create_table/2"><code·class="inline">mnesia:create_table/2</code></a>.·For·example,·if·the·table |
| 255 | is·to·reside·as·<code·class="inline">disc_only_copies</code>·on·all·nodes,·a·call·looks·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">TabDef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6 | 255 | is·to·reside·as·<code·class="inline">disc_only_copies</code>·on·all·nodes,·a·call·looks·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">TabDef</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6391862011-1">[</span><span·class="p"·data-group-id="6391862011-2">{</span><span·class="p"·data-group-id="6391862011-3">{</span><span·class="ss">disc_only_copies</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">node</span><span·class="[·...·truncated·by·diffoscope;·len:·316,·SHA:·bb559d36448b01c82f5486aa30169fc46373beeb30557fb1500ee14286a4cad8·...·]1-3">}</span><span·class="p">]</span><span·class="p">,</span><span·class="w"> |
| 256 | ··········</span><span·class="nc">mnesia_registry</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="6 | 256 | ··········</span><span·class="nc">mnesia_registry</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="6391862011-6">(</span><span·class="ss">my_reg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TabDef</span><span·class="p"·data-group-id="6391862011-6">)</span></code></pre> |
| 257 | ··</section> | 257 | ··</section> |
| 258 | </section> | 258 | </section> |
| 259 | ····</div> | 259 | ····</div> |
| 260 | ··</section> | 260 | ··</section> |
| 261 | ····<footer·class="footer"> | 261 | ····<footer·class="footer"> |
| Offset 280, 15 lines modified | Offset 280, 15 lines modified | ||
| 280 | ······<p·class="built-using"> | 280 | ······<p·class="built-using"> |
| 281 | ········Built·using | 281 | ········Built·using |
| 282 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 282 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 283 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 283 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 284 | ······</p> | 284 | ······</p> |
| 285 | <p>Copyright·©·1996-202 | 285 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 286 | ····</footer> | 286 | ····</footer> |
| 287 | ··</div> | 287 | ··</div> |
| 288 | </main> | 288 | </main> |
| 289 | </div> | 289 | </div> |
| 290 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 290 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 291 | ··<script> | 291 | ··<script> |
| 292 | ··let·initialized·=·false; | 292 | ··let·initialized·=·false; |
| Offset 1535, 15 lines modified | Offset 1535, 15 lines modified | ||
| 1535 | ······<p·class="built-using"> | 1535 | ······<p·class="built-using"> |
| 1536 | ········Built·using | 1536 | ········Built·using |
| 1537 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1537 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1538 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1538 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1539 | ······</p> | 1539 | ······</p> |
| 1540 | <p>Copyright·©·1996-202 | 1540 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1541 | ····</footer> | 1541 | ····</footer> |
| 1542 | ··</div> | 1542 | ··</div> |
| 1543 | </main> | 1543 | </main> |
| 1544 | </div> | 1544 | </div> |
| 1545 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1545 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1546 | ··<script> | 1546 | ··<script> |
| 1547 | ··let·initialized·=·false; | 1547 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 178, 15 lines modified | Offset 178, 15 lines modified | ||
| 178 | ······<p·class="built-using"> | 178 | ······<p·class="built-using"> |
| 179 | ········Built·using | 179 | ········Built·using |
| 180 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 180 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 181 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 181 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 182 | ······</p> | 182 | ······</p> |
| 183 | <p>Copyright·©·1996-202 | 183 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 184 | ····</footer> | 184 | ····</footer> |
| 185 | ··</div> | 185 | ··</div> |
| 186 | </main> | 186 | </main> |
| 187 | </div> | 187 | </div> |
| 188 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 188 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 189 | ··<script> | 189 | ··<script> |
| 190 | ··let·initialized·=·false; | 190 | ··let·initialized·=·false; |
| Offset 367, 15 lines modified | Offset 367, 15 lines modified | ||
| 367 | ······<p·class="built-using"> | 367 | ······<p·class="built-using"> |
| 368 | ········Built·using | 368 | ········Built·using |
| 369 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 369 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 370 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 370 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 371 | ······</p> | 371 | ······</p> |
| 372 | <p>Copyright·©·1996-202 | 372 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 373 | ····</footer> | 373 | ····</footer> |
| 374 | ··</div> | 374 | ··</div> |
| 375 | </main> | 375 | </main> |
| 376 | </div> | 376 | </div> |
| 377 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 377 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 378 | ··<script> | 378 | ··<script> |
| 379 | ··let·initialized·=·false; | 379 | ··let·initialized·=·false; |
| Offset 293, 15 lines modified | Offset 293, 15 lines modified | ||
| 293 | ······<p·class="built-using"> | 293 | ······<p·class="built-using"> |
| 294 | ········Built·using | 294 | ········Built·using |
| 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 297 | ······</p> | 297 | ······</p> |
| 298 | <p>Copyright·©·1996-202 | 298 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 299 | ····</footer> | 299 | ····</footer> |
| 300 | ··</div> | 300 | ··</div> |
| 301 | </main> | 301 | </main> |
| 302 | </div> | 302 | </div> |
| 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 304 | ··<script> | 304 | ··<script> |
| 305 | ··let·initialized·=·false; | 305 | ··let·initialized·=·false; |
| Offset 419, 15 lines modified | Offset 419, 15 lines modified | ||
| 419 | ······<p·class="built-using"> | 419 | ······<p·class="built-using"> |
| 420 | ········Built·using | 420 | ········Built·using |
| 421 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 421 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 422 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 422 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 423 | ······</p> | 423 | ······</p> |
| 424 | <p>Copyright·©·1996-202 | 424 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 425 | ····</footer> | 425 | ····</footer> |
| 426 | ··</div> | 426 | ··</div> |
| 427 | </main> | 427 | </main> |
| 428 | </div> | 428 | </div> |
| 429 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 429 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 430 | ··<script> | 430 | ··<script> |
| 431 | ··let·initialized·=·false; | 431 | ··let·initialized·=·false; |
| Offset 269, 15 lines modified | Offset 269, 15 lines modified | ||
| 269 | ······<p·class="built-using"> | 269 | ······<p·class="built-using"> |
| 270 | ········Built·using | 270 | ········Built·using |
| 271 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 271 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 272 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 272 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 273 | ······</p> | 273 | ······</p> |
| 274 | <p>Copyright·©·1996-202 | 274 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 275 | ····</footer> | 275 | ····</footer> |
| 276 | ··</div> | 276 | ··</div> |
| 277 | </main> | 277 | </main> |
| 278 | </div> | 278 | </div> |
| 279 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 279 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 280 | ··<script> | 280 | ··<script> |
| 281 | ··let·initialized·=·false; | 281 | ··let·initialized·=·false; |
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 1164, 15 lines modified | Offset 1164, 15 lines modified | ||
| 1164 | ······<p·class="built-using"> | 1164 | ······<p·class="built-using"> |
| 1165 | ········Built·using | 1165 | ········Built·using |
| 1166 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1166 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1167 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1167 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1168 | ······</p> | 1168 | ······</p> |
| 1169 | <p>Copyright·©·1996-202 | 1169 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1170 | ····</footer> | 1170 | ····</footer> |
| 1171 | ··</div> | 1171 | ··</div> |
| 1172 | </main> | 1172 | </main> |
| 1173 | </div> | 1173 | </div> |
| 1174 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1174 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1175 | ··<script> | 1175 | ··<script> |
| 1176 | ··let·initialized·=·false; | 1176 | ··let·initialized·=·false; |
| Offset 377, 15 lines modified | Offset 377, 15 lines modified | ||
| 377 | ······<p·class="built-using"> | 377 | ······<p·class="built-using"> |
| 378 | ········Built·using | 378 | ········Built·using |
| 379 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 379 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 380 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 380 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 381 | ······</p> | 381 | ······</p> |
| 382 | <p>Copyright·©·1996-202 | 382 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 383 | ····</footer> | 383 | ····</footer> |
| 384 | ··</div> | 384 | ··</div> |
| 385 | </main> | 385 | </main> |
| 386 | </div> | 386 | </div> |
| 387 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 387 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 388 | ··<script> | 388 | ··<script> |
| 389 | ··let·initialized·=·false; | 389 | ··let·initialized·=·false; |
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 331, 15 lines modified | Offset 331, 15 lines modified | ||
| 331 | ······<p·class="built-using"> | 331 | ······<p·class="built-using"> |
| 332 | ········Built·using | 332 | ········Built·using |
| 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 335 | ······</p> | 335 | ······</p> |
| 336 | <p>Copyright·©·1996-202 | 336 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 337 | ····</footer> | 337 | ····</footer> |
| 338 | ··</div> | 338 | ··</div> |
| 339 | </main> | 339 | </main> |
| 340 | </div> | 340 | </div> |
| 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 342 | ··<script> | 342 | ··<script> |
| 343 | ··let·initialized·=·false; | 343 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 1848, 21 lines modified | Offset 1848, 21 lines modified | ||
| 1848 | returns·a·match·specification,·which·turns·on·sequential·tracing·with·the | 1848 | returns·a·match·specification,·which·turns·on·sequential·tracing·with·the |
| 1849 | specified·<code·class="inline">Flags</code>.</p><p>This·match·specification·can·be·specified·as·the·last·argument·to·<code·class="inline">tp</code>·or·<code·class="inline">tpl</code>. | 1849 | specified·<code·class="inline">Flags</code>.</p><p>This·match·specification·can·be·specified·as·the·last·argument·to·<code·class="inline">tp</code>·or·<code·class="inline">tpl</code>. |
| 1850 | The·activated·<code·class="inline">Item</code>·then·becomes·a·<em>trigger</em>·for·sequential·tracing.·This·means | 1850 | The·activated·<code·class="inline">Item</code>·then·becomes·a·<em>trigger</em>·for·sequential·tracing.·This·means |
| 1851 | that·if·the·item·is·called·on·a·process·with·trace·flag·<code·class="inline">call</code>·set,·the·process | 1851 | that·if·the·item·is·called·on·a·process·with·trace·flag·<code·class="inline">call</code>·set,·the·process |
| 1852 | is·"contaminated"·with·token·<code·class="inline">seq_trace</code>.</p><p>If·<code·class="inline">Flags·=·all</code>,·all·possible·flags·are·set.</p><p>The·possible·values·for·<code·class="inline">SeqTraceFlag</code>·are·available·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/seq_trace.html"><code·class="inline">seq_trace</code></a>.</p><p>For·a·description·of·the·<code·class="inline">match_spec()</code>·syntax,·see·section | 1852 | is·"contaminated"·with·token·<code·class="inline">seq_trace</code>.</p><p>If·<code·class="inline">Flags·=·all</code>,·all·possible·flags·are·set.</p><p>The·possible·values·for·<code·class="inline">SeqTraceFlag</code>·are·available·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/seq_trace.html"><code·class="inline">seq_trace</code></a>.</p><p>For·a·description·of·the·<code·class="inline">match_spec()</code>·syntax,·see·section |
| 1853 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html"><code·class="inline">Match·Specifications·in·Erlang</code></a>·in·ERTS,·which | 1853 | <a·href="../../../../erts-15.2.7/doc/html/match_spec.html"><code·class="inline">Match·Specifications·in·Erlang</code></a>·in·ERTS,·which |
| 1854 | explains·the·general·match·specification·"language".</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·<em>system·tracer</em>·for·sequential·tracing·is·automatically·initiated·by·<code·class="inline">ttb</code> | 1854 | explains·the·general·match·specification·"language".</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·<em>system·tracer</em>·for·sequential·tracing·is·automatically·initiated·by·<code·class="inline">ttb</code> |
| 1855 | when·a·trace·port·is·started·with·<code·class="inline">ttb:tracer/0,1,2</code>.</p></section><p>An·example·of·how·to·use·function·<code·class="inline">seq_trigger_ms/0,1</code>·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(tiger@durin)5>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tracer</span><span·class="p"·data-group-id=" | 1855 | when·a·trace·port·is·started·with·<code·class="inline">ttb:tracer/0,1,2</code>.</p></section><p>An·example·of·how·to·use·function·<code·class="inline">seq_trigger_ms/0,1</code>·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">(tiger@durin)5>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tracer</span><span·class="p"·data-group-id="9886385826-1">(</span><span·class="p"·data-group-id="9886385826-1">)</span><span·class="p">.</span><span·class="w"> |
| 1856 | </span><span·class="p"·data-group-id=" | 1856 | </span><span·class="p"·data-group-id="9886385826-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9886385826-3">[</span><span·class="ss">tiger@durin</span><span·class="p"·data-group-id="9886385826-3">]</span><span·class="p"·data-group-id="9886385826-2">}</span><span·class="gp·unselectable"> |
| 1857 | (tiger@durin)6>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">p</span><span·class="p"·data-group-id=" | 1857 | (tiger@durin)6>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">p</span><span·class="p"·data-group-id="9886385826-4">(</span><span·class="ss">all</span><span·class="p">,</span><span·class="ss">call</span><span·class="p"·data-group-id="9886385826-4">)</span><span·class="p">.</span><span·class="w"> |
| 1858 | </span><span·class="p"·data-group-id=" | 1858 | </span><span·class="p"·data-group-id="9886385826-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9886385826-6">{</span><span·class="p"·data-group-id="9886385826-7">[</span><span·class="ss">all</span><span·class="p"·data-group-id="9886385826-7">]</spa[·...·truncated·by·diffoscope;·len:·254,·SHA:·df5f8a5bdb78f2900650b55e12a7e539119a17a39327c17a2f7098ea4b579035·...·]-5">}</span><span·class="gp·unselectable"> |
| 1859 | (tiger@durin)7>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tp</span><span·class="p"·data-group-id=" | 1859 | (tiger@durin)7>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tp</span><span·class="p"·data-group-id="9886385826-9">(</span><span·class="ss">mod</span><span·class="p">,</span><span·class="ss">func</span><span·class="p">,</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">seq_trigger_ms</span><span·class="p"·data-group-id="9886385826-[·...·truncated·by·diffoscope;·len:·107,·SHA:·c8007fd70f819841f4a4ad4861a0ac877151f1e84f2535da326d8bbbafbedbfd·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 1860 | </span><span·class="p"·data-group-id=" | 1860 | </span><span·class="p"·data-group-id="9886385826-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9886385826-12">[</span><span·class="p"·data-group-id="9886385826-13">{</span><span·class="ss">matched</span><span·class="p">,</span><span·class="mi">1</[·...·truncated·by·diffoscope;·len:·364,·SHA:·5efa36937d0f9dbae8e5f676f8558ba7400ea5c608966a9f405866713c8a3f74·...·]-11">}</span><span·class="w"> |
| 1861 | </span><span·class="p"·data-group-id=" | 1861 | </span><span·class="p"·data-group-id="9886385826-15">(</span><span·class="ss">tiger@durin</span><span·class="p"·data-group-id="9886385826-15">)</span><span·class="mi">8</span><span·class="o">></span></code></pre><p>Whenever·<code·class="inline">mod:func(...)</code>·is·called·after·this,·token·<code·class="inline">seq_trace</code>·is·set·on·the |
| 1862 | executing·process.</p> | 1862 | executing·process.</p> |
| 1863 | ··</section> | 1863 | ··</section> |
| 1864 | </section> | 1864 | </section> |
| 1865 | <section·class="detail"·id="start_trace/4"> | 1865 | <section·class="detail"·id="start_trace/4"> |
| 1866 | ··<div·class="detail-header"> | 1866 | ··<div·class="detail-header"> |
| 1867 | ····<a·href="#start_trace/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1867 | ····<a·href="#start_trace/4"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1891, 22 lines modified | Offset 1891, 22 lines modified | ||
| 1891 | ·························TracerOpts·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(), | 1891 | ·························TracerOpts·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(), |
| 1892 | ·························Result·::·{ok,·[{<a·href="#t:item/0">item</a>(),·<a·href="#t:match_desc/0">match_desc</a>()}]}.</pre> | 1892 | ·························Result·::·{ok,·[{<a·href="#t:item/0">item</a>(),·<a·href="#t:match_desc/0">match_desc</a>()}]}.</pre> |
| 1893 | ······</div> | 1893 | ······</div> |
| 1894 | <p>This·function·is·a·shortcut·allowing·to·start·a·trace·with·one·command.·Each | 1894 | <p>This·function·is·a·shortcut·allowing·to·start·a·trace·with·one·command.·Each |
| 1895 | tuple·in·<code·class="inline">Patterns</code>·is·converted·to·a·list,·which·in·turn·is·passed·to | 1895 | tuple·in·<code·class="inline">Patterns</code>·is·converted·to·a·list,·which·in·turn·is·passed·to |
| 1896 | <code·class="inline">ttb:tpl/2,3,4</code>.</p><p>The·call:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">start_trace</span><span·class="p"·data-group-id="0 | 1896 | <code·class="inline">ttb:tpl/2,3,4</code>.</p><p>The·call:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">start_trace</span><span·class="p"·data-group-id="0043901966-1">(</span><span·class="p"·data-group-id="0043901966-2">[</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OtherNode</span><span·class="p"·data-group-id="0043901966-2">]</span><span·class="p">,</span><span·class="w"> |
| 1897 | ··················</span><span·class="p"·data-group-id="0 | 1897 | ··················</span><span·class="p"·data-group-id="0043901966-3">[</span><span·class="p"·data-group-id="0043901966-4">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0[·...·truncated·by·diffoscope;·len:·497,·SHA:·5b6544cd8b05ddab35517ecf1e72b6878309a926ad69e3d0e7ff978675bdaaf9·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 1898 | ··················</span><span·class="p"·data-group-id="0 | 1898 | ··················</span><span·class="p"·data-group-id="0043901966-7">{</span><span·class="ss">all</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">call</span><span·class="p"·data-group-id="0043901966-7">}</span><span·class="p">,</span><span·class="w"> |
| 1899 | ··················</span><span·class="p"·data-group-id="0 | 1899 | ··················</span><span·class="p"·data-group-id="0043901966-8">[</span><span·class="p"·data-group-id="0043901966-9">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="0043901966-9">}</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·1094,·SHA:·9f40a17e34f9f945fe3acff889d8fc9d5aac416d2d47a26f43e6d4d12028732c·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 1900 | ··················</span><span·class="p"·data-group-id=" | 1900 | ··················</span><span·class="p"·data-group-id="4559883990-3">[</span><span·class="p"·data-group-id="4559883990-4">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">File</span><span·class="p"·data-group-id="4559883990-4">}</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·588,·SHA:·fe2300b92a5eac72d8699b8a713349ff7c63507a7b042ab4c197361788af6a32·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 1901 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tpl</span><span·class="p"·data-group-id=" | 1901 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tpl</span><span·class="p"·data-group-id="4559883990-7">(</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4559883990-8">[</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·63,·SHA:·f93117b7dcf0a7f5058b654abe5de07ad46f8d7c15a6d16f57b197e2251bf3ae·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 1902 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tpl</span><span·class="p"·data-group-id=" | 1902 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">tpl</span><span·class="p"·data-group-id="4559883990-9">(</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·138,·SHA:·ee3756edd405a534d72a80b5ba4ee58143c9b8b80e2288fdfece11fd18728257·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 1903 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">p</span><span·class="p"·data-group-id=" | 1903 | </span><span·class="nc">ttb</span><span·class="p">:</span><span·class="nf">p</span><span·class="p"·data-group-id="4559883990-11">(</span><span·class="ss">all</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">call</span><span·class="p"·data-group-id="4559883990-11">)</span><span·class="p">.</span></code></pre> |
| 1904 | ··</section> | 1904 | ··</section> |
| 1905 | </section> | 1905 | </section> |
| 1906 | <section·class="detail"·id="stop/0"> | 1906 | <section·class="detail"·id="stop/0"> |
| 1907 | ··<div·class="detail-header"> | 1907 | ··<div·class="detail-header"> |
| 1908 | ····<a·href="#stop/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1908 | ····<a·href="#stop/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1909 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1909 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2440, 15 lines modified | Offset 2440, 15 lines modified | ||
| 2440 | ······<p·class="built-using"> | 2440 | ······<p·class="built-using"> |
| 2441 | ········Built·using | 2441 | ········Built·using |
| 2442 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2442 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2443 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2443 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2444 | ······</p> | 2444 | ······</p> |
| 2445 | <p>Copyright·©·1996-202 | 2445 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2446 | ····</footer> | 2446 | ····</footer> |
| 2447 | ··</div> | 2447 | ··</div> |
| 2448 | </main> | 2448 | </main> |
| 2449 | </div> | 2449 | </div> |
| 2450 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2450 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2451 | ··<script> | 2451 | ··<script> |
| 2452 | ··let·initialized·=·false; | 2452 | ··let·initialized·=·false; |
| Offset 17, 15 lines modified | Offset 17, 15 lines modified | ||
| 17 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 17 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 18 | dist/lato-latin-400-normal-W7754I4D.woff2 | 18 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 19 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 19 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 20 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 20 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 21 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 21 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 22 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 22 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 23 | dist/remixicon-NKANDIL5.woff2 | 23 | dist/remixicon-NKANDIL5.woff2 |
| 24 | dist/search_data- | 24 | dist/search_data-465DEDF7.js |
| 25 | dist/sidebar_items-19ECDBA9.js | 25 | dist/sidebar_items-19ECDBA9.js |
| 26 | error_handling.html | 26 | error_handling.html |
| 27 | getting_started.html | 27 | getting_started.html |
| 28 | index.html | 28 | index.html |
| 29 | introduction.html | 29 | introduction.html |
| 30 | notes.html | 30 | notes.html |
| 31 | odbc.html | 31 | odbc.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 268, 15 lines modified | Offset 268, 15 lines modified | ||
| 268 | ······<p·class="built-using"> | 268 | ······<p·class="built-using"> |
| 269 | ········Built·using | 269 | ········Built·using |
| 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 272 | ······</p> | 272 | ······</p> |
| 273 | <p>Copyright·©·1996-202 | 273 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 274 | ····</footer> | 274 | ····</footer> |
| 275 | ··</div> | 275 | ··</div> |
| 276 | </main> | 276 | </main> |
| 277 | </div> | 277 | </div> |
| 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 279 | ··<script> | 279 | ··<script> |
| 280 | ··let·initialized·=·false; | 280 | ··let·initialized·=·false; |
| Offset 267, 15 lines modified | Offset 267, 15 lines modified | ||
| 267 | ······<p·class="built-using"> | 267 | ······<p·class="built-using"> |
| 268 | ········Built·using | 268 | ········Built·using |
| 269 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 269 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 270 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 270 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 271 | ······</p> | 271 | ······</p> |
| 272 | <p>Copyright·©·1996-202 | 272 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 273 | ····</footer> | 273 | ····</footer> |
| 274 | ··</div> | 274 | ··</div> |
| 275 | </main> | 275 | </main> |
| 276 | </div> | 276 | </div> |
| 277 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 277 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 278 | ··<script> | 278 | ··<script> |
| 279 | ··let·initialized·=·false; | 279 | ··let·initialized·=·false; |
| Offset 153, 85 lines modified | Offset 153, 85 lines modified | ||
| 153 | ··<span·class="text">Using·the·Erlang·API</span> | 153 | ··<span·class="text">Using·the·Erlang·API</span> |
| 154 | </h2> | 154 | </h2> |
| 155 | <p>The·following·dialog·within·the·Erlang·shell·illustrates·the·functionality·of | 155 | <p>The·following·dialog·within·the·Erlang·shell·illustrates·the·functionality·of |
| 156 | the·Erlang·ODBC·interface.·The·table·used·in·the·example·does·not·have·any | 156 | the·Erlang·ODBC·interface.·The·table·used·in·the·example·does·not·have·any |
| 157 | relevance·to·anything·that·exist·in·reality,·it·is·just·a·simple·example.·The | 157 | relevance·to·anything·that·exist·in·reality,·it·is·just·a·simple·example.·The |
| 158 | example·was·created·using·<code·class="inline">sqlserver·7.0·with·servicepack·1</code>·as·database·and·the | 158 | example·was·created·using·<code·class="inline">sqlserver·7.0·with·servicepack·1</code>·as·database·and·the |
| 159 | ODBC·driver·for·<code·class="inline">sqlserver</code>·with·version·<code·class="inline">2000.80.194.00</code>.</p><pre><code·class="text">·1·>·odbc:start(). | 159 | ODBC·driver·for·<code·class="inline">sqlserver</code>·with·version·<code·class="inline">2000.80.194.00</code>.</p><pre><code·class="text">·1·>·odbc:start(). |
| 160 | ······ok</code></pre><p>Connect·to·the·database</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id=" | 160 | ······ok</code></pre><p>Connect·to·the·database</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="6781411582-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ref</span><span·class="p"·data-group-id="6781411582-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·394,·SHA:·5e20619f0a18e6005903263ce3522baac358b781e9c7b7e84807f297832a2b46·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 161 | ······</span><span·class="p"·data-group-id=" | 161 | ······</span><span·class="p"·data-group-id="6781411582-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.342</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="6781411582-4">}</span></code></pre><p>Create·a·table</p><pre><code·class="text">·3·>·odbc:sql_query(Ref,·"CREATE·TABLE·EMPLOYEE·(NR·integer, |
| 162 | ······FIRSTNAME··char·varying(20),·LASTNAME··char·varying(20),·GENDER·char(1), | 162 | ······FIRSTNAME··char·varying(20),·LASTNAME··char·varying(20),·GENDER·char(1), |
| 163 | ······PRIMARY·KEY(NR))"). | 163 | ······PRIMARY·KEY(NR))"). |
| 164 | ······{updated,undefined}</code></pre><p>Insert·some·data</p><pre><code·class="text">·4·>·odbc:sql_query(Ref,·"INSERT·INTO·EMPLOYEE·VALUES(1,·'Jane',·'Doe',·'F')"). | 164 | ······{updated,undefined}</code></pre><p>Insert·some·data</p><pre><code·class="text">·4·>·odbc:sql_query(Ref,·"INSERT·INTO·EMPLOYEE·VALUES(1,·'Jane',·'Doe',·'F')"). |
| 165 | ······{updated,1}</code></pre><p>Check·what·data·types·the·database·assigned·for·the·columns.·Hopefully·this·is | 165 | ······{updated,1}</code></pre><p>Check·what·data·types·the·database·assigned·for·the·columns.·Hopefully·this·is |
| 166 | not·a·surprise,·some·times·it·can·be!·These·are·the·data·types·that·you·should | 166 | not·a·surprise,·some·times·it·can·be!·These·are·the·data·types·that·you·should |
| 167 | use·if·you·want·to·do·a·parameterized·query.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">describe_table</span><span·class="p"·data-group-id=" | 167 | use·if·you·want·to·do·a·parameterized·query.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">describe_table</span><span·class="p"·data-group-id="9433380948-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"EMPLOYEE"</span><span·class="p"·data-group-id="9433380948-1">)</span><span·class="p">.</span><span·class="w"> |
| 168 | ······</span><span·class="p"·data-group-id=" | 168 | ······</span><span·class="p"·data-group-id="9433380948-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9433380948-3">[</span><span·class="p"·data-group-id="9433380948-4">{</span><span·class="s">"NR"</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·107,·SHA:·49b0489f4035d6aaecd58d556f22d4165fc02b229ac521fd2087be67affca1ac·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 169 | ············</span><span·class="p"·data-group-id="7998000533-5">{</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7998000533-6">{</span><span·class="ss">sql_varchar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="7998000533-6">}</span><span·class="p"·data-group-id="7998000533-5">}</span><span·class="p">,</span><span·class="w"> | ||
| 170 | ············</span><span·class="p"·data-group-id=" | 169 | ············</span><span·class="p"·data-group-id="9433380948-5">{</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9433380948-6">{</span><span·class="ss">sql_varchar</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·143,·SHA:·b2477e0759ff81f29a6249c312b2a0c85d9d0b13b8a02da289e78c73fb02ea31·...·]</span><span·class="w"> |
| 170 | ············</span><span·class="p"·data-group-id="9433380948-7">{</span><span·class="s">"LASTNAME"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9433380948-8">{</span><span·class="ss">sql_varchar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="9433380948-8">}</span><span·class="p"·data-group-id="9433380948-7">}</span><span·class="w"> | ||
| 171 | ············</span><span·class="p"·data-group-id=" | 171 | ············</span><span·class="p"·data-group-id="9433380948-9">{</span><span·class="s">"GENDER"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9433380948-10">{</span><span·class="ss">sql_char</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·636,·SHA:·96a9e829dc8e75f1abd04bfd22f7293bc3fd28d144a95a1a68ea17b9e1f4f9c8·...·]-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="s">"INSERT·INTO·EMPLOYEE·(NR,·FIRSTNAME,·"</span><span·class="w"> |
| 172 | ··················</span><span·class="s">"LASTNAME,·GENDER)·VALUES(?,·?,·?,·?)"</span><span·class="p">,</span><span·class="w"> | 172 | ··················</span><span·class="s">"LASTNAME,·GENDER)·VALUES(?,·?,·?,·?)"</span><span·class="p">,</span><span·class="w"> |
| 173 | ···················</span><span·class="p"·data-group-id=" | 173 | ···················</span><span·class="p"·data-group-id="3572004342-2">[</span><span·class="p"·data-group-id="3572004342-3">{</span><span·class="ss">sql_integer</span><span·class="p">,</span><span·class="p"·data-group-id="3572004342-4">[</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</[·...·truncated·by·diffoscope;·len:·344,·SHA:·f4181c8b666d9933bd931e2aad151ca69a220456b39b15371eacdc3d129efb83·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 174 | ····················</span><span·class="p"·data-group-id=" | 174 | ····················</span><span·class="p"·data-group-id="3572004342-5">{</span><span·class="p"·data-group-id="3572004342-6">{</span><span·class="ss">sql_varchar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="3572004342-6">}</span><span·class="p">,</span><span·class="w"> |
| 175 | ·····························</span><span·class="p"·data-group-id=" | 175 | ·····························</span><span·class="p"·data-group-id="3572004342-7">[</span><span·class="s">"John"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Monica"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Ross"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Rachel"</span><span·class="p">,</span><span·class="w"> |
| 176 | ·····························</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Louise"</span><span·class="p"·data-group-id=" | 176 | ·····························</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Louise"</span><span·class="p"·data-group-id="3572004342-7">]</span><span·class="p"·data-group-id="3572004342-5">}</span><span·class="p">,</span><span·class="w"> |
| 177 | ···················</span><span·class="p"·data-group-id=" | 177 | ···················</span><span·class="p"·data-group-id="3572004342-8">{</span><span·class="p"·data-group-id="3572004342-9">{</span><span·class="ss">sql_varchar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">20</span><span·class="p"·data-group-id="3572004342-9">}</span><span·class="p">,</span><span·class="w"> |
| 178 | ·····························</span><span·class="p"·data-group-id=" | 178 | ·····························</span><span·class="p"·data-group-id="3572004342-10">[</span><span·class="s">"Doe"</span><span·class="p">,</span><span·class="s">"Geller"</span><span·class="p">,</span><span·class="s">"Geller"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Green"</span><span·class="p">,</span><span·class="w"> |
| 179 | ······························</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Lane"</span><span·class="p"·data-group-id=" | 179 | ······························</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Lane"</span><span·class="p"·data-group-id="3572004342-10">]</span><span·class="p"·data-group-id="3572004342-8">}</span><span·class="p">,</span><span·class="w"> |
| 180 | ···················</span><span·class="p"·data-group-id=" | 180 | ···················</span><span·class="p"·data-group-id="3572004342-11">{</span><span·class="p"·data-group-id="3572004342-12">{</span><span·class="ss">sql_char</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="3572004342-12">}</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·680,·SHA:·2dc083e3251b6ef3a911984e362b07e0568bdbeffebbfb9a9fca81c8b5dd1ae1·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 181 | ······</span><span·class="p"·data-group-id=" | 181 | ······</span><span·class="p"·data-group-id="3572004342-14">{</span><span·class="ss">updated</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">7</span><span·class="p"·data-group-id="3572004342-14">}</span></code></pre><p>Fetch·all·data·in·the·table·employee</p><pre><code·class="m[·...·truncated·by·diffoscope;·len:·439,·SHA:·a2025ea69c84c947b4d676852100992f71b571451df4ff3233e78e374359342c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 182 | ····</span><span·class="p"·data-group-id=" | 182 | ····</span><span·class="p"·data-group-id="7195581853-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="7195581853-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·f4c68127dfd63428ac4382b232358e8218575282a772bf1a34f1946b3b85d046·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 183 | ··········</span><span·class="p"·data-group-id=" | 183 | ··········</span><span·class="p"·data-group-id="7195581853-4">[</span><span·class="p"·data-group-id="7195581853-5">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="s">"Jane"</span><span·class="p">,</span><span·class="s">"Doe"</span><span·class="p">,</span><span·c[·...·truncated·by·diffoscope;·len:·70,·SHA:·c32c68b7a1d1687fb577a01e791ae820e634ddf744673fcced5f86e1460c1aa7·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 184 | ···········</span><span·class="p"·data-group-id=" | 184 | ···········</span><span·class="p"·data-group-id="7195581853-6">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="s">"John"</span><span·class="p">,</span><span·class="s">"Doe"</span><span·class="p">,</span><span·class="s">"M"</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·c00756cb8f9818e96cd65144d330738d55e23ab7a9db8428ec4b4ba32dee4ddf·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 185 | ···········</span><span·class="p"·data-group-id=" | 185 | ···········</span><span·class="p"·data-group-id="7195581853-7">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="s">"Monica"</span><span·class="p">,</span><span·class="s">"Geller"</span><span·class="p">,</span><span·class="s">"F"</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·ad9098e03557dfd9cb604c016036d6367f6e66dd4d7bee5a5882b78a43608d98·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 186 | ···········</span><span·class="p"·data-group-id=" | 186 | ···········</span><span·class="p"·data-group-id="7195581853-8">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="s">"Ross"</span><span·class="p">,</span><span·class="s">"Geller"</span><span·class="p">,</span><span·class="s">"M"</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·90094289e2187fce9bbc8f8a5cbb8e9c3921a40acdbae854298df0f63879ec65·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 187 | ···········</span><span·class="p"·data-group-id=" | 187 | ···········</span><span·class="p"·data-group-id="7195581853-9">{</span><span·class="mi">5</span><span·class="p">,</span><span·class="s">"Rachel"</span><span·class="p">,</span><span·class="s">"Green"</span><span·class="p">,</span><span·class="s">"F"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·9f4ab19ec8f06b61313b13362597cfc3e97c2c3df947195aba9831cf9988aaf7·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 188 | ···········</span><span·class="p"·data-group-id=" | 188 | ···········</span><span·class="p"·data-group-id="7195581853-10">{</span><span·class="mi">6</span><span·class="p">,</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="s">"F"</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·2e1709110736f919a3ff892b3df5d804333c7fc07047c72e8d1a82c536a308ea·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 189 | ···········</span><span·class="p"·data-group-id=" | 189 | ···········</span><span·class="p"·data-group-id="7195581853-11">{</span><span·class="mi">7</span><span·class="p">,</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="s">"Halliwell"</span><span·class="p">,</span><span·class="s">"F"</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·6b87f68ff1c70cf29e519a8af14bb28cf57ba4bfa4eb608b848b4cf322dd1abb·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ···········</span><span·class="p"·data-group-id=" | 190 | ···········</span><span·class="p"·data-group-id="7195581853-12">{</span><span·class="mi">8</span><span·class="p">,</span><span·class="s">"Louise"</span><span·class="p">,</span><span·class="s">"Lane"</span><span·class="p">,</span><span·class="s">"F"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·152,·SHA:·e01c8aff7ca834a0f028fb58bb3f66d44d53857966de9beccc928e64d4981692·...·]-2">}</span></code></pre><p>Associate·a·result·set·containing·the·whole·table·<code·class="inline">EMPLOYEE</code>·to·the·connection. |
| 191 | The·number·of·rows·in·the·result·set·is·returned.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">8</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select_count</span><span·class="p"·data-group-id=" | 191 | The·number·of·rows·in·the·result·set·is·returned.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">8</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select_count</span><span·class="p"·data-group-id="9401744200-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SELECT·*·FROM·EMPLOYEE"</span><span·class="p"·data-group-id="9401744200-1">)</span><span·class="p">.</span><span·class="w"> |
| 192 | ······</span><span·class="p"·data-group-id=" | 192 | ······</span><span·class="p"·data-group-id="9401744200-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="mi">8</span><span·class="p"·data-group-id="9401744200-2">}</span></code></pre><p>You·can·always·traverse·the·result·set·sequential·by·using·next</p><pre><code·class="makeu[·...·truncated·by·diffoscope;·len:·349,·SHA:·a0eb20e29e9b41f669d7054230b37893eacbea9c5a6d226186e7faf50fe73139·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 193 | ······</span><span·class="p"·data-group-id=" | 193 | ······</span><span·class="p"·data-group-id="6810941830-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="6810941830-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·1050,·SHA:·bbc8672ae9744ef4c87ea59aa7a4573f402941cf47734ca2682af680d51681fe·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 194 | ······</span><span·class="p"·data-group-id=" | 194 | ······</span><span·class="p"·data-group-id="6795766155-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="6795766155-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·652,·SHA:·926c46fc156b45d9d68509311249c163d2a51c7f7ea17602d7fdf55041301095·...·]-2">}</span></code></pre><p>If·your·driver·supports·scrollable·cursors·you·have·a·little·more·freedom,·and |
| 195 | can·do·things·like·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">11</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">last</span><span·class="p"·data-group-id=" | 195 | can·do·things·like·this.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">11</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">last</span><span·class="p"·data-group-id="1155890933-1">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="1155890933-1">)</span><span·class="p">.</span><span·class="w"> |
| 196 | ······</span><span·class="p"·data-group-id=" | 196 | ······</span><span·class="p"·data-group-id="1155890933-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="1155890933-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·1053,·SHA:·4b3ca556bf4ff5e59fc277f13c7add478d4b8b4681524dddccd226b1f607e26b·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 197 | ······</span><span·class="p"·data-group-id=" | 197 | ······</span><span·class="p"·data-group-id="8547775134-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="8547775134-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·1057,·SHA:·dfa5a4ca791f4ea453924da157e84fe65551ed8e9d16eb0054e91304c14c2040·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 198 | ······</span><span·class="p"·data-group-id=" | 198 | ······</span><span·class="p"·data-group-id="2411795005-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="2411795005-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·1050,·SHA:·8e76c7769beb72cbc2f3ca1c6d1c6341bcdd03220688e1faabb11f39c114a9f2·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 199 | ······</span><span·class="p"·data-group-id=" | 199 | ······</span><span·class="p"·data-group-id="7873277823-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="7873277823-3">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·1318,·SHA:·aac78a7bc4d09467ff198b966458d8137220a715a5971e78f2acdff8f2b3206c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 200 | ·····</span><span·class="p"·data-group-id=" | 200 | ·····</span><span·class="p"·data-group-id="0422879290-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="0422879290-3">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·eec05a2c4b93bd785d464dd7417687d36758318fb9cc0cda1147050d28e65ed9·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 201 | ··········</span><span·class="p"·data-group-id=" | 201 | ··········</span><span·class="p"·data-group-id="0422879290-4">[</span><span·class="p"·data-group-id="0422879290-5">{</span><span·class="s">"Jane"</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0422879290-5">}</span><span·class="p">,</span><span·class="w"> |
| 202 | ···········</span><span·class="p"·data-group-id=" | 202 | ···········</span><span·class="p"·data-group-id="0422879290-6">{</span><span·class="s">"Monica"</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="0422879290-6">}</span><span·class="p">,</span><span·class="w"> |
| 203 | ···········</span><span·class="p"·data-group-id=" | 203 | ···········</span><span·class="p"·data-group-id="0422879290-7">{</span><span·class="s">"Rachel"</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="0422879290-7">}</span><span·class="p">,</span><span·class="w"> |
| 204 | ···········</span><span·class="p"·data-group-id=" | 204 | ···········</span><span·class="p"·data-group-id="0422879290-8">{</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="0422879290-8">}</span><span·class="p">,</span><span·class="w"> |
| 205 | ···········</span><span·class="p"·data-group-id=" | 205 | ···········</span><span·class="p"·data-group-id="0422879290-9">{</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="0422879290-9">}</span><span·class="p">,</span><span·class="w"> |
| 206 | ···········</span><span·class="p"·data-group-id=" | 206 | ···········</span><span·class="p"·data-group-id="0422879290-10">{</span><span·class="s">"Louise"</span><span·class="p">,</span><span·class="mi">8</span><span·class="p"·data-group-id="0422879290-10">}</span><span·class="p"·data-group-id="0422879290-4">]</span><span·class="p"·data-group-id="04228[·...·truncated·by·diffoscope;·len:·5,·SHA:·14d5780a1e90cdfa60ef630868b92e7608803af2c9426b1d9f044eed80f42b2c·...·]-2">}</span></code></pre><p>Fetch·the·fields·<code·class="inline">FIRSTNAME</code>and·<code·class="inline">NR</code>for·all·female·employees·and·sort·them·on |
| 207 | the·field·<code·class="inline">FIRSTNAME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">16</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">sql_query</span><span·class="p"·data-group-id=" | 207 | the·field·<code·class="inline">FIRSTNAME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">16</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">sql_query</span><span·class="p"·data-group-id="3178520253-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SELECT·FIRSTNAME,·NR·FROM·EMPLOYEE·WHERE·GENDER·=·'F' |
| 208 | ······ORDER·BY·FIRSTNAME"</span><span·class="p"·data-group-id=" | 208 | ······ORDER·BY·FIRSTNAME"</span><span·class="p"·data-group-id="3178520253-1">)</span><span·class="p">.</span><span·class="w"> |
| 209 | ····</span><span·class="p"·data-group-id=" | 209 | ····</span><span·class="p"·data-group-id="3178520253-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="3178520253-3">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·94422887bf7556ae02629b9b1f105b87a9bb9f012b3b46c31ea8ac2f93ee9694·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 210 | ··········</span><span·class="p"·data-group-id=" | 210 | ··········</span><span·class="p"·data-group-id="3178520253-4">[</span><span·class="p"·data-group-id="3178520253-5">{</span><span·class="s">"Jane"</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="3178520253-5">}</span><span·class="p">,</span><span·class="w"> |
| 211 | ···········</span><span·class="p"·data-group-id=" | 211 | ···········</span><span·class="p"·data-group-id="3178520253-6">{</span><span·class="s">"Louise"</span><span·class="p">,</span><span·class="mi">8</span><span·class="p"·data-group-id="3178520253-6">}</span><span·class="p">,</span><span·class="w"> |
| 212 | ···········</span><span·class="p"·data-group-id=" | 212 | ···········</span><span·class="p"·data-group-id="3178520253-7">{</span><span·class="s">"Monica"</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="3178520253-7">}</span><span·class="p">,</span><span·class="w"> |
| 213 | ···········</span><span·class="p"·data-group-id=" | 213 | ···········</span><span·class="p"·data-group-id="3178520253-8">{</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3178520253-8">}</span><span·class="p">,</span><span·class="w"> |
| 214 | ···········</span><span·class="p"·data-group-id=" | 214 | ···········</span><span·class="p"·data-group-id="3178520253-9">{</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="3178520253-9">}</span><span·class="p">,</span><span·class="w"> |
| 215 | ···········</span><span·class="p"·data-group-id=" | 215 | ···········</span><span·class="p"·data-group-id="3178520253-10">{</span><span·class="s">"Rachel"</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="3178520253-10">}</span><span·class="p"·data-group-id="3178520253-4">]</span><span·class="p"·data-group-id="31785[·...·truncated·by·diffoscope;·len:·5,·SHA:·765f800bb5030a6969ca673996d0990152f80a0f040418319d4a1f8d30b5732e·...·]-2">}</span></code></pre><p>Associate·a·result·set·that·contains·the·fields·<code·class="inline">FIRSTNAME</code>·and·<code·class="inline">NR</code>for·all |
| 216 | female·employees·to·the·connection.·The·number·of·rows·in·the·result·set·is | 216 | female·employees·to·the·connection.·The·number·of·rows·in·the·result·set·is |
| 217 | returned.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">17</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select_count</span><span·class="p"·data-group-id=" | 217 | returned.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">17</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select_count</span><span·class="p"·data-group-id="7538396903-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SELECT·FIRSTNAME,·NR·FROM·EMPLOYEE·WHERE·GENDER·=·'F'"</span><span·class="p"·data-group-id="7538396903-1">)</span><span·class="p">.</span><span·class="w"> |
| 218 | ······</span><span·class="p"·data-group-id=" | 218 | ······</span><span·class="p"·data-group-id="7538396903-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="7538396903-2">}</span></code></pre><p>A·few·more·ways·of·retrieving·parts·of·the·result·set·when·the·driver·supports |
| 219 | scrollable·cursors.·Note·that·next·will·work·even·without·support·for·scrollable | 219 | scrollable·cursors.·Note·that·next·will·work·even·without·support·for·scrollable |
| 220 | cursors.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">18</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="2 | 220 | cursors.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">18</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="2593086183-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2593086183-2">{</span><span·class="ss">relative</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><sp[·...·truncated·by·diffoscope;·len:·164,·SHA:·ebac2f7c46b47fdd35ddfa1e593070b93b7303950d23a63cf63f61594d7c624a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 221 | ····</span><span·class="p"·data-group-id="2015928448-3">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="2015928448-4">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data-group-id="2015928448-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="2015928448-5">[</span><span·class="p"·data-group-id="2015928448-6">{</span><span·class="s">"Monica"</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="2015928448-6">}</span><span·class="p">,</span><span·class="p"·data-group-id="2015928448-7">{</span><span·class="s">"Rachel"</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="2015928448-7">}</span><span·class="p">,</span><span·class="p"·data-group-id="2015928448-8">{</span><span·class="s">"Piper"</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="2015928448-8">}</span><span·class="p"·data-group-id="2015928448-5">]</span><span·class="p"·data-group-id="2015928448-3">}</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">19</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="9206245249-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">next</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="9206245249-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 222 | ···· | 221 | ····</span><span·class="p"·data-group-id="2593086183-3">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="2593086183-4">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">&qu[·...·truncated·by·diffoscope;·len:·1426,·SHA:·75e3b4c994fe789242a0e85f6c531def84869eb62f96f4adf1a8d454967dbaef·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 222 | ······</span><span·class="p"·data-group-id="4946168217-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="4946168217-3">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data-group-id="4946168217-3">]</span><span·class="p">,</span><span·class="p"·data-group-id="4946168217-4">[</span><span·class="p"·data-group-id="4946168217-5">{</span><span·class="s">"Prue"</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="4946168217-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="4946168217-6">{</span><span·class="s">"Louise"</span><span·class="p">,</span><span·class="mi">8</span><span·class="p"·data-group-id="4946168217-6">}</span><span·class="p"·data-group-id="4946168217-4">]</span><span·class="p"·data-group-id="4946168217-2">}</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">20</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="7400966005-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7400966005-2">{</span><span·class="ss">absolute</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="7400966005-2">}</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="7400966005-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 223 | ······</span><span·class="p"·data-group-id=" | 223 | ······</span><span·class="p"·data-group-id="7400966005-3">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="7400966005-4">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·1167,·SHA:·fbc3f5b021c46caa5292fb6a593ea4062e365afac3bf39c0964c1873f038d5a0·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 224 | ····</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="p"·data-group-id="5230993617-2">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="5230993617-3">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·1349,·SHA:·f5fbca0c07db0f91ebe6c30118ef9a3b5450c487ea0dd6661e62c2bbe680f8ff·...·]00-1">)</span><span·class="p">.</span><span·class="w"> |
| 225 | ······</span><span·class="p"·data-group-id="48 | 225 | ······</span><span·class="p"·data-group-id="9482983600-3">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="9482983600-4">[</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</span><span·class="s">"NR"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·19,·SHA:·7ae673e95b56135cd59432ead8fd5dc37eb97f038dd73db7a6bd3ed6610a5c1e·...·]00-4">]</span><span·class="p">,</span><span·class="w"> |
| 226 | ················</span><span·class="p"·data-group-id="48 | 226 | ················</span><span·class="p"·data-group-id="9482983600-5">[</span><span·class="p"·data-group-id="9482983600-6">{</span><span·class="s">"Jane"</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="9482983600-6">}</span><span·class="p">,</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·1081,·SHA:·3bd3747e845df6c3d06fc8d65946f605087077c5566ab76a96963252325fceba·...·]7-1">(</span><span·class="n">Ref</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SELECT·*·FROM·EMPLOYEE·WHERE·GENDER=?"</span><span·class="p">,</span><span·class="w"> |
| 227 | ······</span><span·class="p"·data-group-id=" | 227 | ······</span><span·class="p"·data-group-id="8838199787-2">[</span><span·class="p"·data-group-id="8838199787-3">{</span><span·class="p"·data-group-id="8838199787-4">{</span><span·class="ss">sql_char</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·366,·SHA:·a0bd5e2b280778ec41c5a8b047b6fa98085f79677b2e04ebdc1851ca5bd7b345·...·]7-1">)</span><span·class="p">.</span><span·class="w"> |
| 228 | ······</span><span·class="p"·data-group-id=" | 228 | ······</span><span·class="p"·data-group-id="8838199787-6">{</span><span·class="ss">selected</span><span·class="p">,</span><span·class="p"·data-group-id="8838199787-7">[</span><span·class="s">"NR"</span><span·class="p">,</span><span·class="s">"FIRSTNAME"</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·152,·SHA:·e8938b53b1afc9e1a7a1c8bad1297ece651c375229578b7c82f71fdf51edb92e·...·]7-7">]</span><span·class="p">,</span><span·class="w"> |
| 229 | ················</span><span·class="p"·data-group-id=" | 229 | ················</span><span·class="p"·data-group-id="8838199787-8">[</span><span·class="p"·data-group-id="8838199787-9">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="s">"John"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Doe"</span><span·c[·...·truncated·by·diffoscope;·len:·568,·SHA:·f19b0c5ee74645d3397ff380454b2474b22a2f1bd87adfe922fb32418f37d0de·...·]7-6">}</span></code></pre><p>Delete·the·table·<code·class="inline">EMPLOYEE</code>.</p><pre><code·class="text">·24·>·odbc:sql_query(Ref,·"DROP·TABLE·EMPLOYEE"). |
| 230 | ······{updated,undefined}</code></pre><p>Shut·down·the·connection.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">25</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id=" | 230 | ······{updated,undefined}</code></pre><p>Shut·down·the·connection.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">25</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="nc">odbc</span><span·class="p">:</span><span·class="nf">disconnect</span><span·class="p"·data-group-id="3417594981-1">(</span><span·class="n">Ref</span><span·class="p"·data-group-id="3417594981-1">)</span><span·class="p">.</span><span·class="w"> |
| 231 | ······</span><span·class="ss">ok</span></code></pre><p>Shut·down·the·application.</p><pre><code·class="text">·26·>·odbc:stop(). | 231 | ······</span><span·class="ss">ok</span></code></pre><p>Shut·down·the·application.</p><pre><code·class="text">·26·>·odbc:stop(). |
| 232 | ····=INFO·REPORT====·7-Jan-2004::17:00:59·=== | 232 | ····=INFO·REPORT====·7-Jan-2004::17:00:59·=== |
| 233 | ····application:·odbc | 233 | ····application:·odbc |
| 234 | ····exited:·stopped | 234 | ····exited:·stopped |
| 235 | ····type:·temporary | 235 | ····type:·temporary |
| 236 | ····ok</code></pre> | 236 | ····ok</code></pre> |
| Offset 281, 15 lines modified | Offset 281, 15 lines modified | ||
| 281 | ······<p·class="built-using"> | 281 | ······<p·class="built-using"> |
| 282 | ········Built·using | 282 | ········Built·using |
| 283 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 283 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 284 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 284 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 285 | ······</p> | 285 | ······</p> |
| 286 | <p>Copyright·©·1996-202 | 286 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 287 | ····</footer> | 287 | ····</footer> |
| 288 | ··</div> | 288 | ··</div> |
| 289 | </main> | 289 | </main> |
| 290 | </div> | 290 | </div> |
| 291 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 291 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 292 | ··<script> | 292 | ··<script> |
| 293 | ··let·initialized·=·false; | 293 | ··let·initialized·=·false; |
| Offset 203, 15 lines modified | Offset 203, 15 lines modified | ||
| 203 | ······<p·class="built-using"> | 203 | ······<p·class="built-using"> |
| 204 | ········Built·using | 204 | ········Built·using |
| 205 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 205 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 206 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 206 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 207 | ······</p> | 207 | ······</p> |
| 208 | <p>Copyright·©·1996-202 | 208 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 209 | ····</footer> | 209 | ····</footer> |
| 210 | ··</div> | 210 | ··</div> |
| 211 | </main> | 211 | </main> |
| 212 | </div> | 212 | </div> |
| 213 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 213 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 214 | ··<script> | 214 | ··<script> |
| 215 | ··let·initialized·=·false; | 215 | ··let·initialized·=·false; |
| Offset 1052, 15 lines modified | Offset 1052, 15 lines modified | ||
| 1052 | ······<p·class="built-using"> | 1052 | ······<p·class="built-using"> |
| 1053 | ········Built·using | 1053 | ········Built·using |
| 1054 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1054 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1055 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1055 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1056 | ······</p> | 1056 | ······</p> |
| 1057 | <p>Copyright·©·1996-202 | 1057 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1058 | ····</footer> | 1058 | ····</footer> |
| 1059 | ··</div> | 1059 | ··</div> |
| 1060 | </main> | 1060 | </main> |
| 1061 | </div> | 1061 | </div> |
| 1062 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1062 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1063 | ··<script> | 1063 | ··<script> |
| 1064 | ··let·initialized·=·false; | 1064 | ··let·initialized·=·false; |
| Offset 1773, 15 lines modified | Offset 1773, 15 lines modified | ||
| 1773 | ······<p·class="built-using"> | 1773 | ······<p·class="built-using"> |
| 1774 | ········Built·using | 1774 | ········Built·using |
| 1775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1777 | ······</p> | 1777 | ······</p> |
| 1778 | <p>Copyright·©·1996-202 | 1778 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1779 | ····</footer> | 1779 | ····</footer> |
| 1780 | ··</div> | 1780 | ··</div> |
| 1781 | </main> | 1781 | </main> |
| 1782 | </div> | 1782 | </div> |
| 1783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1784 | ··<script> | 1784 | ··<script> |
| 1785 | ··let·initialized·=·false; | 1785 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-465DEDF7.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 217, 15 lines modified | Offset 217, 15 lines modified | ||
| 217 | ······<p·class="built-using"> | 217 | ······<p·class="built-using"> |
| 218 | ········Built·using | 218 | ········Built·using |
| 219 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 219 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 220 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 220 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 221 | ······</p> | 221 | ······</p> |
| 222 | <p>Copyright·©·1996-202 | 222 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 223 | ····</footer> | 223 | ····</footer> |
| 224 | ··</div> | 224 | ··</div> |
| 225 | </main> | 225 | </main> |
| 226 | </div> | 226 | </div> |
| 227 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 227 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 228 | ··<script> | 228 | ··<script> |
| 229 | ··let·initialized·=·false; | 229 | ··let·initialized·=·false; |
| Offset 621, 15 lines modified | Offset 621, 15 lines modified | ||
| 621 | ······<p·class="built-using"> | 621 | ······<p·class="built-using"> |
| 622 | ········Built·using | 622 | ········Built·using |
| 623 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 623 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 624 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 624 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 625 | ······</p> | 625 | ······</p> |
| 626 | <p>Copyright·©·1996-202 | 626 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 627 | ····</footer> | 627 | ····</footer> |
| 628 | ··</div> | 628 | ··</div> |
| 629 | </main> | 629 | </main> |
| 630 | </div> | 630 | </div> |
| 631 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 631 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 632 | ··<script> | 632 | ··<script> |
| 633 | ··let·initialized·=·false; | 633 | ··let·initialized·=·false; |
| Offset 555, 15 lines modified | Offset 555, 15 lines modified | ||
| 555 | ······<p·class="built-using"> | 555 | ······<p·class="built-using"> |
| 556 | ········Built·using | 556 | ········Built·using |
| 557 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 557 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 558 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 558 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 559 | ······</p> | 559 | ······</p> |
| 560 | <p>Copyright·©·1996-202 | 560 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 561 | ····</footer> | 561 | ····</footer> |
| 562 | ··</div> | 562 | ··</div> |
| 563 | </main> | 563 | </main> |
| 564 | </div> | 564 | </div> |
| 565 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 565 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 566 | ··<script> | 566 | ··<script> |
| 567 | ··let·initialized·=·false; | 567 | ··let·initialized·=·false; |
| Offset 673, 15 lines modified | Offset 673, 15 lines modified | ||
| 673 | ······<p·class="built-using"> | 673 | ······<p·class="built-using"> |
| 674 | ········Built·using | 674 | ········Built·using |
| 675 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 675 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 676 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 676 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 677 | ······</p> | 677 | ······</p> |
| 678 | <p>Copyright·©·1996-202 | 678 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 679 | ····</footer> | 679 | ····</footer> |
| 680 | ··</div> | 680 | ··</div> |
| 681 | </main> | 681 | </main> |
| 682 | </div> | 682 | </div> |
| 683 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 683 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 684 | ··<script> | 684 | ··<script> |
| 685 | ··let·initialized·=·false; | 685 | ··let·initialized·=·false; |
| Offset 1035, 15 lines modified | Offset 1035, 15 lines modified | ||
| 1035 | ······<p·class="built-using"> | 1035 | ······<p·class="built-using"> |
| 1036 | ········Built·using | 1036 | ········Built·using |
| 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1039 | ······</p> | 1039 | ······</p> |
| 1040 | <p>Copyright·©·1996-202 | 1040 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1041 | ····</footer> | 1041 | ····</footer> |
| 1042 | ··</div> | 1042 | ··</div> |
| 1043 | </main> | 1043 | </main> |
| 1044 | </div> | 1044 | </div> |
| 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1046 | ··<script> | 1046 | ··<script> |
| 1047 | ··let·initialized·=·false; | 1047 | ··let·initialized·=·false; |
| Offset 331, 15 lines modified | Offset 331, 15 lines modified | ||
| 331 | ······<p·class="built-using"> | 331 | ······<p·class="built-using"> |
| 332 | ········Built·using | 332 | ········Built·using |
| 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 333 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 334 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 335 | ······</p> | 335 | ······</p> |
| 336 | <p>Copyright·©·1996-202 | 336 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 337 | ····</footer> | 337 | ····</footer> |
| 338 | ··</div> | 338 | ··</div> |
| 339 | </main> | 339 | </main> |
| 340 | </div> | 340 | </div> |
| 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 341 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 342 | ··<script> | 342 | ··<script> |
| 343 | ··let·initialized·=·false; | 343 | ··let·initialized·=·false; |
| Offset 203, 15 lines modified | Offset 203, 15 lines modified | ||
| 203 | ······<p·class="built-using"> | 203 | ······<p·class="built-using"> |
| 204 | ········Built·using | 204 | ········Built·using |
| 205 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 205 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 206 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 206 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 207 | ······</p> | 207 | ······</p> |
| 208 | <p>Copyright·©·1996-202 | 208 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 209 | ····</footer> | 209 | ····</footer> |
| 210 | ··</div> | 210 | ··</div> |
| 211 | </main> | 211 | </main> |
| 212 | </div> | 212 | </div> |
| 213 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 213 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 214 | ··<script> | 214 | ··<script> |
| 215 | ··let·initialized·=·false; | 215 | ··let·initialized·=·false; |
| Offset 410, 15 lines modified | Offset 410, 15 lines modified | ||
| 410 | ······<p·class="built-using"> | 410 | ······<p·class="built-using"> |
| 411 | ········Built·using | 411 | ········Built·using |
| 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 414 | ······</p> | 414 | ······</p> |
| 415 | <p>Copyright·©·1996-202 | 415 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 416 | ····</footer> | 416 | ····</footer> |
| 417 | ··</div> | 417 | ··</div> |
| 418 | </main> | 418 | </main> |
| 419 | </div> | 419 | </div> |
| 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 421 | ··<script> | 421 | ··<script> |
| 422 | ··let·initialized·=·false; | 422 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 190, 15 lines modified | Offset 190, 15 lines modified | ||
| 190 | ······<p·class="built-using"> | 190 | ······<p·class="built-using"> |
| 191 | ········Built·using | 191 | ········Built·using |
| 192 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 192 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 193 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 193 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 194 | ······</p> | 194 | ······</p> |
| 195 | <p>Copyright·©·1996-202 | 195 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 196 | ····</footer> | 196 | ····</footer> |
| 197 | ··</div> | 197 | ··</div> |
| 198 | </main> | 198 | </main> |
| 199 | </div> | 199 | </div> |
| 200 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 200 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 201 | ··<script> | 201 | ··<script> |
| 202 | ··let·initialized·=·false; | 202 | ··let·initialized·=·false; |
| Offset 169, 21 lines modified | Offset 169, 21 lines modified | ||
| 169 | <code·class="inline">error_location</code>·is·set·to·<code·class="inline">line</code>).</p></li></ul><p>The·code·must·return:</p><ul><li><p><strong><code·class="inline">{token,Token}</code></strong>·-·Return·<code·class="inline">Token</code>·to·the·caller.</p></li><li><p><strong><code·class="inline">{end_token,Token}</code></strong>·-·Return·<code·class="inline">Token</code>·and·is·last·token·in·a·tokens·call.</p></li><li><p><strong><code·class="inline">skip_token</code></strong>·-·Skip·this·token·completely.</p></li><li><p><strong><code·class="inline">{error,ErrString}</code></strong>·-·An·error·in·the·token,·<code·class="inline">ErrString</code>·is·a·string | 169 | <code·class="inline">error_location</code>·is·set·to·<code·class="inline">line</code>).</p></li></ul><p>The·code·must·return:</p><ul><li><p><strong><code·class="inline">{token,Token}</code></strong>·-·Return·<code·class="inline">Token</code>·to·the·caller.</p></li><li><p><strong><code·class="inline">{end_token,Token}</code></strong>·-·Return·<code·class="inline">Token</code>·and·is·last·token·in·a·tokens·call.</p></li><li><p><strong><code·class="inline">skip_token</code></strong>·-·Skip·this·token·completely.</p></li><li><p><strong><code·class="inline">{error,ErrString}</code></strong>·-·An·error·in·the·token,·<code·class="inline">ErrString</code>·is·a·string |
| 170 | describing·the·error.</p></li></ul><p>It·is·also·possible·to·push·back·characters·into·the·input·characters·with·the | 170 | describing·the·error.</p></li></ul><p>It·is·also·possible·to·push·back·characters·into·the·input·characters·with·the |
| 171 | following·returns:</p><ul><li><code·class="inline">{token,Token,PushBackList}</code></li><li><code·class="inline">{end_token,Token,PushBackList}</code></li><li><code·class="inline">{skip_token,PushBackList}</code></li></ul><p>These·have·the·same·meanings·as·the·normal·returns·but·the·characters·in | 171 | following·returns:</p><ul><li><code·class="inline">{token,Token,PushBackList}</code></li><li><code·class="inline">{end_token,Token,PushBackList}</code></li><li><code·class="inline">{skip_token,PushBackList}</code></li></ul><p>These·have·the·same·meanings·as·the·normal·returns·but·the·characters·in |
| 172 | <code·class="inline">PushBackList</code>·will·be·prepended·to·the·input·characters·and·scanned·for·the | 172 | <code·class="inline">PushBackList</code>·will·be·prepended·to·the·input·characters·and·scanned·for·the |
| 173 | next·token.·Note·that·pushing·back·a·newline·will·mean·the·line·numbering·will | 173 | next·token.·Note·that·pushing·back·a·newline·will·mean·the·line·numbering·will |
| 174 | no·longer·be·correct.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Pushing·back·characters·gives·you·unexpected·possibilities·to·cause·the | 174 | no·longer·be·correct.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Pushing·back·characters·gives·you·unexpected·possibilities·to·cause·the |
| 175 | scanner·to·loop!</p></section><p>The·following·example·would·match·a·simple·Erlang·integer·or·float·and·return·a | 175 | scanner·to·loop!</p></section><p>The·following·example·would·match·a·simple·Erlang·integer·or·float·and·return·a |
| 176 | token·which·could·be·sent·to·the·Erlang·parser:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">D</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 176 | token·which·could·be·sent·to·the·Erlang·parser:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">D</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6927192094-1">[</span><span·class="mi">0</span><span·class="o">-</span><span·class="mi">9</span><span·class="p"·data-group-id="6927192094-1">]</span><span·class="w"> |
| 177 | </span><span·class="p"·data-group-id=" | 177 | </span><span·class="p"·data-group-id="6927192094-2">{</span><span·class="n">D</span><span·class="p"·data-group-id="6927192094-2">}</span><span·class="o">+</span><span·class="w">·</span><span·class="p">:</span><span·class="w"> |
| 178 | ··</span><span·class="p"·data-group-id=" | 178 | ··</span><span·class="p"·data-group-id="6927192094-3">{</span><span·class="ss">token</span><span·class="p">,</span><span·class="p"·data-group-id="6927192094-4">{</span><span·class="ss">integer</span><span·class="p">,</span><span·class="n">TokenLine</span><span·class="p">,</span><span·class="nf">[·...·truncated·by·diffoscope;·len:·255,·SHA:·f059f9871e38e96c7dc1b825dea1def689f22f77f8dfea7d892a145da6cb1eea·...·]-3">}</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p"·data-group-id="2934960958-6">{</span><span·class="n">D</span><span·class="p"·data-group-id="2934960958-6">}</span><span·class="o">+</span><span·class="err">\</span><span·class="p">.</span><span·class="p"·data-group-id="2934960958-7">{</span><span·class="n">D</span><span·class="p"·data-group-id="2934960958-7">}</span><span·class="o">+</span><span·class="p"·data-group-id="2934960958-8">(</span><span·class="p"·data-group-id="2934960958-9">(</span><span·class="n">E</span><span·class="p">|</span><span·class="ss">e</span><span·class="p"·data-group-id="2934960958-9">)</span><span·class="p"·data-group-id="2934960958-10">(</span><span·class="err">\</span><span·class="o">+</span><span·class="p">|</span><span·class="err">\</span><span·class="o">-</span><span·class="p"·data-group-id="2934960958-10">)</span><span·class="o">?</span><span·class="p"·data-group-id="2934960958-11">{</span><span·class="n">D</span><span·class="p"·data-group-id="2934960958-11">}</span><span·class="o">+</span><span·class="p"·data-group-id="2934960958-8">)</span><span·class="o">?</span><span·class="w">·</span><span·class="p">:</span><span·class="w"> | ||
| 180 | 179 | </span><span·class="p"·data-group-id="6927192094-6">{</span><span·class="n">D</span><span·class="p"·data-group-id="6927192094-6">}</span><span·class="o">+</span><span·class="err">\</span><span·class="p">.</span><span·class="p"·data-group-id="6927192094-7">[·...·truncated·by·diffoscope;·len:·894,·SHA:·52b4fa7a620813164abc7c871e149f4044f230e112d01929626cdd2e9e0284e7·...·] | |
| 180 | ··</span><span·class="p"·data-group-id="6927192094-12">{</span><span·class="ss">token</span><span·class="p">,</span><span·class="p"·data-group-id="6927192094-13">{</span><span·class="nb">float</span><span·class="p">,</span><span·class="n">TokenLine</span><span·class="p">,</span><span·class="nf">list_to_float</span><span·class="p"·data-group-id="6927192094-14">(</span><span·class="n">TokenChars</span><span·class="p"·data-group-id="6927192094-14">)</span><span·class="p"·data-group-id="6927192094-13">}</span><span·class="p"·data-group-id="6927192094-12">}</span><span·class="p">.</span></code></pre><p>The·Erlang·code·in·the·<code·class="inline">Erlang·code.</code>·section·is·written·into·the·output·file | ||
| 181 | directly·after·the·module·declaration·and·predefined·exports·declaration,·making | 181 | directly·after·the·module·declaration·and·predefined·exports·declaration,·making |
| 182 | it·possible·to·add·extra·exports,·define·imports,·and·other·attributes,·which·are | 182 | it·possible·to·add·extra·exports,·define·imports,·and·other·attributes,·which·are |
| 183 | visible·in·the·whole·file.</p><h2·id="module-regular-expressions"·class="section-heading"> | 183 | visible·in·the·whole·file.</p><h2·id="module-regular-expressions"·class="section-heading"> |
| 184 | ··<a·href="#module-regular-expressions"·class="hover-link"> | 184 | ··<a·href="#module-regular-expressions"·class="hover-link"> |
| 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 186 | ··</a> | 186 | ··</a> |
| 187 | ··<span·class="text">Regular·Expressions</span> | 187 | ··<span·class="text">Regular·Expressions</span> |
| Offset 707, 15 lines modified | Offset 707, 15 lines modified | ||
| 707 | <p>This·is·a·re-entrant·call·to·try·and·scan·a·single·token·from·<code·class="inline">Chars</code>.</p><p>If·there·are·enough·characters·in·<code·class="inline">Chars</code>·to·either·scan·a·token·or | 707 | <p>This·is·a·re-entrant·call·to·try·and·scan·a·single·token·from·<code·class="inline">Chars</code>.</p><p>If·there·are·enough·characters·in·<code·class="inline">Chars</code>·to·either·scan·a·token·or |
| 708 | detect·an·error·then·this·will·be·returned·with | 708 | detect·an·error·then·this·will·be·returned·with |
| 709 | <code·class="inline">{done,...}</code>.·Otherwise·<code·class="inline">{cont,Cont}</code>·will·be·returned·where·<code·class="inline">Cont</code>·is | 709 | <code·class="inline">{done,...}</code>.·Otherwise·<code·class="inline">{cont,Cont}</code>·will·be·returned·where·<code·class="inline">Cont</code>·is |
| 710 | used·in·the·next·call·to·<code·class="inline">token()</code>·with·more·characters·to·try·an·scan | 710 | used·in·the·next·call·to·<code·class="inline">token()</code>·with·more·characters·to·try·an·scan |
| 711 | the·token.·This·is·continued·until·a·token·has·been·scanned.·<code·class="inline">Cont</code>·is | 711 | the·token.·This·is·continued·until·a·token·has·been·scanned.·<code·class="inline">Cont</code>·is |
| 712 | initially·<code·class="inline">[]</code>.</p><p>It·is·not·designed·to·be·called·directly·by·an·application,·but·is | 712 | initially·<code·class="inline">[]</code>.</p><p>It·is·not·designed·to·be·called·directly·by·an·application,·but·is |
| 713 | used·through·the·I/O·system·where·it·can·typically·be·called·in·an | 713 | used·through·the·I/O·system·where·it·can·typically·be·called·in·an |
| 714 | application·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id=" | 714 | application·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="2514253361-1">(</span><span·class="n">InFile</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2514253361-2">{</span><span·class="ss">get_until</span><span·class="p">,</span><span·class="ss">unicode</span><span·class="p">[·...·truncated·by·diffoscope;·len:·392,·SHA:·2d5af0746407980264cf09aac8b5c2633595ea75fcb82eafd759088f8d001cf6·...·]1-1">)</span><span·class="w"> |
| 715 | ··</span><span·class="p">-></span><span·class="w">·</span><span·class="n">TokenRet</span></code></pre> | 715 | ··</span><span·class="p">-></span><span·class="w">·</span><span·class="n">TokenRet</span></code></pre> |
| 716 | ··</section> | 716 | ··</section> |
| 717 | </section> | 717 | </section> |
| 718 | <section·class="detail"·id="tokens/2"> | 718 | <section·class="detail"·id="tokens/2"> |
| 719 | ··<div·class="detail-header"> | 719 | ··<div·class="detail-header"> |
| 720 | ····<a·href="#tokens/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 720 | ····<a·href="#tokens/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 792, 15 lines modified | Offset 792, 15 lines modified | ||
| 792 | scan·the·tokens.·This·is·continued·until·all·tokens·have·been | 792 | scan·the·tokens.·This·is·continued·until·all·tokens·have·been |
| 793 | scanned.·<code·class="inline">Cont</code>·is·initially·<code·class="inline">[]</code>.</p><p>This·functions·differs·from·<code·class="inline">token</code>·in·that·it·will·continue·to·scan·tokens·up | 793 | scanned.·<code·class="inline">Cont</code>·is·initially·<code·class="inline">[]</code>.</p><p>This·functions·differs·from·<code·class="inline">token</code>·in·that·it·will·continue·to·scan·tokens·up |
| 794 | to·and·including·an·<code·class="inline">{end_token,Token}</code>·has·been·scanned·(see·next·section).·It | 794 | to·and·including·an·<code·class="inline">{end_token,Token}</code>·has·been·scanned·(see·next·section).·It |
| 795 | will·then·return·all·the·tokens.·This·is·typically·used·for·scanning·grammars | 795 | will·then·return·all·the·tokens.·This·is·typically·used·for·scanning·grammars |
| 796 | like·Erlang·where·there·is·an·explicit·end·token,·<code·class="inline">'.'</code>.·If·no·end·token·is | 796 | like·Erlang·where·there·is·an·explicit·end·token,·<code·class="inline">'.'</code>.·If·no·end·token·is |
| 797 | found·then·the·whole·file·will·be·scanned·and·returned.·If·an·error·occurs·then | 797 | found·then·the·whole·file·will·be·scanned·and·returned.·If·an·error·occurs·then |
| 798 | all·tokens·up·to·and·including·the·next·end·token·will·be·skipped.</p><p>It·is·not·designed·to·be·called·directly·by·an·application,·but·used·through·the | 798 | all·tokens·up·to·and·including·the·next·end·token·will·be·skipped.</p><p>It·is·not·designed·to·be·called·directly·by·an·application,·but·used·through·the |
| 799 | I/O·system·where·it·can·typically·be·called·in·an·application·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id=" | 799 | I/O·system·where·it·can·typically·be·called·in·an·application·by:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">io</span><span·class="p">:</span><span·class="nf">request</span><span·class="p"·data-group-id="1453864782-1">(</span><span·class="n">InFile</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1453864782-2">{</span><span·class="ss">get_until</span><span·class="p">,</span><span·class="ss">unicode</span><span·class="p">[·...·truncated·by·diffoscope;·len:·394,·SHA:·b0be95965813f28d82c12ea5977b6fdf53ad9fe7c0d6de42a5233d9fa64a8e1a·...·]-1">)</span><span·class="w"> |
| 800 | ··</span><span·class="p">-></span><span·class="w">·</span><span·class="n">TokensRet</span></code></pre> | 800 | ··</span><span·class="p">-></span><span·class="w">·</span><span·class="n">TokensRet</span></code></pre> |
| 801 | ··</section> | 801 | ··</section> |
| 802 | </section> | 802 | </section> |
| 803 | ····</div> | 803 | ····</div> |
| 804 | ··</section> | 804 | ··</section> |
| Offset 962, 15 lines modified | Offset 962, 15 lines modified | ||
| 962 | ······<p·class="built-using"> | 962 | ······<p·class="built-using"> |
| 963 | ········Built·using | 963 | ········Built·using |
| 964 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 964 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 965 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 965 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 966 | ······</p> | 966 | ······</p> |
| 967 | <p>Copyright·©·1996-202 | 967 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 968 | ····</footer> | 968 | ····</footer> |
| 969 | ··</div> | 969 | ··</div> |
| 970 | </main> | 970 | </main> |
| 971 | </div> | 971 | </div> |
| 972 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 972 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 973 | ··<script> | 973 | ··<script> |
| 974 | ··let·initialized·=·false; | 974 | ··let·initialized·=·false; |
| Offset 730, 15 lines modified | Offset 730, 15 lines modified | ||
| 730 | ······<p·class="built-using"> | 730 | ······<p·class="built-using"> |
| 731 | ········Built·using | 731 | ········Built·using |
| 732 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 732 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 733 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 733 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 734 | ······</p> | 734 | ······</p> |
| 735 | <p>Copyright·©·1996-202 | 735 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 736 | ····</footer> | 736 | ····</footer> |
| 737 | ··</div> | 737 | ··</div> |
| 738 | </main> | 738 | </main> |
| 739 | </div> | 739 | </div> |
| 740 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 740 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 741 | ··<script> | 741 | ··<script> |
| 742 | ··let·initialized·=·false; | 742 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 158, 16 lines modified | Offset 158, 16 lines modified | ||
| 158 | <code·class="inline">{Category,·Position,·Symbol}</code>.</p><p>If·a·terminal·symbol·is·the·only·member·of·a·category,·and·the·symbol·name·is | 158 | <code·class="inline">{Category,·Position,·Symbol}</code>.</p><p>If·a·terminal·symbol·is·the·only·member·of·a·category,·and·the·symbol·name·is |
| 159 | identical·to·the·category·name,·the·token·format·can·be·<code·class="inline">{Symbol,·Position}</code>.</p><p>A·list·of·tokens·produced·by·the·scanner·should·end·with·a·special | 159 | identical·to·the·category·name,·the·token·format·can·be·<code·class="inline">{Symbol,·Position}</code>.</p><p>A·list·of·tokens·produced·by·the·scanner·should·end·with·a·special |
| 160 | <code·class="inline">end_of_input</code>·tuple·which·the·parser·is·looking·for.·The·format·of·this·tuple | 160 | <code·class="inline">end_of_input</code>·tuple·which·the·parser·is·looking·for.·The·format·of·this·tuple |
| 161 | should·be·<code·class="inline">{Endsymbol,·EndPosition}</code>,·where·<code·class="inline">Endsymbol</code>·is·an·identifier·that·is | 161 | should·be·<code·class="inline">{Endsymbol,·EndPosition}</code>,·where·<code·class="inline">Endsymbol</code>·is·an·identifier·that·is |
| 162 | distinguished·from·all·the·terminal·and·non-terminal·categories·of·the·syntax | 162 | distinguished·from·all·the·terminal·and·non-terminal·categories·of·the·syntax |
| 163 | rules.·The·<code·class="inline">Endsymbol</code>·can·be·declared·in·the·grammar·file.</p><p>The·simplest·case·is·to·segment·the·input·string·into·a·list·of·identifiers | 163 | rules.·The·<code·class="inline">Endsymbol</code>·can·be·declared·in·the·grammar·file.</p><p>The·simplest·case·is·to·segment·the·input·string·into·a·list·of·identifiers |
| 164 | (atoms)·and·use·those·atoms·both·as·categories·and·values·of·the·tokens.·For | 164 | (atoms)·and·use·those·atoms·both·as·categories·and·values·of·the·tokens.·For |
| 165 | example,·the·input·string·<code·class="inline">aaa·bbb·777,·X</code>·may·be·scanned·(tokenized)·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 165 | example,·the·input·string·<code·class="inline">aaa·bbb·777,·X</code>·may·be·scanned·(tokenized)·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1614139920-1">[</span><span·class="p"·data-group-id="1614139920-2">{</span><span·class="ss">aaa</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="1614139920-2">}</span><span·class="p">,</span><spa[·...·truncated·by·diffoscope;·len:·1016,·SHA:·d50b9784a96f5f317bd4cc6fa9c93e8c673734152744d3705bc74ce3f46b631a·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 166 | ·</span><span·class="p"·data-group-id=" | 166 | ·</span><span·class="p"·data-group-id="1614139920-7">{</span><span·class="ss">'$end'</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="1614139920-7">}</span><span·class="p"·data-group-id="1614139920-1">]</span><span·class="p">.</span></code></pre><p>This·assumes·that·this·is·the·first·line·of·the·input·text,·and·that·<code·class="inline">'$end'</code>·is |
| 167 | the·distinguished·<code·class="inline">end_of_input</code>·symbol.</p><p>The·Erlang·scanner·in·the·<code·class="inline">io</code>·module·can·be·used·as·a·starting·point·when | 167 | the·distinguished·<code·class="inline">end_of_input</code>·symbol.</p><p>The·Erlang·scanner·in·the·<code·class="inline">io</code>·module·can·be·used·as·a·starting·point·when |
| 168 | writing·a·new·scanner.·Study·<code·class="inline">yeccscan.erl</code>·in·order·to·see·how·a·filter·can·be | 168 | writing·a·new·scanner.·Study·<code·class="inline">yeccscan.erl</code>·in·order·to·see·how·a·filter·can·be |
| 169 | added·on·top·of·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#scan_erl_form/3"><code·class="inline">io:scan_erl_form/3</code></a>·to·provide·a·scanner·for·Yecc·that | 169 | added·on·top·of·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#scan_erl_form/3"><code·class="inline">io:scan_erl_form/3</code></a>·to·provide·a·scanner·for·Yecc·that |
| 170 | tokenizes·grammar·files·before·parsing·them·with·the·Yecc·parser.·A·more·general | 170 | tokenizes·grammar·files·before·parsing·them·with·the·Yecc·parser.·A·more·general |
| 171 | approach·to·scanner·implementation·is·to·use·a·scanner·generator·such·as | 171 | approach·to·scanner·implementation·is·to·use·a·scanner·generator·such·as |
| 172 | <a·href="leex.html"><code·class="inline">leex</code></a>.</p><h2·id="module-grammar-definition-format"·class="section-heading"> | 172 | <a·href="leex.html"><code·class="inline">leex</code></a>.</p><h2·id="module-grammar-definition-format"·class="section-heading"> |
| 173 | ··<a·href="#module-grammar-definition-format"·class="hover-link"> | 173 | ··<a·href="#module-grammar-definition-format"·class="hover-link"> |
| Offset 229, 29 lines modified | Offset 229, 29 lines modified | ||
| 229 | list·->·'('·')'. | 229 | list·->·'('·')'. |
| 230 | list·->·'('·elements·')'. | 230 | list·->·'('·elements·')'. |
| 231 | elements·->·element. | 231 | elements·->·element. |
| 232 | elements·->·element·elements. | 232 | elements·->·element·elements. |
| 233 | element·->·atom. | 233 | element·->·atom. |
| 234 | element·->·list.</code></pre><p>This·grammar·can·be·used·to·generate·a·parser·which·parses·list·expressions, | 234 | element·->·list.</code></pre><p>This·grammar·can·be·used·to·generate·a·parser·which·parses·list·expressions, |
| 235 | such·as·<code·class="inline">(),·(a),·(peter·charles),·(a·(b·c)·d·(())),·...</code>·provided·that·your | 235 | such·as·<code·class="inline">(),·(a),·(peter·charles),·(a·(b·c)·d·(())),·...</code>·provided·that·your |
| 236 | scanner·tokenizes,·for·example,·the·input·<code·class="inline">(peter·charles)</code>·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 236 | scanner·tokenizes,·for·example,·the·input·<code·class="inline">(peter·charles)</code>·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8271608931-1">[</span><span·class="p"·data-group-id="8271608931-2">{</span><span·class="ss">'('</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="8271608931-2">}</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·919,·SHA:·e9d92523caaa4e06b987afa1586051ca2ffb01e9b7a604c5b7119f4d88d8665c·...·]1-5">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ·</span><span·class="p"·data-group-id=" | 237 | ·</span><span·class="p"·data-group-id="8271608931-6">{</span><span·class="ss">'$end'</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="8271608931-6">}</span><span·class="p"·data-group-id="8271608931-1">]</span></code></pre><p>When·a·grammar·rule·is·used·by·the·parser·to·parse·(part·of)·the·input·string·as |
| 238 | a·grammatical·phrase,·the·associated·code·is·evaluated,·and·the·value·of·the | 238 | a·grammatical·phrase,·the·associated·code·is·evaluated,·and·the·value·of·the |
| 239 | last·expression·becomes·the·value·of·the·parsed·phrase.·This·value·may·be·used | 239 | last·expression·becomes·the·value·of·the·parsed·phrase.·This·value·may·be·used |
| 240 | by·the·parser·later·to·build·structures·that·are·values·of·higher·phrases·of | 240 | by·the·parser·later·to·build·structures·that·are·values·of·higher·phrases·of |
| 241 | which·the·current·phrase·is·a·part.·The·values·initially·associated·with | 241 | which·the·current·phrase·is·a·part.·The·values·initially·associated·with |
| 242 | terminal·category·phrases,·i.e.·input·tokens,·are·the·token·tuples·themselves.</p><p>Below·is·an·example·of·the·grammar·above·with·structure·building·code·added:</p><pre><code·class="text">list·->·'('·')'·:·nil. | 242 | terminal·category·phrases,·i.e.·input·tokens,·are·the·token·tuples·themselves.</p><p>Below·is·an·example·of·the·grammar·above·with·structure·building·code·added:</p><pre><code·class="text">list·->·'('·')'·:·nil. |
| 243 | list·->·'('·elements·')'·:·'$2'. | 243 | list·->·'('·elements·')'·:·'$2'. |
| 244 | elements·->·element·:·{cons,·'$1',·nil}. | 244 | elements·->·element·:·{cons,·'$1',·nil}. |
| 245 | elements·->·element·elements·:·{cons,·'$1',·'$2'}. | 245 | elements·->·element·elements·:·{cons,·'$1',·'$2'}. |
| 246 | element·->·atom·:·'$1'. | 246 | element·->·atom·:·'$1'. |
| 247 | element·->·list·:·'$1'.</code></pre><p>With·this·code·added·to·the·grammar·rules,·the·parser·produces·the·following | 247 | element·->·list·:·'$1'.</code></pre><p>With·this·code·added·to·the·grammar·rules,·the·parser·produces·the·following |
| 248 | value·(structure)·when·parsing·the·input·string·<code·class="inline">(a·b·c).</code>.·This·still·assumes | 248 | value·(structure)·when·parsing·the·input·string·<code·class="inline">(a·b·c).</code>.·This·still·assumes |
| 249 | that·this·was·the·first·input·line·that·the·scanner·tokenized:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 249 | that·this·was·the·first·input·line·that·the·scanner·tokenized:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2299364123-1">{</span><span·class="ss">cons</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2299364123-2">{</span><span·class="ss">atom</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><spa[·...·truncated·by·diffoscope;·len:·567,·SHA:·12eb2192a5b8358d63e03639e0fa73f7e1e72155b7191b728dceef8949654d7a·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ····························</span><span·class="p"·data-group-id=" | 250 | ····························</span><span·class="p"·data-group-id="2299364123-5">{</span><span·class="ss">cons</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2299364123-6">{</span><span·class="ss">atom</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><spa[·...·truncated·by·diffoscope;·len:·344,·SHA:·e4bc22cea08b1ed972cd294fa5dcc755c46db4053a863fc2ea6165623377b067·...·]-1">}</span></code></pre><p>The·associated·code·contains·<code·class="inline">pseudo·variables</code>·<code·class="inline">'$1'</code>,·<code·class="inline">'$2'</code>, |
| 251 | <code·class="inline">'$3'</code>,·and·so·on.··which·refer·to·(are·bound·to)·the·values | 251 | <code·class="inline">'$3'</code>,·and·so·on.··which·refer·to·(are·bound·to)·the·values |
| 252 | associated·previously·by·the·parser·with·the·symbols·of·the·right-hand | 252 | associated·previously·by·the·parser·with·the·symbols·of·the·right-hand |
| 253 | side·of·the·rule.·When·these·symbols·are·terminal·categories,·the | 253 | side·of·the·rule.·When·these·symbols·are·terminal·categories,·the |
| 254 | values·are·token·tuples·of·the·input·string·(see·above).</p><p>The·associated·code·may·not·only·be·used·to·build·structures | 254 | values·are·token·tuples·of·the·input·string·(see·above).</p><p>The·associated·code·may·not·only·be·used·to·build·structures |
| 255 | associated·with·phrases,·but·may·also·be·used·for·syntactic·and | 255 | associated·with·phrases,·but·may·also·be·used·for·syntactic·and |
| 256 | semantic·tests,·printout·actions·(for·example·for·tracing),·and·so·on | 256 | semantic·tests,·printout·actions·(for·example·for·tracing),·and·so·on |
| 257 | during·the·parsing·process.·Since·tokens·contain·positional·(line | 257 | during·the·parsing·process.·Since·tokens·contain·positional·(line |
| Offset 266, 37 lines modified | Offset 266, 37 lines modified | ||
| 266 | element·->·atom·:·'$1'. | 266 | element·->·atom·:·'$1'. |
| 267 | element·->·list·:·'$1'.</code></pre><h2·id="module-generating-a-parser"·class="section-heading"> | 267 | element·->·list·:·'$1'.</code></pre><h2·id="module-generating-a-parser"·class="section-heading"> |
| 268 | ··<a·href="#module-generating-a-parser"·class="hover-link"> | 268 | ··<a·href="#module-generating-a-parser"·class="hover-link"> |
| 269 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 269 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 270 | ··</a> | 270 | ··</a> |
| 271 | ··<span·class="text">Generating·a·Parser</span> | 271 | ··<span·class="text">Generating·a·Parser</span> |
| 272 | </h2> | 272 | </h2> |
| 273 | <p>To·call·the·parser·generator,·use·the·following·command:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">yecc</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id=" | 273 | <p>To·call·the·parser·generator,·use·the·following·command:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">yecc</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="6911802158-1">(</span><span·class="n">Grammarfile</span><span·class="p"·data-group-id="6911802158-1">)</span><span·class="p">.</span></code></pre><p>An·error·message·from·Yecc·will·be·shown·if·the·grammar·is·not·of·the·LALR·type |
| 274 | (for·example·too·ambiguous).·Shift/reduce·conflicts·are·resolved·in·favor·of | 274 | (for·example·too·ambiguous).·Shift/reduce·conflicts·are·resolved·in·favor·of |
| 275 | shifting·if·there·are·no·operator·precedence·declarations.·Refer·to·the·<code·class="inline">yacc</code> | 275 | shifting·if·there·are·no·operator·precedence·declarations.·Refer·to·the·<code·class="inline">yacc</code> |
| 276 | documentation·on·the·use·of·operator·precedence.</p><p>The·output·file·contains·Erlang·source·code·for·a·parser·module·with·module·name | 276 | documentation·on·the·use·of·operator·precedence.</p><p>The·output·file·contains·Erlang·source·code·for·a·parser·module·with·module·name |
| 277 | equal·to·the·<code·class="inline">Parserfile</code>·parameter.·After·compilation,·the·parser·can·be·called | 277 | equal·to·the·<code·class="inline">Parserfile</code>·parameter.·After·compilation,·the·parser·can·be·called |
| 278 | as·follows·(the·module·name·is·assumed·to·be·<code·class="inline">myparser</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">myparser</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 278 | as·follows·(the·module·name·is·assumed·to·be·<code·class="inline">myparser</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">myparser</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="6410191107-1">(</span><span·class="nc">myscanner</span><span·class="p">:</span><span·class="nf">scan</span><span·class="p"·data-group-id="6410191107-2">(</span><span·class="n">Inport</span><span·class="p"·data-group-id="6410191107-2">)</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·74d069ac6f239cfc91f4dcf4f8a5164a38982daf58e3f29033f0aedc9ea8f8d9·...·]-1">)</span></code></pre><p>The·call·format·can·be·different·if·a·customized·prologue·file·has·been·included |
| 279 | when·generating·the·parser·instead·of·the·default·file | 279 | when·generating·the·parser·instead·of·the·default·file |
| 280 | <code·class="inline">lib/parsetools/include/yeccpre.hrl</code>.</p><p>With·the·standard·prologue,·this·call·will·return·either·<code·class="inline">{ok,·Result}</code>,·where | 280 | <code·class="inline">lib/parsetools/include/yeccpre.hrl</code>.</p><p>With·the·standard·prologue,·this·call·will·return·either·<code·class="inline">{ok,·Result}</code>,·where |
| 281 | <code·class="inline">Result</code>·is·a·structure·that·the·Erlang·code·of·the·grammar·file·has·built,·or | 281 | <code·class="inline">Result</code>·is·a·structure·that·the·Erlang·code·of·the·grammar·file·has·built,·or |
| 282 | <code·class="inline">{error,·{Position,·Module,·Message}}</code>·if·there·was·a·syntax·error·in·the·input.</p><p><code·class="inline">Message</code>·is·something·which·may·be·converted·into·a·string·by·calling | 282 | <code·class="inline">{error,·{Position,·Module,·Message}}</code>·if·there·was·a·syntax·error·in·the·input.</p><p><code·class="inline">Message</code>·is·something·which·may·be·converted·into·a·string·by·calling |
| 283 | <code·class="inline">Module:format_error(Message)</code>·and·printed·with·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#format/3"><code·class="inline">io:format/3</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>By·default,·the·parser·that·was·generated·will·not·print·out·error·messages·to | 283 | <code·class="inline">Module:format_error(Message)</code>·and·printed·with·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#format/3"><code·class="inline">io:format/3</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>By·default,·the·parser·that·was·generated·will·not·print·out·error·messages·to |
| 284 | the·screen.·The·user·will·have·to·do·this·either·by·printing·the·returned | 284 | the·screen.·The·user·will·have·to·do·this·either·by·printing·the·returned |
| 285 | error·messages,·or·by·inserting·tests·and·print·instructions·in·the·Erlang | 285 | error·messages,·or·by·inserting·tests·and·print·instructions·in·the·Erlang |
| 286 | code·associated·with·the·syntax·rules·of·the·grammar·file.</p></section><p>It·is·also·possible·to·make·the·parser·ask·for·more·input·tokens·when·needed·if | 286 | code·associated·with·the·syntax·rules·of·the·grammar·file.</p></section><p>It·is·also·possible·to·make·the·parser·ask·for·more·input·tokens·when·needed·if |
| 287 | the·following·call·format·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">myparser</span><span·class="p">:</span><span·class="nf">parse_and_scan</span><span·class="p"·data-group-id="9368261608-1">(</span><span·class="p"·data-group-id="9368261608-2">{</span><span·class="n">Function</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Args</span><span·class="p"·data-group-id="9368261608-2">}</span><span·class="p"·data-group-id="9368261608-1">)</span><span·class="w"> | ||
| 288 | 287 | the·following·call·format·is·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">myparser</span><span·class="p">:</span><span·class="nf">parse_and_scan</span><span·class="p"·data-group-id="2338690686-1">(</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·258,·SHA:·99d23cbdeb09768971a6911015699413337fa41aa86c7a0e153e43e0a3182c37·...·] | |
| 288 | </span><span·class="nc">myparser</span><span·class="p">:</span><span·class="nf">parse_and_scan</span><span·class="p"·data-group-id="2338690686-3">(</span><span·class="p"·data-group-id="2338690686-4">{</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tokenizer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Args</span><span·class="p"·data-group-id="2338690686-4">}</span><span·class="p"·data-group-id="2338690686-3">)</span></code></pre><p>The·tokenizer·<code·class="inline">Function</code>·is·either·a·fun·or·a·tuple·<code·class="inline">{Mod,·Tokenizer}</code>.·The·call | ||
| 289 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/2"><code·class="inline">apply(Function,·Args)</code></a>·or | 289 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/2"><code·class="inline">apply(Function,·Args)</code></a>·or |
| 290 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/2"><code·class="inline">apply({Mod,·Tokenizer},·Args)</code></a>·is·executed·whenever·a·new·token·is | 290 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/2"><code·class="inline">apply({Mod,·Tokenizer},·Args)</code></a>·is·executed·whenever·a·new·token·is |
| 291 | needed.·This,·for·example,·makes·it·possible·to·parse·from·a·file,·token·by | 291 | needed.·This,·for·example,·makes·it·possible·to·parse·from·a·file,·token·by |
| 292 | token.</p><p>The·tokenizer·used·above·has·to·be·implemented·so·as·to·return·one·of·the | 292 | token.</p><p>The·tokenizer·used·above·has·to·be·implemented·so·as·to·return·one·of·the |
| 293 | following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 293 | following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4318960498-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tokens</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EndPosition</span><span·class="p"·data-group-id="4318960498-1">}</span><span·class="w"> |
| 294 | </span><span·class="p"·data-group-id=" | 294 | </span><span·class="p"·data-group-id="4318960498-2">{</span><span·class="ss">eof</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EndPosition</span><span·class="p"·data-group-id="4318960498-2">}</span><span·class="w"> |
| 295 | </span><span·class="p"·data-group-id=" | 295 | </span><span·class="p"·data-group-id="4318960498-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Error_description</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EndPosition</span><span·class="p"·data-group-id="4318[·...·truncated·by·diffoscope;·len:·6,·SHA:·fc17090abd43fc42d6eac65075a8493c344e577abe0e4e29451e5163e1d55e75·...·]-3">}</span></code></pre><p>This·conforms·to·the·format·used·by·the·scanner·in·the·Erlang·<code·class="inline">io</code>·library |
| 296 | module.</p><p>If·<code·class="inline">{eof,·EndPosition}</code>·is·returned·immediately,·the·call·to·<code·class="inline">parse_and_scan/1</code> | 296 | module.</p><p>If·<code·class="inline">{eof,·EndPosition}</code>·is·returned·immediately,·the·call·to·<code·class="inline">parse_and_scan/1</code> |
| 297 | returns·<code·class="inline">{ok,·eof}</code>.·If·<code·class="inline">{eof,·EndPosition}</code>·is·returned·before·the·parser | 297 | returns·<code·class="inline">{ok,·eof}</code>.·If·<code·class="inline">{eof,·EndPosition}</code>·is·returned·before·the·parser |
| 298 | expects·end·of·input,·<code·class="inline">parse_and_scan/1</code>·will,·of·course,·return·an·error | 298 | expects·end·of·input,·<code·class="inline">parse_and_scan/1</code>·will,·of·course,·return·an·error |
| 299 | message·(see·above).·Otherwise·<code·class="inline">{ok,·Result}</code>·is·returned.</p><h2·id="module-more-examples"·class="section-heading"> | 299 | message·(see·above).·Otherwise·<code·class="inline">{ok,·Result}</code>·is·returned.</p><h2·id="module-more-examples"·class="section-heading"> |
| 300 | ··<a·href="#module-more-examples"·class="hover-link"> | 300 | ··<a·href="#module-more-examples"·class="hover-link"> |
| 301 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 301 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 302 | ··</a> | 302 | ··</a> |
| Offset 338, 44 lines modified | Offset 338, 44 lines modified | ||
| 338 | </span><span·class="n">Terminals</span><span·class="w"> | 338 | </span><span·class="n">Terminals</span><span·class="w"> |
| 339 | </span><span·class="ss">atom</span><span·class="w">·</span><span·class="nb">float</span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="ss">reserved_symbol</span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="ss">string</span><span·class="w">·</span><span·class="ss">char</span><span·class="w">·</span><span·class="ss">var</span><span·class="w"> | 339 | </span><span·class="ss">atom</span><span·class="w">·</span><span·class="nb">float</span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="ss">reserved_symbol</span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="ss">string</span><span·class="w">·</span><span·class="ss">char</span><span·class="w">·</span><span·class="ss">var</span><span·class="w"> |
| 340 | </span><span·class="ss">'->'</span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="ss">dot</span><span·class="p">.</span><span·class="w"> | 340 | </span><span·class="ss">'->'</span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="ss">dot</span><span·class="p">.</span><span·class="w"> |
| 341 | </span><span·class="n">Rootsymbol</span><span·class="w">·</span><span·class="ss">grammar</span><span·class="p">.</span><span·class="w"> | 341 | </span><span·class="n">Rootsymbol</span><span·class="w">·</span><span·class="ss">grammar</span><span·class="p">.</span><span·class="w"> |
| 342 | </span><span·class="n">Endsymbol</span><span·class="w">·</span><span·class="ss">'$end'</span><span·class="p">.</span><span·class="w"> | 342 | </span><span·class="n">Endsymbol</span><span·class="w">·</span><span·class="ss">'$end'</span><span·class="p">.</span><span·class="w"> |
| 343 | </span><span·class="ss">grammar</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">declaration</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 343 | </span><span·class="ss">grammar</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">declaration</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 344 | </span><span·class="ss">grammar</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">rule</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 344 | </span><span·class="ss">grammar</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">rule</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 345 | </span><span·class="ss">declaration</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="nc">dot</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 345 | </span><span·class="ss">declaration</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="nc">dot</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-1">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="8600809049-1">}</span><span·class="p">.</span><span·class="w"> |
| 346 | </span><span·class="ss">rule</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">head</span><span·class="w">·</span><span·class="ss">'->'</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="nc">dot</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 346 | </span><span·class="ss">rule</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">head</span><span·class="w">·</span><span·class="ss">'->'</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="nc">dot</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-2">{</span><span·class="ss">rule</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-3">[</span><span·class="ss">'$1'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·80,·SHA:·99885a0cb7d5dfbb66e42de1b8ce82156420a5cd7bea06fabfc011ca5cd0696e·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 347 | ········</span><span·class="ss">'$4'</span><span·class="p"·data-group-id=" | 347 | ········</span><span·class="ss">'$4'</span><span·class="p"·data-group-id="8600809049-2">}</span><span·class="p">.</span><span·class="w"> |
| 348 | </span><span·class="ss">head</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 348 | </span><span·class="ss">head</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 349 | </span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 349 | </span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-4">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-4">]</span><span·class="p">.</span><span·class="w"> |
| 350 | </span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 350 | </span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">symbol</span><span·class="w">·</span><span·class="ss">symbols</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-5">[</span><span·class="ss">'$1'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="8600809049-5">]</span><span·class="p">.</span><span·class="w"> |
| 351 | </span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 351 | </span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-6">{</span><span·class="ss">erlang_code</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="8600809049-6">}</span><span·class="p">.</span><span·class="w"> |
| 352 | </span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">'$empty'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 352 | </span><span·class="ss">attached_code</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">'$empty'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-7">{</span><span·class="ss">erlang_code</span><span·class="p">,</span><span·class="w"> |
| 353 | ·················</span><span·class="p"·data-group-id=" | 353 | ·················</span><span·class="p"·data-group-id="8600809049-8">[</span><span·class="p"·data-group-id="8600809049-9">{</span><span·class="ss">atom</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$undefined[·...·truncated·by·diffoscope;·len:·159,·SHA:·2898112c7d27b8475cbb5314756afff763ea8077cea860e48eec6fa056e70dbb·...·]-7">}</span><span·class="p">.</span><span·class="w"> |
| 354 | </span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">token</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 354 | </span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">token</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-10">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-10">]</span><span·class="p">.</span><span·class="w"> |
| 355 | </span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">token</span><span·class="w">·</span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 355 | </span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">token</span><span·class="w">·</span><span·class="ss">tokens</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-11">[</span><span·class="ss">'$1'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="8600809049-11">]</span><span·class="p">.</span><span·class="w"> |
| 356 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">var</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 356 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">var</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-12">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-12">)</span><span·class="p">.</span><span·class="w"> |
| 357 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">atom</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 357 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">atom</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-13">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-13">)</span><span·class="p">.</span><span·class="w"> |
| 358 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 358 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-14">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-14">)</span><span·class="p">.</span><span·class="w"> |
| 359 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 359 | </span><span·class="ss">symbol</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-15">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-15">)</span><span·class="p">.</span><span·class="w"> |
| 360 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">var</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 360 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">var</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 361 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">atom</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 361 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">atom</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 362 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nb">float</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 362 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nb">float</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 363 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 363 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">integer</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 364 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">string</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 364 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">string</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 365 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">char</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> | 365 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">char</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p">.</span><span·class="w"> |
| 366 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 366 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_symbol</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-16">{</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-17">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-17">)</span><span·class="p">,</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·207,·SHA:·edb5fd3a9058a2d134e50b0005ed00d151b25fc87431848aac2e4e75f38238c0·...·]-16">}</span><span·class="p">.</span><span·class="w"> |
| 367 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 367 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">reserved_word</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-19">{</span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-20">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="8600809049-20">)</span><span·class="p">,</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·207,·SHA:·672474e9fb8ab2692e8978ed0d70a1556e6dede276f47fc4eba0c5e042a6ab4e·...·]-19">}</span><span·class="p">.</span><span·class="w"> |
| 368 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">'->'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 368 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">'->'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-22">{</span><span·class="ss">'->'</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">line_of</span><span·class="p"·data-group-id="8600809049-23">(</span><span·class="ss">'$1'</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·70,·SHA:·04742b49cdb1d55693d2196ef28bc1d8dc9d2ded6a05d129ca2e5d4c7192f69e·...·]-22">}</span><span·class="p">.</span><span·class="w"> |
| 369 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 369 | </span><span·class="ss">token</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">':'</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8600809049-24">{</span><span·class="ss">':'</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">line_of</span><span·class="p"·data-group-id="8600809049-25">(</span><span·class="ss">'$1'</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·66,·SHA:·1bca13b606644621abeece963ceae10669dd5715342de695f1d52ccd4c0eee04·...·]-24">}</span><span·class="p">.</span><span·class="w"> |
| 370 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">code</span><span·class="p">.</span><span·class="w"> | 370 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">code</span><span·class="p">.</span><span·class="w"> |
| 371 | </span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 371 | </span><span·class="nf">value_of</span><span·class="p"·data-group-id="8600809049-26">(</span><span·class="n">Token</span><span·class="p"·data-group-id="8600809049-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 372 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 372 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id="8600809049-27">(</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Token</span><span·class="p"·data-group-id="8600809049-27">)</span><span·class="p">.</span><span·class="w"> |
| 373 | </span><span·class="nf">line_of</span><span·class="p"·data-group-id=" | 373 | </span><span·class="nf">line_of</span><span·class="p"·data-group-id="8600809049-28">(</span><span·class="n">Token</span><span·class="p"·data-group-id="8600809049-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 374 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id=" | 374 | ····</span><span·class="nf">element</span><span·class="p"·data-group-id="8600809049-29">(</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Token</span><span·class="p"·data-group-id="8600809049-29">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·symbols·<code·class="inline">'->'</code>,·and·<code·class="inline">':'</code>·have·to·be·treated·in·a·special·way,·as·they·are |
| 375 | meta·symbols·of·the·grammar·notation,·as·well·as·terminal·symbols·of·the·Yecc | 375 | meta·symbols·of·the·grammar·notation,·as·well·as·terminal·symbols·of·the·Yecc |
| 376 | grammar.</p></section><p>5.·The·file·<code·class="inline">erl_parse.yrl</code>·in·the·<code·class="inline">lib/stdlib/src</code>·directory·contains·the | 376 | grammar.</p></section><p>5.·The·file·<code·class="inline">erl_parse.yrl</code>·in·the·<code·class="inline">lib/stdlib/src</code>·directory·contains·the |
| 377 | grammar·for·Erlang.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Syntactic·tests·are·used·in·the·code·associated·with·some·rules,·and·an·error | 377 | grammar·for·Erlang.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Syntactic·tests·are·used·in·the·code·associated·with·some·rules,·and·an·error |
| 378 | is·thrown·(and·caught·by·the·generated·parser·to·produce·an·error·message) | 378 | is·thrown·(and·caught·by·the·generated·parser·to·produce·an·error·message) |
| Max diff block lines reached; 919/51105 bytes (1.80%) of diff not shown. | |||
| Offset 14, 15 lines modified | Offset 14, 15 lines modified | ||
| 14 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 14 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 15 | dist/lato-latin-400-normal-W7754I4D.woff2 | 15 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 16 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 16 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 17 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 17 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 18 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 18 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 19 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 19 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 20 | dist/remixicon-NKANDIL5.woff2 | 20 | dist/remixicon-NKANDIL5.woff2 |
| 21 | dist/search_data- | 21 | dist/search_data-AEF91FD2.js |
| 22 | dist/sidebar_items-9345D29F.js | 22 | dist/sidebar_items-9345D29F.js |
| 23 | index.html | 23 | index.html |
| 24 | notes.html | 24 | notes.html |
| 25 | public_key.html | 25 | public_key.html |
| 26 | public_key_app.html | 26 | public_key_app.html |
| 27 | public_key_records.html | 27 | public_key_records.html |
| 28 | search.html | 28 | search.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 1481, 15 lines modified | Offset 1481, 15 lines modified | ||
| 1481 | ······<p·class="built-using"> | 1481 | ······<p·class="built-using"> |
| 1482 | ········Built·using | 1482 | ········Built·using |
| 1483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1485 | ······</p> | 1485 | ······</p> |
| 1486 | <p>Copyright·©·1996-202 | 1486 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1487 | ····</footer> | 1487 | ····</footer> |
| 1488 | ··</div> | 1488 | ··</div> |
| 1489 | </main> | 1489 | </main> |
| 1490 | </div> | 1490 | </div> |
| 1491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1492 | ··<script> | 1492 | ··<script> |
| 1493 | ··let·initialized·=·false; | 1493 | ··let·initialized·=·false; |
| Offset 3187, 30 lines modified | Offset 3187, 30 lines modified | ||
| 3187 | certificates·include·policies·the·constrained·policy·set·with | 3187 | certificates·include·policies·the·constrained·policy·set·with |
| 3188 | potential·qualifiers·will·be·returned,·these·values·are·derived·from | 3188 | potential·qualifiers·will·be·returned,·these·values·are·derived·from |
| 3189 | the·policy·tree·created·as·part·of·the·path·validation·algorithm.·The | 3189 | the·policy·tree·created·as·part·of·the·path·validation·algorithm.·The |
| 3190 | constrained·set·can·be·constrained·only·by·the·Certificate·Authorities | 3190 | constrained·set·can·be·constrained·only·by·the·Certificate·Authorities |
| 3191 | or·also·by·the·user·when·the·option·<code·class="inline">policy_set</code>·is·provided·to·this | 3191 | or·also·by·the·user·when·the·option·<code·class="inline">policy_set</code>·is·provided·to·this |
| 3192 | function.·The·qualifiers·convey·information·about·the·valid·policy·and | 3192 | function.·The·qualifiers·convey·information·about·the·valid·policy·and |
| 3193 | is·intended·as·information·to·end·users.</p><p>Available·options:</p><ul><li><p><strong>{verify_fun,·{fun(),·UserState::term()}</strong>·-·The·fun·must·be | 3193 | is·intended·as·information·to·end·users.</p><p>Available·options:</p><ul><li><p><strong>{verify_fun,·{fun(),·UserState::term()}</strong>·-·The·fun·must·be |
| 3194 | defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="7 | 3194 | defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="7030062429-1">(</span><span·class="n">OtpCert</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'OTPCertificate'</span><span·class="p"·data-group-id="703006[·...·truncated·by·diffoscope;·len:·57,·SHA:·7947428c7c75aff23e66dd17b1051913f0412bfcf11e1912b7dd6e11ad4745a3·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 3195 | ····</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 3195 | ····</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7030062429-3">{</span><span·class="ss">bad_cert</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">bad_cert_reas[·...·truncated·by·diffoscope;·len:·547,·SHA:·c4f9900d357dc19f4cffc80305a0eb5c29879f804bca560d9734d88ed572bc3a·...·]-3">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3196 | ·············</span><span·class="p"·data-group-id="7 | 3196 | ·············</span><span·class="p"·data-group-id="7030062429-7">{</span><span·class="ss">extension</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="7030062429-8">{</span><span·class="p"·data-group-id="703[·...·truncated·by·diffoscope;·len:·60,·SHA:·77a87cfd5d6caeba799064702fe58c1cd0072d6f4278e5e474505674c59e6f13·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 3197 | ····</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="7 | 3197 | ····</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="7030062429-9">(</span><span·class="p"·data-group-id="7030062429-9">)</span><span·class="p"·data-group-id="7030062429-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 3198 | ··</span><span·class="p"·data-group-id="7 | 3198 | ··</span><span·class="p"·data-group-id="7030062429-10">{</span><span·class="ss">valid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><[·...·truncated·by·diffoscope;·len:·148,·SHA:·e4346f35f5d0ef23472835f51e4feee93c119cfd96aa67e3e698bd330eb433e9·...·]-10">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3199 | ··</span><span·class="p"·data-group-id="7 | 3199 | ··</span><span·class="p"·data-group-id="7030062429-12">{</span><span·class="ss">valid_peer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·c749101e525ec7b491056fe7661505023479c3cfc0d4c9d98dd3326958eb19c2·...·]-12">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3200 | ··</span><span·class="p"·data-group-id="7 | 3200 | ··</span><span·class="p"·data-group-id="7030062429-14">{</span><span·class="ss">fail</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span[·...·truncated·by·diffoscope;·len:·144,·SHA:·29484dac207ec0abf5778281d8269d8938d4ace2b4219de9ea6671c93a36aa14·...·]-14">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3201 | ··</span><span·class="p"·data-group-id="7 | 3201 | ··</span><span·class="p"·data-group-id="7030062429-16">{</span><span·class="ss">unknown</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span[·...·truncated·by·diffoscope;·len:·633,·SHA:·54c40409f78fcdc5fb77419d35b099f913b62ee5223b5857cabb4e17a7e08050·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 3202 | ····</span><span·class="n">DerCert</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">der_encoded</span><span·class="p"·data-group-id=" | 3202 | ····</span><span·class="n">DerCert</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">der_encoded</span><span·class="p"·data-group-id="5972764319-3">(</span><span·class="p"·data-group-id="5972764319-3">)</span><span·class="p">,</span><span·class="w"> |
| 3203 | ····</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 3203 | ····</span><span·class="n">Event</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="5972764319-4">{</span><span·class="ss">bad_cert</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">bad_cert_rea[·...·truncated·by·diffoscope;·len:·548,·SHA:·655623b06d589ca264d2acf1324572f3301b3ef0421f57129321a595bb5c4408·...·]-4">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3204 | ·············</span><span·class="p"·data-group-id=" | 3204 | ·············</span><span·class="p"·data-group-id="5972764319-8">{</span><span·class="ss">extension</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="5972764319-9">{</span><span·class="p"·data-group-id="59[·...·truncated·by·diffoscope;·len:·61,·SHA:·fe5b91e63b609901ba9ee11d58adb95b1e9b84c1e3393b8892ec955c9b82ab0e·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 3205 | ····</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 3205 | ····</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="5972764319-10">(</span><span·class="p"·data-group-id="5972764319-10">)</span><span·class="p"·data-group-id="5972764319-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 3206 | ··</span><span·class="p"·data-group-id=" | 3206 | ··</span><span·class="p"·data-group-id="5972764319-11">{</span><span·class="ss">valid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span>[·...·truncated·by·diffoscope;·len:·149,·SHA:·470ef909925b268e591c27aedf0e7e6921297eea40dcc6f074244f44182b9995·...·]-11">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3207 | ··</span><span·class="p"·data-group-id=" | 3207 | ··</span><span·class="p"·data-group-id="5972764319-13">{</span><span·class="ss">valid_peer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</[·...·truncated·by·diffoscope;·len:·154,·SHA:·a5fbc9949ddd749eea881499c58dc531c98d9381c86e38b15d2dcfab81e7a2bc·...·]-13">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3208 | ··</span><span·class="p"·data-group-id=" | 3208 | ··</span><span·class="p"·data-group-id="5972764319-15">{</span><span·class="ss">fail</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><spa[·...·truncated·by·diffoscope;·len:·145,·SHA:·e07330c7ee57375f5ea0b64a0bcb270ed162c91267d4b39d827b6b048886f710·...·]-15">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3209 | ··</span><span·class="p"·data-group-id=" | 3209 | ··</span><span·class="p"·data-group-id="5972764319-17">{</span><span·class="ss">unknown</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</spa[·...·truncated·by·diffoscope;·len:·151,·SHA:·a3b8baa0367cbcf3a53c0bf7a3288eb4c16f0d7429f81388801034fc71fcf808·...·]-17">}</span><span·class="p">.</span></code></pre><p>The·verify·callback·can·have·3·or·4·arguments·in·case·the·DER·encoded |
| 3210 | version·is·needed·by·the·callback.</p><p>If·the·verify·callback·fun·returns·<code·class="inline">{fail,·Reason}</code>,·the·verification·process | 3210 | version·is·needed·by·the·callback.</p><p>If·the·verify·callback·fun·returns·<code·class="inline">{fail,·Reason}</code>,·the·verification·process |
| 3211 | is·immediately·stopped.·If·the·verify·callback·fun·returns | 3211 | is·immediately·stopped.·If·the·verify·callback·fun·returns |
| 3212 | <code·class="inline">{valid,·UserState}</code>,·the·verification·process·is·continued.·This·can·be·used | 3212 | <code·class="inline">{valid,·UserState}</code>,·the·verification·process·is·continued.·This·can·be·used |
| 3213 | to·accept·specific·path·validation·errors,·such·as·<code·class="inline">selfsigned_peer</code>,·as·well | 3213 | to·accept·specific·path·validation·errors,·such·as·<code·class="inline">selfsigned_peer</code>,·as·well |
| 3214 | as·verifying·application-specific·extensions.·If·called·with·an·extension | 3214 | as·verifying·application-specific·extensions.·If·called·with·an·extension |
| 3215 | unknown·to·the·user·application,·the·return·value·<code·class="inline">{unknown,·UserState}</code>·is·to | 3215 | unknown·to·the·user·application,·the·return·value·<code·class="inline">{unknown,·UserState}</code>·is·to |
| 3216 | be·used.</p><blockquote><h4·class="note">Note</h4><p>If·you·need·the·DER·encoded·version·of·the·certificate·and·have | 3216 | be·used.</p><blockquote><h4·class="note">Note</h4><p>If·you·need·the·DER·encoded·version·of·the·certificate·and·have |
| Offset 3366, 17 lines modified | Offset 3366, 17 lines modified | ||
| 3366 | certificate·is·in·agreement·with·at·least·one·of·the·<em>Reference·Identifier</em>·that | 3366 | certificate·is·in·agreement·with·at·least·one·of·the·<em>Reference·Identifier</em>·that |
| 3367 | the·client·expects·to·be·connected·to.</p><p>The·function·is·intended·to·be·added·as·an·extra·client·check·of·the | 3367 | the·client·expects·to·be·connected·to.</p><p>The·function·is·intended·to·be·added·as·an·extra·client·check·of·the |
| 3368 | peer·certificate·when·performing | 3368 | peer·certificate·when·performing |
| 3369 | <a·href="#pkix_path_validation/3">public_key:pkix_path_validation/3</a></p><p>See·<a·href="https://tools.ietf.org/html/rfc6125">RFC·6125</a>·for·detailed·information | 3369 | <a·href="#pkix_path_validation/3">public_key:pkix_path_validation/3</a></p><p>See·<a·href="https://tools.ietf.org/html/rfc6125">RFC·6125</a>·for·detailed·information |
| 3370 | about·hostname·verification.·The | 3370 | about·hostname·verification.·The |
| 3371 | <a·href="using_public_key.html#verify_hostname">User's·Guide</a>·and | 3371 | <a·href="using_public_key.html#verify_hostname">User's·Guide</a>·and |
| 3372 | <a·href="using_public_key.html#verify_hostname_examples">code·examples</a>·describes·this | 3372 | <a·href="using_public_key.html#verify_hostname_examples">code·examples</a>·describes·this |
| 3373 | function·more·detailed.</p><p>The·option·funs·are·described·here:</p><ul><li><p><strong><code·class="inline">match_fun</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="1647942794-1">(</span><span·class="n">ReferenceId</span><span·class="p">:</span><span·class="p">:</span><span·class="n">ReferenceId</span><span·class="p"·data-group-id="1647942794-2">(</span><span·class="p"·data-group-id="1647942794-2">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">FQDN</span><span·class="p">:</span><span·class="p">:</span><span·class="nf">string</span><span·class="p"·data-group-id="1647942794-3">(</span><span·class="p"·data-group-id="1647942794-3">)</span><span·class="p">,</span><span·class="w"> | ||
| 3374 | 3373 | function·more·detailed.</p><p>The·option·funs·are·described·here:</p><ul><li><p><strong><code·class="inline">match_fun</code></strong></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="0096064123-1[·...·truncated·by·diffoscope;·len:·532,·SHA:·9c00bdaf956ebf3a39f8e73452a07adcb60342a54da25883a5d4fa1054bfb2ee·...·]</span><span·class="w"> | |
| 3374 | ····</span><span·class="n">PresentedId</span><span·class="p">:</span><span·class="p">:</span><span·class="p"·data-group-id="0096064123-4">{</span><span·class="ss">dNSName</span><span·class="p">,</span><span·class="nf">string</span><span·class="p"·data-group-id="0096064123-5">(</span><span·class="p"·data-group-id="0096064123-5">)</span><span·class="p"·data-group-id="0096064123-4">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="0096064123-6">{</span><span·class="ss">uniformResourceIdentifier</span><span·class="p">,</span><span·class="nf">string</span><span·class="p"·data-group-id="0096064123-7">(</span><span·class="p"·data-group-id="0096064123-7">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 3375 | ·················</span><span·class="p"·data-group-id=" | 3375 | ·················</span><span·class="p"·data-group-id="0096064123-8">{</span><span·class="ss">iPAddress</span><span·class="p">,</span><span·class="nf">list</span><span·class="p"·data-group-id="0096064123-9">(</span><span·class="nf">byte</span><span·class="p"·data-group-id="0096064123-10">(</span><span·class="p[·...·truncated·by·diffoscope;·len:·953,·SHA:·2b6d52db92cd47330a53553cb6b4132f383020bb8e447d4dbb73d32baecd2c8c·...·]-1">)</span></code></pre><p>This·function·replaces·the·default·host·name·matching·rules.·The·fun·should |
| 3376 | return·a·boolean·to·tell·if·the·Reference·ID·and·Presented·ID·matches·or·not. | 3376 | return·a·boolean·to·tell·if·the·Reference·ID·and·Presented·ID·matches·or·not. |
| 3377 | The·match·fun·can·also·return·a·third·value,·value,·the·atom·<code·class="inline">default</code>,·if·the | 3377 | The·match·fun·can·also·return·a·third·value,·value,·the·atom·<code·class="inline">default</code>,·if·the |
| 3378 | default·matching·rules·shall·apply.·This·makes·it·possible·to·augment·the | 3378 | default·matching·rules·shall·apply.·This·makes·it·possible·to·augment·the |
| 3379 | tests·with·a·special·case:</p><pre><code·class="text">fun(....)·->·true;···%·My·special·case | 3379 | tests·with·a·special·case:</p><pre><code·class="text">fun(....)·->·true;···%·My·special·case |
| 3380 | ···(_,·_)·->·default·%·all·others·falls·back·to·the·inherit·tests | 3380 | ···(_,·_)·->·default·%·all·others·falls·back·to·the·inherit·tests |
| 3381 | end</code></pre><p>See·<a·href="#pkix_verify_hostname_match_fun/1"><code·class="inline">pkix_verify_hostname_match_fun/1</code></a>·for·a·function·that·takes·a·protocol | 3381 | end</code></pre><p>See·<a·href="#pkix_verify_hostname_match_fun/1"><code·class="inline">pkix_verify_hostname_match_fun/1</code></a>·for·a·function·that·takes·a·protocol |
| 3382 | name·as·argument·and·returns·a·<code·class="inline">fun/2</code>·suitable·for·this·option·and | 3382 | name·as·argument·and·returns·a·<code·class="inline">fun/2</code>·suitable·for·this·option·and |
| Offset 3560, 22 lines modified | Offset 3560, 22 lines modified | ||
| 3560 | ····································revocation_status_undetermined·| | 3560 | ····································revocation_status_undetermined·| |
| 3561 | ····································{revocation_status_undetermined,·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()}·| | 3561 | ····································{revocation_status_undetermined,·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()}·| |
| 3562 | ····································{revoked,·<a·href="#t:crl_reason/0">crl_reason</a>()}.</pre> | 3562 | ····································{revoked,·<a·href="#t:crl_reason/0">crl_reason</a>()}.</pre> |
| 3563 | ······</div> | 3563 | ······</div> |
| 3564 | <p>Performs·CRL·validation.·It·is·intended·to·be·called·from·the·verify·fun·of | 3564 | <p>Performs·CRL·validation.·It·is·intended·to·be·called·from·the·verify·fun·of |
| 3565 | <a·href="#pkix_path_validation/3">pkix_path_validation/3·</a>.</p><p>Available·options:</p><ul><li><p><strong>{update_crl,·fun()}</strong>·-·The·fun·has·the·following·type·specification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 3565 | <a·href="#pkix_path_validation/3">pkix_path_validation/3·</a>.</p><p>Available·options:</p><ul><li><p><strong>{update_crl,·fun()}</strong>·-·The·fun·has·the·following·type·specification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7053105173-1">(</span><span·class="o">#</span><span·class="ss">'DistributionPoint'</span><span·class="p"·data-group-id="7053105173-2">{</span><span·class="p"·data-group-id="7053105173-2">}</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·215,·SHA:·1b7547db4716d1c44cf3cffc0f735c2ce6a981497eaeee7db5740a02518d937e·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 3566 | ········</span><span·class="o">#</span><span·class="ss">'CertificateList'</span><span·class="p"·data-group-id=" | 3566 | ········</span><span·class="o">#</span><span·class="ss">'CertificateList'</span><span·class="p"·data-group-id="7053105173-4">{</span><span·class="p"·data-group-id="7053105173-4">}</span></code></pre><p>The·fun·uses·the·information·in·the·distribution·point·to·access·the·latest |
| 3567 | possible·version·of·the·CRL.·If·this·fun·is·not·specified,·Public·Key·uses·the | 3567 | possible·version·of·the·CRL.·If·this·fun·is·not·specified,·Public·Key·uses·the |
| 3568 | default·implementation:</p><pre><code·class="text">·fun(_DP,·CRL)·->·CRL·end</code></pre></li><li><p><strong>{issuer_fun,·{fun(),·UserState::term()}}</strong>·-·The·fun·has·the·following·type | 3568 | default·implementation:</p><pre><code·class="text">·fun(_DP,·CRL)·->·CRL·end</code></pre></li><li><p><strong>{issuer_fun,·{fun(),·UserState::term()}}</strong>·-·The·fun·has·the·following·type |
| 3569 | specification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 3569 | specification:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="8442834252-1">(</span><span·class="o">#</span><span·class="ss">'DistributionPoint'</span><span·class="p"·data-group-id="8442834252-2">{</span><span·class="p"·data-group-id="8442834252-2">}</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·162,·SHA:·cd17512dfa954b609cf8aa460676e4ba99a1d074568ead0a32939ddb26aec802·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 3570 | ····</span><span·class="p"·data-group-id="1963487795-4">{</span><span·class="ss">rdnSequence</span><span·class="p">,</span><span·class="p"·data-group-id="1963487795-5">[</span><span·class="o">#</span><span·class="ss">'AttributeTypeAndValue'</span><span·class="p"·data-group-id="1963487795-6">{</span><span·class="p"·data-group-id="1963487795-6">}</span><span·class="p"·data-group-id="1963487795-5">]</span><span·class="p"·data-group-id="1963487795-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="p">:</span><span·class="p">:</span><span·class="nf">term</span><span·class="p"·data-group-id="1963487795-7">(</span><span·class="p"·data-group-id="1963487795-7">)</span><span·class="p"·data-group-id="1963487795-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 3571 | ··</span><span·class="p"·data-group-id=" | 3570 | ····</span><span·class="p"·data-group-id="8442834252-4">{</span><span·class="ss">rdnSequence</span><span·class="p">,</span><span·class="p"·data-group-id="8442834252-5">[</span><span·class="o">#</span><span·class="ss">'AttributeTypeAndValue'</span><sp[·...·truncated·by·diffoscope;·len:·592,·SHA:·1fdc44d12c3dbefabf7a1306f9ef0a54946a4073d7d5f1f8bab5743411c422fc·...·] |
| 3571 | ··</span><span·class="p"·data-group-id="8442834252-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'OTPCertificate'</span><span·class="p"·data-group-id="8442834252-9">{</span><span·class="p"·data-group-id="8442834252-9">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8442834252-10">[</span><span·class="ss">der_encoded</span><span·class="p"·data-group-id="8442834252-10">]</span><span·class="p"·data-group-id="8442834252-8">}</span></code></pre><p>The·fun·returns·the·root·certificate·and·certificate·chain·that·has·signed·the | ||
| 3572 | CRL.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2 | 3572 | CRL.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2186522601-1">(</span><span·class="n">DP</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CRL</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Issuer</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·429,·SHA:·2f0bc69810499bd3a0e2c7d71835ddb93e4d100abbe076708da055add0dcf016·...·]-2">}</span></code></pre></li><li><p><strong>{undetermined_details,·boolean()}</strong>·-·Defaults·to·false.·When·revocation |
| 3573 | status·cannot·be·determined,·and·this·option·is·set·to·true,·details·of·why·no | 3573 | status·cannot·be·determined,·and·this·option·is·set·to·true,·details·of·why·no |
| 3574 | CRLs·where·accepted·are·included·in·the·return·value.</p></li></ul> | 3574 | CRLs·where·accepted·are·included·in·the·return·value.</p></li></ul> |
| 3575 | ··</section> | 3575 | ··</section> |
| 3576 | </section> | 3576 | </section> |
| 3577 | <section·class="detail"·id="pkix_dist_point/1"> | 3577 | <section·class="detail"·id="pkix_dist_point/1"> |
| 3578 | ··<div·class="detail-header"> | 3578 | ··<div·class="detail-header"> |
| Offset 3899, 26 lines modified | Offset 3899, 26 lines modified | ||
| 3899 | certificate,·but·makes·the·certificate·useful·for·both·roles.</p><p>Explanation·of·the·options·used·to·customize·certificates·in·the·generated | 3899 | certificate,·but·makes·the·certificate·useful·for·both·roles.</p><p>Explanation·of·the·options·used·to·customize·certificates·in·the·generated |
| 3900 | chains:</p><ul><li><p><strong>{digest,·digest_type()}</strong>·-·Hash·algorithm·to·be·used·for·signing·the | 3900 | chains:</p><ul><li><p><strong>{digest,·digest_type()}</strong>·-·Hash·algorithm·to·be·used·for·signing·the |
| 3901 | certificate·together·with·the·key·option.·Defaults·to·sha·that·is·sha1.</p></li><li><p><strong>{key,··ec_params()|·{rsa,·Size:pos_integer(),·Prime::pos_integer()}·|·private_key()}</strong>·-·Parameters·to·be·used·to·call | 3901 | certificate·together·with·the·key·option.·Defaults·to·sha·that·is·sha1.</p></li><li><p><strong>{key,··ec_params()|·{rsa,·Size:pos_integer(),·Prime::pos_integer()}·|·private_key()}</strong>·-·Parameters·to·be·used·to·call |
| 3902 | public_key:generate_key/1,·to·generate·a·key,·or·an·existing·key.·Defaults·to | 3902 | public_key:generate_key/1,·to·generate·a·key,·or·an·existing·key.·Defaults·to |
| 3903 | generating·an·ECDSA·key.·Note·this·could·fail·if·Erlang/OTP·is·compiled·with·a | 3903 | generating·an·ECDSA·key.·Note·this·could·fail·if·Erlang/OTP·is·compiled·with·a |
| 3904 | very·old·cryptolib.</p></li><li><p><strong>{validity,·{From::erlang:timestamp(),·To::erlang:timestamp()}}</strong>·-·The | 3904 | very·old·cryptolib.</p></li><li><p><strong>{validity,·{From::erlang:timestamp(),·To::erlang:timestamp()}}</strong>·-·The |
| 3905 | validity·period·of·the·certificate.</p></li><li><p><strong>{extensions,·[#'Extension'{}]}</strong>·-·Extensions·to·include·in·the | 3905 | validity·period·of·the·certificate.</p></li><li><p><strong>{extensions,·[#'Extension'{}]}</strong>·-·Extensions·to·include·in·the |
| 3906 | certificate.</p><p>Default·extensions·included·in·CA·certificates·if·not·otherwise·specified·are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9 | 3906 | certificate.</p><p>Default·extensions·included·in·CA·certificates·if·not·otherwise·specified·are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9346063227-1">[</span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="9346063227-2">{</span><span·class="ss">extnID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">'id-ce-keyUsage'</span><span·class="p">,</span><span·class="w"> |
| 3907 | ··············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 3907 | ··············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9346063227-3">[</span><span·class="ss">keyCertSign</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">cRLSign</span><span·class="p"·data-group-id="9346063227-3">]</span><span·class="p">,</span><span·class="w"> |
| 3908 | ··············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="9 | 3908 | ··············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="9346063227-2">}</span><span·class="p">,</span><span·class="w"> |
| 3909 | </span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="9 | 3909 | </span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="9346063227-4">{</span><span·class="ss">extnID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">'id-ce-basicConstraints'</span><span·class="p">,</span><span·class="w"> |
| 3910 | ·············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'BasicConstraints'</span><span·class="p"·data-group-id="9 | 3910 | ·············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'BasicConstraints'</span><span·class="p"·data-group-id="9346063227-5">{</span><span·class="ss">cA</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="9346063227-5">}</span><span·class="p">,</span><span·class="w"> |
| 3911 | ·············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="9 | 3911 | ·············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="9346063227-4">}</span><span·class="p"·data-group-id="9346063227-1">]</span></code></pre><p>Default·extensions·included·in·the·server·peer·cert·if·not·otherwise·specified |
| 3912 | are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 3912 | are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7073658648-1">[</span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="7073658648-2">{</span><span·class="ss">extnID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">'id-ce-keyUsage'</span><span·class="p">,</span><span·class="w"> |
| 3913 | ··············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 3913 | ··············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7073658648-3">[</span><span·class="ss">digitalSignature</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">keyAgreement</span><span·class="p"·data-group-id="7073658648-3">]</span><span·class="p">,</span><span·class="w"> |
| 3914 | ··············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id=" | 3914 | ··············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="7073658648-2">}</span><span·class="p">,</span><span·class="w"> |
| 3915 | </span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id=" | 3915 | </span><span·class="o">#</span><span·class="ss">'Extension'</span><span·class="p"·data-group-id="7073658648-4">{</span><span·class="ss">extnID</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">'id-ce-subjectAltName'</span><span·class="p">,</span><span·class="w"> |
| 3916 | ·············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 3916 | ·············</span><span·class="ss">extnValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7073658648-5">[</span><span·class="p"·data-group-id="7073658648-6">{</span><span·class="ss">dNSName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Hostname</span><span·class="p"·data-group-id="7073658648-6">}</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·22,·SHA:·4c32675f905268b696496c79390f43403e527652873607926fd3203e3ae54455·...·]8-5">]</span><span·class="p">,</span><span·class="w"> |
| 3917 | ·············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id=" | 3917 | ·············</span><span·class="ss">critical</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="7073658648-4">}</span><span·class="p"·data-group-id="7073658648-1">]</span></code></pre><p>Hostname·is·the·result·of·calling·net_adm:localhost()·in·the·Erlang·node·where |
| 3918 | this·function·is·called.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Note·that·the·generated·certificates·and·keys·does·not·provide·a·formally | 3918 | this·function·is·called.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Note·that·the·generated·certificates·and·keys·does·not·provide·a·formally |
| 3919 | correct·PKIX-trust-chain·and·they·cannot·be·used·to·achieve·real·security. | 3919 | correct·PKIX-trust-chain·and·they·cannot·be·used·to·achieve·real·security. |
| 3920 | This·function·is·provided·for·testing·purposes·only.</p></section> | 3920 | This·function·is·provided·for·testing·purposes·only.</p></section> |
| 3921 | ··</section> | 3921 | ··</section> |
| 3922 | </section> | 3922 | </section> |
| 3923 | <section·class="detail"·id="pkix_test_root_cert/2"> | 3923 | <section·class="detail"·id="pkix_test_root_cert/2"> |
| Offset 4244, 15 lines modified | Offset 4244, 15 lines modified | ||
| 4244 | ······<p·class="built-using"> | 4244 | ······<p·class="built-using"> |
| 4245 | ········Built·using | 4245 | ········Built·using |
| 4246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 4246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 4247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 4247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 4248 | ······</p> | 4248 | ······</p> |
| 4249 | <p>Copyright·©·1996-202 | 4249 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 4250 | ····</footer> | 4250 | ····</footer> |
| 4251 | ··</div> | 4251 | ··</div> |
| 4252 | </main> | 4252 | </main> |
| 4253 | </div> | 4253 | </div> |
| 4254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 4254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 4255 | ··<script> | 4255 | ··<script> |
| 4256 | ··let·initialized·=·false; | 4256 | ··let·initialized·=·false; |
| Offset 221, 15 lines modified | Offset 221, 15 lines modified | ||
| 221 | ······<p·class="built-using"> | 221 | ······<p·class="built-using"> |
| 222 | ········Built·using | 222 | ········Built·using |
| 223 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 223 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 224 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 224 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 225 | ······</p> | 225 | ······</p> |
| 226 | <p>Copyright·©·1996-202 | 226 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 227 | ····</footer> | 227 | ····</footer> |
| 228 | ··</div> | 228 | ··</div> |
| 229 | </main> | 229 | </main> |
| 230 | </div> | 230 | </div> |
| 231 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 231 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 232 | ··<script> | 232 | ··<script> |
| 233 | ··let·initialized·=·false; | 233 | ··let·initialized·=·false; |
| Offset 125, 428 lines modified | Offset 125, 428 lines modified | ||
| 125 | ····<span>Public-Key·Records</span> | 125 | ····<span>Public-Key·Records</span> |
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | <p>This·chapter·briefly·describes·Erlang·records·derived·from·ASN.1·specifications | 127 | <p>This·chapter·briefly·describes·Erlang·records·derived·from·ASN.1·specifications |
| 128 | used·to·handle·public·key·infrastructure.·The·scope·is·to·describe·the·data | 128 | used·to·handle·public·key·infrastructure.·The·scope·is·to·describe·the·data |
| 129 | types·of·each·component,·not·the·semantics.·For·information·on·the·semantics, | 129 | types·of·each·component,·not·the·semantics.·For·information·on·the·semantics, |
| 130 | refer·to·the·relevant·standards·and·RFCs·linked·in·the·sections·below.</p><p>Use·the·following·include·directive·to·get·access·to·the·records·and·constant | 130 | refer·to·the·relevant·standards·and·RFCs·linked·in·the·sections·below.</p><p>Use·the·following·include·directive·to·get·access·to·the·records·and·constant |
| 131 | macros·described·in·the·following·sections:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 131 | macros·described·in·the·following·sections:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="4397557909-1">(</span><span·class="s">"public_key/include/public_key.hrl"</span><span·class="p"·data-group-id="4397557909-1">)</span><span·class="p">.</span></code></pre><h2·id="data-types"·class="section-heading"> |
| 132 | ··<a·href="#data-types"·class="hover-link"> | 132 | ··<a·href="#data-types"·class="hover-link"> |
| 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 134 | ··</a> | 134 | ··</a> |
| 135 | ··<span·class="text">Data·Types</span> | 135 | ··<span·class="text">Data·Types</span> |
| 136 | </h2> | 136 | </h2> |
| 137 | <p>Common·non-standard·Erlang·data·types·used·to·describe·the·record·fields·in·the | 137 | <p>Common·non-standard·Erlang·data·types·used·to·describe·the·record·fields·in·the |
| 138 | following·sections·and·which·are·not·defined·in·the·Public·Key | 138 | following·sections·and·which·are·not·defined·in·the·Public·Key |
| 139 | <a·href="public_key.html">Reference·Manual</a>·follows·here:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">time</span><span·class="p"·data-group-id=" | 139 | <a·href="public_key.html">Reference·Manual</a>·follows·here:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">time</span><span·class="p"·data-group-id="3347787479-1">(</span><span·class="p"·data-group-id="3347787479-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">utc_time</span><span·class="p"·data-group-id="3347787479-2">(</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·231,·SHA:·bdb221b4f0e1a7b3e962229b574efb7f53331632f56e5c01c8c811b56cae8016·...·]-3">)</span><span·class="w"> |
| 140 | </span><span·class="nf">utc_time</span><span·class="p"·data-group-id=" | 140 | </span><span·class="nf">utc_time</span><span·class="p"·data-group-id="3347787479-4">(</span><span·class="p"·data-group-id="3347787479-4">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3347787479-5">{</span><span·class="ss">utcTime</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·113,·SHA:·40617b66b615721f066ffe142f4fefaaee115633648195947f4185e146bbda00·...·]-5">}</span><span·class="w"> |
| 141 | </span><span·class="nf">general_time</span><span·class="p"·data-group-id=" | 141 | </span><span·class="nf">general_time</span><span·class="p"·data-group-id="3347787479-6">(</span><span·class="p"·data-group-id="3347787479-6">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3347787479-7">{</span><span·class="ss">generalTime</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·118,·SHA:·359bdcc5d41319f3cc6028ec1ecf3ffa459f877ecd67c54e6ba9ac362fada88d·...·]-7">}</span><span·class="w"> |
| 142 | </span><span·class="nf">general_name</span><span·class="p"·data-group-id=" | 142 | </span><span·class="nf">general_name</span><span·class="p"·data-group-id="3347787479-8">(</span><span·class="p"·data-group-id="3347787479-8">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3347787479-9">{</span><span·class="ss">rfc822Name</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·205,·SHA:·4223b95c3f8a620088a239850c2988cb21178e482d97c9e54581bbc5935f4e33·...·]-9">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 143 | ·················</span><span·class="p"·data-group-id=" | 143 | ·················</span><span·class="p"·data-group-id="3347787479-11">{</span><span·class="ss">dNSName</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-12">(</span><span·class="p"·data-group-id="3347787479-12">)</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·185839fb043407e847785aea5be1401b05b94ffe510c67c14317892a4facf03a·...·]-11">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 144 | ·················</span><span·class="p"·data-group-id=" | 144 | ·················</span><span·class="p"·data-group-id="3347787479-13">{</span><span·class="ss">x400Address</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-14">(</span><span·class="p"·data-group-id="3347787479-14">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 145 | ·················</span><span·class="p"·data-group-id=" | 145 | ·················</span><span·class="p"·data-group-id="3347787479-15">{</span><span·class="ss">directoryName</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3347787479-16">{</span><span·class="ss">rdnSequence</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·379,·SHA:·ae57e0d2480be8357c8272055431a07ba93ae0efd5b1df3096dd0d0738d6bb4c·...·]-15">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 146 | ·················</span><span·class="p"·data-group-id=" | 146 | ·················</span><span·class="p"·data-group-id="3347787479-19">{</span><span·class="ss">ediPartyName</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">special_string</span><span·class="p"·data-group-id="3347787479-20">(</span><span·class="p"·data-group-id="3347787479-20">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·4eaf1d22dd2cd6e7de612d3a9dc4ffc3a043753eb06f2dea74b92ead2c9cb223·...·]-19">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 147 | ·················</span><span·class="p"·data-group-id=" | 147 | ·················</span><span·class="p"·data-group-id="3347787479-21">{</span><span·class="ss">ediPartyName</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">special_string</span><span·class="p"·data-group-id="3347787479-22">(</span><span·class="p"·data-group-id="3347787479-22">)</span><sp[·...·truncated·by·diffoscope;·len:·232,·SHA:·0e772b6e4a05325387c5464614e6a6b090f17e2b95448db26cef49636897f341·...·]-21">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 148 | ·················</span><span·class="p"·data-group-id=" | 148 | ·················</span><span·class="p"·data-group-id="3347787479-24">{</span><span·class="ss">uniformResourceIdentifier</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-25">(</span><span·class="p"·data-group-id="3347787479-25">)</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·3d7bf66556b162bf367fa87ce34edaba270c79c7f9dd36abf366618319845494·...·]-24">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 149 | ·················</span><span·class="p"·data-group-id=" | 149 | ·················</span><span·class="p"·data-group-id="3347787479-26">{</span><span·class="ss">iPAddress</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-27">(</span><span·class="p"·data-group-id="3347787479-27">)</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·d279487447c8d4ed22ae0ef24ace5357d330759a92bada90dfcd7e24aa76234f·...·]-26">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 150 | ·················</span><span·class="p"·data-group-id=" | 150 | ·················</span><span·class="p"·data-group-id="3347787479-28">{</span><span·class="ss">registeredId</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">oid</span><span·class="p"·data-group-id="3347787479-29">(</span><span·class="p"·data-group-id="3347787479-29">)</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·d279487447c8d4ed22ae0ef24ace5357d330759a92bada90dfcd7e24aa76234f·...·]-28">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 151 | ·················</span><span·class="p"·data-group-id=" | 151 | ·················</span><span·class="p"·data-group-id="3347787479-30">{</span><span·class="ss">otherName</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="3347787479-31">(</span><span·class="p"·data-group-id="3347787479-31">)</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·185839fb043407e847785aea5be1401b05b94ffe510c67c14317892a4facf03a·...·]-30">}</span><span·class="w"> |
| 152 | </span><span·class="nf">special_string</span><span·class="p"·data-group-id=" | 152 | </span><span·class="nf">special_string</span><span·class="p"·data-group-id="3347787479-32">(</span><span·class="p"·data-group-id="3347787479-32">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3347787479-33">{</span><span·class="ss">teletexString</span><span·class="p">[·...·truncated·by·diffoscope;·len:·211,·SHA:·c88cbabc82d045b7d8306901edfb574b55e9185670fcc6bda7a90ab3fc9c2a6c·...·]-33">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 153 | · | 153 | · |
| 154 | ···················</span><span·class="p"·data-group-id=" | 154 | ···················</span><span·class="p"·data-group-id="3347787479-35">{</span><span·class="ss">printableString</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-36">(</span><span·class="p"·data-group-id="3347787479-36">)</span><span·cl[·...·truncated·by·diffoscope;·len:·33,·SHA:·34a57b940ec97ed0f5173892ca31d3448204a5fa58ce526efcf38166409d4a96·...·]-35">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 155 | ···················</span><span·class="p"·data-group-id=" | 155 | ···················</span><span·class="p"·data-group-id="3347787479-37">{</span><span·class="ss">universalString</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-38">(</span><span·class="p"·data-group-id="3347787479-38">)</span><span·cl[·...·truncated·by·diffoscope;·len:·33,·SHA:·34a57b940ec97ed0f5173892ca31d3448204a5fa58ce526efcf38166409d4a96·...·]-37">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 156 | ···················</span><span·class="p"·data-group-id=" | 156 | ···················</span><span·class="p"·data-group-id="3347787479-39">{</span><span·class="ss">utf8String</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="3347787479-40">(</span><span·class="p"·data-group-id="3347787479-40">)</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·be779dbb9620f2cdcb62a04917e73b3c7d6b2c13de44b53dce1e588a1f68fd91·...·]-39">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 157 | ···················</span><span·class="p"·data-group-id=" | 157 | ···················</span><span·class="p"·data-group-id="3347787479-41">{</span><span·class="ss">bmpString</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="3347787479-42">(</span><span·class="p"·data-group-id="3347787479-42">)</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·d279487447c8d4ed22ae0ef24ace5357d330759a92bada90dfcd7e24aa76234f·...·]-41">}</span><span·class="w"> |
| 158 | </span><span·class="nf">dist_reason</span><span·class="p"·data-group-id=" | 158 | </span><span·class="nf">dist_reason</span><span·class="p"·data-group-id="3347787479-43">(</span><span·class="p"·data-group-id="3347787479-43">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">unused</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">keyCompromise</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">cACompromise</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">affiliationChanged</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 159 | ················</span><span·class="ss">cessationOfOperation</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">certificateHold</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">privilegeWithdrawn</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">aACompromise</span><span·class="w"> | 159 | ················</span><span·class="ss">cessationOfOperation</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">certificateHold</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">privilegeWithdrawn</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">aACompromise</span><span·class="w"> |
| 160 | </span><span·class="n">OID_macro</span><span·class="p"·data-group-id=" | 160 | </span><span·class="n">OID_macro</span><span·class="p"·data-group-id="3347787479-44">(</span><span·class="p"·data-group-id="3347787479-44">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">OID_name</span><span·class="p"·data-group-id="3347787479-45">(</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·3d7bf66556b162bf367fa87ce34edaba270c79c7f9dd36abf366618319845494·...·]-45">)</span><span·class="w"> |
| 161 | </span><span·class="n">OID_name</span><span·class="p"·data-group-id=" | 161 | </span><span·class="n">OID_name</span><span·class="p"·data-group-id="3347787479-46">(</span><span·class="p"·data-group-id="3347787479-46">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="3347787479-47">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·76dbb4df24bf4d06359a446bd17fff3d17723d082952c3adb989eb5831de9954·...·]-47">)</span></code></pre><h2·id="rsa"·class="section-heading"> |
| 162 | ··<a·href="#rsa"·class="hover-link"> | 162 | ··<a·href="#rsa"·class="hover-link"> |
| 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 163 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 164 | ··</a> | 164 | ··</a> |
| 165 | ··<span·class="text">RSA</span> | 165 | ··<span·class="text">RSA</span> |
| 166 | </h2> | 166 | </h2> |
| 167 | <p>Erlang·representation·of | 167 | <p>Erlang·representation·of |
| 168 | <a·href="http://www.ietf.org/rfc/rfc3447.txt">Rivest-Shamir-Adleman·cryptosystem·(RSA)</a> | 168 | <a·href="http://www.ietf.org/rfc/rfc3447.txt">Rivest-Shamir-Adleman·cryptosystem·(RSA)</a> |
| 169 | keys·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">'RSAPublicKey'</span><span·class="p"·data-group-id=" | 169 | keys·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">'RSAPublicKey'</span><span·class="p"·data-group-id="5209454297-1">{</span><span·class="w"> |
| 170 | ···</span><span·class="ss">modulus</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 170 | ···</span><span·class="ss">modulus</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 171 | ···</span><span·class="ss">publicExponent</span><span·class="w">·</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 171 | ···</span><span·class="ss">publicExponent</span><span·class="w">·</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 172 | ··</span><span·class="p"·data-group-id=" | 172 | ··</span><span·class="p"·data-group-id="5209454297-1">}</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="o">#</span><span·class="ss">'RSAPrivateKey'</span><span·class="p"·data-group-id=" | 173 | </span><span·class="o">#</span><span·class="ss">'RSAPrivateKey'</span><span·class="p"·data-group-id="5209454297-2">{</span><span·class="w"> |
| 174 | ···</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·two-prime·|·multi</span><span·class="w"> | 174 | ···</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·two-prime·|·multi</span><span·class="w"> |
| 175 | ···</span><span·class="ss">modulus</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 175 | ···</span><span·class="ss">modulus</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 176 | ···</span><span·class="ss">publicExponent</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 176 | ···</span><span·class="ss">publicExponent</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 177 | ···</span><span·class="ss">privateExponent</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 177 | ···</span><span·class="ss">privateExponent</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 178 | ···</span><span·class="ss">prime1</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 178 | ···</span><span·class="ss">prime1</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 179 | ···</span><span·class="ss">prime2</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 179 | ···</span><span·class="ss">prime2</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 180 | ···</span><span·class="ss">exponent1</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 180 | ···</span><span·class="ss">exponent1</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 181 | ···</span><span·class="ss">exponent2</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 181 | ···</span><span·class="ss">exponent2</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 182 | ···</span><span·class="ss">coefficient</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 182 | ···</span><span·class="ss">coefficient</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 183 | ···</span><span·class="ss">otherPrimeInfos</span><span·class="w">··</span><span·class="c1">%·[#OtherPrimeInfo{}]·|·asn1_NOVALUE</span><span·class="w"> | 183 | ···</span><span·class="ss">otherPrimeInfos</span><span·class="w">··</span><span·class="c1">%·[#OtherPrimeInfo{}]·|·asn1_NOVALUE</span><span·class="w"> |
| 184 | ··</span><span·class="p"·data-group-id=" | 184 | ··</span><span·class="p"·data-group-id="5209454297-2">}</span><span·class="p">.</span><span·class="w"> |
| 185 | </span><span·class="o">#</span><span·class="ss">'OtherPrimeInfo'</span><span·class="p"·data-group-id=" | 185 | </span><span·class="o">#</span><span·class="ss">'OtherPrimeInfo'</span><span·class="p"·data-group-id="5209454297-3">{</span><span·class="w"> |
| 186 | ···</span><span·class="ss">prime</span><span·class="p">,</span><span·class="w">···········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 186 | ···</span><span·class="ss">prime</span><span·class="p">,</span><span·class="w">···········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 187 | ···</span><span·class="ss">exponent</span><span·class="p">,</span><span·class="w">········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 187 | ···</span><span·class="ss">exponent</span><span·class="p">,</span><span·class="w">········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 188 | ···</span><span·class="ss">coefficient</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 188 | ···</span><span·class="ss">coefficient</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 189 | ··</span><span·class="p"·data-group-id=" | 189 | ··</span><span·class="p"·data-group-id="5209454297-3">}</span><span·class="p">.</span><span·class="w"> |
| 190 | </span><span·class="o">#</span><span·class="ss">'RSASSA-PSS-params'</span><span·class="p"·data-group-id=" | 190 | </span><span·class="o">#</span><span·class="ss">'RSASSA-PSS-params'</span><span·class="p"·data-group-id="5209454297-4">{</span><span·class="w"> |
| 191 | ···</span><span·class="ss">hashAlgorithm</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%·#'HashAlgorithm'{}},</span><span·class="w"> | 191 | ···</span><span·class="ss">hashAlgorithm</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%·#'HashAlgorithm'{}},</span><span·class="w"> |
| 192 | ···</span><span·class="ss">maskGenAlgorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·#'MaskGenAlgorithm'{}},</span><span·class="w"> | 192 | ···</span><span·class="ss">maskGenAlgorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·#'MaskGenAlgorithm'{}},</span><span·class="w"> |
| 193 | ···</span><span·class="ss">saltLength</span><span·class="p">,</span><span·class="w">········</span><span·class="c1">%·pos_integer(),</span><span·class="w"> | 193 | ···</span><span·class="ss">saltLength</span><span·class="p">,</span><span·class="w">········</span><span·class="c1">%·pos_integer(),</span><span·class="w"> |
| 194 | ···</span><span·class="ss">trailerField</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 194 | ···</span><span·class="ss">trailerField</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 195 | ··</span><span·class="p"·data-group-id=" | 195 | ··</span><span·class="p"·data-group-id="5209454297-4">}</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="o">#</span><span·class="ss">'HashAlgorithm'</span><span·class="p"·data-group-id=" | 196 | </span><span·class="o">#</span><span·class="ss">'HashAlgorithm'</span><span·class="p"·data-group-id="5209454297-5">{</span><span·class="w"> |
| 197 | ···</span><span·class="ss">algorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·oid()</span><span·class="w"> | 197 | ···</span><span·class="ss">algorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·oid()</span><span·class="w"> |
| 198 | ···</span><span·class="ss">parameters</span><span·class="w">··</span><span·class="c1">%·defaults·to·asn1_NOVALUE</span><span·class="w"> | 198 | ···</span><span·class="ss">parameters</span><span·class="w">··</span><span·class="c1">%·defaults·to·asn1_NOVALUE</span><span·class="w"> |
| 199 | ··</span><span·class="p"·data-group-id=" | 199 | ··</span><span·class="p"·data-group-id="5209454297-5">}</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="o">#</span><span·class="ss">'MaskGenAlgorithm'</span><span·class="p"·data-group-id=" | 200 | </span><span·class="o">#</span><span·class="ss">'MaskGenAlgorithm'</span><span·class="p"·data-group-id="5209454297-6">{</span><span·class="w"> |
| 201 | ···</span><span·class="ss">algorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·oid()</span><span·class="w"> | 201 | ···</span><span·class="ss">algorithm</span><span·class="p">,</span><span·class="w">··</span><span·class="c1">%·oid()</span><span·class="w"> |
| 202 | ···</span><span·class="ss">parameters</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·defaults·to·asn1_NOVALUE</span><span·class="w"> | 202 | ···</span><span·class="ss">parameters</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·defaults·to·asn1_NOVALUE</span><span·class="w"> |
| 203 | ··</span><span·class="p"·data-group-id=" | 203 | ··</span><span·class="p"·data-group-id="5209454297-6">}</span><span·class="p">.</span></code></pre><h2·id="dsa"·class="section-heading"> |
| 204 | ··<a·href="#dsa"·class="hover-link"> | 204 | ··<a·href="#dsa"·class="hover-link"> |
| 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 205 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 206 | ··</a> | 206 | ··</a> |
| 207 | ··<span·class="text">DSA</span> | 207 | ··<span·class="text">DSA</span> |
| 208 | </h2> | 208 | </h2> |
| 209 | <p>Erlang·representation·of | 209 | <p>Erlang·representation·of |
| 210 | <a·href="http://www.ietf.org/rfc/rfc6979.txt">Digital·Signature·Algorithm·(DSA)</a>·keys</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">'DSAPrivateKey'</span><span·class="p"·data-group-id=" | 210 | <a·href="http://www.ietf.org/rfc/rfc6979.txt">Digital·Signature·Algorithm·(DSA)</a>·keys</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">'DSAPrivateKey'</span><span·class="p"·data-group-id="3327080833-1">{</span><span·class="w"> |
| 211 | ···</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 211 | ···</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 212 | ···</span><span·class="ss">p</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 212 | ···</span><span·class="ss">p</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 213 | ···</span><span·class="ss">q</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 213 | ···</span><span·class="ss">q</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 214 | ···</span><span·class="ss">g</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 214 | ···</span><span·class="ss">g</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 215 | ···</span><span·class="ss">y</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 215 | ···</span><span·class="ss">y</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 216 | ···</span><span·class="ss">x</span><span·class="w">·············</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 216 | ···</span><span·class="ss">x</span><span·class="w">·············</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 217 | ··</span><span·class="p"·data-group-id=" | 217 | ··</span><span·class="p"·data-group-id="3327080833-1">}</span><span·class="p">.</span><span·class="w"> |
| 218 | </span><span·class="o">#</span><span·class="ss">'Dss-Parms'</span><span·class="p"·data-group-id=" | 218 | </span><span·class="o">#</span><span·class="ss">'Dss-Parms'</span><span·class="p"·data-group-id="3327080833-2">{</span><span·class="w"> |
| 219 | ···</span><span·class="ss">p</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 219 | ···</span><span·class="ss">p</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 220 | ···</span><span·class="ss">q</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 220 | ···</span><span·class="ss">q</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 221 | ···</span><span·class="ss">g</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> | 221 | ···</span><span·class="ss">g</span><span·class="w">··········</span><span·class="c1">%·pos_integer()</span><span·class="w"> |
| 222 | ··</span><span·class="p"·data-group-id=" | 222 | ··</span><span·class="p"·data-group-id="3327080833-2">}</span><span·class="p">.</span></code></pre><h2·id="ecdsa-and-eddsa"·class="section-heading"> |
| 223 | ··<a·href="#ecdsa-and-eddsa"·class="hover-link"> | 223 | ··<a·href="#ecdsa-and-eddsa"·class="hover-link"> |
| 224 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 224 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 225 | ··</a> | 225 | ··</a> |
| Max diff block lines reached; 66571/99050 bytes (67.21%) of diff not shown. | |||
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-AEF91FD2.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 181, 15 lines modified | Offset 181, 15 lines modified | ||
| 181 | ······<p·class="built-using"> | 181 | ······<p·class="built-using"> |
| 182 | ········Built·using | 182 | ········Built·using |
| 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 185 | ······</p> | 185 | ······</p> |
| 186 | <p>Copyright·©·1996-202 | 186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 187 | ····</footer> | 187 | ····</footer> |
| 188 | ··</div> | 188 | ··</div> |
| 189 | </main> | 189 | </main> |
| 190 | </div> | 190 | </div> |
| 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 192 | ··<script> | 192 | ··<script> |
| 193 | ··let·initialized·=·false; | 193 | ··let·initialized·=·false; |
| Offset 778, 15 lines modified | Offset 778, 15 lines modified | ||
| 778 | ······<p·class="built-using"> | 778 | ······<p·class="built-using"> |
| 779 | ········Built·using | 779 | ········Built·using |
| 780 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 780 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 781 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 781 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 782 | ······</p> | 782 | ······</p> |
| 783 | <p>Copyright·©·1996-202 | 783 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 784 | ····</footer> | 784 | ····</footer> |
| 785 | ··</div> | 785 | ··</div> |
| 786 | </main> | 786 | </main> |
| 787 | </div> | 787 | </div> |
| 788 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 788 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 789 | ··<script> | 789 | ··<script> |
| 790 | ··let·initialized·=·false; | 790 | ··let·initialized·=·false; |
| Offset 2747, 15 lines modified | Offset 2747, 15 lines modified | ||
| 2747 | ······<p·class="built-using"> | 2747 | ······<p·class="built-using"> |
| 2748 | ········Built·using | 2748 | ········Built·using |
| 2749 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2749 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2750 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2750 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2751 | ······</p> | 2751 | ······</p> |
| 2752 | <p>Copyright·©·1996-202 | 2752 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2753 | ····</footer> | 2753 | ····</footer> |
| 2754 | ··</div> | 2754 | ··</div> |
| 2755 | </main> | 2755 | </main> |
| 2756 | </div> | 2756 | </div> |
| 2757 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2757 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2758 | ··<script> | 2758 | ··<script> |
| 2759 | ··let·initialized·=·false; | 2759 | ··let·initialized·=·false; |
| Offset 208, 15 lines modified | Offset 208, 15 lines modified | ||
| 208 | ······<p·class="built-using"> | 208 | ······<p·class="built-using"> |
| 209 | ········Built·using | 209 | ········Built·using |
| 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 212 | ······</p> | 212 | ······</p> |
| 213 | <p>Copyright·©·1996-202 | 213 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 214 | ····</footer> | 214 | ····</footer> |
| 215 | ··</div> | 215 | ··</div> |
| 216 | </main> | 216 | </main> |
| 217 | </div> | 217 | </div> |
| 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 219 | ··<script> | 219 | ··<script> |
| 220 | ··let·initialized·=·false; | 220 | ··let·initialized·=·false; |
| Offset 378, 15 lines modified | Offset 378, 15 lines modified | ||
| 378 | ······<p·class="built-using"> | 378 | ······<p·class="built-using"> |
| 379 | ········Built·using | 379 | ········Built·using |
| 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 382 | ······</p> | 382 | ······</p> |
| 383 | <p>Copyright·©·1996-202 | 383 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 384 | ····</footer> | 384 | ····</footer> |
| 385 | ··</div> | 385 | ··</div> |
| 386 | </main> | 386 | </main> |
| 387 | </div> | 387 | </div> |
| 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 389 | ··<script> | 389 | ··<script> |
| 390 | ··let·initialized·=·false; | 390 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 226, 15 lines modified | Offset 226, 15 lines modified | ||
| 226 | ······<p·class="built-using"> | 226 | ······<p·class="built-using"> |
| 227 | ········Built·using | 227 | ········Built·using |
| 228 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 228 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 229 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 229 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 230 | ······</p> | 230 | ······</p> |
| 231 | <p>Copyright·©·1996-202 | 231 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 232 | ····</footer> | 232 | ····</footer> |
| 233 | ··</div> | 233 | ··</div> |
| 234 | </main> | 234 | </main> |
| 235 | </div> | 235 | </div> |
| 236 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 236 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 237 | ··<script> | 237 | ··<script> |
| 238 | ··let·initialized·=·false; | 238 | ··let·initialized·=·false; |
| Offset 217, 15 lines modified | Offset 217, 15 lines modified | ||
| 217 | ······<p·class="built-using"> | 217 | ······<p·class="built-using"> |
| 218 | ········Built·using | 218 | ········Built·using |
| 219 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 219 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 220 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 220 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 221 | ······</p> | 221 | ······</p> |
| 222 | <p>Copyright·©·1996-202 | 222 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 223 | ····</footer> | 223 | ····</footer> |
| 224 | ··</div> | 224 | ··</div> |
| 225 | </main> | 225 | </main> |
| 226 | </div> | 226 | </div> |
| 227 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 227 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 228 | ··<script> | 228 | ··<script> |
| 229 | ··let·initialized·=·false; | 229 | ··let·initialized·=·false; |
| Offset 825, 22 lines modified | Offset 825, 22 lines modified | ||
| 825 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·restore_tag(true·|·{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()·|·[]})·->·true.</pre> | 825 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·restore_tag(true·|·{<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()·|·[]})·->·true.</pre> |
| 826 | ······</div> | 826 | ······</div> |
| 827 | <p>Restores·the·previous·state·of·user·tags·and·their·spreading·as·it·was·before·a | 827 | <p>Restores·the·previous·state·of·user·tags·and·their·spreading·as·it·was·before·a |
| 828 | call·to·<a·href="#spread_tag/1"><code·class="inline">spread_tag/1</code></a>.</p><p>Note·that·the·restoring·is·not·limited·to·the·same·process;·one·can | 828 | call·to·<a·href="#spread_tag/1"><code·class="inline">spread_tag/1</code></a>.</p><p>Note·that·the·restoring·is·not·limited·to·the·same·process;·one·can |
| 829 | utilize·this·to·turn·off·spreding·in·one·process·and·restore·it·in·a | 829 | utilize·this·to·turn·off·spreding·in·one·process·and·restore·it·in·a |
| 830 | newly·created·process·that·is·is·actually·going·to·send·messages:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id=" | 830 | newly·created·process·that·is·is·actually·going·to·send·messages:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="3448754688-1">(</span><span·class="p"·data-group-id="3448754688-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 831 | ····</span><span·class="n">TagData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">spread_tag</span><span·class="p"·data-group-id=" | 831 | ····</span><span·class="n">TagData</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">spread_tag</span><span·class="p"·data-group-id="3448754688-2">(</span><span·class="ss">false</span><span·class="p"·data-group-id="3448754688-2">)</span><span·class="p">,</span><span·class="w"> |
| 832 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 832 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="3448754688-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="3448754688-4">(</span><span·class="p"·data-group-id="3448754688-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 833 | ·············</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id=" | 833 | ·············</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id="3448754688-5">(</span><span·class="n">TagData</span><span·class="p"·data-group-id="3448754688-5">)</span><span·class="p">,</span><span·class="w"> |
| 834 | ·············</span><span·class="nf">do_something</span><span·class="p"·data-group-id=" | 834 | ·············</span><span·class="nf">do_something</span><span·class="p"·data-group-id="3448754688-6">(</span><span·class="p"·data-group-id="3448754688-6">)</span><span·class="w"> |
| 835 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id=" | 835 | ··········</span><span·class="k">end</span><span·class="p"·data-group-id="3448754688-3">)</span><span·class="p">,</span><span·class="w"> |
| 836 | ····</span><span·class="nf">do_something_else</span><span·class="p"·data-group-id=" | 836 | ····</span><span·class="nf">do_something_else</span><span·class="p"·data-group-id="3448754688-7">(</span><span·class="p"·data-group-id="3448754688-7">)</span><span·class="p">,</span><span·class="w"> |
| 837 | ····</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id=" | 837 | ····</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id="3448754688-8">(</span><span·class="n">TagData</span><span·class="p"·data-group-id="3448754688-8">)</span><span·class="p">.</span></code></pre><p>Correctly·handling·user·tags·and·their·spreading·might·take·some·effort,·as |
| 838 | Erlang·programs·tend·to·send·and·receive·messages·so·that·sometimes·the·user·tag | 838 | Erlang·programs·tend·to·send·and·receive·messages·so·that·sometimes·the·user·tag |
| 839 | gets·lost·due·to·various·things,·like·double·receives·or·communication·with·a | 839 | gets·lost·due·to·various·things,·like·double·receives·or·communication·with·a |
| 840 | port·(ports·do·not·handle·user·tags,·in·the·same·way·as·they·do·not·handle | 840 | port·(ports·do·not·handle·user·tags,·in·the·same·way·as·they·do·not·handle |
| 841 | regular·sequential·trace·tokens).</p> | 841 | regular·sequential·trace·tokens).</p> |
| 842 | ··</section> | 842 | ··</section> |
| 843 | </section> | 843 | </section> |
| 844 | <section·class="detail"·id="spread_tag/1"> | 844 | <section·class="detail"·id="spread_tag/1"> |
| Offset 877, 20 lines modified | Offset 877, 20 lines modified | ||
| 877 | <a·href="#restore_tag/1"><code·class="inline">restore_tag/1</code></a>,·one·can·enable·or·disable·spreading·of·user | 877 | <a·href="#restore_tag/1"><code·class="inline">restore_tag/1</code></a>,·one·can·enable·or·disable·spreading·of·user |
| 878 | tags·to·other·processes·and·then·restore·the·previous·state·of·the·user·tag.·The | 878 | tags·to·other·processes·and·then·restore·the·previous·state·of·the·user·tag.·The |
| 879 | TagData·returned·from·this·call·contains·all·previous·information·so·the·state | 879 | TagData·returned·from·this·call·contains·all·previous·information·so·the·state |
| 880 | (including·any·previously·spread·user·tags)·will·be·completely·restored·by·a | 880 | (including·any·previously·spread·user·tags)·will·be·completely·restored·by·a |
| 881 | later·call·to·<a·href="#restore_tag/1"><code·class="inline">restore_tag/1</code></a>.</p><p>The·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>·module·already·spreads·tags,·so·there·is·no·need·to·manually·call | 881 | later·call·to·<a·href="#restore_tag/1"><code·class="inline">restore_tag/1</code></a>.</p><p>The·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>·module·already·spreads·tags,·so·there·is·no·need·to·manually·call |
| 882 | this·function·to·get·user·tags·spread·to·the·<code·class="inline">efile</code>·driver·through·that·module.</p><p>The·most·use·of·this·function·would·be·if·one,·for·example,·uses·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html"><code·class="inline">io</code></a>·module | 882 | this·function·to·get·user·tags·spread·to·the·<code·class="inline">efile</code>·driver·through·that·module.</p><p>The·most·use·of·this·function·would·be·if·one,·for·example,·uses·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html"><code·class="inline">io</code></a>·module |
| 883 | to·communicate·with·an·I/O-server·for·a·regular·file,·such·as·in·the·following | 883 | to·communicate·with·an·I/O-server·for·a·regular·file,·such·as·in·the·following |
| 884 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="3 | 884 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">f</span><span·class="p"·data-group-id="3596233729-1">(</span><span·class="p"·data-group-id="3596233729-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 885 | ···</span><span·class="p"·data-group-id="3 | 885 | ···</span><span·class="p"·data-group-id="3596233729-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">F</span><span·class="p"·data-group-id="3596233729-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·388,·SHA:·f9bda678b026701f1656c0712f14032ed50fe772f99bff6a9e45325d730ef568·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 886 | ···</span><span·class="n">Saved</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">spread_tag</span><span·class="p"·data-group-id="3 | 886 | ···</span><span·class="n">Saved</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">spread_tag</span><span·class="p"·data-group-id="3596233729-5">(</span><span·class="ss">true</span><span·class="p"·data-group-id="3596233729-5">)</span><span·class="p">,</span><span·class="w"> |
| 887 | ···</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3 | 887 | ···</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3596233729-6">(</span><span·class="n">F</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Hello·world!"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3596233729-7">[</span><span·class="p"[·...·truncated·by·diffoscope;·len:·79,·SHA:·a5797330d7962d6954d43b37d4db24ccb9ca5f65e0e22670c6a9ed75c2325051·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 888 | ···</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id="3 | 888 | ···</span><span·class="nc">dyntrace</span><span·class="p">:</span><span·class="nf">restore_tag</span><span·class="p"·data-group-id="3596233729-8">(</span><span·class="n">Saved</span><span·class="p"·data-group-id="3596233729-8">)</span><span·class="p">,</span><span·class="w"> |
| 889 | ···</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="3 | 889 | ···</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="3596233729-9">(</span><span·class="n">F</span><span·class="p"·data-group-id="3596233729-9">)</span><span·class="p">.</span></code></pre><p>In·this·example,·any·user·tag·set·in·the·calling·process·will·be·spread·to·the |
| 890 | I/O-server·when·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#format/3"><code·class="inline">io:format/3</code></a>·call·is·done.</p> | 890 | I/O-server·when·the·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#format/3"><code·class="inline">io:format/3</code></a>·call·is·done.</p> |
| 891 | ··</section> | 891 | ··</section> |
| 892 | </section> | 892 | </section> |
| 893 | ····</div> | 893 | ····</div> |
| 894 | ··</section> | 894 | ··</section> |
| Offset 912, 15 lines modified | Offset 912, 15 lines modified | ||
| 912 | ······<p·class="built-using"> | 912 | ······<p·class="built-using"> |
| 913 | ········Built·using | 913 | ········Built·using |
| 914 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 914 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 915 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 915 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 916 | ······</p> | 916 | ······</p> |
| 917 | <p>Copyright·©·1996-202 | 917 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 918 | ····</footer> | 918 | ····</footer> |
| 919 | ··</div> | 919 | ··</div> |
| 920 | </main> | 920 | </main> |
| 921 | </div> | 921 | </div> |
| 922 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 922 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 923 | ··<script> | 923 | ··<script> |
| 924 | ··let·initialized·=·false; | 924 | ··let·initialized·=·false; |
| Offset 345, 16 lines modified | Offset 345, 16 lines modified | ||
| 345 | ······</div> | 345 | ······</div> |
| 346 | <p>A·histogram·of·block·sizes·where·each·interval's·upper·bound·is·twice·as·high·as | 346 | <p>A·histogram·of·block·sizes·where·each·interval's·upper·bound·is·twice·as·high·as |
| 347 | the·one·before·it.</p><p>The·upper·bound·of·the·first·interval·is·provided·by·the·function·that·returned | 347 | the·one·before·it.</p><p>The·upper·bound·of·the·first·interval·is·provided·by·the·function·that·returned |
| 348 | the·histogram,·and·the·last·interval·has·no·upper·bound.</p><p>For·example,·the·histogram·below·has·40·(<code·class="inline">message</code>)·blocks·between·128-256·bytes | 348 | the·histogram,·and·the·last·interval·has·no·upper·bound.</p><p>For·example,·the·histogram·below·has·40·(<code·class="inline">message</code>)·blocks·between·128-256·bytes |
| 349 | in·size,·78·blocks·between·256-512·bytes,2·blocks·between·512-1024·bytes,·and·2 | 349 | in·size,·78·blocks·between·256-512·bytes,2·blocks·between·512-1024·bytes,·and·2 |
| 350 | blocks·between·1-2KB.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">allocations</span><span·class="p"·data-group-id=" | 350 | blocks·between·1-2KB.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">allocations</span><span·class="p"·data-group-id="4565556286-1">(</span><span·class="p"·data-group-id="4565556286-2">#{</span><span·class="w">·</span><span·class="ss">histogram_start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">128</span><span·class="p[·...·truncated·by·diffoscope;·len:·292,·SHA:·19bbc2edcd20dc758d6ad3fbe54640c4975b4fd6a320adfc2c4338190b6d9113·...·]6-1">)</span><span·class="p">.</span><span·class="w"> |
| 351 | </span><span·class="p"·data-group-id=" | 351 | </span><span·class="p"·data-group-id="4565556286-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4565556286-4">{</span><span·class="mi">128</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·c[·...·truncated·by·diffoscope;·len:·1359,·SHA:·969cd6c61defe8db27591d77da71b4a065fa9946cd3ebc02b981b0847330c54b·...·]6-3">}</span></code></pre> |
| 352 | ··</section> | 352 | ··</section> |
| 353 | </section> | 353 | </section> |
| 354 | <section·class="detail"·id="t:carrier_info_list/0"> | 354 | <section·class="detail"·id="t:carrier_info_list/0"> |
| 355 | ··<div·class="detail-header"> | 355 | ··<div·class="detail-header"> |
| 356 | ····<a·href="#t:carrier_info_list/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 356 | ····<a·href="#t:carrier_info_list/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| 357 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 357 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 480, 38 lines modified | Offset 480, 38 lines modified | ||
| 480 | to·an·allocator·of·a·different·type.</p><p>Defaults·to·all·<code·class="inline">alloc_util</code>·allocators.</p></li><li><p><strong><code·class="inline">scheduler_ids</code></strong>·-·The·scheduler·ids·whose·allocator·instances·will·be | 480 | to·an·allocator·of·a·different·type.</p><p>Defaults·to·all·<code·class="inline">alloc_util</code>·allocators.</p></li><li><p><strong><code·class="inline">scheduler_ids</code></strong>·-·The·scheduler·ids·whose·allocator·instances·will·be |
| 481 | searched.·A·scheduler·id·of·0·will·refer·to·the·global·instance·that·is·not | 481 | searched.·A·scheduler·id·of·0·will·refer·to·the·global·instance·that·is·not |
| 482 | tied·to·any·particular·scheduler.·Defaults·to·all·schedulers·and·the·global | 482 | tied·to·any·particular·scheduler.·Defaults·to·all·schedulers·and·the·global |
| 483 | instance.</p></li><li><p><strong><code·class="inline">histogram_start</code></strong>·-·The·upper·bound·of·the·first·interval·in·the·allocated | 483 | instance.</p></li><li><p><strong><code·class="inline">histogram_start</code></strong>·-·The·upper·bound·of·the·first·interval·in·the·allocated |
| 484 | block·size·histograms.·Defaults·to·128.</p></li><li><p><strong><code·class="inline">histogram_width</code></strong>·-·The·number·of·intervals·in·the·allocated·block·size | 484 | block·size·histograms.·Defaults·to·128.</p></li><li><p><strong><code·class="inline">histogram_width</code></strong>·-·The·number·of·intervals·in·the·allocated·block·size |
| 485 | histograms.·Defaults·to·18.</p></li><li><p><strong><code·class="inline">flags</code></strong>·-·Controls·how·to·group·the·output,·for·example·showing | 485 | histograms.·Defaults·to·18.</p></li><li><p><strong><code·class="inline">flags</code></strong>·-·Controls·how·to·group·the·output,·for·example·showing |
| 486 | allocations·on·a·per-process·basis·(when·possible)·rather·than·only·a | 486 | allocations·on·a·per-process·basis·(when·possible)·rather·than·only·a |
| 487 | NIF/driver-basis.·Defaults·to·<code·class="inline">[]</code>.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">allocations</span><span·class="p"·data-group-id=" | 487 | NIF/driver-basis.·Defaults·to·<code·class="inline">[]</code>.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">allocations</span><span·class="p"·data-group-id="0047023964-1">(</span><span·class="p"·data-group-id="0047023964-2">#{</span><span·class="w">·</span><span·class="ss">histogram_start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">128</span><span·class="p[·...·truncated·by·diffoscope;·len:·293,·SHA:·ff762ef0652bc850882595b2b22e827f58f79af622503ae4bada7caf9e18a969·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 488 | </span><span·class="p"·data-group-id=" | 488 | </span><span·class="p"·data-group-id="0047023964-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0047023964-4">{</span><span·class="mi">128</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 489 | ·····</span><span·class="p"·data-group-id=" | 489 | ·····</span><span·class="p"·data-group-id="0047023964-5">#{</span><span·class="ss">udp_inet</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 490 | ···········</span><span·class="p"·data-group-id=" | 490 | ···········</span><span·class="p"·data-group-id="0047023964-6">#{</span><span·class="ss">driver_event_state</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-7">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·743,·SHA:·61551b5670fcd7c7b8975fac3b2684080d259c04418f863916a9e586f8b458e7·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 491 | ·······</span><span·class="ss">system</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> | 491 | ·······</span><span·class="ss">system</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 492 | ···········</span><span·class="p"·data-group-id=" | 492 | ···········</span><span·class="p"·data-group-id="0047023964-8">#{</span><span·class="ss">heap</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-9">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><s[·...·truncated·by·diffoscope;·len:·677,·SHA:·1af67c97a363a47722d8de5fae12c412f2edb53dae2915d4e64586e6a203af72·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 493 | ·············</span><span·class="ss">db_term</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 493 | ·············</span><span·class="ss">db_term</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-10">{</span><span·class="mi">271</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">52</span><span·class="p">,</span><span·class="mi">80</span><span·cl[·...·truncated·by·diffoscope;·len:·523,·SHA:·4b94352a90918005b42c78de6fc3a95d5ae2395ddfc4d3cd46fa5d6ec34606a9·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 494 | ·············</span><span·class="ss">code</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 494 | ·············</span><span·class="ss">code</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-11">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">3</span><span·class=[·...·truncated·by·diffoscope;·len:·524,·SHA:·c04a53b7ecdd547c63d0313c5f17b0536e428845790de8d5ad980c56acf6de56·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 495 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 495 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-12">{</span><span·class="mi">18</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">7</span><span·class[·...·truncated·by·diffoscope;·len:·520,·SHA:·967db73536cd1006d9f4fe2eb5cf3f7e6de5346a544aaa38b1fb415616c14326·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 496 | ·············</span><span·class="ss">message</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 496 | ·············</span><span·class="ss">message</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-13">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">40</span><span·class="p">,</span><span·class="mi">78</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">2</span><span·clas[·...·truncated·by·diffoscope;·len:·521,·SHA:·f1ac2a6edde282e3a6aadbf527fe3fae72b59498ca450b7594138ab974e751d6·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 497 | ·············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id=" | 497 | ·············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-8">}</span><span·class="w"> |
| 498 | ·······</span><span·class="ss">spawn_forker</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> | 498 | ·······</span><span·class="ss">spawn_forker</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 499 | ···········</span><span·class="p"·data-group-id=" | 499 | ···········</span><span·class="p"·data-group-id="0047023964-14">#{</span><span·class="ss">driver_select_data_state</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 500 | ·················</span><span·class="p"·data-group-id=" | 500 | ·················</span><span·class="p"·data-group-id="0047023964-15">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·573,·SHA:·04d75a527ca04a3958988c1af779f0212f64aba578922f8cb0458e70f9f7e4ef·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 501 | ·······</span><span·class="ss">ram_file_drv</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 501 | ·······</span><span·class="ss">ram_file_drv</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-16">#{</span><span·class="ss">drv_binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-17">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0<[·...·truncated·by·diffoscope;·len:·738,·SHA:·c6e9b8e9a58e619d90f916ca8839f5e19575bd23ededaac93369ffac75e5d040·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 502 | ·······</span><span·class="ss">prim_file</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> | 502 | ·······</span><span·class="ss">prim_file</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 503 | ···········</span><span·class="p"·data-group-id=" | 503 | ···········</span><span·class="p"·data-group-id="0047023964-18">#{</span><span·class="ss">process_specific_data</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-19">{</span><span·class="mi">2</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·695,·SHA:·7f63fe3899dde03a9c5eb0f396ba5a0b6c6ef841ddc0784b8ed5cf19a78553e1·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 504 | ·············</span><span·class="ss">nif_trap_export_entry</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 504 | ·············</span><span·class="ss">nif_trap_export_entry</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-20">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·519,·SHA:·235c2b5609d793356b38b93f5e73d3642f0e993f2a151d1fa0428b8bf1898836·...·]-20">}</span><span·class="p">,</span><span·class="w"> |
| 505 | ·············</span><span·class="ss">monitor_extended</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 505 | ·············</span><span·class="ss">monitor_extended</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-21">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·519,·SHA:·235c2b5609d793356b38b93f5e73d3642f0e993f2a151d1fa0428b8bf1898836·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 506 | ·············</span><span·class="ss">drv_binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 506 | ·············</span><span·class="ss">drv_binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-22">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·519,·SHA:·58fd55df83292a169828d4101ea159c9e5517fe6341d34e7eda3d5ee206b6ee8·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 507 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 507 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-23">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·573,·SHA:·ccc9eac8046849993c29408eb97269dc3397ccda80d9381cbcdcec5f0616ac84·...·]-18">}</span><span·class="p">,</span><span·class="w"> |
| 508 | ·······</span><span·class="ss">prim_buffer</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> | 508 | ·······</span><span·class="ss">prim_buffer</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 509 | ···········</span><span·class="p"·data-group-id=" | 509 | ···········</span><span·class="p"·data-group-id="0047023964-24">#{</span><span·class="ss">nif_internal</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-25">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">[·...·truncated·by·diffoscope;·len:·686,·SHA:·6fec691b539aff7c0b6cfa842526048f7592a573e05445888827f914ef64d543·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 510 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 510 | ·············</span><span·class="ss">binary</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0047023964-26">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·733,·SHA:·983e9856db82469a6ddf9c115503a127a771385fd445f08d3f92efe666816b04·...·]-3">}</span></code></pre> |
| 511 | ··</section> | 511 | ··</section> |
| 512 | </section> | 512 | </section> |
| 513 | <section·class="detail"·id="carriers/0"> | 513 | <section·class="detail"·id="carriers/0"> |
| 514 | ··<div·class="detail-header"> | 514 | ··<div·class="detail-header"> |
| 515 | ····<a·href="#carriers/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 515 | ····<a·href="#carriers/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 516 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 516 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 576, 23 lines modified | Offset 576, 23 lines modified | ||
| 576 | allocator·type·and·scheduler·id.</p><p>If·the·specified·allocator·types·are·not·enabled,·the·call·will·fail·with | 576 | allocator·type·and·scheduler·id.</p><p>If·the·specified·allocator·types·are·not·enabled,·the·call·will·fail·with |
| 577 | <code·class="inline">{error,·not_enabled}</code>.</p><p>The·following·options·can·be·used:</p><ul><li><p><strong><code·class="inline">allocator_types</code></strong>·-·The·allocator·types·that·will·be·searched.·Defaults·to | 577 | <code·class="inline">{error,·not_enabled}</code>.</p><p>The·following·options·can·be·used:</p><ul><li><p><strong><code·class="inline">allocator_types</code></strong>·-·The·allocator·types·that·will·be·searched.·Defaults·to |
| 578 | all·<code·class="inline">alloc_util</code>·allocators.</p></li><li><p><strong><code·class="inline">scheduler_ids</code></strong>·-·The·scheduler·ids·whose·allocator·instances·will·be | 578 | all·<code·class="inline">alloc_util</code>·allocators.</p></li><li><p><strong><code·class="inline">scheduler_ids</code></strong>·-·The·scheduler·ids·whose·allocator·instances·will·be |
| 579 | searched.·A·scheduler·id·of·0·will·refer·to·the·global·instance·that·is·not | 579 | searched.·A·scheduler·id·of·0·will·refer·to·the·global·instance·that·is·not |
| 580 | tied·to·any·particular·scheduler.·Defaults·to·all·schedulers·and·the·global | 580 | tied·to·any·particular·scheduler.·Defaults·to·all·schedulers·and·the·global |
| 581 | instance.</p></li><li><p><strong><code·class="inline">histogram_start</code></strong>·-·The·upper·bound·of·the·first·interval·in·the·free | 581 | instance.</p></li><li><p><strong><code·class="inline">histogram_start</code></strong>·-·The·upper·bound·of·the·first·interval·in·the·free |
| 582 | block·size·histograms.·Defaults·to·512.</p></li><li><p><strong><code·class="inline">histogram_width</code></strong>·-·The·number·of·intervals·in·the·free·block·size | 582 | block·size·histograms.·Defaults·to·512.</p></li><li><p><strong><code·class="inline">histogram_width</code></strong>·-·The·number·of·intervals·in·the·free·block·size |
| 583 | histograms.·Defaults·to·14.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">carriers</span><span·class="p"·data-group-id="5 | 583 | histograms.·Defaults·to·14.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">instrument</span><span·class="p">:</span><span·class="nf">carriers</span><span·class="p"·data-group-id="5565383674-1">(</span><span·class="p"·data-group-id="5565383674-2">#{</span><span·class="w">·</span><span·class="ss">histogram_start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">512</span><span·class="p"[·...·truncated·by·diffoscope;·len:·291,·SHA:·f8302c363708b977fcb98130ea957410e6a38bfcc1017574eef6f01f41188d4a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 584 | </span><span·class="p"·data-group-id="5 | 584 | </span><span·class="p"·data-group-id="5565383674-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="5565383674-4">{</span><span·class="mi">512</span><span·class="p">,</span><span·class="w"> |
| 585 | ·····</span><span·class="p"·data-group-id="5 | 585 | ·····</span><span·class="p"·data-group-id="5565383674-5">[</span><span·class="p"·data-group-id="5565383674-6">{</span><span·class="ss">driver_alloc</span><span·class="p">,</span><span·class="ss">false</span><span·class="p">,</span><span·class="mi">262144</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 586 | ····················</span><span·class="p"·data-group-id="5 | 586 | ····················</span><span·class="p"·data-group-id="5565383674-7">[</span><span·class="p"·data-group-id="5565383674-8">{</span><span·class="ss">driver_alloc</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">32784</span><span·class="p"·data-group-id="5565383674-8"[·...·truncated·by·diffoscope;·len:·50,·SHA:·fb9b319c89a98bebc2900e6208187da3045a25c8b910a74b6997c9f8dcb075c2·...·]-7">]</span><span·class="p">,</span><span·class="w"> |
| 587 | ····················</span><span·class="p"·data-group-id="5 | 587 | ····················</span><span·class="p"·data-group-id="5565383674-9">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p[·...·truncated·by·diffoscope;·len:·227,·SHA:·ad5bd98997f91ecc47889dc74cfa3d5f790759dd1c06f2bb4c9928e9fa870b3d·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 588 | ······</span><span·class="p"·data-group-id="5 | 588 | ······</span><span·class="p"·data-group-id="5565383674-10">{</span><span·class="ss">binary_alloc</span><span·class="p">,</span><span·class="ss">false</span><span·class="p">,</span><span·class="mi">32768</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 589 | ····················</span><span·class="p"·data-group-id="5 | 589 | ····················</span><span·class="p"·data-group-id="5565383674-11">[</span><span·class="p"·data-group-id="5565383674-12">{</span><span·class="ss">binary_alloc</span><span·class="p">,</span><span·class="mi">15</span><span·class="p">,</span><span·class="mi">4304</span><span·class="p"·data-group-id="5565383674-[·...·truncated·by·diffoscope;·len:·53,·SHA:·4a1b3c51b1e746771e3891474056e983a03610935fd14766a7fb41a095d6969e·...·]-11">]</span><span·class="p">,</span><span·class="w"> |
| 590 | ····················</span><span·class="p"·data-group-id="5 | 590 | ····················</span><span·class="p"·data-group-id="5565383674-13">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="[·...·truncated·by·diffoscope;·len:·229,·SHA:·0548da62b295211c2763d3d7c1687d2acfe02d2ad8bb4edc651f64dbfb5d39b5·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 591 | ······</span><span·class="p"·data-group-id="5 | 591 | ······</span><span·class="p"·data-group-id="5565383674-14">{</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="5565383674-14">}</span><span·class="p">|</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class=[·...·truncated·by·diffoscope;·len:·135,·SHA:·3d3ec2e5a849ed41b273bc243aa90764910a1dba28191d7ca4be1178790ef0c2·...·]-3">}</span></code></pre> |
| 592 | ··</section> | 592 | ··</section> |
| 593 | </section> | 593 | </section> |
| 594 | ····</div> | 594 | ····</div> |
| 595 | ··</section> | 595 | ··</section> |
| 596 | ····<footer·class="footer"> | 596 | ····<footer·class="footer"> |
| Offset 613, 15 lines modified | Offset 613, 15 lines modified | ||
| 613 | ······<p·class="built-using"> | 613 | ······<p·class="built-using"> |
| 614 | ········Built·using | 614 | ········Built·using |
| 615 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 615 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 616 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 616 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 617 | ······</p> | 617 | ······</p> |
| 618 | <p>Copyright·©·1996-202 | 618 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 619 | ····</footer> | 619 | ····</footer> |
| 620 | ··</div> | 620 | ··</div> |
| 621 | </main> | 621 | </main> |
| 622 | </div> | 622 | </div> |
| 623 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 623 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 624 | ··<script> | 624 | ··<script> |
| 625 | ··let·initialized·=·false; | 625 | ··let·initialized·=·false; |
| Offset 146, 40 lines modified | Offset 146, 40 lines modified | ||
| 146 | $·make</code></pre><h2·id="dyntrace-tracepoints"·class="section-heading"> | 146 | $·make</code></pre><h2·id="dyntrace-tracepoints"·class="section-heading"> |
| 147 | ··<a·href="#dyntrace-tracepoints"·class="hover-link"> | 147 | ··<a·href="#dyntrace-tracepoints"·class="hover-link"> |
| 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 149 | ··</a> | 149 | ··</a> |
| 150 | ··<span·class="text">Dyntrace·Tracepoints</span> | 150 | ··<span·class="text">Dyntrace·Tracepoints</span> |
| 151 | </h2> | 151 | </h2> |
| 152 | <p>All·tracepoints·are·in·the·domain·of·<code·class="inline">org_erlang_dyntrace</code></p><p>All·Erlang·types·are·the·string·equivalent·in·LTTng.</p><p><em>process_spawn</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">parent·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">procs</code>·and | 152 | <p>All·tracepoints·are·in·the·domain·of·<code·class="inline">org_erlang_dyntrace</code></p><p>All·Erlang·types·are·the·string·equivalent·in·LTTng.</p><p><em>process_spawn</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">parent·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">procs</code>·and |
| 153 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_spawn</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="8 | 153 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_spawn</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1880835707-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">3</span><span·class="w">·</span><span·class="p"·data-group-id="1880835707-1">}</span><span·[·...·truncated·by·diffoscope;·len:·731,·SHA:·cd9d110759c19fa0d07a109ddf6f19f80f3c58f0159d0a1d6da5930469be213f·...·]-2">}</span></code></pre><p><em>process_link</em></p><ul><li><code·class="inline">to·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">from·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><p><code·class="inline">type·:·string</code>·::·<code·class="inline">"link"·|·"unlink"</code></p></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">procs</code>·and |
| 154 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">process_link:·{·cpu_id·=·3·},·{·from·=·"<0.130.0>",·to·=·"<0.131.0>",·type·=·"link"·}</code></pre><p><em>process_exit</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">reason·:·string</code>·::·Exit·reason.·Ex.·<code·class="inline">"normal"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">procs</code>·and | 154 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">process_link:·{·cpu_id·=·3·},·{·from·=·"<0.130.0>",·to·=·"<0.131.0>",·type·=·"link"·}</code></pre><p><em>process_exit</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">reason·:·string</code>·::·Exit·reason.·Ex.·<code·class="inline">"normal"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">procs</code>·and |
| 155 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">process_exit:·{·cpu_id·=·3·},·{·pid·=·"<0.130.0>",·reason·=·"normal"·}</code></pre><p><em>process_register</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">name·:·string</code>·::·Registered·name.·Ex.·<code·class="inline">"logger"</code></li><li><p><code·class="inline">type·:·string</code>·::·<code·class="inline">"register"·|·"unregister"</code></p></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_register</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 155 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">process_exit:·{·cpu_id·=·3·},·{·pid·=·"<0.130.0>",·reason·=·"normal"·}</code></pre><p><em>process_register</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">name·:·string</code>·::·Registered·name.·Ex.·<code·class="inline">"logger"</code></li><li><p><code·class="inline">type·:·string</code>·::·<code·class="inline">"register"·|·"unregister"</code></p></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_register</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="6345152517-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="6345152517-1">}</span><span·[·...·truncated·by·diffoscope;·len:·703,·SHA:·4cf445630112d473e8d84e81ccb2b95d578a72b50340afd68b6d4bfd30e0a4fe·...·]-2">}</span></code></pre><p><em>process_scheduled</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li><li><code·class="inline">type·:·string</code>·:: |
| 156 | <code·class="inline">"in"·|·"out"·|·"in_exiting"·|·"out_exiting"·|·"out_exited"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">running</code>·and | 156 | <code·class="inline">"in"·|·"out"·|·"in_exiting"·|·"out_exiting"·|·"out_exited"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">running</code>·and |
| 157 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_scheduled</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 157 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">process_scheduled</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="7209329144-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="7209329144-1">}</span><span·[·...·truncated·by·diffoscope;·len:·716,·SHA:·3617e7f872dc326c3f2d9fcf32e108a7df353ae16c2fdd7649af54d1fdccd077·...·]-2">}</span></code></pre><p><em>port_open</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">driver·:·string</code>·::·Driver·name.·Ex.·<code·class="inline">"tcp_inet"</code></li><li><code·class="inline">port·:·string</code>·::·Port·ID.·Ex.·<code·class="inline">"#Port<0.1031>"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">ports</code>·and |
| 158 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">port_open:·{·cpu_id·=·5·},·{·pid·=·"<0.131.0>",·driver·=·"'/bin/sh·-s·unix:cmd'",·port·=·"#Port<0.1887>"·}</code></pre><p><em>port_exit</em></p><ul><li><code·class="inline">port·:·string</code>·::·Port·ID.·Ex.·<code·class="inline">"#Port<0.1031>"</code></li><li><code·class="inline">reason·:·string</code>·::·Exit·reason.·Ex.·<code·class="inline">"normal"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">ports</code>·and | 158 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">port_open:·{·cpu_id·=·5·},·{·pid·=·"<0.131.0>",·driver·=·"'/bin/sh·-s·unix:cmd'",·port·=·"#Port<0.1887>"·}</code></pre><p><em>port_exit</em></p><ul><li><code·class="inline">port·:·string</code>·::·Port·ID.·Ex.·<code·class="inline">"#Port<0.1031>"</code></li><li><code·class="inline">reason·:·string</code>·::·Exit·reason.·Ex.·<code·class="inline">"normal"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">ports</code>·and |
| 159 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">port_exit:·{·cpu_id·=·5·},·{·port·=·"#Port<0.1887>",·reason·=·"normal"·}</code></pre><p><em>port_link</em></p><ul><li><code·class="inline">to·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">from·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><p><code·class="inline">type·:·string</code>·::·<code·class="inline">"link"·|·"unlink"</code></p></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">ports</code>·and | 159 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">port_exit:·{·cpu_id·=·5·},·{·port·=·"#Port<0.1887>",·reason·=·"normal"·}</code></pre><p><em>port_link</em></p><ul><li><code·class="inline">to·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">from·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><p><code·class="inline">type·:·string</code>·::·<code·class="inline">"link"·|·"unlink"</code></p></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">ports</code>·and |
| 160 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">port_link</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 160 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">port_link</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1806076698-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="p"·data-group-id="1806076698-1">}</span><span·[·...·truncated·by·diffoscope;·len:·723,·SHA:·226899edb7efe08f8920f59d2db56ef4098902ff36a9c28219f92d39e8f7d02c·...·]-2">}</span></code></pre><p><em>port_scheduled</em></p><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">running</code>·and |
| 161 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><ul><li><code·class="inline">port·:·string</code>·::·Port·ID.·Ex.·<code·class="inline">"#Port<0.1031>"</code></li><li><code·class="inline">entry·:·string</code>·::·Callback.·Ex.·<code·class="inline">"open"</code></li><li><code·class="inline">type·:·string</code>·:: | 161 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><ul><li><code·class="inline">port·:·string</code>·::·Port·ID.·Ex.·<code·class="inline">"#Port<0.1031>"</code></li><li><code·class="inline">entry·:·string</code>·::·Callback.·Ex.·<code·class="inline">"open"</code></li><li><code·class="inline">type·:·string</code>·:: |
| 162 | <code·class="inline">"in"·|·"out"·|·"in_exiting"·|·"out_exiting"·|·"out_exited"</code></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">port_scheduled</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 162 | <code·class="inline">"in"·|·"out"·|·"in_exiting"·|·"out_exiting"·|·"out_exited"</code></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">port_scheduled</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="0612343903-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="p"·data-group-id="0612343903-1">}</span><span·[·...·truncated·by·diffoscope;·len:·712,·SHA:·40eb2e10f453a7240c0706218e0c5455617b2f79e63b8722eacd1a66867ef7ed·...·]-2">}</span></code></pre><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">running</code>·and |
| 163 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p><em>function_call</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li><li><code·class="inline">depth·:·integer</code>·::·Stack·depth.·Ex.·<code·class="inline">0</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">call</code>·and | 163 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p><em>function_call</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li><li><code·class="inline">depth·:·integer</code>·::·Stack·depth.·Ex.·<code·class="inline">0</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">call</code>·and |
| 164 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_call</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 164 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_call</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="0146679048-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="p"·data-group-id="0146679048-1">}</span><span·[·...·truncated·by·diffoscope;·len:·740,·SHA:·97dba925af766320c74a9c17229de664f739f05af752c05309ea068ab2f216d7·...·]-2">}</span></code></pre><p><em>function_return</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li><li><code·class="inline">depth·:·integer</code>·::·Stack·depth.·Ex.·<code·class="inline">0</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">call</code>·or·<code·class="inline">return_to</code>·and |
| 165 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_return</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 165 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_return</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="9273729393-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="p"·data-group-id="9273729393-1">}</span><span·[·...·truncated·by·diffoscope;·len:·720,·SHA:·8bb72a1b71dc5ec244c31f6cc980b2d4a3a47151b421be1f8c164525c4772ad4·...·]-2">}</span></code></pre><p><em>function_exception</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">entry·:·string</code>·::·Code·Location.·Ex.·<code·class="inline">"lists:sort/1"</code></li><li><code·class="inline">class·:·string</code>·::·Error·reason.·Ex.·<code·class="inline">"error"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">call</code>·and |
| 166 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_exception</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 166 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">function_exception</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="4914068455-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5</span><span·class="w">·</span><span·class="p"·data-group-id="4914068455-1">}</span><span·[·...·truncated·by·diffoscope;·len:·718,·SHA:·407cba01726cb8e1e9c7a715171a00212bca18f874d41e57e6347d3ed743f331·...·]-2">}</span></code></pre><p><em>message_send</em></p><ul><li><code·class="inline">from·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">to·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">message·:·string</code>·::·Message·sent.·Ex.·<code·class="inline">"{<0.162.0>,ok}"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">send</code>·and |
| 167 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">message_send:·{·cpu_id·=·3·},·{·from·=·"#Port<0.1938>",·to·=·"<0.160.0>",·message·=·"{#Port<0.1938>,eof}"·}</code></pre><p><em>message_receive</em></p><ul><li><code·class="inline">to·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">message·:·string</code>·::·Message·received.·Ex.·<code·class="inline">"{<0.162.0>,ok}"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">'receive'</code>·and | 167 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">message_send:·{·cpu_id·=·3·},·{·from·=·"#Port<0.1938>",·to·=·"<0.160.0>",·message·=·"{#Port<0.1938>,eof}"·}</code></pre><p><em>message_receive</em></p><ul><li><code·class="inline">to·:·string</code>·::·Process·ID·or·Port·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">message·:·string</code>·::·Message·received.·Ex.·<code·class="inline">"{<0.162.0>,ok}"</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">'receive'</code>·and |
| 168 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">message_receive:·{·cpu_id·=·7·},·{·to·=·"<0.167.0>",·message·=·"{<0.165.0>,ok}"·}</code></pre><p><em>gc_minor_start</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">need·:·integer</code>·::·Heap·need.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and | 168 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">message_receive:·{·cpu_id·=·7·},·{·to·=·"<0.167.0>",·message·=·"{<0.165.0>,ok}"·}</code></pre><p><em>gc_minor_start</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">need·:·integer</code>·::·Heap·need.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and |
| 169 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gc_minor_start</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="75 | 169 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gc_minor_start</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="1975211096-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="1975211096-1">}</span><span·[·...·truncated·by·diffoscope;·len:·858,·SHA:·4b7bade9f64a530e2f0bf0b46710a418f1b52fdf07c1a1718fea7ec9bf266e44·...·]-2">}</span></code></pre><p><em>gc_minor_end</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">reclaimed·:·integer</code>·::·Heap·reclaimed.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and |
| 170 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="c">gc_minor_end:·{·cpu_id·=·0·},·{·pid·=·"<0.172.0>",·reclaimed·=·120,·heap·=·1598,·old_heap·=·1598·}</code></pre><p><em>gc_major_start</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">need·:·integer</code>·::·Heap·need.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and | 170 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="c">gc_minor_end:·{·cpu_id·=·0·},·{·pid·=·"<0.172.0>",·reclaimed·=·120,·heap·=·1598,·old_heap·=·1598·}</code></pre><p><em>gc_major_start</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">need·:·integer</code>·::·Heap·need.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and |
| 171 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gc_major_start</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 171 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">gc_major_start</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="6411527607-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="6411527607-1">}</span><span·[·...·truncated·by·diffoscope;·len:·862,·SHA:·8524f90512679ca1e302d8d10b17143458004e7a850b2db526e90d716a42a5be·...·]-2">}</span></code></pre><p><em>gc_major_end</em></p><ul><li><code·class="inline">pid·:·string</code>·::·Process·ID.·Ex.·<code·class="inline">"<0.131.0>"</code></li><li><code·class="inline">reclaimed·:·integer</code>·::·Heap·reclaimed.·Ex.·<code·class="inline">2</code></li><li><code·class="inline">heap·:·integer</code>·::·Young·heap·word·size.·Ex.·<code·class="inline">233</code></li><li><code·class="inline">old_heap·:·integer</code>·::·Old·heap·word·size.·Ex.·<code·class="inline">233</code></li></ul><p>Available·through·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#trace/3"><code·class="inline">erlang:trace/3</code></a>·with·trace·flag·<code·class="inline">garbage_collection</code>·and |
| 172 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">gc_major_end:·{·cpu_id·=·0·},·{·pid·=·"<0.172.0>",·reclaimed·=·240,·heap·=·4185,·old_heap·=·0·}</code></pre><h2·id="beam-tracepoints"·class="section-heading"> | 172 | <code·class="inline">{tracer,dyntrace,[]}</code>·as·tracer·module.</p><p>Example:</p><pre><code·class="text">gc_major_end:·{·cpu_id·=·0·},·{·pid·=·"<0.172.0>",·reclaimed·=·240,·heap·=·4185,·old_heap·=·0·}</code></pre><h2·id="beam-tracepoints"·class="section-heading"> |
| 173 | ··<a·href="#beam-tracepoints"·class="hover-link"> | 173 | ··<a·href="#beam-tracepoints"·class="hover-link"> |
| 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 175 | ··</a> | 175 | ··</a> |
| 176 | ··<span·class="text">BEAM·Tracepoints</span> | 176 | ··<span·class="text">BEAM·Tracepoints</span> |
| 177 | </h2> | 177 | </h2> |
| 178 | <p>All·tracepoints·are·in·the·domain·of·<code·class="inline">org_erlang_otp</code></p><p>All·Erlang·types·are·the·string·equivalent·in·LTTng.</p><p><em>driver_init</em></p><ul><li><code·class="inline">driver·:·string</code>·::·Driver·name.·Ex.·<code·class="inline">"tcp_inet"</code></li><li><code·class="inline">major·:·integer</code>·::·Major·version.·Ex.·<code·class="inline">3</code></li><li><code·class="inline">minor·:·integer</code>·::·Minor·version.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">flags·:·integer</code>·::·Flags.·Ex.·<code·class="inline">1</code></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">driver_init</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id=" | 178 | <p>All·tracepoints·are·in·the·domain·of·<code·class="inline">org_erlang_otp</code></p><p>All·Erlang·types·are·the·string·equivalent·in·LTTng.</p><p><em>driver_init</em></p><ul><li><code·class="inline">driver·:·string</code>·::·Driver·name.·Ex.·<code·class="inline">"tcp_inet"</code></li><li><code·class="inline">major·:·integer</code>·::·Major·version.·Ex.·<code·class="inline">3</code></li><li><code·class="inline">minor·:·integer</code>·::·Minor·version.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">flags·:·integer</code>·::·Flags.·Ex.·<code·class="inline">1</code></li></ul><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">driver_init</span><span·class="p">:</span><span·class="w">·</span><span·class="p"·data-group-id="9009164343-1">{</span><span·class="w">·</span><span·class="ss">cpu_id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">2</span><span·class="w">·</span><span·class="p"·data-group-id="9009164343-1">}</span><span·[·...·truncated·by·diffoscope;·len:·19389,·SHA:·58aed617a3d2e4aa7f9e86fd084a4feb4e149ac65ee28c5182c4e6f9d962f3c2·...·]-2">}</span></code></pre><p><em>carrier_create</em></p><ul><li><code·class="inline">type·:·string</code>·::·Carrier·type.·Ex.·<code·class="inline">"ets_alloc"</code></li><li><code·class="inline">instance·:·integer</code>·::·Allocator·instance.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">size·:·integer</code>·::·Carrier·size.·Ex.·<code·class="inline">262144</code></li><li><code·class="inline">mbc_carriers·:·integer</code>·::·Number·of·multiblock·carriers·in·instance.·Ex.·<code·class="inline">3</code></li><li><code·class="inline">mbc_carriers_size·:·integer</code>·::·Total·size·of·multiblock·blocks·carriers·in |
| 179 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">mbc_blocks·:·integer</code>·::·Number·of·multiblock·blocks·in·instance.·Ex.·<code·class="inline">122</code></li><li><code·class="inline">mbc_blocks_size·:·integer</code>·::·Total·size·of·all·multiblock·blocks·in | 179 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">mbc_blocks·:·integer</code>·::·Number·of·multiblock·blocks·in·instance.·Ex.·<code·class="inline">122</code></li><li><code·class="inline">mbc_blocks_size·:·integer</code>·::·Total·size·of·all·multiblock·blocks·in |
| 180 | instance.·Ex.·<code·class="inline">285296</code></li><li><code·class="inline">sbc_carriers·:·integer</code>·::·Number·of·singleblock·carriers·in·instance.·Ex. | 180 | instance.·Ex.·<code·class="inline">285296</code></li><li><code·class="inline">sbc_carriers·:·integer</code>·::·Number·of·singleblock·carriers·in·instance.·Ex. |
| 181 | <code·class="inline">1</code></li><li><code·class="inline">sbc_carriers_size·:·integer</code>·::·Total·size·of·singleblock·blocks·carriers·in | 181 | <code·class="inline">1</code></li><li><code·class="inline">sbc_carriers_size·:·integer</code>·::·Total·size·of·singleblock·blocks·carriers·in |
| 182 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">sbc_blocks·:·integer</code>·::·Number·of·singleblocks·in·instance.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">sbc_blocks_size·:·integer</code>·::·Total·size·of·all·singleblock·blocks·in | 182 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">sbc_blocks·:·integer</code>·::·Number·of·singleblocks·in·instance.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">sbc_blocks_size·:·integer</code>·::·Total·size·of·all·singleblock·blocks·in |
| 183 | instance.·Ex.·<code·class="inline">285296</code></li></ul><p>Example:</p><pre><code·class="c">carrier_create:·{·cpu_id·=·2·},·{·type·=·"ets_alloc",·instance·=·7,·size·=·2097152,·mbc_carriers·=·4,·mbc_carriers_size·=·3440640,·mbc_blocks·=·526,·mbc_blocks_size·=·1278576,·sbc_carriers·=·0,·sbc_carriers_size·=·0,·sbc_blocks·=·0,·sbc_blocks_size·=·0·}</code></pre><p><em>carrier_destroy</em></p><ul><li><code·class="inline">type·:·string</code>·::·Carrier·type.·Ex.·<code·class="inline">"ets_alloc"</code></li><li><code·class="inline">instance·:·integer</code>·::·Allocator·instance.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">size·:·integer</code>·::·Carrier·size.·Ex.·<code·class="inline">262144</code></li><li><code·class="inline">mbc_carriers·:·integer</code>·::·Number·of·multiblock·carriers·in·instance.·Ex.·<code·class="inline">3</code></li><li><code·class="inline">mbc_carriers_size·:·integer</code>·::·Total·size·of·multiblock·blocks·carriers·in | 183 | instance.·Ex.·<code·class="inline">285296</code></li></ul><p>Example:</p><pre><code·class="c">carrier_create:·{·cpu_id·=·2·},·{·type·=·"ets_alloc",·instance·=·7,·size·=·2097152,·mbc_carriers·=·4,·mbc_carriers_size·=·3440640,·mbc_blocks·=·526,·mbc_blocks_size·=·1278576,·sbc_carriers·=·0,·sbc_carriers_size·=·0,·sbc_blocks·=·0,·sbc_blocks_size·=·0·}</code></pre><p><em>carrier_destroy</em></p><ul><li><code·class="inline">type·:·string</code>·::·Carrier·type.·Ex.·<code·class="inline">"ets_alloc"</code></li><li><code·class="inline">instance·:·integer</code>·::·Allocator·instance.·Ex.·<code·class="inline">1</code></li><li><code·class="inline">size·:·integer</code>·::·Carrier·size.·Ex.·<code·class="inline">262144</code></li><li><code·class="inline">mbc_carriers·:·integer</code>·::·Number·of·multiblock·carriers·in·instance.·Ex.·<code·class="inline">3</code></li><li><code·class="inline">mbc_carriers_size·:·integer</code>·::·Total·size·of·multiblock·blocks·carriers·in |
| 184 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">mbc_blocks·:·integer</code>·::·Number·of·multiblock·blocks·in·instance.·Ex.·<code·class="inline">122</code></li><li><code·class="inline">mbc_blocks_size·:·integer</code>·::·Total·size·of·all·multiblock·blocks·in | 184 | instance.·Ex.·<code·class="inline">1343488</code></li><li><code·class="inline">mbc_blocks·:·integer</code>·::·Number·of·multiblock·blocks·in·instance.·Ex.·<code·class="inline">122</code></li><li><code·class="inline">mbc_blocks_size·:·integer</code>·::·Total·size·of·all·multiblock·blocks·in |
| 185 | instance.·Ex.·<code·class="inline">285296</code></li><li><code·class="inline">sbc_carriers·:·integer</code>·::·Number·of·singleblock·carriers·in·instance.·Ex. | 185 | instance.·Ex.·<code·class="inline">285296</code></li><li><code·class="inline">sbc_carriers·:·integer</code>·::·Number·of·singleblock·carriers·in·instance.·Ex. |
| Offset 194, 18 lines modified | Offset 194, 18 lines modified | ||
| 194 | <p>An·example·of·process·tracing·of·<code·class="inline">os_mon</code>·and·friends.</p><p>Clean·start·of·lttng·in·a·bash·shell.</p><pre><code·class="text">$·lttng·create·erlang-demo | 194 | <p>An·example·of·process·tracing·of·<code·class="inline">os_mon</code>·and·friends.</p><p>Clean·start·of·lttng·in·a·bash·shell.</p><pre><code·class="text">$·lttng·create·erlang-demo |
| 195 | Spawning·a·session·daemon | 195 | Spawning·a·session·daemon |
| 196 | Session·erlang-demo·created. | 196 | Session·erlang-demo·created. |
| 197 | Traces·will·be·written·in·/home/egil/lttng-traces/erlang-demo-20160526-165920</code></pre><p>Start·an·Erlang·node·with·lttng·enabled.</p><pre><code·class="text">$·erl | 197 | Traces·will·be·written·in·/home/egil/lttng-traces/erlang-demo-20160526-165920</code></pre><p>Start·an·Erlang·node·with·lttng·enabled.</p><pre><code·class="text">$·erl |
| 198 | Erlang/OTP·19·[erts-8.0]·[source-4d7b24d]·[64-bit]·[smp:8:8]·[async-threads:10]·[hipe]·[kernel-poll:false]·[lttng] | 198 | Erlang/OTP·19·[erts-8.0]·[source-4d7b24d]·[64-bit]·[smp:8:8]·[async-threads:10]·[hipe]·[kernel-poll:false]·[lttng] |
| 199 | Eshell·V8.0··(abort·with·^G) | 199 | Eshell·V8.0··(abort·with·^G) |
| 200 | 1></code></pre><p>Load·the·<code·class="inline">dyntrace</code>·module.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">l</span><span·class="p"·data-group-id=" | 200 | 1></code></pre><p>Load·the·<code·class="inline">dyntrace</code>·module.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">l</span><span·class="p"·data-group-id="6298123723-1">(</span><span·class="ss">dyntrace</span><span·class="p"·data-group-id="6298123723-1">)</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="p"·data-group-id=" | 201 | </span><span·class="p"·data-group-id="6298123723-2">{</span><span·class="ss">module</span><span·class="p">,</span><span·class="ss">dyntrace</span><span·class="p"·data-group-id="6298123723-2">}</span></code></pre><p>All·tracepoints·via·dyntrace·are·now·visible·and·can·be·listed·through |
| 202 | <code·class="inline">lttng·list·-u</code>.</p><p>Enable·the·process_register·LTTng·tracepoint·for·Erlang.</p><pre><code·class="text">$·lttng·enable-event·-u·org_erlang_dyntrace:process_register | 202 | <code·class="inline">lttng·list·-u</code>.</p><p>Enable·the·process_register·LTTng·tracepoint·for·Erlang.</p><pre><code·class="text">$·lttng·enable-event·-u·org_erlang_dyntrace:process_register |
| 203 | UST·event·org_erlang_dyntrace:process_register·created·in·channel·channel0</code></pre><p>Enable·process·tracing·for·new·processes·and·use·<code·class="inline">dyntrace</code>·as·tracer·backend.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id=" | 203 | UST·event·org_erlang_dyntrace:process_register·created·in·channel·channel0</code></pre><p>Enable·process·tracing·for·new·processes·and·use·<code·class="inline">dyntrace</code>·as·tracer·backend.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id="4804270229-1">(</span><span·class="ss">new</span><span·class="p">,</span><span·class="ss">true</span><span·class="p">,</span><span·class="p"·data-group-id="4804270229-2">[</span><span·class="ss">procs</span><span·class="p">,</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·391,·SHA:·02c140a0148a2a515c28d0fee359f2cec7bb5c5056644dd94ef2e7fe4834ab1e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="mi">0</span></code></pre><p>Start·LTTng·tracing.</p><pre><code·class="text">$·lttng·start | 204 | </span><span·class="mi">0</span></code></pre><p>Start·LTTng·tracing.</p><pre><code·class="text">$·lttng·start |
| 205 | Tracing·started·for·session·erlang-demo</code></pre><p>Start·the·<code·class="inline">os_mon</code>·application·in·Erlang.</p><pre><code·class="text">3>·application:ensure_all_started(os_mon). | 205 | Tracing·started·for·session·erlang-demo</code></pre><p>Start·the·<code·class="inline">os_mon</code>·application·in·Erlang.</p><pre><code·class="text">3>·application:ensure_all_started(os_mon). |
| 206 | {ok,[sasl,os_mon]}</code></pre><p>Stop·LTTng·tracing·and·view·the·result.</p><pre><code·class="text">$·lttng·stop | 206 | {ok,[sasl,os_mon]}</code></pre><p>Stop·LTTng·tracing·and·view·the·result.</p><pre><code·class="text">$·lttng·stop |
| 207 | Tracing·stopped·for·session·erlang-demo | 207 | Tracing·stopped·for·session·erlang-demo |
| 208 | $·lttng·view | 208 | $·lttng·view |
| 209 | [17:20:42.561168759]·(+?.?????????)·elxd1168lx9·org_erlang_dyntrace:process_register:·\ | 209 | [17:20:42.561168759]·(+?.?????????)·elxd1168lx9·org_erlang_dyntrace:process_register:·\ |
| 210 | ····{·cpu_id·=·5·},·{·pid·=·"<0.66.0>",·name·=·"sasl_sup",·type·=·"register"·} | 210 | ····{·cpu_id·=·5·},·{·pid·=·"<0.66.0>",·name·=·"sasl_sup",·type·=·"register"·} |
| Offset 271, 15 lines modified | Offset 271, 15 lines modified | ||
| 271 | ······<p·class="built-using"> | 271 | ······<p·class="built-using"> |
| 272 | ········Built·using | 272 | ········Built·using |
| 273 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 273 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 274 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 274 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 275 | ······</p> | 275 | ······</p> |
| 276 | <p>Copyright·©·1996-202 | 276 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 277 | ····</footer> | 277 | ····</footer> |
| 278 | ··</div> | 278 | ··</div> |
| 279 | </main> | 279 | </main> |
| 280 | </div> | 280 | </div> |
| 281 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 281 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 282 | ··<script> | 282 | ··<script> |
| 283 | ··let·initialized·=·false; | 283 | ··let·initialized·=·false; |
| Offset 127, 29 lines modified | Offset 127, 29 lines modified | ||
| 127 | ··</h1> | 127 | ··</h1> |
| 128 | ····<section·id="moduledoc"> | 128 | ····<section·id="moduledoc"> |
| 129 | <p>Convenience·functions·for·microstate·accounting</p><p>This·module·implements·some·convenience·functions·for·analyzing·microstate | 129 | <p>Convenience·functions·for·microstate·accounting</p><p>This·module·implements·some·convenience·functions·for·analyzing·microstate |
| 130 | accounting·data.·For·details·about·how·to·use·the·basic·API·and·what·the | 130 | accounting·data.·For·details·about·how·to·use·the·basic·API·and·what·the |
| 131 | different·states·represent,·see | 131 | different·states·represent,·see |
| 132 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#statistics_microstate_accounting"><code·class="inline">erlang:statistics(microstate_accounting)</code></a>.</p><p><a·href=""·id="msacc_print_example"></a></p><p><em>Basic·Scenario</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7 | 132 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#statistics_microstate_accounting"><code·class="inline">erlang:statistics(microstate_accounting)</code></a>.</p><p><a·href=""·id="msacc_print_example"></a></p><p><em>Basic·Scenario</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7345126130-1">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="7345126130-1">)</span><span·class="p">.</span><span·class="w"> |
| 133 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 133 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 134 | 2>·</span><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="7 | 134 | 2>·</span><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="7345126130-2">(</span><span·class="p"·data-group-id="7345126130-2">)</span><span·class="p">.</span><span·class="w"> |
| 135 | </span><span·class="n">Average</span><span·class="w">·</span><span·class="ss">thread</span><span·class="w">·</span><span·class="ss">real</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">····</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000513</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> | 135 | </span><span·class="n">Average</span><span·class="w">·</span><span·class="ss">thread</span><span·class="w">·</span><span·class="ss">real</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">····</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">1000513</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> |
| 136 | </span><span·class="n">Accumulated</span><span·class="w">·</span><span·class="ss">system</span><span·class="w">·</span><span·class="ss">run</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">·</span><span·class="p">:</span><span·class="w">····</span><span·class="mi">2213</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> | 136 | </span><span·class="n">Accumulated</span><span·class="w">·</span><span·class="ss">system</span><span·class="w">·</span><span·class="ss">run</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">·</span><span·class="p">:</span><span·class="w">····</span><span·class="mi">2213</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> |
| 137 | </span><span·class="n">Average</span><span·class="w">·</span><span·class="ss">scheduler</span><span·class="w">·</span><span·class="ss">run</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">··</span><span·class="p">:</span><span·class="w">····</span><span·class="mi">1076</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> | 137 | </span><span·class="n">Average</span><span·class="w">·</span><span·class="ss">scheduler</span><span·class="w">·</span><span·class="ss">run</span><span·class="o">-</span><span·class="ss">time</span><span·class="w">··</span><span·class="p">:</span><span·class="w">····</span><span·class="mi">1076</span><span·class="w">·</span><span·class="ss">us</span><span·class="w"> |
| 138 | ········</span><span·class="n">Thread</span><span·class="w">······</span><span·class="ss">aux</span><span·class="w">·</span><span·class="ss">check_io</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·······</span><span·class="ss">gc</span><span·class="w">····</span><span·class="ss">other</span><span·class="w">·····</span><span·class="ss">port</span><span·class="w">····</span><span·class="ss">sleep</span><span·class="w"> | 138 | ········</span><span·class="n">Thread</span><span·class="w">······</span><span·class="ss">aux</span><span·class="w">·</span><span·class="ss">check_io</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·······</span><span·class="ss">gc</span><span·class="w">····</span><span·class="ss">other</span><span·class="w">·····</span><span·class="ss">port</span><span·class="w">····</span><span·class="ss">sleep</span><span·class="w"> |
| 139 | </span><span·class="n">Stats</span><span·class="w">·</span><span·class="ss">per</span><span·class="w">·</span><span·class="nc">thread</span><span·class="p">:</span><span·class="w"> | 139 | </span><span·class="n">Stats</span><span·class="w">·</span><span·class="ss">per</span><span·class="w">·</span><span·class="nc">thread</span><span·class="p">:</span><span·class="w"> |
| 140 | ·····</span><span·class="nf">async</span><span·class="p"·data-group-id="7 | 140 | ·····</span><span·class="nf">async</span><span·class="p"·data-group-id="7345126130-3">(</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="7345126130-3">)</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%··100.00%</span><span·class="w"> |
| 141 | ·····</span><span·class="nf">async</span><span·class="p"·data-group-id="7 | 141 | ·····</span><span·class="nf">async</span><span·class="p"·data-group-id="7345126130-4">(</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="7345126130-4">)</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%··100.00%</span><span·class="w"> |
| 142 | ·······</span><span·class="nf">aux</span><span·class="p"·data-group-id="7 | 142 | ·······</span><span·class="nf">aux</span><span·class="p"·data-group-id="7345126130-5">(</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="7345126130-5">)</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%···99.99%</span><span·class="w"> |
| 143 | ·</span><span·class="nf">scheduler</span><span·class="p"·data-group-id="7 | 143 | ·</span><span·class="nf">scheduler</span><span·class="p"·data-group-id="7345126130-6">(</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="7345126130-6">)</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.03%····0.13%····0.00%····0.01%····0.00%···99.82%</span><span·class="w"> |
| 144 | ·</span><span·class="nf">scheduler</span><span·class="p"·data-group-id="7 | 144 | ·</span><span·class="nf">scheduler</span><span·class="p"·data-group-id="7345126130-7">(</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="7345126130-7">)</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.03%····0.00%···99.97%</span><span·class="w"> |
| 145 | </span><span·class="n">Stats</span><span·class="w">·</span><span·class="ss">per</span><span·class="w">·</span><span·class="nc">type</span><span·class="p">:</span><span·class="w"> | 145 | </span><span·class="n">Stats</span><span·class="w">·</span><span·class="ss">per</span><span·class="w">·</span><span·class="nc">type</span><span·class="p">:</span><span·class="w"> |
| 146 | ·········</span><span·class="ss">async</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%··100.00%</span><span·class="w"> | 146 | ·········</span><span·class="ss">async</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%··100.00%</span><span·class="w"> |
| 147 | ···········</span><span·class="ss">aux</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%···99.99%</span><span·class="w"> | 147 | ···········</span><span·class="ss">aux</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.00%····0.00%····0.00%····0.00%····0.00%···99.99%</span><span·class="w"> |
| 148 | ·····</span><span·class="ss">scheduler</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.02%····0.06%····0.00%····0.02%····0.00%···99.89%</span><span·class="w"> | 148 | ·····</span><span·class="ss">scheduler</span><span·class="w">····</span><span·class="mf">0.00</span><span·class="c1">%····0.02%····0.06%····0.00%····0.02%····0.00%···99.89%</span><span·class="w"> |
| 149 | </span><span·class="ss">ok</span></code></pre><p>This·first·command·enables·microstate·accounting·for·1000·milliseconds.·See | 149 | </span><span·class="ss">ok</span></code></pre><p>This·first·command·enables·microstate·accounting·for·1000·milliseconds.·See |
| 150 | <a·href="#start/0"><code·class="inline">start/0</code></a>,·<a·href="#stop/0"><code·class="inline">stop/0</code></a>,·<a·href="#reset/0"><code·class="inline">reset/0</code></a>,·and·<a·href="#start/1"><code·class="inline">start/1</code></a>·for·more·details.·The·second | 150 | <a·href="#start/0"><code·class="inline">start/0</code></a>,·<a·href="#stop/0"><code·class="inline">stop/0</code></a>,·<a·href="#reset/0"><code·class="inline">reset/0</code></a>,·and·<a·href="#start/1"><code·class="inline">start/1</code></a>·for·more·details.·The·second |
| Offset 911, 15 lines modified | Offset 911, 15 lines modified | ||
| 911 | ······</div> | 911 | ······</div> |
| 912 | <p>Print·the·given·microstate·statistics·values·to·standard·out.·With·many·states | 912 | <p>Print·the·given·microstate·statistics·values·to·standard·out.·With·many·states |
| 913 | this·can·be·verbose.·See·the·top·of·this·reference·manual·for·a·brief | 913 | this·can·be·verbose.·See·the·top·of·this·reference·manual·for·a·brief |
| 914 | description·of·what·the·fields·mean.</p><p>It·is·possible·to·print·more·specific·types·of·statistics·by·first·manipulating | 914 | description·of·what·the·fields·mean.</p><p>It·is·possible·to·print·more·specific·types·of·statistics·by·first·manipulating |
| 915 | the·<code·class="inline">DataOrStats</code>·using·<a·href="#stats/2"><code·class="inline">stats/2</code></a>.·For·instance·if·you·want·to·print·the | 915 | the·<code·class="inline">DataOrStats</code>·using·<a·href="#stats/2"><code·class="inline">stats/2</code></a>.·For·instance·if·you·want·to·print·the |
| 916 | percentage·of·run-time·for·each·thread·you·can·do:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id=" | 916 | percentage·of·run-time·for·each·thread·you·can·do:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">print</span><span·class="p"·data-group-id="0694827917-1">(</span><span·class="nc">msacc</span><span·class="p">:</span><span·class="nf">stats</span><span·class="p"·data-group-id="0694827917-2">(</span><span·class="ss">runtime</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">msa[·...·truncated·by·diffoscope;·len:·1323,·SHA:·b9fad9ef168f4bbf68fd236fb8d3a019f5698a550b2f06e19a50682aeca879b2·...·]-1">)</span><span·class="p">.</span></code></pre><p><em>Options</em></p><ul><li><strong><code·class="inline">system</code></strong>·-·Print·percentage·of·time·spent·in·each·state·out·of·system·time |
| 917 | as·well·as·thread·time.·Default:·false.</li></ul> | 917 | as·well·as·thread·time.·Default:·false.</li></ul> |
| 918 | ··</section> | 918 | ··</section> |
| 919 | </section> | 919 | </section> |
| 920 | <section·class="detail"·id="print/3"> | 920 | <section·class="detail"·id="print/3"> |
| 921 | ··<div·class="detail-header"> | 921 | ··<div·class="detail-header"> |
| 922 | ····<a·href="#print/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 922 | ····<a·href="#print/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1186, 15 lines modified | Offset 1186, 15 lines modified | ||
| 1186 | ······<p·class="built-using"> | 1186 | ······<p·class="built-using"> |
| 1187 | ········Built·using | 1187 | ········Built·using |
| 1188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1190 | ······</p> | 1190 | ······</p> |
| 1191 | <p>Copyright·©·1996-202 | 1191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1192 | ····</footer> | 1192 | ····</footer> |
| 1193 | ··</div> | 1193 | ··</div> |
| 1194 | </main> | 1194 | </main> |
| 1195 | </div> | 1195 | </div> |
| 1196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1197 | ··<script> | 1197 | ··<script> |
| 1198 | ··let·initialized·=·false; | 1198 | ··let·initialized·=·false; |
| Offset 1275, 15 lines modified | Offset 1275, 15 lines modified | ||
| 1275 | ······<p·class="built-using"> | 1275 | ······<p·class="built-using"> |
| 1276 | ········Built·using | 1276 | ········Built·using |
| 1277 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1277 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1278 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1278 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1279 | ······</p> | 1279 | ······</p> |
| 1280 | <p>Copyright·©·1996-202 | 1280 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1281 | ····</footer> | 1281 | ····</footer> |
| 1282 | ··</div> | 1282 | ··</div> |
| 1283 | </main> | 1283 | </main> |
| 1284 | </div> | 1284 | </div> |
| 1285 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1285 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1286 | ··<script> | 1286 | ··<script> |
| 1287 | ··let·initialized·=·false; | 1287 | ··let·initialized·=·false; |
| Offset 191, 15 lines modified | Offset 191, 15 lines modified | ||
| 191 | ······<p·class="built-using"> | 191 | ······<p·class="built-using"> |
| 192 | ········Built·using | 192 | ········Built·using |
| 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 193 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 194 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 195 | ······</p> | 195 | ······</p> |
| 196 | <p>Copyright·©·1996-202 | 196 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 197 | ····</footer> | 197 | ····</footer> |
| 198 | ··</div> | 198 | ··</div> |
| 199 | </main> | 199 | </main> |
| 200 | </div> | 200 | </div> |
| 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 201 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 202 | ··<script> | 202 | ··<script> |
| 203 | ··let·initialized·=·false; | 203 | ··let·initialized·=·false; |
| Offset 591, 15 lines modified | Offset 591, 15 lines modified | ||
| 591 | ······</div> | 591 | ······</div> |
| 592 | <p>Measure·utilization·for·normal·and·dirty-cpu·schedulers·during·<code·class="inline">Seconds</code> | 592 | <p>Measure·utilization·for·normal·and·dirty-cpu·schedulers·during·<code·class="inline">Seconds</code> |
| 593 | seconds,·and·then·return·the·result.</p><p>Will·automatically·first·enable·and·then·disable | 593 | seconds,·and·then·return·the·result.</p><p>Will·automatically·first·enable·and·then·disable |
| 594 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#system_flag_scheduler_wall_time"><code·class="inline">scheduler_wall_time</code></a>.</p><p>Calculate·scheduler·utilizations·for·the·time·interval·from·when·<code·class="inline">Sample</code>·was | 594 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#system_flag_scheduler_wall_time"><code·class="inline">scheduler_wall_time</code></a>.</p><p>Calculate·scheduler·utilizations·for·the·time·interval·from·when·<code·class="inline">Sample</code>·was |
| 595 | taken·and·"now".·The·same·as·calling | 595 | taken·and·"now".·The·same·as·calling |
| 596 | <code·class="inline">scheduler:utilization(Sample,·scheduler:sample_all())</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·function·is·<em>not·recommended</em>·as·it's·so·easy·to·get·invalid·results | 596 | <code·class="inline">scheduler:utilization(Sample,·scheduler:sample_all())</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·function·is·<em>not·recommended</em>·as·it's·so·easy·to·get·invalid·results |
| 597 | without·noticing.·In·particular·do·not·do·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">scheduler</span><span·class="p">:</span><span·class="nf">utilization</span><span·class="p"·data-group-id=" | 597 | without·noticing.·In·particular·do·not·do·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">scheduler</span><span·class="p">:</span><span·class="nf">utilization</span><span·class="p"·data-group-id="3478301866-1">(</span><span·class="nc">scheduler</span><span·class="p">:</span><span·class="nf">sample</span><span·class="p"·data-group-id="3478301866-2">(</span><span·class="p"·data-group-id="3478301866-2">)</span><span·class="p"·data-group-id="3478301866-1">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·DO·NOT·DO·THIS!</span></code></pre><p>The·above·example·takes·two·samples·in·rapid·succession·and·calculates·the |
| 598 | scheduler·utilization·between·them.·The·resulting·values·will·probably·be·more | 598 | scheduler·utilization·between·them.·The·resulting·values·will·probably·be·more |
| 599 | misleading·than·informative.</p><p>Instead·use·<a·href="#utilization/2"><code·class="inline">scheduler:utilization/2</code></a>·and·call | 599 | misleading·than·informative.</p><p>Instead·use·<a·href="#utilization/2"><code·class="inline">scheduler:utilization/2</code></a>·and·call |
| 600 | <a·href="#get_sample/0"><code·class="inline">get_sample/0</code></a>·to·get·samples·with·some·time·in·between.</p></section> | 600 | <a·href="#get_sample/0"><code·class="inline">get_sample/0</code></a>·to·get·samples·with·some·time·in·between.</p></section> |
| 601 | ··</section> | 601 | ··</section> |
| 602 | </section> | 602 | </section> |
| 603 | <section·class="detail"·id="utilization/2"> | 603 | <section·class="detail"·id="utilization/2"> |
| Offset 657, 15 lines modified | Offset 657, 15 lines modified | ||
| 657 | ······<p·class="built-using"> | 657 | ······<p·class="built-using"> |
| 658 | ········Built·using | 658 | ········Built·using |
| 659 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 659 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 660 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 660 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 661 | ······</p> | 661 | ······</p> |
| 662 | <p>Copyright·©·1996-202 | 662 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 663 | ····</footer> | 663 | ····</footer> |
| 664 | ··</div> | 664 | ··</div> |
| 665 | </main> | 665 | </main> |
| 666 | </div> | 666 | </div> |
| 667 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 667 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 668 | ··<script> | 668 | ··<script> |
| 669 | ··let·initialized·=·false; | 669 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 290, 15 lines modified | Offset 290, 15 lines modified | ||
| 290 | ······<p·class="built-using"> | 290 | ······<p·class="built-using"> |
| 291 | ········Built·using | 291 | ········Built·using |
| 292 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 292 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 293 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 293 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 294 | ······</p> | 294 | ······</p> |
| 295 | <p>Copyright·©·1996-202 | 295 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 296 | ····</footer> | 296 | ····</footer> |
| 297 | ··</div> | 297 | ··</div> |
| 298 | </main> | 298 | </main> |
| 299 | </div> | 299 | </div> |
| 300 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 300 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 301 | ··<script> | 301 | ··<script> |
| 302 | ··let·initialized·=·false; | 302 | ··let·initialized·=·false; |
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 404, 15 lines modified | Offset 404, 15 lines modified | ||
| 404 | ······<p·class="built-using"> | 404 | ······<p·class="built-using"> |
| 405 | ········Built·using | 405 | ········Built·using |
| 406 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 406 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 407 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 407 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 408 | ······</p> | 408 | ······</p> |
| 409 | <p>Copyright·©·1996-202 | 409 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 410 | ····</footer> | 410 | ····</footer> |
| 411 | ··</div> | 411 | ··</div> |
| 412 | </main> | 412 | </main> |
| 413 | </div> | 413 | </div> |
| 414 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 414 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 415 | ··<script> | 415 | ··<script> |
| 416 | ··let·initialized·=·false; | 416 | ··let·initialized·=·false; |
| Offset 208, 15 lines modified | Offset 208, 15 lines modified | ||
| 208 | ······<p·class="built-using"> | 208 | ······<p·class="built-using"> |
| 209 | ········Built·using | 209 | ········Built·using |
| 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 210 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 211 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 212 | ······</p> | 212 | ······</p> |
| 213 | <p>Copyright·©·1996-202 | 213 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 214 | ····</footer> | 214 | ····</footer> |
| 215 | ··</div> | 215 | ··</div> |
| 216 | </main> | 216 | </main> |
| 217 | </div> | 217 | </div> |
| 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 218 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 219 | ··<script> | 219 | ··<script> |
| 220 | ··let·initialized·=·false; | 220 | ··let·initialized·=·false; |
| Offset 217, 29 lines modified | Offset 217, 29 lines modified | ||
| 217 | that·is,·if·a·process·using·the·module·spontaneously·switches·to·new·code,·or | 217 | that·is,·if·a·process·using·the·module·spontaneously·switches·to·new·code,·or |
| 218 | if·it·is·"static".·When·doing·an·advanced·update·and·upgrade,·the·new·version | 218 | if·it·is·"static".·When·doing·an·advanced·update·and·upgrade,·the·new·version |
| 219 | of·a·dynamic·module·is·loaded·before·the·process·is·asked·to·change·code.·When | 219 | of·a·dynamic·module·is·loaded·before·the·process·is·asked·to·change·code.·When |
| 220 | downgrading,·the·process·is·asked·to·change·code·before·loading·the·new | 220 | downgrading,·the·process·is·asked·to·change·code·before·loading·the·new |
| 221 | version.·For·static·modules,·the·new·version·is·loaded·before·the·process·is | 221 | version.·For·static·modules,·the·new·version·is·loaded·before·the·process·is |
| 222 | asked·to·change·code,·both·in·the·case·of·upgrading·and·downgrading.·Callback | 222 | asked·to·change·code,·both·in·the·case·of·upgrading·and·downgrading.·Callback |
| 223 | modules·are·dynamic.</p></li></ul><p><code·class="inline">update</code>·with·argument·<code·class="inline">supervisor</code>·is·used·when·changing·the·start | 223 | modules·are·dynamic.</p></li></ul><p><code·class="inline">update</code>·with·argument·<code·class="inline">supervisor</code>·is·used·when·changing·the·start |
| 224 | specification·of·a·supervisor.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 224 | specification·of·a·supervisor.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1419007099-1">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p"·data-group-id="1419007099-1">}</span><span·class="w"> |
| 225 | </span><span·class="p"·data-group-id=" | 225 | </span><span·class="p"·data-group-id="1419007099-2">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DepMods</span><span·class="p"·data-group-id="1419007099-2">}</span><span·class="w"> |
| 226 | </span><span·class="p"·data-group-id=" | 226 | </span><span·class="p"·data-group-id="1419007099-3">{</span><span·class="nb">load_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">PrePurge</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·153,·SHA:·abd90b4c23d190e339ad8cb679ea77a939db5c701c4f0e75a05349c4c27a4b36·...·]-3">}</span><span·class="w"> |
| 227 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 227 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1419007099-4">(</span><span·class="p"·data-group-id="1419007099-4">)</span><span·class="w"> |
| 228 | ··</span><span·class="n">PrePurge</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PostPurge</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">soft_purge</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">brutal_purge</span><span·class="w"> | 228 | ··</span><span·class="n">PrePurge</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">PostPurge</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">soft_purge</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">brutal_purge</span><span·class="w"> |
| 229 | ··</span><span·class="n">DepMods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 229 | ··</span><span·class="n">DepMods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1419007099-5">[</span><span·class="n">Mod</span><span·class="p"·data-group-id="1419007099-5">]</span></code></pre><p>Simple·code·replacement·of·the·module·<code·class="inline">Mod</code>.</p><p>For·a·description·of·<code·class="inline">PrePurge</code>·and·<code·class="inline">PostPurge</code>,·see·<code·class="inline">update</code>·above.</p><p><code·class="inline">DepMods</code>·defaults·to·<code·class="inline">[]</code>·and·defines·which·other·modules·<code·class="inline">Mod</code>·is·dependent |
| 230 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·for·loading·these·modules·come·before·the | 230 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·for·loading·these·modules·come·before·the |
| 231 | instruction·for·loading·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 231 | instruction·for·loading·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4750618411-1">{</span><span·class="ss">add_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p"·data-group-id="4750618411-1">}</span><span·class="w"> |
| 232 | </span><span·class="p"·data-group-id=" | 232 | </span><span·class="p"·data-group-id="4750618411-2">{</span><span·class="ss">add_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DepMods</span><span·class="p"·data-group-id="4750618411-2">}</span><span·class="w"> |
| 233 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 233 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="4750618411-3">(</span><span·class="p"·data-group-id="4750618411-3">)</span><span·class="w"> |
| 234 | ··</span><span·class="n">DepMods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 234 | ··</span><span·class="n">DepMods</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4750618411-4">[</span><span·class="n">Mod</span><span·class="p"·data-group-id="4750618411-4">]</span></code></pre><p>Loads·a·new·module·<code·class="inline">Mod</code>.</p><p><code·class="inline">DepMods</code>·defaults·to·<code·class="inline">[]</code>·and·defines·which·other·modules·<code·class="inline">Mod</code>·is·dependent |
| 235 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·related·to·these·modules·come·before·the | 235 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·related·to·these·modules·come·before·the |
| 236 | instruction·for·loading·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 236 | instruction·for·loading·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4376762230-1">{</span><span·class="nb">delete_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p"·data-group-id="4376762230-1">}</span><span·class="w"> |
| 237 | </span><span·class="p"·data-group-id=" | 237 | </span><span·class="p"·data-group-id="4376762230-2">{</span><span·class="nb">delete_module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DepMods</span><span·class="p"·data-group-id="4376762230-2">}</span><span·class="w"> |
| 238 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 238 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="4376762230-3">(</span><span·class="p"·data-group-id="4376762230-3">)</span></code></pre><p>Deletes·a·module·<code·class="inline">Mod</code>·using·the·low-level·instructions·<code·class="inline">remove</code>·and·<code·class="inline">purge</code>.</p><p><code·class="inline">DepMods</code>·defaults·to·<code·class="inline">[]</code>·and·defines·which·other·modules·<code·class="inline">Mod</code>·is·dependent |
| 239 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·related·to·these·modules·come·before·the | 239 | on.·In·the·<code·class="inline">relup</code>·file,·instructions·related·to·these·modules·come·before·the |
| 240 | instruction·for·removing·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="text">{add_application,·Application} | 240 | instruction·for·removing·<code·class="inline">Mod</code>·when·upgrading,·and·conversely·when·downgrading.</p><pre><code·class="text">{add_application,·Application} |
| 241 | {add_application,·Application,·Type} | 241 | {add_application,·Application,·Type} |
| 242 | ··Application·=·atom() | 242 | ··Application·=·atom() |
| 243 | ··Type·=·permanent·|·transient·|·temporary·|·load·|·none</code></pre><p>Adding·an·application·means·that·the·modules·defined·by·the·<code·class="inline">modules</code>·key·in·the | 243 | ··Type·=·permanent·|·transient·|·temporary·|·load·|·none</code></pre><p>Adding·an·application·means·that·the·modules·defined·by·the·<code·class="inline">modules</code>·key·in·the |
| 244 | <code·class="inline">.app</code>·file·are·loaded·using·<code·class="inline">add_module</code>.</p><p><code·class="inline">Type</code>·defaults·to·<code·class="inline">permanent</code>·and·specifies·the·start·type·of·the·application. | 244 | <code·class="inline">.app</code>·file·are·loaded·using·<code·class="inline">add_module</code>.</p><p><code·class="inline">Type</code>·defaults·to·<code·class="inline">permanent</code>·and·specifies·the·start·type·of·the·application. |
| 245 | If·<code·class="inline">Type·=·permanent·|·transient·|·temporary</code>,·the·application·is·loaded·and | 245 | If·<code·class="inline">Type·=·permanent·|·transient·|·temporary</code>,·the·application·is·loaded·and |
| Offset 258, 62 lines modified | Offset 258, 62 lines modified | ||
| 258 | application·is·not·loaded·and·not·started,·although·the·code·for·its·modules·is | 258 | application·is·not·loaded·and·not·started,·although·the·code·for·its·modules·is |
| 259 | loaded.</p><h3·id="low-level-instructions"·class="section-heading"> | 259 | loaded.</p><h3·id="low-level-instructions"·class="section-heading"> |
| 260 | ··<a·href="#low-level-instructions"·class="hover-link"> | 260 | ··<a·href="#low-level-instructions"·class="hover-link"> |
| 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 261 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 262 | ··</a> | 262 | ··</a> |
| 263 | ··<span·class="text">Low-Level·Instructions</span> | 263 | ··<span·class="text">Low-Level·Instructions</span> |
| 264 | </h3> | 264 | </h3> |
| 265 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 265 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0289581207-1">{</span><span·class="ss">load_object_code</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0289581207-2">{</span><span·class="n">App</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Vsn[·...·truncated·by·diffoscope;·len:·279,·SHA:·d41fd06cc4e4c650cee1a775eb1a2317c36aaa4e842878a1010828429fa815ee·...·]07-1">}</span><span·class="w"> |
| 266 | ··</span><span·class="n">App</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 266 | ··</span><span·class="n">App</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="0289581207-4">(</span><span·class="p"·data-group-id="0289581207-4">)</span><span·class="w"> |
| 267 | ··</span><span·class="n">Vsn</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 267 | ··</span><span·class="n">Vsn</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="0289581207-5">(</span><span·class="p"·data-group-id="0289581207-5">)</span></code></pre><p>Reads·each·<code·class="inline">Mod</code>·from·directory·<code·class="inline">App-Vsn/ebin</code>·as·a·binary.·It·does·not·load·the |
| 268 | modules.·The·instruction·is·to·be·placed·first·in·the·script·to·read·all·new | 268 | modules.·The·instruction·is·to·be·placed·first·in·the·script·to·read·all·new |
| 269 | code·from·the·file·to·make·the·suspend-load-resume·cycle·less·time-consuming.</p><pre><code·class="text">point_of_no_return</code></pre><p>If·a·crash·occurs·after·this·instruction,·the·system·cannot·recover·and·is | 269 | code·from·the·file·to·make·the·suspend-load-resume·cycle·less·time-consuming.</p><pre><code·class="text">point_of_no_return</code></pre><p>If·a·crash·occurs·after·this·instruction,·the·system·cannot·recover·and·is |
| 270 | restarted·from·the·old·release·version.·The·instruction·must·only·occur·once·in | 270 | restarted·from·the·old·release·version.·The·instruction·must·only·occur·once·in |
| 271 | a·script.·It·is·to·be·placed·after·all·<code·class="inline">load_object_code</code>·instructions.</p><pre><code·class="text">{load,·{Mod,·PrePurge,·PostPurge}} | 271 | a·script.·It·is·to·be·placed·after·all·<code·class="inline">load_object_code</code>·instructions.</p><pre><code·class="text">{load,·{Mod,·PrePurge,·PostPurge}} |
| 272 | ··Mod·=·atom() | 272 | ··Mod·=·atom() |
| 273 | ··PrePurge·=·PostPurge·=·soft_purge·|·brutal_purge</code></pre><p>Before·this·instruction·occurs,·<code·class="inline">Mod</code>·must·have·been·loaded·using | 273 | ··PrePurge·=·PostPurge·=·soft_purge·|·brutal_purge</code></pre><p>Before·this·instruction·occurs,·<code·class="inline">Mod</code>·must·have·been·loaded·using |
| 274 | <code·class="inline">load_object_code</code>.·This·instruction·loads·the·module.·<code·class="inline">PrePurge</code>·is·ignored. | 274 | <code·class="inline">load_object_code</code>.·This·instruction·loads·the·module.·<code·class="inline">PrePurge</code>·is·ignored. |
| 275 | For·a·description·of·<code·class="inline">PostPurge</code>,·see·the·high-level·instruction·<code·class="inline">update</code> | 275 | For·a·description·of·<code·class="inline">PostPurge</code>,·see·the·high-level·instruction·<code·class="inline">update</code> |
| 276 | earlier.</p><pre><code·class="text">{remove,·{Mod,·PrePurge,·PostPurge}} | 276 | earlier.</p><pre><code·class="text">{remove,·{Mod,·PrePurge,·PostPurge}} |
| 277 | ··Mod·=·atom() | 277 | ··Mod·=·atom() |
| 278 | ··PrePurge·=·PostPurge·=·soft_purge·|·brutal_purge</code></pre><p>Makes·the·current·version·of·<code·class="inline">Mod</code>·old.·<code·class="inline">PrePurge</code>·is·ignored.·For·a·description | 278 | ··PrePurge·=·PostPurge·=·soft_purge·|·brutal_purge</code></pre><p>Makes·the·current·version·of·<code·class="inline">Mod</code>·old.·<code·class="inline">PrePurge</code>·is·ignored.·For·a·description |
| 279 | of·<code·class="inline">PostPurge</code>,·see·the·high-level·instruction·<code·class="inline">update</code>·earlier.</p><pre><code·class="text">{purge,·[Mod]} | 279 | of·<code·class="inline">PostPurge</code>,·see·the·high-level·instruction·<code·class="inline">update</code>·earlier.</p><pre><code·class="text">{purge,·[Mod]} |
| 280 | ··Mod·=·atom()</code></pre><p>Purges·each·module·<code·class="inline">Mod</code>,·that·is,·removes·the·old·code.·Notice·that·any·process | 280 | ··Mod·=·atom()</code></pre><p>Purges·each·module·<code·class="inline">Mod</code>,·that·is,·removes·the·old·code.·Notice·that·any·process |
| 281 | executing·purged·code·is·killed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 281 | executing·purged·code·is·killed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1825663105-1">{</span><span·class="ss">suspend</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1825663105-2">[</span><span·class="n">Mod</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·300,·SHA:·895a988545285ba6e9e43de41950df2ff944ece53f925233051bd400858d2678·...·]-1">}</span><span·class="w"> |
| 282 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 282 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1825663105-4">(</span><span·class="p"·data-group-id="1825663105-4">)</span><span·class="w"> |
| 283 | ··</span><span·class="n">Timeout</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 283 | ··</span><span·class="n">Timeout</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="1825663105-5">(</span><span·class="p"·data-group-id="1825663105-5">)</span><span·class="o">></span><span·class="mi">0</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">default</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">infinity</span></code></pre><p>Tries·to·suspend·all·processes·using·a·module·<code·class="inline">Mod</code>.·If·a·process·does·not |
| 284 | respond,·it·is·ignored.·This·can·cause·the·process·to·die,·either·because·it | 284 | respond,·it·is·ignored.·This·can·cause·the·process·to·die,·either·because·it |
| 285 | crashes·when·it·spontaneously·switches·to·new·code,·or·as·a·result·of·a·purge | 285 | crashes·when·it·spontaneously·switches·to·new·code,·or·as·a·result·of·a·purge |
| 286 | operation.·If·no·<code·class="inline">Timeout</code>·is·specified·or·<code·class="inline">default</code>·is·specified,·the·default | 286 | operation.·If·no·<code·class="inline">Timeout</code>·is·specified·or·<code·class="inline">default</code>·is·specified,·the·default |
| 287 | value·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/sys.html#suspend/1"><code·class="inline">sys:suspend</code></a>·is·used.</p><pre><code·class="text">{resume,·[Mod]} | 287 | value·for·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/sys.html#suspend/1"><code·class="inline">sys:suspend</code></a>·is·used.</p><pre><code·class="text">{resume,·[Mod]} |
| 288 | ··Mod·=·atom()</code></pre><p>Resumes·all·suspended·processes·using·a·module·<code·class="inline">Mod</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 288 | ··Mod·=·atom()</code></pre><p>Resumes·all·suspended·processes·using·a·module·<code·class="inline">Mod</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2383733509-1">{</span><span·class="ss">code_change</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2383733509-2">[</span><span·class="p"·data-group-id="2383733509-3">{</span><span·class="n">Mod</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·204,·SHA:·4d899043c2d243773eac3ac02a2e10543f7e3d43bc68718afed082b0aa027201·...·]-1">}</span><span·class="w"> |
| 289 | </span><span·class="p"·data-group-id=" | 289 | </span><span·class="p"·data-group-id="2383733509-4">{</span><span·class="ss">code_change</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mode</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2383733509-5">[</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·279,·SHA:·4e37714187f6f21ffb5f9578b7f5dd385d1e18ec3adafe3a9ca09dae1061e67b·...·]-4">}</span><span·class="w"> |
| 290 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 290 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="2383733509-7">(</span><span·class="p"·data-group-id="2383733509-7">)</span><span·class="w"> |
| 291 | ··</span><span·class="n">Mode</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">up</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">down</span><span·class="w"> | 291 | ··</span><span·class="n">Mode</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">up</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">down</span><span·class="w"> |
| 292 | ··</span><span·class="n">Extra</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 292 | ··</span><span·class="n">Extra</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="2383733509-8">(</span><span·class="p"·data-group-id="2383733509-8">)</span></code></pre><p><code·class="inline">Mode</code>·defaults·to·<code·class="inline">up</code>·and·specifies·if·it·is·an·upgrade·or·downgrade.·This |
| 293 | instruction·sends·a·<code·class="inline">code_change</code>·system·message·to·all·processes·using·a·module | 293 | instruction·sends·a·<code·class="inline">code_change</code>·system·message·to·all·processes·using·a·module |
| 294 | <code·class="inline">Mod</code>·by·calling·function·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/sys.html#change_code/4"><code·class="inline">sys:change_code</code></a>,·passing·term | 294 | <code·class="inline">Mod</code>·by·calling·function·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/sys.html#change_code/4"><code·class="inline">sys:change_code</code></a>,·passing·term |
| 295 | <code·class="inline">Extra</code>·as·argument.</p><pre><code·class="text">{stop,·[Mod]} | 295 | <code·class="inline">Extra</code>·as·argument.</p><pre><code·class="text">{stop,·[Mod]} |
| 296 | ··Mod·=·atom()</code></pre><p>Stops·all·processes·using·a·module·<code·class="inline">Mod</code>·by·calling | 296 | ··Mod·=·atom()</code></pre><p>Stops·all·processes·using·a·module·<code·class="inline">Mod</code>·by·calling |
| 297 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#terminate_child/2"><code·class="inline">supervisor:terminate_child/2</code></a>.·This·instruction·is·useful·when·the·simplest·way | 297 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#terminate_child/2"><code·class="inline">supervisor:terminate_child/2</code></a>.·This·instruction·is·useful·when·the·simplest·way |
| 298 | to·change·code·is·to·stop·and·restart·the·processes·that·run·the·code.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1 | 298 | to·change·code·is·to·stop·and·restart·the·processes·that·run·the·code.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6188213485-1">{</span><span·class="ss">start</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6188213485-2">[</span><span·class="n">Mod</span><span·class="p"·data-group-id="6188213485-2">]</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·49f54d4f70f657fa04555cdc8a05f80b958c0f71dd7cb0b90b952d8e1effe8f2·...·]-1">}</span><span·class="w"> |
| 299 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="1 | 299 | ··</span><span·class="n">Mod</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="6188213485-3">(</span><span·class="p"·data-group-id="6188213485-3">)</span></code></pre><p>Starts·all·stopped·processes·using·a·module·<code·class="inline">Mod</code>·by·calling |
| 300 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#restart_child/2"><code·class="inline">supervisor:restart_child/2</code></a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 300 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/supervisor.html#restart_child/2"><code·class="inline">supervisor:restart_child/2</code></a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5413230773-1">{</span><span·class="ss">sync_nodes</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5413230773-2">[</span><span·class="n">Node</span[·...·truncated·by·diffoscope;·len:·95,·SHA:·ceff5f9aeed181fb84dcb9360117c73a89c94b0ceccd74ec5872db4920979a5f·...·]-1">}</span><span·class="w"> |
| 301 | </span><span·class="p"·data-group-id=" | 301 | </span><span·class="p"·data-group-id="5413230773-3">{</span><span·class="ss">sync_nodes</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5413230773-4">{</span><span·class="n">M</span><s[·...·truncated·by·diffoscope;·len:·236,·SHA:·7b5bd242002c1d38776fa6c0d6dad5878f4bab060aa4cadb4c1e96db3c6385ad·...·]-3">}</span><span·class="w"> |
| 302 | ··</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 302 | ··</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="5413230773-5">(</span><span·class="p"·data-group-id="5413230773-5">)</span><span·class="w"> |
| 303 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id=" | 303 | ··</span><span·class="n">Node</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">node</span><span·class="p"·data-group-id="5413230773-6">(</span><span·class="p"·data-group-id="5413230773-6">)</span><span·class="w"> |
| 304 | ··</span><span·class="n">M</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 304 | ··</span><span·class="n">M</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="5413230773-7">(</span><span·class="p"·data-group-id="5413230773-7">)</span><span·class="w"> |
| 305 | ··</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 305 | ··</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5413230773-8">[</span><span·class="nf">term</span><span·class="p"·data-group-id="5413230773-9">(</span><span·class="p"·data-group-id="5413230773-9">)</span><span·class="p"·data-group-id="5413230773-8">]</span></code></pre><p><a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,·F,·A)</code></a>·must·return·a·list·of·nodes.</p><p>This·instruction·synchronizes·the·release·installation·with·other·nodes.·Each |
| 306 | <code·class="inline">Node</code>·must·evaluate·this·command·with·the·same·<code·class="inline">Id</code>.·The·local·node·waits·for | 306 | <code·class="inline">Node</code>·must·evaluate·this·command·with·the·same·<code·class="inline">Id</code>.·The·local·node·waits·for |
| 307 | all·other·nodes·to·evaluate·the·instruction·before·execution·continues.·If·a | 307 | all·other·nodes·to·evaluate·the·instruction·before·execution·continues.·If·a |
| 308 | node·goes·down,·it·is·considered·to·be·an·unrecoverable·error,·and·the·local | 308 | node·goes·down,·it·is·considered·to·be·an·unrecoverable·error,·and·the·local |
| 309 | node·is·restarted·from·the·old·release.·There·is·no·time-out·for·this | 309 | node·is·restarted·from·the·old·release.·There·is·no·time-out·for·this |
| 310 | instruction,·which·means·that·it·can·hang·forever.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 310 | instruction,·which·means·that·it·can·hang·forever.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4591078620-1">{</span><span·class="nb">apply</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4591078620-2">{</span><span·class="n">M</span><span·class="p">,</span><span·class="w">·</span><span·class="n">F</span><span·cl[·...·truncated·by·diffoscope;·len:·158,·SHA:·e1111034ff8534b630c37929b3e5645d3c31bba6de1ca1aff495d3080ec1401c·...·]-1">}</span><span·class="w"> |
| 311 | ··</span><span·class="n">M</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id=" | 311 | ··</span><span·class="n">M</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">atom</span><span·class="p"·data-group-id="4591078620-3">(</span><span·class="p"·data-group-id="4591078620-3">)</span><span·class="w"> |
| 312 | ··</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 312 | ··</span><span·class="n">A</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4591078620-4">[</span><span·class="nf">term</span><span·class="p"·data-group-id="4591078620-5">(</span><span·class="p"·data-group-id="4591078620-5">)</span><span·class="p"·data-group-id="4591078620-4">]</span></code></pre><p>Evaluates·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,·F,·A)</code></a>.</p><p>If·the·instruction·appears·before·instruction·<code·class="inline">point_of_no_return</code>,·a·failure·is |
| 313 | caught.·<a·href="release_handler.html#install_release/1"><code·class="inline">release_handler:install_release/1</code></a>·then·returns | 313 | caught.·<a·href="release_handler.html#install_release/1"><code·class="inline">release_handler:install_release/1</code></a>·then·returns |
| 314 | <code·class="inline">{error,{'EXIT',Reason}}</code>,·unless·<code·class="inline">{error,Error}</code>·is·thrown·or·returned.·Then·it | 314 | <code·class="inline">{error,{'EXIT',Reason}}</code>,·unless·<code·class="inline">{error,Error}</code>·is·thrown·or·returned.·Then·it |
| 315 | returns·<code·class="inline">{error,Error}</code>.</p><p>If·the·instruction·appears·after·instruction·<code·class="inline">point_of_no_return</code>·and·the | 315 | returns·<code·class="inline">{error,Error}</code>.</p><p>If·the·instruction·appears·after·instruction·<code·class="inline">point_of_no_return</code>·and·the |
| 316 | function·call·fails,·the·system·is·restarted.</p><pre><code·class="text">restart_new_emulator</code></pre><p>This·instruction·is·used·when·the·application·ERTS,·Kernel,·STDLIB,·or·SASL·is | 316 | function·call·fails,·the·system·is·restarted.</p><pre><code·class="text">restart_new_emulator</code></pre><p>This·instruction·is·used·when·the·application·ERTS,·Kernel,·STDLIB,·or·SASL·is |
| 317 | upgraded.·It·shuts·down·the·current·emulator·and·starts·a·new·one.·All·processes | 317 | upgraded.·It·shuts·down·the·current·emulator·and·starts·a·new·one.·All·processes |
| 318 | are·terminated·gracefully,·and·the·new·version·of·ERTS,·Kernel,·STDLIB,·and·SASL | 318 | are·terminated·gracefully,·and·the·new·version·of·ERTS,·Kernel,·STDLIB,·and·SASL |
| 319 | are·used·when·the·emulator·restarts.·Only·one·<code·class="inline">restart_new_emulator</code>·instruction | 319 | are·used·when·the·emulator·restarts.·Only·one·<code·class="inline">restart_new_emulator</code>·instruction |
| Offset 391, 15 lines modified | Offset 391, 15 lines modified | ||
| 391 | ······<p·class="built-using"> | 391 | ······<p·class="built-using"> |
| 392 | ········Built·using | 392 | ········Built·using |
| 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 395 | ······</p> | 395 | ······</p> |
| 396 | <p>Copyright·©·1996-202 | 396 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 397 | ····</footer> | 397 | ····</footer> |
| 398 | ··</div> | 398 | ··</div> |
| 399 | </main> | 399 | </main> |
| 400 | </div> | 400 | </div> |
| 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 402 | ··<script> | 402 | ··<script> |
| 403 | ··let·initialized·=·false; | 403 | ··let·initialized·=·false; |
| Offset 304, 50 lines modified | Offset 304, 50 lines modified | ||
| 304 | ········ok</code></pre><h3·id="show-reports"·class="section-heading"> | 304 | ········ok</code></pre><h3·id="show-reports"·class="section-heading"> |
| 305 | ··<a·href="#show-reports"·class="hover-link"> | 305 | ··<a·href="#show-reports"·class="hover-link"> |
| 306 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 306 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 307 | ··</a> | 307 | ··</a> |
| 308 | ··<span·class="text">Show·Reports</span> | 308 | ··<span·class="text">Show·Reports</span> |
| 309 | </h3> | 309 | </h3> |
| 310 | <p>Use·function·<a·href="rb.html#show/1"><code·class="inline">rb:show(Number)</code></a>·to·show·details·of·a·specific | 310 | <p>Use·function·<a·href="rb.html#show/1"><code·class="inline">rb:show(Number)</code></a>·to·show·details·of·a·specific |
| 311 | report:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nc">rb</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id=" | 311 | report:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nc">rb</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id="2034151015-1">(</span><span·class="mi">4</span><span·class="p"·data-group-id="2034151015-1">)</span><span·class="p">.</span><span·class="w"> |
| 312 | </span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="w">··</span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">···································</span><span·class="mi">1996</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">16</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">36</span><span·class="w"> | 312 | </span><span·class="n">PROGRESS</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="w">··</span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">···································</span><span·class="mi">1996</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">16</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">36</span><span·class="w"> |
| 313 | </span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 313 | </span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 314 | </span><span·class="ss">supervisor</span><span·class="w">·····················································</span><span·class="p"·data-group-id=" | 314 | </span><span·class="ss">supervisor</span><span·class="w">·····················································</span><span·class="p"·data-group-id="2034151015-2">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="ss">sasl_sup</span><span·class="p"·data-group-id="2034151015-2">}</span><span·class="w"> |
| 315 | </span><span·class="ss">started</span><span·class="w"> | 315 | </span><span·class="ss">started</span><span·class="w"> |
| 316 | </span><span·class="p"·data-group-id=" | 316 | </span><span·class="p"·data-group-id="2034151015-3">[</span><span·class="p"·data-group-id="2034151015-4">{</span><span·class="ss">pid</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.24</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span[·...·truncated·by·diffoscope;·len:·42,·SHA:·62c4a2075588e6dae88a23e9ad4e91ad23abe6fb83f898108a65e41b944f8e31·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 317 | </span><span·class="p"·data-group-id=" | 317 | </span><span·class="p"·data-group-id="2034151015-5">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="ss">release_handler</span><span·class="p"·data-group-id="2034151015-5">}</span><span·class="p">,</span><span·class="w"> |
| 318 | </span><span·class="p"·data-group-id=" | 318 | </span><span·class="p"·data-group-id="2034151015-6">{</span><span·class="ss">mfa</span><span·class="p">,</span><span·class="p"·data-group-id="2034151015-7">{</span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="ss">start_link</span><span·class="p">,</span><span·cla[·...·truncated·by·diffoscope;·len:·191,·SHA:·eec3c03b250199c5e94b00720ac9aa69d70910688933d3f544ca2e0ce163d5c7·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 319 | </span><span·class="p"·data-group-id=" | 319 | </span><span·class="p"·data-group-id="2034151015-9">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="ss">permanent</span><span·class="p"·data-group-id="2034151015-9">}</span><span·class="p">,</span><span·class="w"> |
| 320 | </span><span·class="p"·data-group-id=" | 320 | </span><span·class="p"·data-group-id="2034151015-10">{</span><span·class="ss">shutdown</span><span·class="p">,</span><span·class="mi">2000</span><span·class="p"·data-group-id="2034151015-10">}</span><span·class="p">,</span><span·class="w"> |
| 321 | </span><span·class="p"·data-group-id=" | 321 | </span><span·class="p"·data-group-id="2034151015-11">{</span><span·class="ss">child_type</span><span·class="p">,</span><span·class="ss">worker</span><span·class="p"·data-group-id="2034151015-11">}</span><span·class="p"·data-group-id="2034151015-3">]</span><span·class="w"> |
| 322 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 322 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 323 | 8>·</span><span·class="nc">rb</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id=" | 323 | 8>·</span><span·class="nc">rb</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id="2034151015-12">(</span><span·class="mi">9</span><span·class="p"·data-group-id="2034151015-12">)</span><span·class="p">.</span><span·class="w"> |
| 324 | </span><span·class="n">CRASH</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="w">··</span><span·class="o"><</span><span·class="mf">0.24</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">······································</span><span·class="mi">1996</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">16</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">21</span><span·class="w"> | 324 | </span><span·class="n">CRASH</span><span·class="w">·</span><span·class="n">REPORT</span><span·class="w">··</span><span·class="o"><</span><span·class="mf">0.24</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">······································</span><span·class="mi">1996</span><span·class="o">-</span><span·class="mi">10</span><span·class="o">-</span><span·class="mi">16</span><span·class="w">·</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">16</span><span·class="p">:</span><span·class="mi">21</span><span·class="w"> |
| 325 | </span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> | 325 | </span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">==</span><span·class="o">=</span><span·class="w"> |
| 326 | </span><span·class="n">Crashing</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> | 326 | </span><span·class="n">Crashing</span><span·class="w">·</span><span·class="ss">process</span><span·class="w"> |
| 327 | </span><span·class="ss">pid</span><span·class="w">·································································</span><span·class="o"><</span><span·class="mf">0.24</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> | 327 | </span><span·class="ss">pid</span><span·class="w">·································································</span><span·class="o"><</span><span·class="mf">0.24</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w"> |
| 328 | </span><span·class="ss">registered_name</span><span·class="w">··············································</span><span·class="ss">release_handler</span><span·class="w"> | 328 | </span><span·class="ss">registered_name</span><span·class="w">··············································</span><span·class="ss">release_handler</span><span·class="w"> |
| 329 | </span><span·class="ss">error_info</span><span·class="w">·····························</span><span·class="p"·data-group-id=" | 329 | </span><span·class="ss">error_info</span><span·class="w">·····························</span><span·class="p"·data-group-id="2034151015-13">{</span><span·class="ss">undef</span><span·class="p">,</span><span·class="p"·data-group-id="2034151015-14">{</span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="ss">mbj_func</span><span·class="p">,</span><span·c[·...·truncated·by·diffoscope;·len:·196,·SHA:·d3be23fd30a30514d00a88885384feace2d8aa7adc833f60954b379c68ac86e1·...·]-13">}</span><span·class="w"> |
| 330 | </span><span·class="ss">initial_call</span><span·class="w"> | 330 | </span><span·class="ss">initial_call</span><span·class="w"> |
| 331 | </span><span·class="p"·data-group-id=" | 331 | </span><span·class="p"·data-group-id="2034151015-16">{</span><span·class="ss">gen</span><span·class="p">,</span><span·class="ss">init_it</span><span·class="p">,</span><span·class="w"> |
| 332 | </span><span·class="p"·data-group-id=" | 332 | </span><span·class="p"·data-group-id="2034151015-17">[</span><span·class="ss">gen_server</span><span·class="p">,</span><span·class="w"> |
| 333 | </span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="w"> | 333 | </span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="w"> |
| 334 | </span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="w"> | 334 | </span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="w"> |
| 335 | </span><span·class="p"·data-group-id=" | 335 | </span><span·class="p"·data-group-id="2034151015-18">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="nb">register</span><span·class="p"·data-group-id="2034151015-18">}</span><span·class="p">,</span><span·class="w"> |
| 336 | </span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="w"> | 336 | </span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="w"> |
| 337 | </span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="w"> | 337 | </span><span·class="ss">release_handler</span><span·class="p">,</span><span·class="w"> |
| 338 | </span><span·class="p"·data-group-id=" | 338 | </span><span·class="p"·data-group-id="2034151015-19">[</span><span·class="p"·data-group-id="2034151015-19">]</span><span·class="p">,</span><span·class="w"> |
| 339 | </span><span·class="p"·data-group-id=" | 339 | </span><span·class="p"·data-group-id="2034151015-20">[</span><span·class="p"·data-group-id="2034151015-20">]</span><span·class="p"·data-group-id="2034151015-17">]</span><span·class="p"·data-group-id="2034151015-16">}</span><span·class="w"> |
| 340 | </span><span·class="ss">ancestors</span><span·class="w">················································</span><span·class="p"·data-group-id=" | 340 | </span><span·class="ss">ancestors</span><span·class="w">················································</span><span·class="p"·data-group-id="2034151015-21">[</span><span·class="ss">sasl_sup</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.18</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="2034151015-21">]</span><span·class="w"> |
| 341 | </span><span·class="ss">messages</span><span·class="w">··································································</span><span·class="p"·data-group-id=" | 341 | </span><span·class="ss">messages</span><span·class="w">··································································</span><span·class="p"·data-group-id="2034151015-22">[</span><span·class="p"·data-group-id="2034151015-22">]</span><span·class="w"> |
| 342 | </span><span·class="ss">links</span><span·class="w">····················································</span><span·class="p"·data-group-id=" | 342 | </span><span·class="ss">links</span><span·class="w">····················································</span><span·class="p"·data-group-id="2034151015-23">[</span><span·class="o"><</span><span·class="mf">0.23</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.20</span><span·class="p">.</span[·...·truncated·by·diffoscope;·len:·94,·SHA:·6e8332910fd9295fbb2611243c145ff74211cd5cbbc66b7c36257b186493d858·...·]-23">]</span><span·class="w"> |
| 343 | </span><span·class="ss">dictionary</span><span·class="w">································································</span><span·class="p"·data-group-id=" | 343 | </span><span·class="ss">dictionary</span><span·class="w">································································</span><span·class="p"·data-group-id="2034151015-24">[</span><span·class="p"·data-group-id="2034151015-24">]</span><span·class="w"> |
| 344 | </span><span·class="ss">trap_exit</span><span·class="w">······························································</span><span·class="ss">false</span><span·class="w"> | 344 | </span><span·class="ss">trap_exit</span><span·class="w">······························································</span><span·class="ss">false</span><span·class="w"> |
| 345 | </span><span·class="ss">status</span><span·class="w">·······························································</span><span·class="ss">running</span><span·class="w"> | 345 | </span><span·class="ss">status</span><span·class="w">·······························································</span><span·class="ss">running</span><span·class="w"> |
| 346 | </span><span·class="ss">heap_size</span><span·class="w">································································</span><span·class="mi">610</span><span·class="w"> | 346 | </span><span·class="ss">heap_size</span><span·class="w">································································</span><span·class="mi">610</span><span·class="w"> |
| 347 | </span><span·class="ss">stack_size</span><span·class="w">·······························································</span><span·class="mi">142</span><span·class="w"> | 347 | </span><span·class="ss">stack_size</span><span·class="w">·······························································</span><span·class="mi">142</span><span·class="w"> |
| 348 | </span><span·class="ss">reductions</span><span·class="w">································································</span><span·class="mi">54</span><span·class="w"> | 348 | </span><span·class="ss">reductions</span><span·class="w">································································</span><span·class="mi">54</span><span·class="w"> |
| 349 | </span><span·class="ss">ok</span></code></pre><h3·id="search-reports"·class="section-heading"> | 349 | </span><span·class="ss">ok</span></code></pre><h3·id="search-reports"·class="section-heading"> |
| Offset 481, 15 lines modified | Offset 481, 15 lines modified | ||
| 481 | ······<p·class="built-using"> | 481 | ······<p·class="built-using"> |
| 482 | ········Built·using | 482 | ········Built·using |
| 483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 483 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 484 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 485 | ······</p> | 485 | ······</p> |
| 486 | <p>Copyright·©·1996-202 | 486 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 487 | ····</footer> | 487 | ····</footer> |
| 488 | ··</div> | 488 | ··</div> |
| 489 | </main> | 489 | </main> |
| 490 | </div> | 490 | </div> |
| 491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 491 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 492 | ··<script> | 492 | ··<script> |
| 493 | ··let·initialized·=·false; | 493 | ··let·initialized·=·false; |
| Offset 1159, 15 lines modified | Offset 1159, 15 lines modified | ||
| 1159 | ······<p·class="built-using"> | 1159 | ······<p·class="built-using"> |
| 1160 | ········Built·using | 1160 | ········Built·using |
| 1161 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1161 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1162 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1162 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1163 | ······</p> | 1163 | ······</p> |
| 1164 | <p>Copyright·©·1996-202 | 1164 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1165 | ····</footer> | 1165 | ····</footer> |
| 1166 | ··</div> | 1166 | ··</div> |
| 1167 | </main> | 1167 | </main> |
| 1168 | </div> | 1168 | </div> |
| 1169 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1169 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1170 | ··<script> | 1170 | ··<script> |
| 1171 | ··let·initialized·=·false; | 1171 | ··let·initialized·=·false; |
| Offset 1065, 15 lines modified | Offset 1065, 15 lines modified | ||
| 1065 | ······<p·class="built-using"> | 1065 | ······<p·class="built-using"> |
| 1066 | ········Built·using | 1066 | ········Built·using |
| 1067 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1067 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1068 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1068 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1069 | ······</p> | 1069 | ······</p> |
| 1070 | <p>Copyright·©·1996-202 | 1070 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1071 | ····</footer> | 1071 | ····</footer> |
| 1072 | ··</div> | 1072 | ··</div> |
| 1073 | </main> | 1073 | </main> |
| 1074 | </div> | 1074 | </div> |
| 1075 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1075 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1076 | ··<script> | 1076 | ··<script> |
| 1077 | ··let·initialized·=·false; | 1077 | ··let·initialized·=·false; |
| Offset 136, 19 lines modified | Offset 136, 19 lines modified | ||
| 136 | (<code·class="inline">.script</code>,·<code·class="inline">.boot</code>)·and·release·upgrade·files·(<code·class="inline">relup</code>).</p><h2·id="file-syntax"·class="section-heading"> | 136 | (<code·class="inline">.script</code>,·<code·class="inline">.boot</code>)·and·release·upgrade·files·(<code·class="inline">relup</code>).</p><h2·id="file-syntax"·class="section-heading"> |
| 137 | ··<a·href="#file-syntax"·class="hover-link"> | 137 | ··<a·href="#file-syntax"·class="hover-link"> |
| 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 139 | ··</a> | 139 | ··</a> |
| 140 | ··<span·class="text">File·Syntax</span> | 140 | ··<span·class="text">File·Syntax</span> |
| 141 | </h2> | 141 | </h2> |
| 142 | <p>The·release·resource·file·is·to·be·called·<code·class="inline">Name.rel</code>.</p><p>The·<code·class="inline">.rel</code>·file·contains·one·single·Erlang·term,·which·is·called·a·<em>release | 142 | <p>The·release·resource·file·is·to·be·called·<code·class="inline">Name.rel</code>.</p><p>The·<code·class="inline">.rel</code>·file·contains·one·single·Erlang·term,·which·is·called·a·<em>release |
| 143 | specification</em>.·The·file·has·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 143 | specification</em>.·The·file·has·the·following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4611380762-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4611380762-2">{</span><span·class="n">RelName</span><span·class="p">,</span><span·class="n">Vsn</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·276,·SHA:·dba9f7a11e4158be6d5be0f6096395b6676665dc6ea84348e0527765fdae47c1·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 144 | ··</span><span·class="p"·data-group-id=" | 144 | ··</span><span·class="p"·data-group-id="4611380762-4">[</span><span·class="p"·data-group-id="4611380762-5">{</span><span·class="n">Application</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsn</span><span·class="p"·data-group-id="4611380762-5">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 145 | ···</span><span·class="p"·data-group-id=" | 145 | ···</span><span·class="p"·data-group-id="4611380762-6">{</span><span·class="n">Application</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p"·data-group-id="4611380762-6">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 146 | ···</span><span·class="p"·data-group-id=" | 146 | ···</span><span·class="p"·data-group-id="4611380762-7">{</span><span·class="n">Application</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">IncApps</span><span·class="p"·data-group-id="4611380762-7">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 147 | ···</span><span·class="p"·data-group-id=" | 147 | ···</span><span·class="p"·data-group-id="4611380762-8">{</span><span·class="n">Application</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AppVsn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Type</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·177,·SHA:·dd948a63402c538152c282a76a093c35eec5b4e02d79fad95b7745e71d1b3506·...·]-1">}</span><span·class="p">.</span></code></pre><ul><li><p><strong><code·class="inline">RelName·=·string()</code></strong>·-·Release·name.</p></li><li><p><strong><code·class="inline">Vsn·=·string()</code></strong>·-·Release·version.</p></li><li><p><strong><code·class="inline">EVsn·=·string()</code></strong>·-·ERTS·version·the·release·is·intended·for.</p></li><li><p><strong><code·class="inline">Application·=·atom()</code></strong>·-·Name·of·an·application·included·in·the·release.</p></li><li><p><strong><code·class="inline">AppVsn·=·string()</code></strong>·-·Version·of·an·application·included·in·the·release.</p></li><li><p><strong><code·class="inline">Type·=·permanent·|·transient·|·temporary·|·load·|·none</code></strong>·-·Start·type·of |
| 148 | an·application·included·in·the·release.</p><p>If·<code·class="inline">Type·=·permanent·|·transient·|·temporary</code>,·the·application·is·loaded·and | 148 | an·application·included·in·the·release.</p><p>If·<code·class="inline">Type·=·permanent·|·transient·|·temporary</code>,·the·application·is·loaded·and |
| 149 | started·in·the·corresponding·way,·see·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/application.html"><code·class="inline">application</code></a>.</p><p>If·<code·class="inline">Type·=·load</code>,·the·application·is·only·loaded.</p><p>If·<code·class="inline">Type·=·none</code>,·the·application·is·not·loaded·and·not·started,·although·the | 149 | started·in·the·corresponding·way,·see·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/application.html"><code·class="inline">application</code></a>.</p><p>If·<code·class="inline">Type·=·load</code>,·the·application·is·only·loaded.</p><p>If·<code·class="inline">Type·=·none</code>,·the·application·is·not·loaded·and·not·started,·although·the |
| 150 | code·for·its·modules·is·loaded.</p><p>Defaults·to·<code·class="inline">permanent</code></p></li><li><p><strong><code·class="inline">IncApps·=·[atom()]</code></strong>·-·A·list·of·applications·that·are·included·by·an | 150 | code·for·its·modules·is·loaded.</p><p>Defaults·to·<code·class="inline">permanent</code></p></li><li><p><strong><code·class="inline">IncApps·=·[atom()]</code></strong>·-·A·list·of·applications·that·are·included·by·an |
| 151 | application·included·in·the·release.·The·list·must·be·a·subset·of·the·included | 151 | application·included·in·the·release.·The·list·must·be·a·subset·of·the·included |
| 152 | applications·specified·in·the·application·resource·file·(<code·class="inline">Application.app</code>) | 152 | applications·specified·in·the·application·resource·file·(<code·class="inline">Application.app</code>) |
| 153 | and·overrides·this·value.·Defaults·to·the·same·value·as·in·the·application | 153 | and·overrides·this·value.·Defaults·to·the·same·value·as·in·the·application |
| 154 | resource·file.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·list·of·applications·must·contain·the·Kernel·and·STDLIB·applications.</p></section><h2·id="see-also"·class="section-heading"> | 154 | resource·file.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·list·of·applications·must·contain·the·Kernel·and·STDLIB·applications.</p></section><h2·id="see-also"·class="section-heading"> |
| Offset 204, 15 lines modified | Offset 204, 15 lines modified | ||
| 204 | ······<p·class="built-using"> | 204 | ······<p·class="built-using"> |
| 205 | ········Built·using | 205 | ········Built·using |
| 206 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 206 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 207 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 207 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 208 | ······</p> | 208 | ······</p> |
| 209 | <p>Copyright·©·1996-202 | 209 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 210 | ····</footer> | 210 | ····</footer> |
| 211 | ··</div> | 211 | ··</div> |
| 212 | </main> | 212 | </main> |
| 213 | </div> | 213 | </div> |
| 214 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 214 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 215 | ··<script> | 215 | ··<script> |
| 216 | ··let·initialized·=·false; | 216 | ··let·initialized·=·false; |
| Offset 1054, 16 lines modified | Offset 1054, 16 lines modified | ||
| 1054 | updated·(<code·class="inline">Bool==true</code>)·or·if·only·code·paths·for·modified·applications·are·to | 1054 | updated·(<code·class="inline">Bool==true</code>)·or·if·only·code·paths·for·modified·applications·are·to |
| 1055 | be·updated·(<code·class="inline">Bool==false</code>,·default).·This·option·has·only·effect·for·other | 1055 | be·updated·(<code·class="inline">Bool==false</code>,·default).·This·option·has·only·effect·for·other |
| 1056 | application·directories·than·the·default·<code·class="inline">$ROOT/lib/App-Vsn</code>,·that·is, | 1056 | application·directories·than·the·default·<code·class="inline">$ROOT/lib/App-Vsn</code>,·that·is, |
| 1057 | application·directories·specified·in·argument·<code·class="inline">AppDirs</code>·in·a·call·to | 1057 | application·directories·specified·in·argument·<code·class="inline">AppDirs</code>·in·a·call·to |
| 1058 | <a·href="#create_RELEASES/4"><code·class="inline">create_RELEASES/4</code></a>·or·<a·href="#set_unpacked/2"><code·class="inline">set_unpacked/2</code></a>.</p><p><em>Example:</em></p><p>In·the·current·version·<code·class="inline">CurVsn</code>·of·a·release,·the·application·directory·of | 1058 | <a·href="#create_RELEASES/4"><code·class="inline">create_RELEASES/4</code></a>·or·<a·href="#set_unpacked/2"><code·class="inline">set_unpacked/2</code></a>.</p><p><em>Example:</em></p><p>In·the·current·version·<code·class="inline">CurVsn</code>·of·a·release,·the·application·directory·of |
| 1059 | <code·class="inline">myapp</code>·is·<code·class="inline">$ROOT/lib/myapp-1.0</code>.·A·new·version·<code·class="inline">NewVsn</code>·is·unpacked·outside | 1059 | <code·class="inline">myapp</code>·is·<code·class="inline">$ROOT/lib/myapp-1.0</code>.·A·new·version·<code·class="inline">NewVsn</code>·is·unpacked·outside |
| 1060 | the·release·handler·and·the·release·handler·is·informed·about·this·with·a·call | 1060 | the·release·handler·and·the·release·handler·is·informed·about·this·with·a·call |
| 1061 | as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">release_handler</span><span·class="p">:</span><span·class="nf">set_unpacked</span><span·class="p"·data-group-id=" | 1061 | as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">release_handler</span><span·class="p">:</span><span·class="nf">set_unpacked</span><span·class="p"·data-group-id="6003097132-1">(</span><span·class="n">RelFile</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6003097132-2">[</span><span·class="p"·data-group-id="6003097132-3">{</span><span·class="ss">myapp</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·353,·SHA:·875427a1f493a5acde24d4d2829f59a0b7efadbc381f6e98e287a030cc912269·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1062 | </span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 1062 | </span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="6003097132-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">NewVsn</span><span·class="p"·data-group-id="6003097132-4">}</span></code></pre><p>If·<code·class="inline">NewVsn</code>·is·installed·with·option·<code·class="inline">{update_paths,true}</code>,·then |
| 1063 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#lib_dir/1"><code·class="inline">code:lib_dir(myapp)</code></a>·returns·<code·class="inline">/home/user/myapp-1.0</code>.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Installing·a·new·release·can·be·time·consuming·if·there·are·many·processes·in | 1063 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#lib_dir/1"><code·class="inline">code:lib_dir(myapp)</code></a>·returns·<code·class="inline">/home/user/myapp-1.0</code>.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Installing·a·new·release·can·be·time·consuming·if·there·are·many·processes·in |
| 1064 | the·system.·The·reason·is·that·each·process·must·be·checked·for·references·to | 1064 | the·system.·The·reason·is·that·each·process·must·be·checked·for·references·to |
| 1065 | old·code·before·a·module·can·be·purged.·This·check·can·lead·to·garbage | 1065 | old·code·before·a·module·can·be·purged.·This·check·can·lead·to·garbage |
| 1066 | collections·and·copying·of·data.</p><p>To·speed·up·the·execution·of·<a·href="#install_release/1"><code·class="inline">install_release</code></a>,·first | 1066 | collections·and·copying·of·data.</p><p>To·speed·up·the·execution·of·<a·href="#install_release/1"><code·class="inline">install_release</code></a>,·first |
| 1067 | call·<a·href="#check_install_release/1"><code·class="inline">check_install_release</code></a>,·using·option | 1067 | call·<a·href="#check_install_release/1"><code·class="inline">check_install_release</code></a>,·using·option |
| 1068 | <code·class="inline">purge</code>.·This·does·the·same·check·for·old·code.·Then·purges·all·modules·that | 1068 | <code·class="inline">purge</code>.·This·does·the·same·check·for·old·code.·Then·purges·all·modules·that |
| 1069 | can·be·soft-purged.·The·purged·modules·do·then·no·longer·have·any·old·code, | 1069 | can·be·soft-purged.·The·purged·modules·do·then·no·longer·have·any·old·code, |
| Offset 1340, 15 lines modified | Offset 1340, 15 lines modified | ||
| 1340 | ······<p·class="built-using"> | 1340 | ······<p·class="built-using"> |
| 1341 | ········Built·using | 1341 | ········Built·using |
| 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1344 | ······</p> | 1344 | ······</p> |
| 1345 | <p>Copyright·©·1996-202 | 1345 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1346 | ····</footer> | 1346 | ····</footer> |
| 1347 | ··</div> | 1347 | ··</div> |
| 1348 | </main> | 1348 | </main> |
| 1349 | </div> | 1349 | </div> |
| 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1351 | ··<script> | 1351 | ··<script> |
| 1352 | ··let·initialized·=·false; | 1352 | ··let·initialized·=·false; |
| Offset 206, 15 lines modified | Offset 206, 15 lines modified | ||
| 206 | ······<p·class="built-using"> | 206 | ······<p·class="built-using"> |
| 207 | ········Built·using | 207 | ········Built·using |
| 208 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 208 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 209 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 209 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 210 | ······</p> | 210 | ······</p> |
| 211 | <p>Copyright·©·1996-202 | 211 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 212 | ····</footer> | 212 | ····</footer> |
| 213 | ··</div> | 213 | ··</div> |
| 214 | </main> | 214 | </main> |
| 215 | </div> | 215 | </div> |
| 216 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 216 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 217 | ··<script> | 217 | ··<script> |
| 218 | ··let·initialized·=·false; | 218 | ··let·initialized·=·false; |
| Offset 261, 15 lines modified | Offset 261, 15 lines modified | ||
| 261 | ······<p·class="built-using"> | 261 | ······<p·class="built-using"> |
| 262 | ········Built·using | 262 | ········Built·using |
| 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 265 | ······</p> | 265 | ······</p> |
| 266 | <p>Copyright·©·1996-202 | 266 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 267 | ····</footer> | 267 | ····</footer> |
| 268 | ··</div> | 268 | ··</div> |
| 269 | </main> | 269 | </main> |
| 270 | </div> | 270 | </div> |
| 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 272 | ··<script> | 272 | ··<script> |
| 273 | ··let·initialized·=·false; | 273 | ··let·initialized·=·false; |
| Offset 188, 15 lines modified | Offset 188, 15 lines modified | ||
| 188 | ······<p·class="built-using"> | 188 | ······<p·class="built-using"> |
| 189 | ········Built·using | 189 | ········Built·using |
| 190 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 190 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 191 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 191 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 192 | ······</p> | 192 | ······</p> |
| 193 | <p>Copyright·©·1996-202 | 193 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 194 | ····</footer> | 194 | ····</footer> |
| 195 | ··</div> | 195 | ··</div> |
| 196 | </main> | 196 | </main> |
| 197 | </div> | 197 | </div> |
| 198 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 198 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 199 | ··<script> | 199 | ··<script> |
| 200 | ··let·initialized·=·false; | 200 | ··let·initialized·=·false; |
| Offset 138, 28 lines modified | Offset 138, 28 lines modified | ||
| 138 | files.</p><h2·id="file-syntax"·class="section-heading"> | 138 | files.</p><h2·id="file-syntax"·class="section-heading"> |
| 139 | ··<a·href="#file-syntax"·class="hover-link"> | 139 | ··<a·href="#file-syntax"·class="hover-link"> |
| 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 141 | ··</a> | 141 | ··</a> |
| 142 | ··<span·class="text">File·Syntax</span> | 142 | ··<span·class="text">File·Syntax</span> |
| 143 | </h2> | 143 | </h2> |
| 144 | <p>The·boot·script·is·stored·in·a·file·with·extension·<code·class="inline">.script</code>.·The·file·has·the | 144 | <p>The·boot·script·is·stored·in·a·file·with·extension·<code·class="inline">.script</code>.·The·file·has·the |
| 145 | following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 145 | following·syntax:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9248774984-1">{</span><span·class="ss">script</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-2">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Vsn</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·fde32308154cd4750837e230f0836d46cf39f8bc8e52d65165907ed6606e384d·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 146 | ·</span><span·class="p"·data-group-id=" | 146 | ·</span><span·class="p"·data-group-id="9248774984-3">[</span><span·class="w"> |
| 147 | ··</span><span·class="p"·data-group-id=" | 147 | ··</span><span·class="p"·data-group-id="9248774984-4">{</span><span·class="ss">progress</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">loading</span><span·class="p"·data-group-id="9248774984-4">}</span><span·class="p">,</span><span·class="w"> |
| 148 | ··</span><span·class="p"·data-group-id=" | 148 | ··</span><span·class="p"·data-group-id="9248774984-5">{</span><span·class="ss">preLoaded</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-6">[</span><span·class="n">Mod1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod2</spa[·...·truncated·by·diffoscope;·len:·216,·SHA:·645938a95ed650167b6a963f2d17d706249d025fcb63d67be8807d2069c5f771·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 149 | ··</span><span·class="p"·data-group-id=" | 149 | ··</span><span·class="p"·data-group-id="9248774984-7">{</span><span·class="ss">path</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-8">[</span><span·class="n">Dir1</span><span·class="p">,</span><span·class="s">"$ROOT/Dir"</span><span·clas[·...·truncated·by·diffoscope;·len:·180,·SHA:·e9eb49173b7585a4632049a4d0936923479eda9f29f35baeff119554cf360d71·...·]-7">}</span><span·class="p">.</span><span·class="w"> |
| 150 | ··</span><span·class="p"·data-group-id=" | 150 | ··</span><span·class="p"·data-group-id="9248774984-9">{</span><span·class="ss">primLoad</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-10">[</span><span·class="n">Mod1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod2</spa[·...·truncated·by·diffoscope;·len:·217,·SHA:·a1cc55be21f2db5132d33abe1a2946aa9580fc4870de32bc888893a3a456e2d4·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 151 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 151 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 152 | ··</span><span·class="p"·data-group-id=" | 152 | ··</span><span·class="p"·data-group-id="9248774984-11">{</span><span·class="ss">kernel_load_completed</span><span·class="p"·data-group-id="9248774984-11">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ··</span><span·class="p"·data-group-id=" | 153 | ··</span><span·class="p"·data-group-id="9248774984-12">{</span><span·class="ss">progress</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">loaded</span><span·class="p"·data-group-id="9248774984-12">}</span><span·class="p">,</span><span·class="w"> |
| 154 | ··</span><span·class="p"·data-group-id=" | 154 | ··</span><span·class="p"·data-group-id="9248774984-13">{</span><span·class="ss">kernelProcess</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-14">{</span><span·class="n">Mod[·...·truncated·by·diffoscope;·len:·252,·SHA:·138bd275f29ec6d1e44e6fb258edbc6c986801bccff3ab0382b9a42c61b96722·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 155 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 156 | ··</span><span·class="p"·data-group-id=" | 156 | ··</span><span·class="p"·data-group-id="9248774984-15">{</span><span·class="nb">apply</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9248774984-16">{</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Func</span><[·...·truncated·by·diffoscope;·len:·169,·SHA:·1379acb6ac9243c337ebec5732cce651e2df4cefcacb0458bb0e242f8371962b·...·]-15">}</span><span·class="p">,</span><span·class="w"> |
| 157 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 157 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 158 | ··</span><span·class="p"·data-group-id=" | 158 | ··</span><span·class="p"·data-group-id="9248774984-17">{</span><span·class="ss">progress</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">started</span><span·class="p"·data-group-id="9248774984-17">}</span><span·class="p"·data-group-id="9248774984-3">]</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·e49d5df591b200a9a4c385797de5dac1c872a4e0ee5bfbd5ad8c68fb9417711e·...·]-1">}</span><span·class="p">.</span></code></pre><ul><li><p><strong><code·class="inline">Name·=·string()</code></strong>·-·Defines·the·system·name.</p></li><li><p><strong><code·class="inline">Vsn·=·string()</code></strong>·-·Defines·the·system·version.</p></li><li><p><strong><code·class="inline">{progress,·Term}</code></strong>·-·Sets·the·"progress"·of·the·initialization·program. |
| 159 | The·<a·href="../../../../erts-15.2.7/doc/html/init.html#get_status/0"><code·class="inline">init:get_status/0</code></a>·function·returns·the·current·value·of·the·progress, | 159 | The·<a·href="../../../../erts-15.2.7/doc/html/init.html#get_status/0"><code·class="inline">init:get_status/0</code></a>·function·returns·the·current·value·of·the·progress, |
| 160 | which·is·<code·class="inline">{InternalStatus,Term}</code>.</p></li><li><p><strong><code·class="inline">{path,·[Dir]}</code></strong>·-·<code·class="inline">Dir</code>·is·a·string.·This·argument·sets·the·load·path·of | 160 | which·is·<code·class="inline">{InternalStatus,Term}</code>.</p></li><li><p><strong><code·class="inline">{path,·[Dir]}</code></strong>·-·<code·class="inline">Dir</code>·is·a·string.·This·argument·sets·the·load·path·of |
| 161 | the·system·to·<code·class="inline">[Dir]</code>.·The·load·path·used·to·load·modules·is·obtained·from·the | 161 | the·system·to·<code·class="inline">[Dir]</code>.·The·load·path·used·to·load·modules·is·obtained·from·the |
| 162 | initial·load·path,·which·is·given·in·the·script·file,·together·with·any·path | 162 | initial·load·path,·which·is·given·in·the·script·file,·together·with·any·path |
| 163 | flags·that·were·supplied·in·the·command-line·arguments.·The·command-line | 163 | flags·that·were·supplied·in·the·command-line·arguments.·The·command-line |
| 164 | arguments·modify·the·path·as·follows:</p><ul><li><code·class="inline">-pa·Dir1·Dir2·...·DirN</code>·adds·the·directories | 164 | arguments·modify·the·path·as·follows:</p><ul><li><code·class="inline">-pa·Dir1·Dir2·...·DirN</code>·adds·the·directories |
| 165 | <code·class="inline">DirN,·DirN-1,·...,·Dir2,·Dir1</code>·to·the·front·of·the·initial·load·path.</li><li><code·class="inline">-pz·Dir1·Dir2·...·DirN</code>·adds·the·directories·<code·class="inline">Dir1,·Dir2,·...,·DirN</code>·to·the | 165 | <code·class="inline">DirN,·DirN-1,·...,·Dir2,·Dir1</code>·to·the·front·of·the·initial·load·path.</li><li><code·class="inline">-pz·Dir1·Dir2·...·DirN</code>·adds·the·directories·<code·class="inline">Dir1,·Dir2,·...,·DirN</code>·to·the |
| Offset 230, 15 lines modified | Offset 230, 15 lines modified | ||
| 230 | ······<p·class="built-using"> | 230 | ······<p·class="built-using"> |
| 231 | ········Built·using | 231 | ········Built·using |
| 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 234 | ······</p> | 234 | ······</p> |
| 235 | <p>Copyright·©·1996-202 | 235 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 236 | ····</footer> | 236 | ····</footer> |
| 237 | ··</div> | 237 | ··</div> |
| 238 | </main> | 238 | </main> |
| 239 | </div> | 239 | </div> |
| 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 241 | ··<script> | 241 | ··<script> |
| 242 | ··let·initialized·=·false; | 242 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 656, 15 lines modified | Offset 656, 15 lines modified | ||
| 656 | ······<p·class="built-using"> | 656 | ······<p·class="built-using"> |
| 657 | ········Built·using | 657 | ········Built·using |
| 658 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 658 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 659 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 659 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 660 | ······</p> | 660 | ······</p> |
| 661 | <p>Copyright·©·1996-202 | 661 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 662 | ····</footer> | 662 | ····</footer> |
| 663 | ··</div> | 663 | ··</div> |
| 664 | </main> | 664 | </main> |
| 665 | </div> | 665 | </div> |
| 666 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 666 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 667 | ··<script> | 667 | ··<script> |
| 668 | ··let·initialized·=·false; | 668 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 478, 15 lines modified | Offset 478, 15 lines modified | ||
| 478 | ······<p·class="built-using"> | 478 | ······<p·class="built-using"> |
| 479 | ········Built·using | 479 | ········Built·using |
| 480 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 480 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 481 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 481 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 482 | ······</p> | 482 | ······</p> |
| 483 | <p>Copyright·©·1996-202 | 483 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 484 | ····</footer> | 484 | ····</footer> |
| 485 | ··</div> | 485 | ··</div> |
| 486 | </main> | 486 | </main> |
| 487 | </div> | 487 | </div> |
| 488 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 488 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 489 | ··<script> | 489 | ··<script> |
| 490 | ··let·initialized·=·false; | 490 | ··let·initialized·=·false; |
| Offset 1127, 15 lines modified | Offset 1127, 15 lines modified | ||
| 1127 | ······<p·class="built-using"> | 1127 | ······<p·class="built-using"> |
| 1128 | ········Built·using | 1128 | ········Built·using |
| 1129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1129 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1130 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1131 | ······</p> | 1131 | ······</p> |
| 1132 | <p>Copyright·©·1996-202 | 1132 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1133 | ····</footer> | 1133 | ····</footer> |
| 1134 | ··</div> | 1134 | ··</div> |
| 1135 | </main> | 1135 | </main> |
| 1136 | </div> | 1136 | </div> |
| 1137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1137 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1138 | ··<script> | 1138 | ··<script> |
| 1139 | ··let·initialized·=·false; | 1139 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 3195, 16 lines modified | Offset 3195, 16 lines modified | ||
| 3195 | ······<div·class="specs"> | 3195 | ······<div·class="specs"> |
| 3196 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·print_version_info(Prefix)·->·<a·href="#t:void/0">void</a>()·when·Prefix·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> | 3196 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·print_version_info(Prefix)·->·<a·href="#t:void/0">void</a>()·when·Prefix·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> |
| 3197 | ······</div> | 3197 | ······</div> |
| 3198 | <p>Utility·function(s)·to·produce·a·formatted·printout·of·the·versions·info | 3198 | <p>Utility·function(s)·to·produce·a·formatted·printout·of·the·versions·info |
| 3199 | generated·by·the·<code·class="inline">versions1</code>·function</p><p>This·is·the·same·as·doing,·e.g.:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id="7254183584-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">V</span><span·class="p"·data-group-id="7254183584-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">versions1</span><span·class="p"·data-group-id="7254183584-2">(</span><span·class="p"·data-group-id="7254183584-2">)</span><span·class="p">,</span><span·class="w"> | ||
| 3200 | 3199 | generated·by·the·<code·class="inline">versions1</code>·function</p><p>This·is·the·same·as·doing,·e.g.:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id="6840954268-1">{</span><span·class="ss[·...·truncated·by·diffoscope;·len:·438,·SHA:·62589144538c628ecc756d5d640717da080e85c13746265a3b53f6457dcd477c·...·]> | |
| 3200 | ···········</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">print_versions</span><span·class="p"·data-group-id="6840954268-3">(</span><span·class="n">V</span><span·class="p"·data-group-id="6840954268-3">)</span><span·class="p">.</span></code></pre> | ||
| 3201 | ··</section> | 3201 | ··</section> |
| 3202 | </section> | 3202 | </section> |
| 3203 | <section·class="detail"·id="print_versions/1"> | 3203 | <section·class="detail"·id="print_versions/1"> |
| 3204 | ··<div·class="detail-header"> | 3204 | ··<div·class="detail-header"> |
| 3205 | ····<a·href="#print_versions/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3205 | ····<a·href="#print_versions/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3206 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3206 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3253, 16 lines modified | Offset 3253, 16 lines modified | ||
| 3253 | ····························Prefix·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), | 3253 | ····························Prefix·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(), |
| 3254 | ····························Versions·::·[VersionInfo], | 3254 | ····························Versions·::·[VersionInfo], |
| 3255 | ····························VersionInfo·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3255 | ····························VersionInfo·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3256 | ······</div> | 3256 | ······</div> |
| 3257 | <p>Utility·function·to·produce·a·formatted·printout·of·the·versions·info·generated | 3257 | <p>Utility·function·to·produce·a·formatted·printout·of·the·versions·info·generated |
| 3258 | by·the·<code·class="inline">versions1</code>·and·<code·class="inline">versions2</code>·functions</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id=" | 3258 | by·the·<code·class="inline">versions1</code>·and·<code·class="inline">versions2</code>·functions</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">···········</span><span·class="p"·data-group-id="6270561987-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">V</span><span·class="p"·data-group-id="6270561987-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·166,·SHA:·4d74500dd93e1339879855b7444f815b186fa0038b42b5b815feeef4b7c16542·...·]87-2">)</span><span·class="p">,</span><span·class="w"> |
| 3259 | ···········</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">print_versions</span><span·class="p"·data-group-id=" | 3259 | ···········</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">print_versions</span><span·class="p"·data-group-id="6270561987-3">(</span><span·class="n">V</span><span·class="p"·data-group-id="6270561987-3">)</span><span·class="p">.</span></code></pre> |
| 3260 | ··</section> | 3260 | ··</section> |
| 3261 | </section> | 3261 | </section> |
| 3262 | <section·class="detail"·id="read_mib/1"> | 3262 | <section·class="detail"·id="read_mib/1"> |
| 3263 | ··<div·class="detail-header"> | 3263 | ··<div·class="detail-header"> |
| 3264 | ····<a·href="#read_mib/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3264 | ····<a·href="#read_mib/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3265 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3265 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3382, 25 lines modified | Offset 3382, 25 lines modified | ||
| 3382 | ·······················TraceOpt·::·{timestamp,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}·|·TargetOpt.</pre> | 3382 | ·······················TraceOpt·::·{timestamp,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}·|·TargetOpt.</pre> |
| 3383 | ······</div> | 3383 | ······</div> |
| 3384 | <p>This·function·is·used·to·set·up·trace·on·function(s)·for·the·given·module·or | 3384 | <p>This·function·is·used·to·set·up·trace·on·function(s)·for·the·given·module·or |
| 3385 | modules.</p><p>The·example·below·sets·up·trace·on·the·exported·functions·(default)·of·module | 3385 | modules.</p><p>The·example·below·sets·up·trace·on·the·exported·functions·(default)·of·module |
| 3386 | <code·class="inline">snmp_generic</code>·and·all·functions·of·module·<code·class="inline">snmp_generic_mnesia</code>.·With·return | 3386 | <code·class="inline">snmp_generic</code>·and·all·functions·of·module·<code·class="inline">snmp_generic_mnesia</code>.·With·return |
| 3387 | values·(which·is·default)·and·timestamps·in·both·cases·(which·is·also·default):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">enable_trace</span><span·class="p"·data-group-id=" | 3387 | values·(which·is·default)·and·timestamps·in·both·cases·(which·is·also·default):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">enable_trace</span><span·class="p"·data-group-id="1952986581-1">(</span><span·class="p"·data-group-id="1952986581-1">)</span><span·class="p">,</span><span·class="w"> |
| 3388 | » ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">set_trace</span><span·class="p"·data-group-id=" | 3388 | » ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">set_trace</span><span·class="p"·data-group-id="1952986581-2">(</span><span·class="p"·data-group-id="1952986581-3">[</span><span·class="ss">snmp_generic</span><span·class="p">,</span><span·class="w"> |
| 3389 | ··························</span><span·class="p"·data-group-id=" | 3389 | ··························</span><span·class="p"·data-group-id="1952986581-4">{</span><span·class="ss">snmp_generic_mnesia</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1952986581-5">[</span><span·class="p"·data-group-id="1952986581-6">{</span><span·class="ss">scope</span><span·cl[·...·truncated·by·diffoscope;·len:·330,·SHA:·35ecf00ec7fe6c7c6d0b313eca9ddd0820bea1b238214621f7628c1b06976381·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 3390 | » ··</span><span·class="p">.</span><span·class="w"> | 3390 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3391 | » ··</span><span·class="p">.</span><span·class="w"> | 3391 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3392 | » ··</span><span·class="p">.</span><span·class="w"> | 3392 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3393 | ··········</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">set_trace</span><span·class="p"·data-group-id=" | 3393 | ··········</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">set_trace</span><span·class="p"·data-group-id="1952986581-7">(</span><span·class="ss">snmp_generic</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disable</span><span·class="p"·data-group-id="1952986581-7">)</span><span·class="p">,</span><span·class="w"> |
| 3394 | » ··</span><span·class="p">.</span><span·class="w"> | 3394 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3395 | » ··</span><span·class="p">.</span><span·class="w"> | 3395 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3396 | » ··</span><span·class="p">.</span><span·class="w"> | 3396 | » ··</span><span·class="p">.</span><span·class="w"> |
| 3397 | » ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">disable_trace</span><span·class="p"·data-group-id=" | 3397 | » ··</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">disable_trace</span><span·class="p"·data-group-id="1952986581-8">(</span><span·class="p"·data-group-id="1952986581-8">)</span><span·class="p">,</span></code></pre> |
| 3398 | ··</section> | 3398 | ··</section> |
| 3399 | </section> | 3399 | </section> |
| 3400 | <section·class="detail"·id="start/0"> | 3400 | <section·class="detail"·id="start/0"> |
| 3401 | ··<div·class="detail-header"> | 3401 | ··<div·class="detail-header"> |
| 3402 | ····<a·href="#start/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3402 | ····<a·href="#start/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3403 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3403 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3762, 15 lines modified | Offset 3762, 15 lines modified | ||
| 3762 | ······<p·class="built-using"> | 3762 | ······<p·class="built-using"> |
| 3763 | ········Built·using | 3763 | ········Built·using |
| 3764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3766 | ······</p> | 3766 | ······</p> |
| 3767 | <p>Copyright·©·1996-202 | 3767 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3768 | ····</footer> | 3768 | ····</footer> |
| 3769 | ··</div> | 3769 | ··</div> |
| 3770 | </main> | 3770 | </main> |
| 3771 | </div> | 3771 | </div> |
| 3772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3773 | ··<script> | 3773 | ··<script> |
| 3774 | ··let·initialized·=·false; | 3774 | ··let·initialized·=·false; |
| Offset 325, 74 lines modified | Offset 325, 74 lines modified | ||
| 325 | ·······::=·{·empTable·1·} | 325 | ·······::=·{·empTable·1·} |
| 326 | ·······EmpEntry·::= | 326 | ·······EmpEntry·::= |
| 327 | ··············SEQUENCE·{ | 327 | ··············SEQUENCE·{ |
| 328 | ··················empDepNo·········INTEGER, | 328 | ··················empDepNo·········INTEGER, |
| 329 | ··················empName··········DisplayString, | 329 | ··················empName··········DisplayString, |
| 330 | ··················empTelNo·········DisplayString, | 330 | ··················empTelNo·········DisplayString, |
| 331 | ··················empStatus········RowStatus | 331 | ··················empStatus········RowStatus |
| 332 | ··············}</code></pre><p>The·corresponding·Mnesia·table·is·specified·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 332 | ··············}</code></pre><p>The·corresponding·Mnesia·table·is·specified·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="2024800661-1">(</span><span·class="p"·data-group-id="2024800661-2">[</span><span·class="p"·data-group-id="2024800661-3">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">employees</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·53cdea872f911c94c3b7581bc8f50956ec13c7c7c496852f813a4cfb1a6185b7·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 333 | ·····················</span><span·class="p"·data-group-id=" | 333 | ·····················</span><span·class="p"·data-group-id="2024800661-4">{</span><span·class="ss">snmp</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2024800661-5">[</span><span·class="p"·data-group-id="2024800661-6">{</span><span·class="ss">key</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·385,·SHA:·edf78d6affd60a38fc9db0b6055549188bf248049cb414e3ef6e792d8a1e9158·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 334 | ·····················</span><span·class="p"·data-group-id=" | 334 | ·····················</span><span·class="p"·data-group-id="2024800661-8">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2024800661-9">[</span><span·class="ss">key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">telno</[·...·truncated·by·diffoscope;·len:·287,·SHA:·ba64ffadb61e1914bc24cca7b91de78c22e93b3c9e60a1fea315ed0e3efd42a9·...·]-1">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>In·the·Mnesia·tables,·the·two·key·columns·are·stored·as·a·tuple·with·two |
| 335 | elements.·Therefore,·the·arity·of·the·table·is·3.</p></section><h3·id="instrumentation-functions"·class="section-heading"> | 335 | elements.·Therefore,·the·arity·of·the·table·is·3.</p></section><h3·id="instrumentation-functions"·class="section-heading"> |
| 336 | ··<a·href="#instrumentation-functions"·class="hover-link"> | 336 | ··<a·href="#instrumentation-functions"·class="hover-link"> |
| 337 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 337 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 338 | ··</a> | 338 | ··</a> |
| 339 | ··<span·class="text">Instrumentation·Functions</span> | 339 | ··<span·class="text">Instrumentation·Functions</span> |
| 340 | </h3> | 340 | </h3> |
| 341 | <p>The·MIB·table·shown·in·the·previous·section·can·be·compiled·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id=" | 341 | <p>The·MIB·table·shown·in·the·previous·section·can·be·compiled·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="9611953292-1">(</span><span·class="s">"EmpMIB"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9611953292-2">[</span><span·class="p"·data-group-id="9611953292-3">{</span><span·class="ss">db</span><span·class="[·...·truncated·by·diffoscope;·len:·212,·SHA:·07973eda089d4730fac72f378fd144192222ec00f5e65fd6ee0eb821b35883d6·...·]-1">)</span><span·class="p">.</span></code></pre><p>This·is·all·that·has·to·be·done!·Now·the·manager·can·read,·add,·and·modify |
| 342 | rows.·Also,·you·can·use·the·ordinary·Mnesia·API·to·access·the·table·from·your | 342 | rows.·Also,·you·can·use·the·ordinary·Mnesia·API·to·access·the·table·from·your |
| 343 | programs.·The·only·explicit·action·is·to·create·the·Mnesia·table,·an·action·the | 343 | programs.·The·only·explicit·action·is·to·create·the·Mnesia·table,·an·action·the |
| 344 | user·has·to·perform·in·order·to·create·the·required·table·schemas.</p><h3·id="adding-own-actions"·class="section-heading"> | 344 | user·has·to·perform·in·order·to·create·the·required·table·schemas.</p><h3·id="adding-own-actions"·class="section-heading"> |
| 345 | ··<a·href="#adding-own-actions"·class="hover-link"> | 345 | ··<a·href="#adding-own-actions"·class="hover-link"> |
| 346 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 346 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 347 | ··</a> | 347 | ··</a> |
| 348 | ··<span·class="text">Adding·Own·Actions</span> | 348 | ··<span·class="text">Adding·Own·Actions</span> |
| 349 | </h3> | 349 | </h3> |
| 350 | <p>It·is·often·necessary·to·take·some·specific·action·when·a·table·is·modified. | 350 | <p>It·is·often·necessary·to·take·some·specific·action·when·a·table·is·modified. |
| 351 | This·is·accomplished·with·an·instrumentation·function.·It·executes·some·specific | 351 | This·is·accomplished·with·an·instrumentation·function.·It·executes·some·specific |
| 352 | code·when·the·table·is·set,·and·passes·all·other·requests·down·to·the | 352 | code·when·the·table·is·set,·and·passes·all·other·requests·down·to·the |
| 353 | pre-defined·function.</p><p>The·following·example·illustrates·this·idea:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">emp_table</span><span·class="p"·data-group-id=" | 353 | pre-defined·function.</p><p>The·following·example·illustrates·this·idea:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">emp_table</span><span·class="p"·data-group-id="7913523759-1">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="7913523759-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 354 | ····</span><span·class="nf">notify_internal_resources</span><span·class="p"·data-group-id=" | 354 | ····</span><span·class="nf">notify_internal_resources</span><span·class="p"·data-group-id="7913523759-2">(</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="7913523759-2">)</span><span·class="p">,</span><span·class="w"> |
| 355 | ····</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 355 | ····</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="7913523759-3">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·252,·SHA:·13e42ca9dc9b284d941e68858694a5355efebd5db99fae027a177bb0acce231c·...·]-3">)</span><span·class="p">;</span><span·class="w"> |
| 356 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id=" | 356 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id="7913523759-5">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="7913523759-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 357 | ····</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 357 | ····</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="7913523759-6">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·250,·SHA:·3eec97bef8d782d03fadb1c99551ab9b799d017a86c9d4673f49f120ce0d29c0·...·]-6">)</span><span·class="p">.</span></code></pre><p>The·default·instrumentation·functions·are·defined·in·the·module·<code·class="inline">snmp_generic</code>. |
| 358 | Refer·to·the·Reference·Manual,·section·SNMP,·module·<code·class="inline">snmp_generic</code>·for·details.</p><h3·id="extending-the-mnesia-table"·class="section-heading"> | 358 | Refer·to·the·Reference·Manual,·section·SNMP,·module·<code·class="inline">snmp_generic</code>·for·details.</p><h3·id="extending-the-mnesia-table"·class="section-heading"> |
| 359 | ··<a·href="#extending-the-mnesia-table"·class="hover-link"> | 359 | ··<a·href="#extending-the-mnesia-table"·class="hover-link"> |
| 360 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 360 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 361 | ··</a> | 361 | ··</a> |
| 362 | ··<span·class="text">Extending·the·Mnesia·Table</span> | 362 | ··<span·class="text">Extending·the·Mnesia·Table</span> |
| 363 | </h3> | 363 | </h3> |
| 364 | <p>A·table·may·contain·columns·that·are·used·internally,·but·should·not·be·visible | 364 | <p>A·table·may·contain·columns·that·are·used·internally,·but·should·not·be·visible |
| 365 | to·a·manager.·These·internal·columns·must·be·the·last·columns·in·the·table.·The | 365 | to·a·manager.·These·internal·columns·must·be·the·last·columns·in·the·table.·The |
| 366 | <code·class="inline">set</code>·operation·will·not·work·with·this·arrangement,·because·there·are·columns | 366 | <code·class="inline">set</code>·operation·will·not·work·with·this·arrangement,·because·there·are·columns |
| 367 | that·the·agent·does·not·know·about.·This·situation·is·handled·by·adding·values | 367 | that·the·agent·does·not·know·about.·This·situation·is·handled·by·adding·values |
| 368 | for·the·internal·columns·in·the·<code·class="inline">set</code>·function.</p><p>To·illustrate·this,·suppose·we·extend·our·Mnesia·<code·class="inline">empTable</code>·with·one·internal | 368 | for·the·internal·columns·in·the·<code·class="inline">set</code>·function.</p><p>To·illustrate·this,·suppose·we·extend·our·Mnesia·<code·class="inline">empTable</code>·with·one·internal |
| 369 | column.·We·create·it·as·before,·but·with·an·arity·of·4,·by·adding·another | 369 | column.·We·create·it·as·before,·but·with·an·arity·of·4,·by·adding·another |
| 370 | attribute.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id=" | 370 | attribute.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">mnesia</span><span·class="p">:</span><span·class="nf">create_table</span><span·class="p"·data-group-id="5663837341-1">(</span><span·class="p"·data-group-id="5663837341-2">[</span><span·class="p"·data-group-id="5663837341-3">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">employees</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·cc389e2a872146457b80e81b2f7cc06a7bd76e4924820eaa27f16f370a2d58aa·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 371 | ·····················</span><span·class="p"·data-group-id=" | 371 | ·····················</span><span·class="p"·data-group-id="5663837341-4">{</span><span·class="ss">snmp</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5663837341-5">[</span><span·class="p"·data-group-id="5663837341-6">{</span><span·class="ss">key</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·385,·SHA:·35be32d8090ece717f13005ed191d039da4e6f6997eb1ce9b0e99eea855abbd0·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 372 | ·····················</span><span·class="p"·data-group-id=" | 372 | ·····················</span><span·class="p"·data-group-id="5663837341-8">{</span><span·class="ss">attributes</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5663837341-9">{</span><span·class="ss">key</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">telno</[·...·truncated·by·diffoscope;·len:·371,·SHA:·cc3cc8fe456c4bc7f66913ba3ad1c56adebf8256ba2465b4ab376c9e81ab5dc1·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·last·column·is·the·internal·column.·When·performing·a·<code·class="inline">set</code>·operation,·which |
| 373 | creates·a·row,·we·must·give·a·value·to·the·internal·column.·The·instrumentation | 373 | creates·a·row,·we·must·give·a·value·to·the·internal·column.·The·instrumentation |
| 374 | functions·will·now·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 374 | functions·will·now·look·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5113449394-1">(</span><span·class="ss">createAndGo</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="p"·data-group-id="5113449394-1">)</span><span·class="p">.</span><span·class="w"> |
| 375 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 375 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5113449394-2">(</span><span·class="ss">createAndWait</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5</span><span·class="p"·data-group-id="5113449394-2">)</span><span·class="p">.</span><span·class="w"> |
| 376 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id=" | 376 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id="5113449394-3">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 377 | ··</span><span·class="nf">notify_internal_resources</span><span·class="p"·data-group-id=" | 377 | ··</span><span·class="nf">notify_internal_resources</span><span·class="p"·data-group-id="5113449394-4">(</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-4">)</span><span·class="p">,</span><span·class="w"> |
| 378 | ··</span><span·class="n">NewCols</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 378 | ··</span><span·class="n">NewCols</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 379 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">is_row_created</span><span·class="p"·data-group-id=" | 379 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">is_row_created</span><span·class="p"·data-group-id="5113449394-5">(</span><span·class="ss">empTable</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-5">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 380 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Cols</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id=" | 380 | ······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Cols</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id="5113449394-6">[</span><span·class="p"·data-group-id="5113449394-7">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"internal"</span><span·class="p"·data-group-id="5113449394-7">}</span><span·class=[·...·truncated·by·diffoscope;·len:·28,·SHA:·966a8c4cd1476bb59f4d1d3f0cb0933bb77b9833c393cc9fe6d9c3900c7715af·...·]4-6">]</span><span·class="p">;</span><span·class="w">·</span><span·class="c1">%·add·internal·column</span><span·class="w"> |
| 381 | ······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Cols</span><span·class="w">······················</span><span·class="c1">%·keep·original·cols</span><span·class="w"> | 381 | ······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Cols</span><span·class="w">······················</span><span·class="c1">%·keep·original·cols</span><span·class="w"> |
| 382 | ··</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 382 | ··</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 383 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 383 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="5113449394-8">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NewCols</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·254,·SHA:·4ec35e0f4a70474387cfeda8872473aa5dceb7c46f06fd5f08f09489c4dfdb10·...·]4-8">)</span><span·class="p">;</span><span·class="w"> |
| 384 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id=" | 384 | </span><span·class="nf">emp_table</span><span·class="p"·data-group-id="5113449394-10">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 385 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 385 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="5113449394-11">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·252,·SHA:·1f9ddd3432a21af93924370d4a56c2d0c0050e843648d16984ca89dd8d08ddb2·...·]4-11">)</span><span·class="p">.</span><span·class="w"> |
| 386 | </span><span·class="nf">is_row_created</span><span·class="p"·data-group-id=" | 386 | </span><span·class="nf">is_row_created</span><span·class="p"·data-group-id="5113449394-13">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 387 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">get_status_col</span><span·class="p"·data-group-id=" | 387 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">get_status_col</span><span·class="p"·data-group-id="5113449394-14">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="5113449394-14">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 388 | ····</span><span·class="p"·data-group-id=" | 388 | ····</span><span·class="p"·data-group-id="5113449394-15">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">createAndGo</span><span·class="p"·data-group-id="5113449394-15">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 389 | ····</span><span·class="p"·data-group-id=" | 389 | ····</span><span·class="p"·data-group-id="5113449394-16">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="ss">createAndWait</span><span·class="p"·data-group-id="5113449394-16">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">true</span><span·class="p">;</span><span·class="w"> |
| 390 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> | 390 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">false</span><span·class="w"> |
| 391 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>If·a·row·is·created,·we·always·set·the·internal·column·to·<code·class="inline">"internal"</code>.</p><h2·id="deviations-from-the-standard"·class="section-heading"> | 391 | ··</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>If·a·row·is·created,·we·always·set·the·internal·column·to·<code·class="inline">"internal"</code>.</p><h2·id="deviations-from-the-standard"·class="section-heading"> |
| 392 | ··<a·href="#deviations-from-the-standard"·class="hover-link"> | 392 | ··<a·href="#deviations-from-the-standard"·class="hover-link"> |
| 393 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 393 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 394 | ··</a> | 394 | ··</a> |
| 395 | ··<span·class="text">Deviations·from·the·Standard</span> | 395 | ··<span·class="text">Deviations·from·the·Standard</span> |
| 396 | </h2> | 396 | </h2> |
| Offset 453, 15 lines modified | Offset 453, 15 lines modified | ||
| 453 | ······<p·class="built-using"> | 453 | ······<p·class="built-using"> |
| 454 | ········Built·using | 454 | ········Built·using |
| 455 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 455 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 456 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 456 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 457 | ······</p> | 457 | ······</p> |
| 458 | <p>Copyright·©·1996-202 | 458 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 459 | ····</footer> | 459 | ····</footer> |
| 460 | ··</div> | 460 | ··</div> |
| 461 | </main> | 461 | </main> |
| 462 | </div> | 462 | </div> |
| 463 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 463 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 464 | ··<script> | 464 | ··<script> |
| 465 | ··let·initialized·=·false; | 465 | ··let·initialized·=·false; |
| Offset 146, 38 lines modified | Offset 146, 38 lines modified | ||
| 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 146 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 147 | ··</a> | 147 | ··</a> |
| 148 | ··<span·class="text">Agent·Information</span> | 148 | ··<span·class="text">Agent·Information</span> |
| 149 | </h2> | 149 | </h2> |
| 150 | <p>The·agent·information·should·be·stored·in·a·file·called·<code·class="inline">agent.conf</code>.</p><p>Each·entry·is·a·tuple·of·size·two:</p><p><code·class="inline">{AgentVariable,·Value}.</code></p><ul><li><code·class="inline">AgentVariable</code>·is·one·of·the·variables·in·SNMP-FRAMEWORK-MIB·or·one·of·the | 150 | <p>The·agent·information·should·be·stored·in·a·file·called·<code·class="inline">agent.conf</code>.</p><p>Each·entry·is·a·tuple·of·size·two:</p><p><code·class="inline">{AgentVariable,·Value}.</code></p><ul><li><code·class="inline">AgentVariable</code>·is·one·of·the·variables·in·SNMP-FRAMEWORK-MIB·or·one·of·the |
| 151 | internal·variables·<code·class="inline">intAgentUDPPort</code>,·which·defines·which·UDP·port·the·agent | 151 | internal·variables·<code·class="inline">intAgentUDPPort</code>,·which·defines·which·UDP·port·the·agent |
| 152 | listens·to,·or·<code·class="inline">intAgentTransports</code>,·which·defines·the·transport·domains·and | 152 | listens·to,·or·<code·class="inline">intAgentTransports</code>,·which·defines·the·transport·domains·and |
| 153 | addresses·of·the·agent.</li><li><code·class="inline">Value</code>·is·the·value·for·the·variable.</li></ul><p>The·following·example·shows·an·<code·class="inline">agent.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 153 | addresses·of·the·agent.</li><li><code·class="inline">Value</code>·is·the·value·for·the·variable.</li></ul><p>The·following·example·shows·an·<code·class="inline">agent.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1056310670-1">{</span><span·class="ss">intAgentUDPPort</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4000</span><span·class="p"·data-group-id="1056310670-1">}</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p"·data-group-id=" | 154 | </span><span·class="p"·data-group-id="1056310670-2">{</span><span·class="ss">intAgentTransports</span><span·class="p">,</span><span·class="w"> |
| 155 | ·</span><span·class="p"·data-group-id=" | 155 | ·</span><span·class="p"·data-group-id="1056310670-3">[</span><span·class="p"·data-group-id="1056310670-4">{</span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1056310670-5">{</span><span·class="mi">141</span><span·c[·...·truncated·by·diffoscope;·len:·238,·SHA:·35ea76f27a18e7cd727b87964db2644b06c4ec3ded1398833ade684f00ee4e09·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ··</span><span·class="p"·data-group-id=" | 156 | ··</span><span·class="p"·data-group-id="1056310670-6">{</span><span·class="ss">transportDomainUdpIpv6</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1056310670-7">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·481,·SHA:·4d82c3383f0fc871feefa272e913fb4660e4b979cb9a5d335f6515f59ac33d8c·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="1056310670-8">{</span><span·class="ss">snmpEngineID</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"mbj's·engine"</span><span·class="p"·data-group-id="1056310670-8">}</span><span·class="p">.</span><span·class="w"> |
| 158 | </span><span·class="p"·data-group-id=" | 158 | </span><span·class="p"·data-group-id="1056310670-9">{</span><span·class="ss">snmpEngineMaxMessageSize</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">484</span><span·class="p"·data-group-id="1056310670-9">}</span><span·class="p">.</span></code></pre><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 159 | </span><span·class="n">AgentPort</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4000</span><span·class="p">,</span><span·class="w"> | 159 | </span><span·class="n">AgentPort</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4000</span><span·class="p">,</span><span·class="w"> |
| 160 | </span><span·class="n">Transports</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 160 | </span><span·class="n">Transports</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6915403349-1">[</span><span·class="p"·data-group-id="6915403349-2">{</span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6915403349-3">{</span><span·class="mi">141</span><span·c[·...·truncated·by·diffoscope;·len:·238,·SHA:·32b4fe01aac66d87fdecd42841740645073e75d93c0dffaa59d980bc10abbb11·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 161 | ···············</span><span·class="p"·data-group-id=" | 161 | ···············</span><span·class="p"·data-group-id="6915403349-4">{</span><span·class="ss">transportDomainUdpIpv6</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6915403349-5">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·428,·SHA:·3996b21931d25576245cff6e12f358334a6a2791597064bd73d4c52316a0338a·...·]-1">]</span><span·class="p">,</span><span·class="w"> |
| 162 | </span><span·class="n">EngineID</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"mbj's·engine"</span><span·class="p">,</span><span·class="w"> | 162 | </span><span·class="n">EngineID</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"mbj's·engine"</span><span·class="p">,</span><span·class="w"> |
| 163 | </span><span·class="n">MMS</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">484</span><span·class="p">,</span><span·class="w"> | 163 | </span><span·class="n">MMS</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">484</span><span·class="p">,</span><span·class="w"> |
| 164 | </span><span·class="n">AgentConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 164 | </span><span·class="n">AgentConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 165 | ···</span><span·class="p"·data-group-id=" | 165 | ···</span><span·class="p"·data-group-id="6915403349-6">[</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id="6915403349-7">(</span><span·class="ss">intAgentUDPPort</span><span·class="p">,</span><span·class="w">·········[·...·truncated·by·diffoscope;·len:·81,·SHA:·d1fcf79af93bb0c98972932f0a225ca25f714b69406d032b296a42f483c23a90·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 166 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id=" | 166 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id="6915403349-8">(</span><span·class="ss">intAgentTransports</span><span·class="p">,</span><span·class="w">·······</span><span·class="n">Transports</span><span·class="p"·data-group-id="6915403349-8">)</span><span·class="p">,</span><span·class="w"> |
| 167 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id=" | 167 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id="6915403349-9">(</span><span·class="ss">snmpEngineID</span><span·class="p">,</span><span·class="w">·············</span><span·class="n">EngineID</span><span·class="p"·data-group-id="6915403349-9">)</span><span·class="p">,</span><span·class="w"> |
| 168 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id=" | 168 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">agent_entry</span><span·class="p"·data-group-id="6915403349-10">(</span><span·class="ss">snmpEngineMaxMessageSize</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MMS</span><span·class="p"·data-group-id="6915403349-10">)</span><span·class="p"·data-group-id="6915403349-6">]</span><span·class="p">,</span><span·class="w"> |
| 169 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_agent_config</span><span·class="p"·data-group-id=" | 169 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_agent_config</span><span·class="p"·data-group-id="6915403349-11">(</span><span·class="n">AgentDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">AgentConfig</span><span·class="p"·data-group-id="6915403349-11">)</span><span·class="p">,</span></code></pre><p>These·are·the·supported·en[·...·truncated·by·diffoscope;·len:·435,·SHA:·7af4402b1aae7fba190185ddbf0bc1caec07f4b4f9cae1a62134105cfcef4451·...·]-1">}</span><span·class="p">.</span><span·class="w">·····················</span><span·class="c1">%·Mandatory</span><span·class="w"> |
| 170 | ······</span><span·class="p"·data-group-id="1 | 170 | ······</span><span·class="p"·data-group-id="1034558581-3">{</span><span·class="ss">snmpEngineMaxMessageSize</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">snmp_framework_mib</span><span·class="p">:</span><span·class="nf">max_message_size</span><span·class="p"·data-group-id="10[·...·truncated·by·diffoscope;·len:·114,·SHA:·685ac6c2e2c421bb90b2fd72b62e137cb9fca2647b696e92d7387e01437a6c2a·...·]-3">}</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%·Mandatory</span><span·class="w"> |
| 171 | ······</span><span·class="p"·data-group-id="1 | 171 | ······</span><span·class="p"·data-group-id="1034558581-5">{</span><span·class="ss">intAgentUDPPort</span><span·class="p">,</span><span·class="w">··········</span><span·class="nc">inet</span><span·class="p">:</span><span·class="nf">port_number</span><span·class="p"·data-group-id="1034558581-6">(</span[·...·truncated·by·diffoscope;·len:·95,·SHA:·c3c2d8c85a66808a37d352a1be2bccfe699035da5bf1029aa6ec0df494c6da9d·...·]-5">}</span><span·class="p">.</span><span·class="w">······················</span><span·class="c1">%·Optional</span><span·class="w"> |
| 172 | ······</span><span·class="p"·data-group-id="1 | 172 | ······</span><span·class="p"·data-group-id="1034558581-7">{</span><span·class="ss">intAgentTransports</span><span·class="p">,</span><span·class="w">·······</span><span·class="p"·data-group-id="1034558581-8">[</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">intAgentTra[·...·truncated·by·diffoscope;·len:·213,·SHA:·72daf44163a95075fe72652443d27a597b8c4f358e660dfda0c288c015b6efd7·...·]-7">}</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%·Mandatory</span></code></pre><p>If·a·"traditional"·transport·is·specified·(without·explicit·<code·class="inline">Kind</code>,·handling |
| 173 | both·requests·and·traps)·for·a·transport·domain,·its·<em>not</em>·possible·to·also | 173 | both·requests·and·traps)·for·a·transport·domain,·its·<em>not</em>·possible·to·also |
| 174 | specify·a·transport·(for·that·domain)·with·a·specific·<code·class="inline">Kind</code>.·This·is·for | 174 | specify·a·transport·(for·that·domain)·with·a·specific·<code·class="inline">Kind</code>.·This·is·for |
| 175 | example,·<em>not</em>·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p"·data-group-id="0253964171-1">[</span><span·class="p"·data-group-id="0253964171-2">{</span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0253964171-3">{</span><span·class="p"·data-group-id="0253964171-4">{</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">213</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">24</span><span·class="p"·data-group-id="0253964171-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4000</span><span·class="p"·data-group-id="0253964171-3">}</span><span·class="p"·data-group-id="0253964171-2">}</span><span·class="p">,</span><span·class="w"> | ||
| 176 | 175 | example,·<em>not</em>·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="p"·data-group-id="6077142440-1">[</span><span·class="p"·data-group-id="6077142440-2">{</span><span·class="ss">transportDomainUdpIpv4</spa[·...·truncated·by·diffoscope;·len:·609,·SHA:·c0d1bef8e01876e3c47bf1d3954661e6f146d01d2c0da57c804ea0645db43f76·...·] | |
| 176 | ··</span><span·class="p"·data-group-id="6077142440-5">{</span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6077142440-6">{</span><span·class="p"·data-group-id="6077142440-7">{</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">213</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">24</span><span·class="p"·data-group-id="6077142440-7">}</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4001</span><span·class="p"·data-group-id="6077142440-6">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">trap_sender</span><span·class="p"·data-group-id="6077142440-5">}</span><span·class="p"·data-group-id="6077142440-1">]</span><span·class="p">.</span></code></pre><p>Note·that·only·one·transport·per·kind·for·each·transport·domain·can·be | ||
| 177 | configured.</p><p><code·class="inline">PortInfo</code>·<code·class="inline">system</code>·is·used·to·indicate·that·the·'system'·should·choose·(the·way | 177 | configured.</p><p><code·class="inline">PortInfo</code>·<code·class="inline">system</code>·is·used·to·indicate·that·the·'system'·should·choose·(the·way |
| 178 | port·number·'0'·(zero)·is·normally·used).·Port·info·'0'·(zero)·cannot·be·used | 178 | port·number·'0'·(zero)·is·normally·used).·Port·info·'0'·(zero)·cannot·be·used |
| 179 | for·this,·since·it·is·(internally)·used·to·represent·the·'default'·port·number.</p><p>In·the·traditional·transport·entries,·when·the·<code·class="inline">Addr</code>·value·does·not·contain·a | 179 | for·this,·since·it·is·(internally)·used·to·represent·the·'default'·port·number.</p><p>In·the·traditional·transport·entries,·when·the·<code·class="inline">Addr</code>·value·does·not·contain·a |
| 180 | port·number,·the·value·of·<code·class="inline">intAgentUDPPort</code>·is·used.</p><p>Note·that·the·(new)·extended·transport·entries·(including·<code·class="inline">Kind</code>·and·<code·class="inline">Opts</code>) | 180 | port·number,·the·value·of·<code·class="inline">intAgentUDPPort</code>·is·used.</p><p>Note·that·the·(new)·extended·transport·entries·(including·<code·class="inline">Kind</code>·and·<code·class="inline">Opts</code>) |
| 181 | <em>must</em>·specify·port-info·as·they·ignore·any·value·specified·by | 181 | <em>must</em>·specify·port-info·as·they·ignore·any·value·specified·by |
| 182 | <code·class="inline">intAgentUDPPort</code>.</p><p><code·class="inline">Opts</code>·is·the·same·as·for·the·<a·href="snmp_config.html#agent_ni_opts">net-if</a>·process | 182 | <code·class="inline">intAgentUDPPort</code>.</p><p><code·class="inline">Opts</code>·is·the·same·as·for·the·<a·href="snmp_config.html#agent_ni_opts">net-if</a>·process |
| 183 | <em>and</em>·takes·precedence·(for·that·transport)·if·present.·The·point·is·that·each | 183 | <em>and</em>·takes·precedence·(for·that·transport)·if·present.·The·point·is·that·each |
| Offset 190, 77 lines modified | Offset 190, 77 lines modified | ||
| 190 | ··</a> | 190 | ··</a> |
| 191 | ··<span·class="text">Contexts</span> | 191 | ··<span·class="text">Contexts</span> |
| 192 | </h2> | 192 | </h2> |
| 193 | <p>The·context·information·should·be·stored·in·a·file·called·<code·class="inline">context.conf</code>.·The | 193 | <p>The·context·information·should·be·stored·in·a·file·called·<code·class="inline">context.conf</code>.·The |
| 194 | default·context·<code·class="inline">""</code>·need·not·be·present.</p><p>Each·row·defines·a·context·in·the·agent.·This·information·is·used·in·the·table | 194 | default·context·<code·class="inline">""</code>·need·not·be·present.</p><p>Each·row·defines·a·context·in·the·agent.·This·information·is·used·in·the·table |
| 195 | <code·class="inline">vacmContextTable</code>·in·the·SNMP-VIEW-BASED-ACM-MIB.</p><p>Each·entry·is·a·term:</p><p><code·class="inline">ContextName.</code></p><ul><li><code·class="inline">ContextName</code>·is·a·string.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 195 | <code·class="inline">vacmContextTable</code>·in·the·SNMP-VIEW-BASED-ACM-MIB.</p><p>Each·entry·is·a·term:</p><p><code·class="inline">ContextName.</code></p><ul><li><code·class="inline">ContextName</code>·is·a·string.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 196 | </span><span·class="n">ContextConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 196 | </span><span·class="n">ContextConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 197 | ···</span><span·class="p"·data-group-id=" | 197 | ···</span><span·class="p"·data-group-id="1004102461-1">[</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">context_entry</span><span·class="p"·data-group-id="1004102461-2">(</span><span·class="s">"foo"</span><span·class="p"·data-group-id="1004102461-2">)</span><span·class="p">,</span><span·class="w"> |
| 198 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">context_entry</span><span·class="p"·data-group-id=" | 198 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">context_entry</span><span·class="p"·data-group-id="1004102461-3">(</span><span·class="s">"bar"</span><span·class="p"·data-group-id="1004102461-3">)</span><span·class="p"·data-group-id="1004102461-1">]</span><span·class="p">,</span><span·class="w"> |
| 199 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_context_config</span><span·class="p"·data-group-id=" | 199 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_context_config</span><span·class="p"·data-group-id="1004102461-4">(</span><span·class="n">AgentDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ContextConfig</span><span·class="p"·data-group-id="1004102461-4">)</span><span·class="p">,</span></code></pre><p><a·href=""·id="system_information"></a></p><h2·id="system-information"·class="section-heading"> |
| 200 | ··<a·href="#system-information"·class="hover-link"> | 200 | ··<a·href="#system-information"·class="hover-link"> |
| 201 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 201 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 202 | ··</a> | 202 | ··</a> |
| 203 | ··<span·class="text">System·Information</span> | 203 | ··<span·class="text">System·Information</span> |
| 204 | </h2> | 204 | </h2> |
| 205 | <p>The·system·information·should·be·stored·in·a·file·called·<code·class="inline">standard.conf</code>.</p><p>Each·entry·is·a·tuple·of·size·two:</p><p><code·class="inline">{SystemVariable,·Value}.</code></p><ul><li><code·class="inline">SystemVariable</code>·is·one·of·the·variables·in·the·system·group,·or | 205 | <p>The·system·information·should·be·stored·in·a·file·called·<code·class="inline">standard.conf</code>.</p><p>Each·entry·is·a·tuple·of·size·two:</p><p><code·class="inline">{SystemVariable,·Value}.</code></p><ul><li><code·class="inline">SystemVariable</code>·is·one·of·the·variables·in·the·system·group,·or |
| 206 | <code·class="inline">snmpEnableAuthenTraps</code>.</li><li><code·class="inline">Value</code>·is·the·value·for·the·variable.</li></ul><p>The·following·example·shows·a·valid·<code·class="inline">standard.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4 | 206 | <code·class="inline">snmpEnableAuthenTraps</code>.</li><li><code·class="inline">Value</code>·is·the·value·for·the·variable.</li></ul><p>The·following·example·shows·a·valid·<code·class="inline">standard.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4095475606-1">{</span><span·class="ss">sysDescr</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Erlang·SNMP·agent"</span><span·class="p"·data-group-id="4095475606-1">}</span><span·class="p">.</span><span·class="w"> |
| 207 | </span><span·class="p"·data-group-id="4 | 207 | </span><span·class="p"·data-group-id="4095475606-2">{</span><span·class="ss">sysObjectID</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4095475606-3">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·118,·SHA:·ef28ac4de19526f6312949c3357e712b677aa7f54d477856056f92dc2869b17e·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 208 | </span><span·class="p"·data-group-id="4 | 208 | </span><span·class="p"·data-group-id="4095475606-4">{</span><span·class="ss">sysContact</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"(mbj,eklas)@erlang.ericsson.se"</span><span·class="p"·data-group-id="4095475606-4">}</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="p"·data-group-id="4 | 209 | </span><span·class="p"·data-group-id="4095475606-5">{</span><span·class="ss">sysName</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"test"</span><span·class="p"·data-group-id="4095475606-5">}</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="p"·data-group-id="4 | 210 | </span><span·class="p"·data-group-id="4095475606-6">{</span><span·class="ss">sysServices</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">72</span><span·class="p"·data-group-id="4095475606-6">}</span><span·class="p">.</span><span·class="w"> |
| 211 | </span><span·class="p"·data-group-id="4 | 211 | </span><span·class="p"·data-group-id="4095475606-7">{</span><span·class="ss">snmpEnableAuthenTraps</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">enabled</span><span·class="p"·data-group-id="4095475606-7">}</span><span·class="p">.</span></code></pre><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 212 | </span><span·class="n">StdConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 212 | </span><span·class="n">StdConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 213 | ···</span><span·class="p"·data-group-id=" | 213 | ···</span><span·class="p"·data-group-id="7995585864-1">[</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-2">(</span><span·class="ss">sysDescr</span><span·class="p">,</span><span·class="w">····</span><s[·...·truncated·by·diffoscope;·len:·91,·SHA:·398c16a966f06a70e46c03745958521fa9821d04d4b929444209f2d4f9cac2e9·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 214 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id=" | 214 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-3">(</span><span·class="ss">sysObjectID</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7995585864-4">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·119,·SHA:·b95f68ae3e6ab656a5d20a9ddd20339e4e905bef36d1912a17d85c43cb7d8b32·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 215 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id=" | 215 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-5">(</span><span·class="ss">sysContact</span><span·class="p">,</span><span·class="w">··</span><span·class="s">"(mbj,eklas)@erlang.ericsson.se"</span><span·class="p"·data-group-id="7995585864-5">)</span><span·class="p">,</span><span·class="w"> |
| 216 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id=" | 216 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-6">(</span><span·class="ss">sysName</span><span·class="p">,</span><span·class="w">·····</span><span·class="s">"test"</span><span·class="p"·data-group-id="7995585864-6">)</span><span·class="p">,</span><span·class="w"> |
| 217 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id=" | 217 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-7">(</span><span·class="ss">sysServices</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">72</span><span·class="p"·data-group-id="7995585864-7">)</span><span·class="p">,</span><span·class="w"> |
| 218 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id=" | 218 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">standard_entry</span><span·class="p"·data-group-id="7995585864-8">(</span><span·class="ss">snmpEnableAuthenTraps</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">enabled</span><span·class="p"·data-group-id="7995585864-8">)</span><span·class="p"·data-group-id="7995585864-1">]</span><span·class="p">,</span><span·class="w"> |
| 219 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_standard_config</span><span·class="p"·data-group-id=" | 219 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_standard_config</span><span·class="p"·data-group-id="7995585864-9">(</span><span·class="n">AgentDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StdConfig</span><span·class="p"·data-group-id="7995585864-9">)</span><span·class="p">,</span></code></pre><p>A·value·must·be·provided·for·all·variables,·which·lack·default·values·in·the |
| 220 | MIB.</p><p><a·href=""·id="community"></a></p><h2·id="communities"·class="section-heading"> | 220 | MIB.</p><p><a·href=""·id="community"></a></p><h2·id="communities"·class="section-heading"> |
| 221 | ··<a·href="#communities"·class="hover-link"> | 221 | ··<a·href="#communities"·class="hover-link"> |
| 222 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 222 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 223 | ··</a> | 223 | ··</a> |
| 224 | ··<span·class="text">Communities</span> | 224 | ··<span·class="text">Communities</span> |
| 225 | </h2> | 225 | </h2> |
| 226 | <p>The·community·information·should·be·stored·in·a·file·called·<code·class="inline">community.conf</code>.·It | 226 | <p>The·community·information·should·be·stored·in·a·file·called·<code·class="inline">community.conf</code>.·It |
| 227 | must·be·present·if·the·agent·is·configured·for·SNMPv1·or·SNMPv2c.</p><p>An·SNMP·<em>community</em>·is·a·relationship·between·an·SNMP·agent·and·a·set·of·SNMP | 227 | must·be·present·if·the·agent·is·configured·for·SNMPv1·or·SNMPv2c.</p><p>An·SNMP·<em>community</em>·is·a·relationship·between·an·SNMP·agent·and·a·set·of·SNMP |
| 228 | managers·that·defines·authentication,·access·control·and·proxy·characteristics.</p><p>The·corresponding·table·is·<code·class="inline">snmpCommunityTable</code>·in·the·SNMP-COMMUNITY-MIB.</p><p>Each·entry·is·a·term:</p><p><code·class="inline">{CommunityIndex,·CommunityName,·SecurityName,·ContextName,·TransportTag}.</code></p><ul><li><code·class="inline">CommunityIndex</code>·is·a·non-empty·string.</li><li><code·class="inline">CommunityName</code>·is·a·string.</li><li><code·class="inline">SecurityName</code>·is·a·string.</li><li><code·class="inline">ContextName</code>·is·a·string.</li><li><code·class="inline">TransportTag</code>·is·a·string.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 228 | managers·that·defines·authentication,·access·control·and·proxy·characteristics.</p><p>The·corresponding·table·is·<code·class="inline">snmpCommunityTable</code>·in·the·SNMP-COMMUNITY-MIB.</p><p>Each·entry·is·a·term:</p><p><code·class="inline">{CommunityIndex,·CommunityName,·SecurityName,·ContextName,·TransportTag}.</code></p><ul><li><code·class="inline">CommunityIndex</code>·is·a·non-empty·string.</li><li><code·class="inline">CommunityName</code>·is·a·string.</li><li><code·class="inline">SecurityName</code>·is·a·string.</li><li><code·class="inline">ContextName</code>·is·a·string.</li><li><code·class="inline">TransportTag</code>·is·a·string.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">········</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 229 | </span><span·class="n">CommunityConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 229 | </span><span·class="n">CommunityConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 230 | ···</span><span·class="p"·data-group-id=" | 230 | ···</span><span·class="p"·data-group-id="8142420159-1">[</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">community_entry</span><span·class="p"·data-group-id="8142420159-2">(</span><span·class="s">"public"</span><span·class="p"·data-group-id="8142420159-2">)</span><span·class="p">,</span><span·class="w"> |
| 231 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">community_entry</span><span·class="p"·data-group-id=" | 231 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">community_entry</span><span·class="p"·data-group-id="8142420159-3">(</span><span·class="s">"all-rights"</span><span·class="p"·data-group-id="8142420159-3">)</span><span·class="p">,</span><span·class="w"> |
| 232 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">community_entry</span><span·class="p"·data-group-id=" | 232 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">community_entry</span><span·class="p"·data-group-id="8142420159-4">(</span><span·class="s">"standard·trap"</span><span·class="p">,</span><span·class="w"> |
| 233 | ·······························</span><span·class="s">"standard·trap"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"initial"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p"·data-group-id=" | 233 | ·······························</span><span·class="s">"standard·trap"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"initial"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p"·data-group-id="8142420159-4">)</span><span·class="p"·data-group-id="8142420159-1">]</span><span·class="p">,</span><span·class="w"> |
| 234 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_community_config</span><span·class="p"·data-group-id=" | 234 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_community_config</span><span·class="p"·data-group-id="8142420159-5">(</span><span·class="n">AgentDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">CommunityConfig</span><span·class="p"·data-group-id="8142420159-5">)</span><span·class="p">,</span></code></pre><p><a·href=""·id="vacm"></a></p><h2·id="mib-views-for-vacm"·class="section-heading"> |
| 235 | ··<a·href="#mib-views-for-vacm"·class="hover-link"> | 235 | ··<a·href="#mib-views-for-vacm"·class="hover-link"> |
| 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 236 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 237 | ··</a> | 237 | ··</a> |
| 238 | ··<span·class="text">MIB·Views·for·VACM</span> | 238 | ··<span·class="text">MIB·Views·for·VACM</span> |
| 239 | </h2> | 239 | </h2> |
| 240 | <p>The·information·about·MIB·Views·for·VACM·should·be·stored·in·a·file·called | 240 | <p>The·information·about·MIB·Views·for·VACM·should·be·stored·in·a·file·called |
| 241 | <code·class="inline">vacm.conf</code>.</p><p>The·corresponding·tables·are·<code·class="inline">vacmSecurityToGroupTable</code>,·<code·class="inline">vacmAccessTable</code>·and | 241 | <code·class="inline">vacm.conf</code>.</p><p>The·corresponding·tables·are·<code·class="inline">vacmSecurityToGroupTable</code>,·<code·class="inline">vacmAccessTable</code>·and |
| 242 | <code·class="inline">vacmViewTreeFamilyTable</code>·in·the·SNMP-VIEW-BASED-ACM-MIB.</p><p>Each·entry·is·one·of·the·terms,·one·entry·corresponds·to·one·row·in·one·of·the | 242 | <code·class="inline">vacmViewTreeFamilyTable</code>·in·the·SNMP-VIEW-BASED-ACM-MIB.</p><p>Each·entry·is·one·of·the·terms,·one·entry·corresponds·to·one·row·in·one·of·the |
| 243 | tables.</p><p><code·class="inline">{vacmSecurityToGroup,·SecModel,·SecName,·GroupName}.</code></p><p><code·class="inline">{vacmAccess,·GroupName,·Prefix,·SecModel,·SecLevel,·Match,·ReadView,·WriteView,·NotifyView}.</code></p><p><code·class="inline">{vacmViewTreeFamily,·ViewIndex,·ViewSubtree,·ViewStatus,·ViewMask}.</code></p><ul><li><code·class="inline">SecModel</code>·is·<code·class="inline">any</code>,·<code·class="inline">v1</code>,·<code·class="inline">v2c</code>,·or·<code·class="inline">usm</code>.</li><li><code·class="inline">SecName</code>·is·a·string.</li><li><code·class="inline">GroupName</code>·is·a·string.</li><li><code·class="inline">Prefix</code>·is·a·string.</li><li><code·class="inline">SecLevel</code>·is·<code·class="inline">noAuthNoPriv</code>,·<code·class="inline">authNoPriv</code>,·or·<code·class="inline">authPriv</code></li><li><code·class="inline">Match</code>·is·<code·class="inline">prefix</code>·or·<code·class="inline">exact</code>.</li><li><code·class="inline">ReadView</code>·is·a·string.</li><li><code·class="inline">WriteView</code>·is·a·string.</li><li><code·class="inline">NotifyView</code>·is·a·string.</li><li><code·class="inline">ViewIndex</code>·is·an·integer.</li><li><code·class="inline">ViewSubtree</code>·is·a·list·of·integer.</li><li><code·class="inline">ViewStatus</code>·is·either·<code·class="inline">included</code>·or·<code·class="inline">excluded</code></li><li><code·class="inline">ViewMask</code>·is·either·<code·class="inline">null</code>·or·a·list·of·ones·and·zeros.·Ones·nominate·that·an | 243 | tables.</p><p><code·class="inline">{vacmSecurityToGroup,·SecModel,·SecName,·GroupName}.</code></p><p><code·class="inline">{vacmAccess,·GroupName,·Prefix,·SecModel,·SecLevel,·Match,·ReadView,·WriteView,·NotifyView}.</code></p><p><code·class="inline">{vacmViewTreeFamily,·ViewIndex,·ViewSubtree,·ViewStatus,·ViewMask}.</code></p><ul><li><code·class="inline">SecModel</code>·is·<code·class="inline">any</code>,·<code·class="inline">v1</code>,·<code·class="inline">v2c</code>,·or·<code·class="inline">usm</code>.</li><li><code·class="inline">SecName</code>·is·a·string.</li><li><code·class="inline">GroupName</code>·is·a·string.</li><li><code·class="inline">Prefix</code>·is·a·string.</li><li><code·class="inline">SecLevel</code>·is·<code·class="inline">noAuthNoPriv</code>,·<code·class="inline">authNoPriv</code>,·or·<code·class="inline">authPriv</code></li><li><code·class="inline">Match</code>·is·<code·class="inline">prefix</code>·or·<code·class="inline">exact</code>.</li><li><code·class="inline">ReadView</code>·is·a·string.</li><li><code·class="inline">WriteView</code>·is·a·string.</li><li><code·class="inline">NotifyView</code>·is·a·string.</li><li><code·class="inline">ViewIndex</code>·is·an·integer.</li><li><code·class="inline">ViewSubtree</code>·is·a·list·of·integer.</li><li><code·class="inline">ViewStatus</code>·is·either·<code·class="inline">included</code>·or·<code·class="inline">excluded</code></li><li><code·class="inline">ViewMask</code>·is·either·<code·class="inline">null</code>·or·a·list·of·ones·and·zeros.·Ones·nominate·that·an |
| 244 | exact·match·is·used·for·this·sub-identifier.·Zeros·are·wild-cards·which·match | 244 | exact·match·is·used·for·this·sub-identifier.·Zeros·are·wild-cards·which·match |
| 245 | any·sub-identifier.·If·the·mask·is·shorter·than·the·sub-tree,·the·tail·is | 245 | any·sub-identifier.·If·the·mask·is·shorter·than·the·sub-tree,·the·tail·is |
| 246 | regarded·as·all·ones.·<code·class="inline">null</code>·is·shorthand·for·a·mask·with·all·ones.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 246 | regarded·as·all·ones.·<code·class="inline">null</code>·is·shorthand·for·a·mask·with·all·ones.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 247 | </span><span·class="n">SecName</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"plain"</span><span·class="p">,</span><span·class="w"> | 247 | </span><span·class="n">SecName</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"plain"</span><span·class="p">,</span><span·class="w"> |
| 248 | </span><span·class="n">VacmConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 248 | </span><span·class="n">VacmConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 249 | ···</span><span·class="p"·data-group-id=" | 249 | ···</span><span·class="p"·data-group-id="9179670670-1">[</span><span·class="c1">%%························SecModel,·SecName,·GroupName</span><span·class="w"> |
| 250 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_s2g_entry</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_s2g_entry</span><span·class="p"·data-group-id="9179670670-2">(</span><span·class="ss">usm</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SecName</span><span·class="p"·data-group-id="9179670670-2">)</span><span·class="p">,</span><span·class="w"> |
| 251 | ····</span><span·class="c1">%%························GroupName,·Prefix,·SecModel,</span><span·class="w"> | 251 | ····</span><span·class="c1">%%························GroupName,·Prefix,·SecModel,</span><span·class="w"> |
| 252 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_acc_entry</span><span·class="p"·data-group-id=" | 252 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_acc_entry</span><span·class="p"·data-group-id="9179670670-3">(</span><span·class="n">SecName</span><span·class="p">,</span><span·class="w">·</span><span·class="s">""</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">any</span><span·class="p">,</span><span·class="w"> |
| 253 | ····</span><span·class="c1">%%························SecLevel,·Match,·RV,·WV,·NV</span><span·class="w"> | 253 | ····</span><span·class="c1">%%························SecLevel,·Match,·RV,·WV,·NV</span><span·class="w"> |
| 254 | ······························</span><span·class="ss">noAuthNoPriv</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">exact</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p"·data-group-id=" | 254 | ······························</span><span·class="ss">noAuthNoPriv</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">exact</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"all"</span><span·class="p"·data-group-id="9179670670-3">)</span><span·class="p">,</span><span·class="w"> |
| 255 | ····</span><span·class="c1">%%························ViewName,·ViewSubtree,·ViewType,·ViewMask</span><span·class="w"> | 255 | ····</span><span·class="c1">%%························ViewName,·ViewSubtree,·ViewType,·ViewMask</span><span·class="w"> |
| 256 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_vtf_entry</span><span·class="p"·data-group-id=" | 256 | ····</span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">vacm_vtf_entry</span><span·class="p"·data-group-id="9179670670-4">(</span><span·class="s">"restricted"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9179670670-5">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p[·...·truncated·by·diffoscope;·len:·387,·SHA:·86a9646d37c87cdb10348b38f7c4f97c86bcd8a1905da37ddf856baa649d8cd8·...·]-1">]</span><span·class="p">,</span><span·class="w"> |
| 257 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_vacm_config</span><span·class="p"·data-group-id=" | 257 | </span><span·class="nc">snmpa_conf</span><span·class="p">:</span><span·class="nf">write_vacm_config</span><span·class="p"·data-group-id="9179670670-6">(</span><span·class="n">AgentDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">VacmConfig</span><span·class="p"·data-group-id="9179670670-6">)</span><span·class="p">,</span></code></pre><p><a·href=""·id="usm"></a></p><h2·id="security-data-for-usm"·class="section-heading"> |
| 258 | ··<a·href="#security-data-for-usm"·class="hover-link"> | 258 | ··<a·href="#security-data-for-usm"·class="hover-link"> |
| 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 259 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 260 | ··</a> | 260 | ··</a> |
| 261 | ··<span·class="text">Security·data·for·USM</span> | 261 | ··<span·class="text">Security·data·for·USM</span> |
| 262 | </h2> | 262 | </h2> |
| 263 | <p>The·information·about·Security·data·for·USM·should·be·stored·in·a·file·called | 263 | <p>The·information·about·Security·data·for·USM·should·be·stored·in·a·file·called |
| 264 | <code·class="inline">usm.conf</code>,·which·must·be·present·if·the·agent·is·configured·for·SNMPv3.</p><p>The·corresponding·table·is·<code·class="inline">usmUserTable</code>·in·the·SNMP-USER-BASED-SM-MIB | 264 | <code·class="inline">usm.conf</code>,·which·must·be·present·if·the·agent·is·configured·for·SNMPv3.</p><p>The·corresponding·table·is·<code·class="inline">usmUserTable</code>·in·the·SNMP-USER-BASED-SM-MIB |
| Offset 271, 43 lines modified | Offset 271, 43 lines modified | ||
| 271 | <code·class="inline">usmAesCfb128Protocol</code>.</p></li><li><p><code·class="inline">PrivKeyC</code>·is·a·string.</p></li><li><p><code·class="inline">OwnPrivKeyC</code>·is·a·string.</p></li><li><p><code·class="inline">Public</code>·is·a·string.</p></li><li><p><code·class="inline">AuthKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized | 271 | <code·class="inline">usmAesCfb128Protocol</code>.</p></li><li><p><code·class="inline">PrivKeyC</code>·is·a·string.</p></li><li><p><code·class="inline">OwnPrivKeyC</code>·is·a·string.</p></li><li><p><code·class="inline">Public</code>·is·a·string.</p></li><li><p><code·class="inline">AuthKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized |
| 272 | authentication·key.·It·is·not·visible·in·the·MIB.·The·length·(number·of | 272 | authentication·key.·It·is·not·visible·in·the·MIB.·The·length·(number·of |
| 273 | octets)·of·this·key·needs·to·be:</p><ul><li>16·if·<code·class="inline">usmHMACMD5AuthProtocol</code>.</li><li>20·if·<code·class="inline">usmHMACSHAAuthProtocol</code>.</li><li>28·if·<code·class="inline">usmHMAC128SHA224AuthProtocol</code>.</li><li>32·if·<code·class="inline">usmHMAC192SHA256AuthProtocol</code>.</li><li>48·if·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>.</li><li>64·if·<code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</li></ul></li><li><p><code·class="inline">PrivKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized | 273 | octets)·of·this·key·needs·to·be:</p><ul><li>16·if·<code·class="inline">usmHMACMD5AuthProtocol</code>.</li><li>20·if·<code·class="inline">usmHMACSHAAuthProtocol</code>.</li><li>28·if·<code·class="inline">usmHMAC128SHA224AuthProtocol</code>.</li><li>32·if·<code·class="inline">usmHMAC192SHA256AuthProtocol</code>.</li><li>48·if·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>.</li><li>64·if·<code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</li></ul></li><li><p><code·class="inline">PrivKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized |
| 274 | encryption·key.·It·is·not·visible·in·the·MIB.·The·length·of·this·key·needs·to | 274 | encryption·key.·It·is·not·visible·in·the·MIB.·The·length·of·this·key·needs·to |
| 275 | be·16·if·<code·class="inline">usmDESPrivProtocol</code>·or·<code·class="inline">usmAesCfb128Protocol</code>·is·used.</p></li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 275 | be·16·if·<code·class="inline">usmDESPrivProtocol</code>·or·<code·class="inline">usmAesCfb128Protocol</code>·is·used.</p></li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">AgentDir</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 276 | </span><span·class="n">EngineID</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"plain·engine"</span><span·class="w"> | 276 | </span><span·class="n">EngineID</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"plain·engine"</span><span·class="w"> |
| 277 | </span><span·class="n">Passwd</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"FooBar·Hoopla"</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·This·should·*obviously*·be·choosen·better</span><span·class="w"> | 277 | </span><span·class="n">Passwd</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"FooBar·Hoopla"</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·This·should·*obviously*·be·choosen·better</span><span·class="w"> |
| 278 | </span><span·class="n">Secret16</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">passwd2localized_key</span><span·class="p"·data-group-id=" | 278 | </span><span·class="n">Secret16</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">passwd2localized_key</span><span·class="p"·data-group-id="5297527683-1">(</span><span·class="nb">md5</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Passwd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EngineID</span><span·class="p"·data-group-id="5297527683-1">)</span><span·class="p">,</span><span·class="w"> |
| 279 | </span><span·class="n">Secret20</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">passwd2localized_key</span><span·class="p"·data-group-id=" | 279 | </span><span·class="n">Secret20</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">snmp</span><span·class="p">:</span><span·class="nf">passwd2localized_key</span><span·class="p"·data-group-id="5297527683-2">(</span><span·class="ss">sha</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Passwd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EngineID</span><span·class="p"·data-group-id="5297527683-2">)</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 25693/83157 bytes (30.90%) of diff not shown. | |||
| Offset 304, 15 lines modified | Offset 304, 15 lines modified | ||
| 304 | This·MIB·can·be·used·with·any·SNMP·version.</li><li>SNMP-COMMUNITY-MIB,·which·defines·managed·objects·for·coexistence·of·SNMPv1 | 304 | This·MIB·can·be·used·with·any·SNMP·version.</li><li>SNMP-COMMUNITY-MIB,·which·defines·managed·objects·for·coexistence·of·SNMPv1 |
| 305 | and·SNMPv2c·with·SNMPv3.·This·MIB·is·only·useful·if·SNMPv1·or·SNMPv2c·is·used, | 305 | and·SNMPv2c·with·SNMPv3.·This·MIB·is·only·useful·if·SNMPv1·or·SNMPv2c·is·used, |
| 306 | possibly·in·combination·with·SNMPv3.</li><li>SNMP-USER-BASED-SM-MIB,·which·defines·managed·objects·for·authentication·and | 306 | possibly·in·combination·with·SNMPv3.</li><li>SNMP-USER-BASED-SM-MIB,·which·defines·managed·objects·for·authentication·and |
| 307 | privacy.·This·MIB·is·only·useful·with·SNMPv3.</li></ul><p>All·of·these·MIBs·should·be·loaded·into·the·Master·Agent.·Once·loaded,·these | 307 | privacy.·This·MIB·is·only·useful·with·SNMPv3.</li></ul><p>All·of·these·MIBs·should·be·loaded·into·the·Master·Agent.·Once·loaded,·these |
| 308 | MIBs·are·always·available·in·all·contexts.</p><p>The·ASN.1·code,·the·Erlang·source·code,·and·the·generated·<code·class="inline">.hrl</code>·files·for·them | 308 | MIBs·are·always·available·in·all·contexts.</p><p>The·ASN.1·code,·the·Erlang·source·code,·and·the·generated·<code·class="inline">.hrl</code>·files·for·them |
| 309 | are·provided·in·the·distribution·and·are·placed·in·the·directories·<code·class="inline">mibs</code>, | 309 | are·provided·in·the·distribution·and·are·placed·in·the·directories·<code·class="inline">mibs</code>, |
| 310 | <code·class="inline">src</code>,·and·<code·class="inline">include</code>,·respectively,·in·the·<code·class="inline">snmp</code>·application.</p><p>The·<code·class="inline">.hrl</code>·files·are·generated·with·<a·href="snmpc.html#mib_to_hrl/1"><code·class="inline">snmpc:mib_to_hrl/1</code></a>.·Include·these·files·in | 310 | <code·class="inline">src</code>,·and·<code·class="inline">include</code>,·respectively,·in·the·<code·class="inline">snmp</code>·application.</p><p>The·<code·class="inline">.hrl</code>·files·are·generated·with·<a·href="snmpc.html#mib_to_hrl/1"><code·class="inline">snmpc:mib_to_hrl/1</code></a>.·Include·these·files·in |
| 311 | your·code·as·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 311 | your·code·as·in·the·following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8642737204-1">(</span><span·class="s">"snmp/include/SNMPv2-MIB.hrl"</span><span·class="p"·data-group-id="8642737204-1">)</span><span·class="p">.</span></code></pre><p>The·initial·values·for·the·managed·objects·defined·in·these·tables,·are·read·at |
| 312 | start-up·from·a·set·of·configuration·files.·These·are·described·in | 312 | start-up·from·a·set·of·configuration·files.·These·are·described·in |
| 313 | <a·href="snmp_config.html">Configuration·Files</a>.</p><h3·id="standard-mib-and-snmpv2-mib"·class="section-heading"> | 313 | <a·href="snmp_config.html">Configuration·Files</a>.</p><h3·id="standard-mib-and-snmpv2-mib"·class="section-heading"> |
| 314 | ··<a·href="#standard-mib-and-snmpv2-mib"·class="hover-link"> | 314 | ··<a·href="#standard-mib-and-snmpv2-mib"·class="hover-link"> |
| 315 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 315 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 316 | ··</a> | 316 | ··</a> |
| 317 | ··<span·class="text">STANDARD-MIB·and·SNMPv2-MIB</span> | 317 | ··<span·class="text">STANDARD-MIB·and·SNMPv2-MIB</span> |
| 318 | </h3> | 318 | </h3> |
| Offset 465, 17 lines modified | Offset 465, 17 lines modified | ||
| 465 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 465 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 466 | ··</a> | 466 | ··</a> |
| 467 | ··<span·class="text">Notifications</span> | 467 | ··<span·class="text">Notifications</span> |
| 468 | </h2> | 468 | </h2> |
| 469 | <p>Notifications·are·defined·in·SMIv1·with·the·TRAP-TYPE·macro·in·the·definition·of | 469 | <p>Notifications·are·defined·in·SMIv1·with·the·TRAP-TYPE·macro·in·the·definition·of |
| 470 | an·MIB·(see·RFC1215).·The·corresponding·macro·in·SMIv2·is·NOTIFICATION-TYPE. | 470 | an·MIB·(see·RFC1215).·The·corresponding·macro·in·SMIv2·is·NOTIFICATION-TYPE. |
| 471 | When·an·application·decides·to·send·a·notification,·it·calls·one·of·the | 471 | When·an·application·decides·to·send·a·notification,·it·calls·one·of·the |
| 472 | following·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">send_notification</span><span·class="p"·data-group-id=" | 472 | following·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">send_notification</span><span·class="p"·data-group-id="8423622050-1">(</span><span·class="n">Agent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Notification</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Receiver</span><span·class="w"> |
| 473 | ·······················</span><span·class="p"·data-group-id=" | 473 | ·······················</span><span·class="p"·data-group-id="8423622050-2">[</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NotifyName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ContextName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Varbind[·...·truncated·by·diffoscope;·len:·102,·SHA:·ae42d426222b7217d4f9e4108bfd03fa99ddbca3de47f38fa77372a0598a6348·...·]-1">)</span><span·class="w"> |
| 474 | </span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">send_trap</span><span·class="p"·data-group-id=" | 474 | </span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">send_trap</span><span·class="p"·data-group-id="8423622050-3">(</span><span·class="n">Agent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Notification</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Community</span><span·class="w">·</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·286,·SHA:·e87caa11567e482d9e67c18765f0e358cb1ef2d4bfb2d4a29b01b5abff668b5d·...·]-3">)</span></code></pre><p>providing·the·registered·name·or·process·identifier·of·the·agent·where·the·MIB, |
| 475 | which·defines·the·notification·is·loaded·and·the·symbolic·name·of·the | 475 | which·defines·the·notification·is·loaded·and·the·symbolic·name·of·the |
| 476 | notification.</p><p>If·the·<code·class="inline">send_notification/3,4</code>·function·is·used,·all·management·targets·are | 476 | notification.</p><p>If·the·<code·class="inline">send_notification/3,4</code>·function·is·used,·all·management·targets·are |
| 477 | selected,·as·defined·in·RFC2273.·The·<code·class="inline">Receiver</code>·parameter·defines·where·the | 477 | selected,·as·defined·in·RFC2273.·The·<code·class="inline">Receiver</code>·parameter·defines·where·the |
| 478 | agent·should·send·information·about·the·delivery·of·inform·requests.</p><p>If·the·<code·class="inline">send_notification/5</code>·function·is·used,·an·<code·class="inline">NotifyName</code>·must·be·provided. | 478 | agent·should·send·information·about·the·delivery·of·inform·requests.</p><p>If·the·<code·class="inline">send_notification/5</code>·function·is·used,·an·<code·class="inline">NotifyName</code>·must·be·provided. |
| 479 | This·parameter·is·used·as·an·index·in·the·<code·class="inline">snmpNotifyTable</code>,·and·the·management | 479 | This·parameter·is·used·as·an·index·in·the·<code·class="inline">snmpNotifyTable</code>,·and·the·management |
| 480 | targets·defined·by·that·single·entry·is·used.</p><p>The·<code·class="inline">send_notification/6</code>·function·is·the·most·general·version·of·the·function. | 480 | targets·defined·by·that·single·entry·is·used.</p><p>The·<code·class="inline">send_notification/6</code>·function·is·the·most·general·version·of·the·function. |
| 481 | A·<code·class="inline">ContextName</code>·must·be·specified,·from·which·the·notification·will·be·sent.·If | 481 | A·<code·class="inline">ContextName</code>·must·be·specified,·from·which·the·notification·will·be·sent.·If |
| Offset 611, 15 lines modified | Offset 611, 15 lines modified | ||
| 611 | ······<p·class="built-using"> | 611 | ······<p·class="built-using"> |
| 612 | ········Built·using | 612 | ········Built·using |
| 613 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 613 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 614 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 614 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 615 | ······</p> | 615 | ······</p> |
| 616 | <p>Copyright·©·1996-202 | 616 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 617 | ····</footer> | 617 | ····</footer> |
| 618 | ··</div> | 618 | ··</div> |
| 619 | </main> | 619 | </main> |
| 620 | </div> | 620 | </div> |
| 621 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 621 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 622 | ··<script> | 622 | ··<script> |
| 623 | ··let·initialized·=·false; | 623 | ··let·initialized·=·false; |
| Offset 263, 15 lines modified | Offset 263, 15 lines modified | ||
| 263 | ······<p·class="built-using"> | 263 | ······<p·class="built-using"> |
| 264 | ········Built·using | 264 | ········Built·using |
| 265 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 265 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 266 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 266 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 267 | ······</p> | 267 | ······</p> |
| 268 | <p>Copyright·©·1996-202 | 268 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 269 | ····</footer> | 269 | ····</footer> |
| 270 | ··</div> | 270 | ··</div> |
| 271 | </main> | 271 | </main> |
| 272 | </div> | 272 | </div> |
| 273 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 273 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 274 | ··<script> | 274 | ··<script> |
| 275 | ··let·initialized·=·false; | 275 | ··let·initialized·=·false; |
| Offset 136, 59 lines modified | Offset 136, 59 lines modified | ||
| 136 | ··<a·href="#configuration"·class="hover-link"> | 136 | ··<a·href="#configuration"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Configuration</span> | 139 | ··<span·class="text">Configuration</span> |
| 140 | </h2> | 140 | </h2> |
| 141 | <p>The·following·configuration·parameters·are·defined·for·the·SNMP·application. | 141 | <p>The·following·configuration·parameters·are·defined·for·the·SNMP·application. |
| 142 | Refer·to·application(3)·for·more·information·about·configuration·parameters.</p><p>The·snmp·part·of·the·config·file·specifying·the·configuration·parameters·is | 142 | Refer·to·application(3)·for·more·information·about·configuration·parameters.</p><p>The·snmp·part·of·the·config·file·specifying·the·configuration·parameters·is |
| 143 | basically·the·following·tuple:</p><pre><code·class="text">······{snmp,·snmp_components_config()}</code></pre><p>A·minimal·config·file·for·starting·a·node·with·both·a·manager·and·an·agent:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id=" | 143 | basically·the·following·tuple:</p><pre><code·class="text">······{snmp,·snmp_components_config()}</code></pre><p>A·minimal·config·file·for·starting·a·node·with·both·a·manager·and·an·agent:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="1481069514-1">[</span><span·class="p"·data-group-id="1481069514-2">{</span><span·class="ss">snmp</span><span·class="p">,</span><span·class="w"> |
| 144 | ········</span><span·class="p"·data-group-id=" | 144 | ········</span><span·class="p"·data-group-id="1481069514-3">[</span><span·class="p"·data-group-id="1481069514-4">{</span><span·class="ss">agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1481069514-5">[</span><span·class="p"·data-group-id="1481069514-6">{</spa[·...·truncated·by·diffoscope;·len:·174,·SHA:·7766e15cbb63f9dd295cf70dab6ac3cf087e11b7b473aedd3df18e4395b0acb4·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 145 | ··················</span><span·class="p"·data-group-id=" | 145 | ··················</span><span·class="p"·data-group-id="1481069514-7">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1481069514-8">[</span><span·class="p"·data-group-id="1481069514-9">{</span><span·class="ss">dir</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·333,·SHA:·f9246caacb389f0186e98de5196e6dfc9a511ee6c8b0c5bebf4e12bf086b903c·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 146 | ·········</span><span·class="p"·data-group-id="5548686136-10">{</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5548686136-11">[</span><span·class="p"·data-group-id="5548686136-12">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5548686136-13">[</span><span·class="p"·data-group-id="5548686136-14">{</span><span·class="ss">dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/tmp/snmp/manager/conf"</span><span·class="p"·data-group-id="5548686136-14">}</span><span·class="p">,</span><span·class="w"> | ||
| 147 | ········· | 146 | ·········</span><span·class="p"·data-group-id="1481069514-10">{</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1481069514-11">[</span><span·class="p"·data-group-id="1481069514-12">{</span><span·cl[·...·truncated·by·diffoscope;·len:·381,·SHA:·55b2086f6ab0b8f4a0abe2c900e30c0a6628700bc5868834a439c6fd3ade62de·...·]</span><span·class="w"> |
| 147 | ······························</span><span·class="p"·data-group-id="1481069514-15">{</span><span·class="ss">db_dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/tmp/snmp/manager/db"</span><span·class="p"·data-group-id="1481069514-15">}</span><span·class="p"·data-group-id="1481069514-13">]</span><span·class="p"·data-group-id="1481069514-12">}</span><span·class="p"·data-group-id="1481069514-11">]</span><span·class="p"·data-group-id="1481069514-10">}</span><span·class="p"·data-group-id="1481069514-3">]</span><span·class="p"·data-group-id="1481069514-2">}</span><span·class="w"> | ||
| 148 | ········</span><span·class="p"·data-group-id=" | 148 | ········</span><span·class="p"·data-group-id="1481069514-1">]</span><span·class="w"> |
| 149 | ·······</span><span·class="p">}</span><span·class="w"> | 149 | ·······</span><span·class="p">}</span><span·class="w"> |
| 150 | ······</span><span·class="p">]</span><span·class="p">.</span></code></pre><p>Each·snmp·component·has·its·own·set·of·configuration·parameters,·even·though | 150 | ······</span><span·class="p">]</span><span·class="p">.</span></code></pre><p>Each·snmp·component·has·its·own·set·of·configuration·parameters,·even·though |
| 151 | some·of·the·types·are·common·to·both·components.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nf">snmp_components_config</span><span·class="p"·data-group-id="1350681289-1">(</span><span·class="p"·data-group-id="1350681289-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="1350681289-2">[</span><span·class="nf">snmp_component_config</span><span·class="p"·data-group-id="1350681289-3">(</span><span·class="p"·data-group-id="1350681289-3">)</span><span·class="p"·data-group-id="1350681289-2">]</span><span·class="w"> | ||
| 152 | 151 | some·of·the·types·are·common·to·both·components.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nf">snmp_components_config</span><span·class="p"·data-group-id="8354569018-1">(</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·351,·SHA:·7438324ed8a6e45d8970bd6e749536a19042a6272af543f7904a0573de648bfd·...·]</span><span·class="w"> | |
| 152 | ······</span><span·class="nf">snmp_component_config</span><span·class="p"·data-group-id="8354569018-4">(</span><span·class="p"·data-group-id="8354569018-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-5">{</span><span·class="ss">agent</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">agent_options</span><span·class="p"·data-group-id="8354569018-6">(</span><span·class="p"·data-group-id="8354569018-6">)</span><span·class="p"·data-group-id="8354569018-5">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-7">{</span><span·class="ss">manager</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">manager_options</span><span·class="p"·data-group-id="8354569018-8">(</span><span·class="p"·data-group-id="8354569018-8">)</span><span·class="p"·data-group-id="8354569018-7">}</span><span·class="w"> | ||
| 153 | ······</span><span·class="nf">agent_options</span><span·class="p"·data-group-id=" | 153 | ······</span><span·class="nf">agent_options</span><span·class="p"·data-group-id="8354569018-9">(</span><span·class="p"·data-group-id="8354569018-9">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-10">[</span><span·class="nf">agent_option</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·130,·SHA:·8c8bd654c0d5208e540d2fdf3f9551ee147e9c31ccaf0c8a1e152d20ec8f7b0e·...·]-10">]</span><span·class="w"> |
| 154 | ······</span><span·class="nf">agent_option</span><span·class="p"·data-group-id=" | 154 | ······</span><span·class="nf">agent_option</span><span·class="p"·data-group-id="8354569018-12">(</span><span·class="p"·data-group-id="8354569018-12">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-13">{</span><span·class="ss">restart_type</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·220,·SHA:·a40be134fedcef37bb37edde3a81705185273dbfb8b4d3c5b8b989c71681028a·...·]-13">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 155 | ·······················</span><span·class="p"·data-group-id=" | 155 | ·······················</span><span·class="p"·data-group-id="8354569018-15">{</span><span·class="ss">agent_type</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">agent_type</span><span·class="p"·data-group-id="8354569018-16">(</span><span·class="p"·data-group-id="8354569018-16">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·02ae23577906a7930a7afaa73d20ee329c130832994d9e9b3993cf0c5c5ec77f·...·]-15">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 156 | ·······················</span><span·class="p"·data-group-id=" | 156 | ·······················</span><span·class="p"·data-group-id="8354569018-17">{</span><span·class="ss">agent_verbosity</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">verbosity</span><span·class="p"·data-group-id="8354569018-18">(</span><span·class="p"·data-group-id="8354569018-18">)</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·195bca65c7181fed94ade0a16d8380ac70f5e0eef396a44e1cbdab4d91580c8f·...·]-17">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> |
| 157 | ·······················</span><span·class="p"·data-group-id=" | 157 | ·······················</span><span·class="p"·data-group-id="8354569018-19">{</span><span·class="ss">discovery</span><span·class="p">,</span><span·class="w">········</span><span·class="nf">agent_discovery</span><span·class="p"·data-group-id="8354569018-20">(</span><span·class="p"·data-group-id="8354569018-20">)</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·b7249949451063228265d77d7a7a19bbe80994e566a88c6d42127c33c60495b9·...·]-19">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 158 | ·······················</span><span·class="p"·data-group-id=" | 158 | ·······················</span><span·class="p"·data-group-id="8354569018-21">{</span><span·class="ss">versions</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">versions</span><span·class="p"·data-group-id="8354569018-22">(</span><span·class="p"·data-group-id="8354569018-22">)</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·72f4c883fac016fbf8da3d62ac1004d60ccac6d127f4cb18eaa248c75202b454·...·]-21">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> |
| 159 | ·······················</span><span·class="p"·data-group-id=" | 159 | ·······················</span><span·class="p"·data-group-id="8354569018-23">{</span><span·class="ss">gb_max_vbs</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">gb_max_vbs</span><span·class="p"·data-group-id="8354569018-24">(</span><span·class="p"·data-group-id="8354569018-24">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·02ae23577906a7930a7afaa73d20ee329c130832994d9e9b3993cf0c5c5ec77f·...·]-23">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 160 | ·······················</span><span·class="p"·data-group-id="1350681289-25">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">priority</span><span·class="p"·data-group-id="1350681289-26">(</span><span·class="p"·data-group-id="1350681289-26">)</span><span·class="p"·data-group-id="1350681289-25">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> | ||
| 161 | ·······················</span><span·class="p"·data-group-id=" | 160 | ·······················</span><span·class="p"·data-group-id="8354569018-25">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">priority</span><span·class="p"·data-group-id="8354569018-26">(</span><span·class="p"·data-group-id="8354569018-26">)</span><span[·...·truncated·by·diffoscope;·len:·71,·SHA:·7441e54749e39de5617990411c4fe62515bf356450d4cf936867de763c31aa52·...·]···</span><span·class="p">|</span><span·class="w"> |
| 161 | ·······················</span><span·class="p"·data-group-id="8354569018-27">{</span><span·class="ss">multi_threaded</span><span·class="p">,</span><span·class="w">···</span><span·class="nf">multi_threaded</span><span·class="p"·data-group-id="8354569018-28">(</span><span·class="p"·data-group-id="8354569018-28">)</span><span·class="p"·data-group-id="8354569018-27">}</span><span·class="w">···</span><span·class="p">|</span><span·class="w"> | ||
| 162 | ·······················</span><span·class="p"·data-group-id=" | 162 | ·······················</span><span·class="p"·data-group-id="8354569018-29">{</span><span·class="ss">db_dir</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">db_dir</span><span·class="p"·data-group-id="8354569018-30">(</span><span·class="p"·data-group-id="8354569018-30">)</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·7277ce0445e59cfa305d60da5acc7dac316db89c38baebbeff8a88964e8144ce·...·]-29">}</span><span·class="w">···········</span><span·class="p">|</span><span·class="w"> |
| 163 | ·······················</span><span·class="p"·data-group-id=" | 163 | ·······················</span><span·class="p"·data-group-id="8354569018-31">{</span><span·class="ss">db_init_error</span><span·class="p">,</span><span·class="w">····</span><span·class="nf">db_init_error</span><span·class="p"·data-group-id="8354569018-32">(</span><span·class="p"·data-group-id="8354569018-32">)</span>[·...·truncated·by·diffoscope;·len:·41,·SHA:·a65d48d00003757964d07e09a093c8f81102bcc4071dc625d361d1c653fc7d91·...·]-31">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> |
| 164 | ·······················</span><span·class="p"·data-group-id=" | 164 | ·······················</span><span·class="p"·data-group-id="8354569018-33">{</span><span·class="ss">local_db</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">local_db</span><span·class="p"·data-group-id="8354569018-34">(</span><span·class="p"·data-group-id="8354569018-34">)</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·72f4c883fac016fbf8da3d62ac1004d60ccac6d127f4cb18eaa248c75202b454·...·]-33">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> |
| 165 | ·······················</span><span·class="p"·data-group-id=" | 165 | ·······················</span><span·class="p"·data-group-id="8354569018-35">{</span><span·class="ss">net_if</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_net_if</span><span·class="p"·data-group-id="8354569018-36">(</span><span·class="p"·data-group-id="8354569018-36">)</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·faeeede756faf133c7465cfbf87979ac5cedab82a5da74d0a5e9cb4d4d4781f8·...·]-35">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 166 | ·······················</span><span·class="p"·data-group-id=" | 166 | ·······················</span><span·class="p"·data-group-id="8354569018-37">{</span><span·class="ss">mibs</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">mibs</span><span·class="p"·data-group-id="8354569018-38">(</span><span·class="p"·data-group-id="8354569018-38">)</span><span·cla[·...·truncated·by·diffoscope;·len:·32,·SHA:·36b697526e42b8c131ee5484485fe8160808a47a809032a60a98e5e90d21824e·...·]-37">}</span><span·class="w">·············</span><span·class="p">|</span><span·class="w"> |
| 167 | ·······················</span><span·class="p"·data-group-id=" | 167 | ·······················</span><span·class="p"·data-group-id="8354569018-39">{</span><span·class="ss">mib_storage</span><span·class="p">,</span><span·class="w">······</span><span·class="nf">mib_storage</span><span·class="p"·data-group-id="8354569018-40">(</span><span·class="p"·data-group-id="8354569018-40">)</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·a5216df331b5476e8d372c9abe68aa9811dba57a26c5f9d40fbdc856cbac8499·...·]-39">}</span><span·class="w">······</span><span·class="p">|</span><span·class="w"> |
| 168 | ·······················</span><span·class="p"·data-group-id=" | 168 | ·······················</span><span·class="p"·data-group-id="8354569018-41">{</span><span·class="ss">mib_server</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">mib_server</span><span·class="p"·data-group-id="8354569018-42">(</span><span·class="p"·data-group-id="8354569018-42">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·02ae23577906a7930a7afaa73d20ee329c130832994d9e9b3993cf0c5c5ec77f·...·]-41">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 169 | ·······················</span><span·class="p"·data-group-id="1350681289-43">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="1350681289-44">(</span><span·class="p"·data-group-id="1350681289-44">)</span><span·class="p"·data-group-id="1350681289-43">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> | ||
| 170 | ·······················</span><span·class="p"·data-group-id="1350681289-45">{</span><span·class="ss">error_report_mod</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">error_report_mod</span><span·class="p"·data-group-id="1350681289-46">(</span><span·class="p"·data-group-id="1350681289-46">)</span><span·class="p"·data-group-id="1350681289-45">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 171 | ·······················</span><span·class="p"·data-group-id=" | 169 | ·······················</span><span·class="p"·data-group-id="8354569018-43">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="8354569018-44">(</span><span·class="p"·data-group-id="8354569018-44">)</spa[·...·truncated·by·diffoscope;·len:·72,·SHA:·9c38d148caf4221964024de1be5f7beae1a2279d98052975d1a9b34acbb76714·...·]··</span><span·class="p">|</span><span·class="w"> |
| 170 | ·······················</span><span·class="p"·data-group-id="8354569018-45">{</span><span·class="ss">error_report_mod</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">error_report_mod</span><span·class="p"·data-group-id="8354569018-46">(</span><span·class="p"·data-group-id="8354569018-46">)</span><span·class="p"·data-group-id="8354569018-45">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 171 | ·······················</span><span·class="p"·data-group-id="8354569018-47">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">note_store</span><span·class="p"·data-group-id="8354569018-48">(</span><span·class="p"·data-group-id="8354569018-48">)</span><span·class="p"·data-group-id="8354569018-47">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> | ||
| 172 | ·······················</span><span·class="p"·data-group-id=" | 172 | ·······················</span><span·class="p"·data-group-id="8354569018-49">{</span><span·class="ss">symbolic_store</span><span·class="p">,</span><span·class="w">···</span><span·class="nf">symbolic_store</span><span·class="p"·data-group-id="8354569018-50">(</span><span·class="p"·data-group-id="8354569018-50">)</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·b097fd1f03bfca3663a2a18f0e4c81e54b18bfb22f622a455c695fec55b0a154·...·]-49">}</span><span·class="w">···</span><span·class="p">|</span><span·class="w"> |
| 173 | ·······················</span><span·class="p"·data-group-id=" | 173 | ·······················</span><span·class="p"·data-group-id="8354569018-51">{</span><span·class="ss">target_cache</span><span·class="p">,</span><span·class="w">·····</span><span·class="nf">target_cache</span><span·class="p"·data-group-id="8354569018-52">(</span><span·class="p"·data-group-id="8354569018-52">)</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·faeeede756faf133c7465cfbf87979ac5cedab82a5da74d0a5e9cb4d4d4781f8·...·]-51">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 174 | ·······················</span><span·class="p"·data-group-id="1350681289-53">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_config</span><span·class="p"·data-group-id="1350681289-54">(</span><span·class="p"·data-group-id="1350681289-54">)</span><span·class="p"·data-group-id="1350681289-53">}</span><span·class="w"> | ||
| 175 | ······</span><span·class="nf">manager_options</span><span·class="p"·data-group-id="1350681289-55">(</span><span·class="p"·data-group-id="1350681289-55">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1350681289-56">[</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="1350681289-57">(</span><span·class="p"·data-group-id="1350681289-57">)</span><span·class="p"·data-group-id="1350681289-56">]</span><span·class="w"> | ||
| 176 | ······ | 174 | ·······················</span><span·class="p"·data-group-id="8354569018-53">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_config</span><span·class="p"·data-group-id="8354569018-54">(</span>[·...·truncated·by·diffoscope;·len:·101,·SHA:·9ce62259c0b928952952072b9b4f2a61ca888ad5191e2db2268fde91d8a6beb3·...·]</span><span·class="w"> |
| 175 | ······</span><span·class="nf">manager_options</span><span·class="p"·data-group-id="8354569018-55">(</span><span·class="p"·data-group-id="8354569018-55">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-56">[</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="8354569018-57">(</span><span·class="p"·data-group-id="8354569018-57">)</span><span·class="p"·data-group-id="8354569018-56">]</span><span·class="w"> | ||
| 176 | ······</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="8354569018-58">(</span><span·class="p"·data-group-id="8354569018-58">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8354569018-59">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">restart_type</span><span·class="p"·data-group-id="8354569018-60">(</span><span·class="p"·data-group-id="8354569018-60">)</span><span·class="p"·data-group-id="8354569018-59">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> | ||
| 177 | ·························</span><span·class="p"·data-group-id=" | 177 | ·························</span><span·class="p"·data-group-id="8354569018-61">{</span><span·class="ss">net_if</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">manager_net_if</span><span·class="p"·data-group-id="8354569018-62">(</span><span·class="p"·data-group-id="8354569018-62"[·...·truncated·by·diffoscope;·len:·50,·SHA:·30eb02dc4d3a8ab9ff63284b2fa25cdd7b3ae3891deb38bd7a18e81aec266611·...·]-61">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 178 | ·························</span><span·class="p"·data-group-id=" | 178 | ·························</span><span·class="p"·data-group-id="8354569018-63">{</span><span·class="ss">server</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">server</span><span·class="p"·data-group-id="8354569018-64">(</span><span·class="p"·data-group-id="8354569018-64">)</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·b097fd1f03bfca3663a2a18f0e4c81e54b18bfb22f622a455c695fec55b0a154·...·]-63">}</span><span·class="w">··········</span><span·class="p">|</span><span·class="w"> |
| 179 | ·························</span><span·class="p"·data-group-id="1350681289-65">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">···············</span><span·class="nf">note_store</span><span·class="p"·data-group-id="1350681289-66">(</span><span·class="p"·data-group-id="1350681289-66">)</span><span·class="p"·data-group-id="1350681289-65">}</span><span·class="w">······</span><span·class="p">|</span><span·class="w"> | ||
| 180 | ·························</span><span·class="p"·data-group-id=" | 179 | ·························</span><span·class="p"·data-group-id="8354569018-65">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">···············</span><span·class="nf">note_store</span><span·class="p"·data-group-id="8354569018-66">(</span><span·class="p"·data-group-id="8354569018-66">)</[·...·truncated·by·diffoscope;·len:·79,·SHA:·e33b7f8da51994a9fa6f71c7c992721cf5aa1450f93853f5c4b8370bb2b406d1·...·]··</span><span·class="p">|</span><span·class="w"> |
| 180 | ·························</span><span·class="p"·data-group-id="8354569018-67">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">manager_config</span><span·class="p"·data-group-id="8354569018-68">(</span><span·class="p"·data-group-id="8354569018-68">)</span><span·class="p"·data-group-id="8354569018-67">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> | ||
| 181 | ·························</span><span·class="p"·data-group-id=" | 181 | ·························</span><span·class="p"·data-group-id="8354569018-69">{</span><span·class="ss">inform_request_behaviour</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">manager_irb</span><span·class="p"·data-group-id="8354569018-70">(</span><span·class="p"·data-group-id="8354569018-70">)<[·...·truncated·by·diffoscope;·len:·47,·SHA:·149b956549df127f3f94b25f6d1d22500a136c78b50d269c346cf7c41134494b·...·]-69">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 182 | ·························</span><span·class="p"·data-group-id=" | 182 | ·························</span><span·class="p"·data-group-id="8354569018-71">{</span><span·class="ss">mibs</span><span·class="p">,</span><span·class="w">·····················</span><span·class="nf">manager_mibs</span><span·class="p"·data-group-id="8354569018-72">(</span><span·class="p"·data-group-id="8354569018-72">)[·...·truncated·by·diffoscope;·len:·48,·SHA:·b6f6152074df0d7e9a2c9f0db13f965fa7f6442e57ef54abfc306db59df3d67c·...·]-71">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> |
| 183 | ·························</span><span·class="p"·data-group-id="1350681289-73">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">priority</span><span·class="p"·data-group-id="1350681289-74">(</span><span·class="p"·data-group-id="1350681289-74">)</span><span·class="p"·data-group-id="1350681289-73">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> | ||
| 184 | ·························</span><span·class="p"·data-group-id="1350681289-75">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··········</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="1350681289-76">(</span><span·class="p"·data-group-id="1350681289-76">)</span><span·class="p"·data-group-id="1350681289-75">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 185 | ·························</span><span·class="p"·data-group-id=" | 183 | ·························</span><span·class="p"·data-group-id="8354569018-73">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">priority</span><span·class="p"·data-group-id="8354569018-74">(</span><span·class="p"·data-group-id="8354569018-74">)</sp[·...·truncated·by·diffoscope;·len:·47,·SHA:·c65ea1effdf2b922857668d426b807278ab7143d79723002d84ed26fb5f295de·...·]">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> |
| 184 | ·························</span><span·class="p"·data-group-id="8354569018-75">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··········</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="8354569018-76">(</span><span·class="p"·data-group-id="8354569018-76">)</span><span·class="p"·data-group-id="8354569018-75">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 185 | ·························</span><span·class="p"·data-group-id="8354569018-77">{</span><span·class="ss">versions</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">versions</span><span·class="p"·data-group-id="8354569018-78">(</span><span·class="p"·data-group-id="8354569018-78">)</span><span·class="p"·data-group-id="8354569018-77">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> | ||
| 186 | ·························</span><span·class="p"·data-group-id=" | 186 | ·························</span><span·class="p"·data-group-id="8354569018-79">{</span><span·class="ss">def_user_mod</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">def_user_module</span><span·class="p"·data-group-id="8354569018-80">(</span><span·class="p"·data-group-id="8354569018-80">)</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 187 | ·························</span><span·class="p"·data-group-id=" | 187 | ·························</span><span·class="p"·data-group-id="8354569018-81">{</span><span·class="ss">def_user_data</span><span·class="p">,</span><span·class="w">············</span><span·class="nf">def_user_data</span><span·class="p"·data-group-id="8354569018-82">(</span><span·class="p"·data-group-id="8354569018-82">[·...·truncated·by·diffoscope;·len:·49,·SHA:·1f0492a4b8ade401bba94016b52a0707e80dd7758a0f23c11fc3694fc76f2eb3·...·]-81">}</span></code></pre><p><a·href=""·id="agent_opts_and_types"></a></p><p>Agent·specific·config·options·and·types:</p><ul><li><p><strong><code·class="inline"·id="agent_type">agent_type()·=·master·|·sub·<optional></code></strong>·-·If·<code·class="inline">master</code>, |
| 188 | one·master·agent·is·started.·Otherwise,·no·agents·are·started.</p><p>Default·is·<code·class="inline">master</code>.</p></li><li><p><strong><code·class="inline"·id="agent_disco">agent_discovery()·=·[agent_discovery_opt()]·<optional></code></strong>·- | 188 | one·master·agent·is·started.·Otherwise,·no·agents·are·started.</p><p>Default·is·<code·class="inline">master</code>.</p></li><li><p><strong><code·class="inline"·id="agent_disco">agent_discovery()·=·[agent_discovery_opt()]·<optional></code></strong>·- |
| 189 | <code·class="inline">agent_discovery_opt()·=·{terminating,·agent_terminating_discovery_opts()}·|·{originating,·agent_originating_discovery_opts()}</code></p><p>The·<code·class="inline">terminating</code>·options·effects·discovery·initiated·by·a·manager.</p><p>The·<code·class="inline">originating</code>·options·effects·discovery·initiated·by·this·agent.</p><p>For·defaults·see·the·options·in·<code·class="inline">agent_discovery_opt()</code>.</p></li><li><p><strong><code·class="inline"·id="agent_term_disco_opts">agent_terminating_discovery_opts()·=·[agent_terminating_discovery_opt()]·<optional></code></strong>·- | 189 | <code·class="inline">agent_discovery_opt()·=·{terminating,·agent_terminating_discovery_opts()}·|·{originating,·agent_originating_discovery_opts()}</code></p><p>The·<code·class="inline">terminating</code>·options·effects·discovery·initiated·by·a·manager.</p><p>The·<code·class="inline">originating</code>·options·effects·discovery·initiated·by·this·agent.</p><p>For·defaults·see·the·options·in·<code·class="inline">agent_discovery_opt()</code>.</p></li><li><p><strong><code·class="inline"·id="agent_term_disco_opts">agent_terminating_discovery_opts()·=·[agent_terminating_discovery_opt()]·<optional></code></strong>·- |
| 190 | <code·class="inline">agent_terminating_discovery_opt()·=·{enable,·boolean()}·|·{stage2,·discovery·|·plain}·|·{trigger_username,·string()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">terminating</code>·in·this·agent·(i.e. | 190 | <code·class="inline">agent_terminating_discovery_opt()·=·{enable,·boolean()}·|·{stage2,·discovery·|·plain}·|·{trigger_username,·string()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">terminating</code>·in·this·agent·(i.e. |
| 191 | initiated·by·a·manager).</p><p>The·default·values·for·the·<code·class="inline">terminating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li><li>stage2:·<code·class="inline">discovery</code></li><li>trigger_username:·<code·class="inline">""</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_orig_disco_opts">agent_originating_discovery_opts()·=·[agent_originating_discovery_opt()]·<optional></code></strong>·- | 191 | initiated·by·a·manager).</p><p>The·default·values·for·the·<code·class="inline">terminating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li><li>stage2:·<code·class="inline">discovery</code></li><li>trigger_username:·<code·class="inline">""</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_orig_disco_opts">agent_originating_discovery_opts()·=·[agent_originating_discovery_opt()]·<optional></code></strong>·- |
| 192 | <code·class="inline">agent_originating_discovery_opt()·=·{enable,·boolean()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">originating</code>·in·this·agent.</p><p>The·default·values·for·the·<code·class="inline">originating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_mt">multi_threaded()·=·bool()·|·extended·<optional></code></strong>·-·If | 192 | <code·class="inline">agent_originating_discovery_opt()·=·{enable,·boolean()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">originating</code>·in·this·agent.</p><p>The·default·values·for·the·<code·class="inline">originating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_mt">multi_threaded()·=·bool()·|·extended·<optional></code></strong>·-·If |
| 193 | <code·class="inline">true</code>·(or·<code·class="inline">extended</code>),·the·agent·is·multi-threaded,·with·one·thread·for·each | 193 | <code·class="inline">true</code>·(or·<code·class="inline">extended</code>),·the·agent·is·multi-threaded,·with·one·thread·for·each |
| 194 | get·request.</p><p>The·value·<code·class="inline">extended</code>·means·that·a·special·'process'·is·also·created·intended | 194 | get·request.</p><p>The·value·<code·class="inline">extended</code>·means·that·a·special·'process'·is·also·created·intended |
| Offset 421, 15 lines modified | Offset 421, 15 lines modified | ||
| 421 | ······<p·class="built-using"> | 421 | ······<p·class="built-using"> |
| 422 | ········Built·using | 422 | ········Built·using |
| 423 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 423 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 424 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 424 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 425 | ······</p> | 425 | ······</p> |
| 426 | <p>Copyright·©·1996-202 | 426 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 427 | ····</footer> | 427 | ····</footer> |
| 428 | ··</div> | 428 | ··</div> |
| 429 | </main> | 429 | </main> |
| 430 | </div> | 430 | </div> |
| 431 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 431 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 432 | ··<script> | 432 | ··<script> |
| 433 | ··let·initialized·=·false; | 433 | ··let·initialized·=·false; |
| Offset 179, 15 lines modified | Offset 179, 15 lines modified | ||
| 179 | ······<p·class="built-using"> | 179 | ······<p·class="built-using"> |
| 180 | ········Built·using | 180 | ········Built·using |
| 181 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 181 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 182 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 182 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 183 | ······</p> | 183 | ······</p> |
| 184 | <p>Copyright·©·1996-202 | 184 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 185 | ····</footer> | 185 | ····</footer> |
| 186 | ··</div> | 186 | ··</div> |
| 187 | </main> | 187 | </main> |
| 188 | </div> | 188 | </div> |
| 189 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 189 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 190 | ··<script> | 190 | ··<script> |
| 191 | ··let·initialized·=·false; | 191 | ··let·initialized·=·false; |
| Offset 649, 15 lines modified | Offset 649, 15 lines modified | ||
| 649 | ······<p·class="built-using"> | 649 | ······<p·class="built-using"> |
| 650 | ········Built·using | 650 | ········Built·using |
| 651 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 651 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 652 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 652 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 653 | ······</p> | 653 | ······</p> |
| 654 | <p>Copyright·©·1996-202 | 654 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 655 | ····</footer> | 655 | ····</footer> |
| 656 | ··</div> | 656 | ··</div> |
| 657 | </main> | 657 | </main> |
| 658 | </div> | 658 | </div> |
| 659 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 659 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 660 | ··<script> | 660 | ··<script> |
| 661 | ··let·initialized·=·false; | 661 | ··let·initialized·=·false; |
| Offset 186, 15 lines modified | Offset 186, 15 lines modified | ||
| 186 | ······<p·class="built-using"> | 186 | ······<p·class="built-using"> |
| 187 | ········Built·using | 187 | ········Built·using |
| 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 188 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 189 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 190 | ······</p> | 190 | ······</p> |
| 191 | <p>Copyright·©·1996-202 | 191 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 192 | ····</footer> | 192 | ····</footer> |
| 193 | ··</div> | 193 | ··</div> |
| 194 | </main> | 194 | </main> |
| 195 | </div> | 195 | </div> |
| 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 196 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 197 | ··<script> | 197 | ··<script> |
| 198 | ··let·initialized·=·false; | 198 | ··let·initialized·=·false; |
| Offset 198, 15 lines modified | Offset 198, 15 lines modified | ||
| 198 | ······<p·class="built-using"> | 198 | ······<p·class="built-using"> |
| 199 | ········Built·using | 199 | ········Built·using |
| 200 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 200 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 201 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 201 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 202 | ······</p> | 202 | ······</p> |
| 203 | <p>Copyright·©·1996-202 | 203 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 204 | ····</footer> | 204 | ····</footer> |
| 205 | ··</div> | 205 | ··</div> |
| 206 | </main> | 206 | </main> |
| 207 | </div> | 207 | </div> |
| 208 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 208 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 209 | ··<script> | 209 | ··<script> |
| 210 | ··let·initialized·=·false; | 210 | ··let·initialized·=·false; |
| Offset 595, 15 lines modified | Offset 595, 15 lines modified | ||
| 595 | ······<p·class="built-using"> | 595 | ······<p·class="built-using"> |
| 596 | ········Built·using | 596 | ········Built·using |
| 597 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 597 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 598 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 598 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 599 | ······</p> | 599 | ······</p> |
| 600 | <p>Copyright·©·1996-202 | 600 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 601 | ····</footer> | 601 | ····</footer> |
| 602 | ··</div> | 602 | ··</div> |
| 603 | </main> | 603 | </main> |
| 604 | </div> | 604 | </div> |
| 605 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 605 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 606 | ··<script> | 606 | ··<script> |
| 607 | ··let·initialized·=·false; | 607 | ··let·initialized·=·false; |
| Offset 141, 49 lines modified | Offset 141, 49 lines modified | ||
| 141 | <a·href="snmp_agent_config_files.html">Definition·of·Agent·Configuration·Files</a>·for·more | 141 | <a·href="snmp_agent_config_files.html">Definition·of·Agent·Configuration·Files</a>·for·more |
| 142 | information).</li><li>the·<em>database·directory</em>·stores·the·internal·database·files.</li></ul><p>The·following·directory·must·exist·in·the·system·to·run·the·manager:</p><ul><li>the·<em>configuration·directory</em>·stores·all·configuration·files·used·by·the | 142 | information).</li><li>the·<em>database·directory</em>·stores·the·internal·database·files.</li></ul><p>The·following·directory·must·exist·in·the·system·to·run·the·manager:</p><ul><li>the·<em>configuration·directory</em>·stores·all·configuration·files·used·by·the |
| 143 | manager·(refer·to·the·chapter | 143 | manager·(refer·to·the·chapter |
| 144 | <a·href="snmp_manager_config_files.html">Definition·of·Manager·Configuration·Files</a>·for | 144 | <a·href="snmp_manager_config_files.html">Definition·of·Manager·Configuration·Files</a>·for |
| 145 | more·information).</li><li>the·<em>database·directory</em>·stores·the·internal·database·files.</li></ul><p>The·agent·and·manager·uses·(application)·configuration·parameters·to·find·out | 145 | more·information).</li><li>the·<em>database·directory</em>·stores·the·internal·database·files.</li></ul><p>The·agent·and·manager·uses·(application)·configuration·parameters·to·find·out |
| 146 | where·these·directories·are·located.·The·parameters·should·be·defined·in·an | 146 | where·these·directories·are·located.·The·parameters·should·be·defined·in·an |
| 147 | Erlang·system·configuration·file.·The·following·configuration·parameters·are | 147 | Erlang·system·configuration·file.·The·following·configuration·parameters·are |
| 148 | defined·for·the·SNMP·application:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nf">agent_options</span><span·class="p"·data-group-id="2943696376-1">(</span><span·class="p"·data-group-id="2943696376-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2943696376-2">[</span><span·class="nf">agent_option</span><span·class="p"·data-group-id="2943696376-3">(</span><span·class="p"·data-group-id="2943696376-3">)</span><span·class="p"·data-group-id="2943696376-2">]</span><span·class="w"> | ||
| 149 | 148 | defined·for·the·SNMP·application:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="nf">agent_options</span><span·class="p"·data-group-id="3933078564-1">(</span><span·class="p"·data-group-id="3933078564-1">)</span[·...·truncated·by·diffoscope;·len:·314,·SHA:·b798c978d77d1f4e9593a274df5b5377bf093f93d3f103606efd72700da18059·...·]</span><span·class="w"> | |
| 149 | ······</span><span·class="nf">agent_option</span><span·class="p"·data-group-id="3933078564-4">(</span><span·class="p"·data-group-id="3933078564-4">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3933078564-5">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="w">·····</span><span·class="nf">restart_type</span><span·class="p"·data-group-id="3933078564-6">(</span><span·class="p"·data-group-id="3933078564-6">)</span><span·class="p"·data-group-id="3933078564-5">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> | ||
| 150 | ·······················</span><span·class="p"·data-group-id=" | 150 | ·······················</span><span·class="p"·data-group-id="3933078564-7">{</span><span·class="ss">agent_type</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">agent_type</span><span·class="p"·data-group-id="3933078564-8">(</span><span·class="p"·data-group-id="3933078564-8">)</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·ab7322303e630ae7b1979fa148e6859deb62cee4e2b3b1595d0a97f6efda123c·...·]-7">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 151 | ·······················</span><span·class="p"·data-group-id="2943696376-9">{</span><span·class="ss">agent_verbosity</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">verbosity</span><span·class="p"·data-group-id="2943696376-10">(</span><span·class="p"·data-group-id="2943696376-10">)</span><span·class="p"·data-group-id="2943696376-9">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> | ||
| 152 | ·······················</span><span·class="p"·data-group-id="2943696376-11">{</span><span·class="ss">versions</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">versions</span><span·class="p"·data-group-id="2943696376-12">(</span><span·class="p"·data-group-id="2943696376-12">)</span><span·class="p"·data-group-id="2943696376-11">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> | ||
| 153 | ·······················</span><span·class="p"·data-group-id=" | 151 | ·······················</span><span·class="p"·data-group-id="3933078564-9">{</span><span·class="ss">agent_verbosity</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">verbosity</span><span·class="p"·data-group-id="3933078564-10">(</span><span·class="p"·data-group-id="3933078564-10">)</span><span[·...·truncated·by·diffoscope;·len:·70,·SHA:·ac65ad2ee8401f7e761373e7f9f185050dfc5e9e54268ba91fffc6cf41cb9334·...·]··</span><span·class="p">|</span><span·class="w"> |
| 152 | ·······················</span><span·class="p"·data-group-id="3933078564-11">{</span><span·class="ss">versions</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">versions</span><span·class="p"·data-group-id="3933078564-12">(</span><span·class="p"·data-group-id="3933078564-12">)</span><span·class="p"·data-group-id="3933078564-11">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> | ||
| 153 | ·······················</span><span·class="p"·data-group-id="3933078564-13">{</span><span·class="ss">discovery</span><span·class="p">,</span><span·class="w">········</span><span·class="nf">agent_discovery</span><span·class="p"·data-group-id="3933078564-14">(</span><span·class="p"·data-group-id="3933078564-14">)</span><span·class="p"·data-group-id="3933078564-13">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> | ||
| 154 | ·······················</span><span·class="p"·data-group-id=" | 154 | ·······················</span><span·class="p"·data-group-id="3933078564-15">{</span><span·class="ss">gb_max_vbs</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">gb_max_vbs</span><span·class="p"·data-group-id="3933078564-16">(</span><span·class="p"·data-group-id="3933078564-16">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·d19727a8f969909bc858f47fe68b40d94a707a0427c75c1b83746767704174e8·...·]-15">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 155 | ·······················</span><span·class="p"·data-group-id="2943696376-17">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">priority</span><span·class="p"·data-group-id="2943696376-18">(</span><span·class="p"·data-group-id="2943696376-18">)</span><span·class="p"·data-group-id="2943696376-17">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> | ||
| 156 | ·······················</span><span·class="p"·data-group-id=" | 155 | ·······················</span><span·class="p"·data-group-id="3933078564-17">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">priority</span><span·class="p"·data-group-id="3933078564-18">(</span><span·class="p"·data-group-id="3933078564-18">)</span><span[·...·truncated·by·diffoscope;·len:·71,·SHA:·e138f1a7654f50009bf34aceb435b60d13bfc3204da187dc370d2d4f1f05bd81·...·]···</span><span·class="p">|</span><span·class="w"> |
| 156 | ·······················</span><span·class="p"·data-group-id="3933078564-19">{</span><span·class="ss">multi_threaded</span><span·class="p">,</span><span·class="w">···</span><span·class="nf">multi_threaded</span><span·class="p"·data-group-id="3933078564-20">(</span><span·class="p"·data-group-id="3933078564-20">)</span><span·class="p"·data-group-id="3933078564-19">}</span><span·class="w">···</span><span·class="p">|</span><span·class="w"> | ||
| 157 | ·······················</span><span·class="p"·data-group-id=" | 157 | ·······················</span><span·class="p"·data-group-id="3933078564-21">{</span><span·class="ss">db_dir</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">db_dir</span><span·class="p"·data-group-id="3933078564-22">(</span><span·class="p"·data-group-id="3933078564-22">)</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·d7b0bbbe46f04c6b5251b8eebf73aa5b3d5f26be7d28d473614e95900fefd1fa·...·]-21">}</span><span·class="w">···········</span><span·class="p">|</span><span·class="w"> |
| 158 | ·······················</span><span·class="p"·data-group-id=" | 158 | ·······················</span><span·class="p"·data-group-id="3933078564-23">{</span><span·class="ss">db_init_error</span><span·class="p">,</span><span·class="w">····</span><span·class="nf">db_init_error</span><span·class="p"·data-group-id="3933078564-24">(</span><span·class="p"·data-group-id="3933078564-24">)</span>[·...·truncated·by·diffoscope;·len:·41,·SHA:·263120aa4c1525f9c05a3657fdc06a0bdad6506ab67c8e439771be77aab1e79c·...·]-23">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> |
| 159 | ·······················</span><span·class="p"·data-group-id=" | 159 | ·······················</span><span·class="p"·data-group-id="3933078564-25">{</span><span·class="ss">local_db</span><span·class="p">,</span><span·class="w">·········</span><span·class="nf">local_db</span><span·class="p"·data-group-id="3933078564-26">(</span><span·class="p"·data-group-id="3933078564-26">)</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·8420abf71ee654d7e979a1547bb1ebc7b6de199a9be5e8a7faec5714cefd0de2·...·]-25">}</span><span·class="w">·········</span><span·class="p">|</span><span·class="w"> |
| 160 | ·······················</span><span·class="p"·data-group-id=" | 160 | ·······················</span><span·class="p"·data-group-id="3933078564-27">{</span><span·class="ss">net_if</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_net_if</span><span·class="p"·data-group-id="3933078564-28">(</span><span·class="p"·data-group-id="3933078564-28">)</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·8baa03ea6d5cc71379806cf503ec4f297fc4f64c2d870a95e9d9594d85c15c03·...·]-27">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 161 | ·······················</span><span·class="p"·data-group-id=" | 161 | ·······················</span><span·class="p"·data-group-id="3933078564-29">{</span><span·class="ss">mibs</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">mibs</span><span·class="p"·data-group-id="3933078564-30">(</span><span·class="p"·data-group-id="3933078564-30">)</span><span·cla[·...·truncated·by·diffoscope;·len:·32,·SHA:·2db01d10637f45e2df139c3e651fbbedd0517f3bb1d3ab79967698b6699b506b·...·]-29">}</span><span·class="w">·············</span><span·class="p">|</span><span·class="w"> |
| 162 | ·······················</span><span·class="p"·data-group-id=" | 162 | ·······················</span><span·class="p"·data-group-id="3933078564-31">{</span><span·class="ss">mib_storage</span><span·class="p">,</span><span·class="w">······</span><span·class="nf">mib_storage</span><span·class="p"·data-group-id="3933078564-32">(</span><span·class="p"·data-group-id="3933078564-32">)</span><s[·...·truncated·by·diffoscope;·len:·39,·SHA:·0297b8e5955a797859e01cba411b466c70579f4fb7010e344b52d2d82bd457bf·...·]-31">}</span><span·class="w">······</span><span·class="p">|</span><span·class="w"> |
| 163 | ·······················</span><span·class="p"·data-group-id=" | 163 | ·······················</span><span·class="p"·data-group-id="3933078564-33">{</span><span·class="ss">mib_server</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">mib_server</span><span·class="p"·data-group-id="3933078564-34">(</span><span·class="p"·data-group-id="3933078564-34">)</span><sp[·...·truncated·by·diffoscope;·len:·38,·SHA:·d19727a8f969909bc858f47fe68b40d94a707a0427c75c1b83746767704174e8·...·]-33">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> |
| 164 | ·······················</span><span·class="p"·data-group-id="2943696376-35">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="2943696376-36">(</span><span·class="p"·data-group-id="2943696376-36">)</span><span·class="p"·data-group-id="2943696376-35">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> | ||
| 165 | ·······················</span><span·class="p"·data-group-id="2943696376-37">{</span><span·class="ss">error_report_mod</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">error_report_mod</span><span·class="p"·data-group-id="2943696376-38">(</span><span·class="p"·data-group-id="2943696376-38">)</span><span·class="p"·data-group-id="2943696376-37">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 166 | ·······················</span><span·class="p"·data-group-id="2943696376-39">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">note_store</span><span·class="p"·data-group-id="2943696376-40">(</span><span·class="p"·data-group-id="2943696376-40">)</span><span·class="p"·data-group-id="2943696376-39">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> | ||
| 167 | ·······················</span><span·class="p"·data-group-id=" | 164 | ·······················</span><span·class="p"·data-group-id="3933078564-35">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="3933078564-36">(</span><span·class="p"·data-group-id="3933078564-36">)</spa[·...·truncated·by·diffoscope;·len:·72,·SHA:·ea9bafb23d6f263dc42d68cccf4a6a9ec0767bf1bc2529378c478b9cdaf8b786·...·]··</span><span·class="p">|</span><span·class="w"> |
| 165 | ·······················</span><span·class="p"·data-group-id="3933078564-37">{</span><span·class="ss">error_report_mod</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">error_report_mod</span><span·class="p"·data-group-id="3933078564-38">(</span><span·class="p"·data-group-id="3933078564-38">)</span><span·class="p"·data-group-id="3933078564-37">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 166 | ·······················</span><span·class="p"·data-group-id="3933078564-39">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">·······</span><span·class="nf">note_store</span><span·class="p"·data-group-id="3933078564-40">(</span><span·class="p"·data-group-id="3933078564-40">)</span><span·class="p"·data-group-id="3933078564-39">}</span><span·class="w">·······</span><span·class="p">|</span><span·class="w"> | ||
| 167 | ·······················</span><span·class="p"·data-group-id="3933078564-41">{</span><span·class="ss">symbolic_store</span><span·class="p">,</span><span·class="w">···</span><span·class="nf">symbolic_store</span><span·class="p"·data-group-id="3933078564-42">(</span><span·class="p"·data-group-id="3933078564-42">)</span><span·class="p"·data-group-id="3933078564-41">}</span><span·class="w">···</span><span·class="p">|</span><span·class="w"> | ||
| 168 | ·······················</span><span·class="p"·data-group-id=" | 168 | ·······················</span><span·class="p"·data-group-id="3933078564-43">{</span><span·class="ss">target_cache</span><span·class="p">,</span><span·class="w">·····</span><span·class="nf">target_cache</span><span·class="p"·data-group-id="3933078564-44">(</span><span·class="p"·data-group-id="3933078564-44">)</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·8baa03ea6d5cc71379806cf503ec4f297fc4f64c2d870a95e9d9594d85c15c03·...·]-43">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 169 | ·······················</span><span·class="p"·data-group-id="2943696376-45">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_config</span><span·class="p"·data-group-id="2943696376-46">(</span><span·class="p"·data-group-id="2943696376-46">)</span><span·class="p"·data-group-id="2943696376-45">}</span><span·class="w"> | ||
| 170 | ······</span><span·class="nf">manager_options</span><span·class="p"·data-group-id="2943696376-47">(</span><span·class="p"·data-group-id="2943696376-47">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="2943696376-48">[</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="2943696376-49">(</span><span·class="p"·data-group-id="2943696376-49">)</span><span·class="p"·data-group-id="2943696376-48">]</span><span·class="w"> | ||
| 171 | ······ | 169 | ·······················</span><span·class="p"·data-group-id="3933078564-45">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···········</span><span·class="nf">agent_config</span><span·class="p"·data-group-id="3933078564-46">(</span>[·...·truncated·by·diffoscope;·len:·101,·SHA:·621d7966e8f32089167a559572f04e7f25625b8f183e66cbe4768dafb2277873·...·]</span><span·class="w"> |
| 170 | ······</span><span·class="nf">manager_options</span><span·class="p"·data-group-id="3933078564-47">(</span><span·class="p"·data-group-id="3933078564-47">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3933078564-48">[</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="3933078564-49">(</span><span·class="p"·data-group-id="3933078564-49">)</span><span·class="p"·data-group-id="3933078564-48">]</span><span·class="w"> | ||
| 171 | ······</span><span·class="nf">manager_option</span><span·class="p"·data-group-id="3933078564-50">(</span><span·class="p"·data-group-id="3933078564-50">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3933078564-51">{</span><span·class="ss">restart_type</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">restart_type</span><span·class="p"·data-group-id="3933078564-52">(</span><span·class="p"·data-group-id="3933078564-52">)</span><span·class="p"·data-group-id="3933078564-51">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> | ||
| 172 | ·························</span><span·class="p"·data-group-id=" | 172 | ·························</span><span·class="p"·data-group-id="3933078564-53">{</span><span·class="ss">net_if</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">manager_net_if</span><span·class="p"·data-group-id="3933078564-54">(</span><span·class="p"·data-group-id="3933078564-54"[·...·truncated·by·diffoscope;·len:·50,·SHA:·ee526792318c30f7ee928102d4a8e246ca18f49d56d0188d43d88a6cc57b21c9·...·]-53">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 173 | ·························</span><span·class="p"·data-group-id=" | 173 | ·························</span><span·class="p"·data-group-id="3933078564-55">{</span><span·class="ss">server</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">server</span><span·class="p"·data-group-id="3933078564-56">(</span><span·class="p"·data-group-id="3933078564-56">)</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·a1dea541db1f284887821eeb64307d1c75465691b6ed8de57e2d40936fba3e26·...·]-55">}</span><span·class="w">··········</span><span·class="p">|</span><span·class="w"> |
| 174 | ·························</span><span·class="p"·data-group-id=" | 174 | ·························</span><span·class="p"·data-group-id="3933078564-57">{</span><span·class="ss">note_store</span><span·class="p">,</span><span·class="w">···············</span><span·class="nf">note_store</span><span·class="p"·data-group-id="3933078564-58">(</span><span·class="p"·data-group-id="3933078564-58">)</[·...·truncated·by·diffoscope;·len:·46,·SHA:·d8dae89684a946fcc56705202e7a683189ff22a7ec07ac953bf0fa2932ec68ee·...·]-57">}</span><span·class="w">······</span><span·class="p">|</span><span·class="w"> |
| 175 | ·························</span><span·class="p"·data-group-id=" | 175 | ·························</span><span·class="p"·data-group-id="3933078564-59">{</span><span·class="ss">config</span><span·class="p">,</span><span·class="w">···················</span><span·class="nf">manager_config</span><span·class="p"·data-group-id="3933078564-60">(</span><span·class="p"·data-group-id="3933078564-60"[·...·truncated·by·diffoscope;·len:·50,·SHA:·ee526792318c30f7ee928102d4a8e246ca18f49d56d0188d43d88a6cc57b21c9·...·]-59">}</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 176 | ·························</span><span·class="p"·data-group-id=" | 176 | ·························</span><span·class="p"·data-group-id="3933078564-61">{</span><span·class="ss">inform_request_behaviour</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">manager_irb</span><span·class="p"·data-group-id="3933078564-62">(</span><span·class="p"·data-group-id="3933078564-62">)<[·...·truncated·by·diffoscope;·len:·47,·SHA:·e12b4a6a31af531b23e566a69b13f840bf738631c00e99736e13b76759e24c5f·...·]-61">}</span><span·class="w">·····</span><span·class="p">|</span><span·class="w"> |
| 177 | ·························</span><span·class="p"·data-group-id=" | 177 | ·························</span><span·class="p"·data-group-id="3933078564-63">{</span><span·class="ss">mibs</span><span·class="p">,</span><span·class="w">·····················</span><span·class="nf">manager_mibs</span><span·class="p"·data-group-id="3933078564-64">(</span><span·class="p"·data-group-id="3933078564-64">)[·...·truncated·by·diffoscope;·len:·48,·SHA:·801203d56cf9570f46c67a5821e8832d542e7895db64a9f95ed149a41fbd63b9·...·]-63">}</span><span·class="w">····</span><span·class="p">|</span><span·class="w"> |
| 178 | ·························</span><span·class="p"·data-group-id="2943696376-65">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">priority</span><span·class="p"·data-group-id="2943696376-66">(</span><span·class="p"·data-group-id="2943696376-66">)</span><span·class="p"·data-group-id="2943696376-65">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> | ||
| 179 | ·························</span><span·class="p"·data-group-id=" | 178 | ·························</span><span·class="p"·data-group-id="3933078564-65">{</span><span·class="ss">priority</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">priority</span><span·class="p"·data-group-id="3933078564-66">(</span><span·class="p"·data-group-id="3933078564-66">)</sp[·...·truncated·by·diffoscope;·len:·80,·SHA:·99063f57cde49f3532fd520b2e0067b66d41ea61eb35038a4c4b8ac29f9566c1·...·]·</span><span·class="p">|</span><span·class="w"> |
| 179 | ·························</span><span·class="p"·data-group-id="3933078564-67">{</span><span·class="ss">audit_trail_log</span><span·class="p">,</span><span·class="w">··········</span><span·class="nf">audit_trail_log</span><span·class="p"·data-group-id="3933078564-68">(</span><span·class="p"·data-group-id="3933078564-68">)</span><span·class="p"·data-group-id="3933078564-67">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 180 | ·························</span><span·class="p"·data-group-id=" | 180 | ·························</span><span·class="p"·data-group-id="3933078564-69">{</span><span·class="ss">versions</span><span·class="p">,</span><span·class="w">·················</span><span·class="nf">versions</span><span·class="p"·data-group-id="3933078564-70">(</span><span·class="p"·data-group-id="3933078564-70">)</sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·c57e0c5d13073bca1821b18f611200b1c34da6633ae8b96cf856345fc4c46a22·...·]-69">}</span><span·class="w">········</span><span·class="p">|</span><span·class="w"> |
| 181 | ·························</span><span·class="p"·data-group-id=" | 181 | ·························</span><span·class="p"·data-group-id="3933078564-71">{</span><span·class="ss">def_user_mod</span><span·class="p">,</span><span·class="w">·············</span><span·class="nf">def_user_module</span><span·class="p"·data-group-id="3933078564-72">(</span><span·class="p"·data-group-id="3933078564-72">)</span><span·class="w">··</span><span·class="p">|</span><span·class="w"> |
| 182 | ·························</span><span·class="p"·data-group-id=" | 182 | ·························</span><span·class="p"·data-group-id="3933078564-73">{</span><span·class="ss">def_user_data</span><span·class="p">,</span><span·class="w">············</span><span·class="nf">def_user_data</span><span·class="p"·data-group-id="3933078564-74">(</span><span·class="p"·data-group-id="3933078564-74">[·...·truncated·by·diffoscope;·len:·49,·SHA:·92f1707b795073d27753e0d15911143ee8facaca73f683fd99af36266e40990a·...·]-73">}</span></code></pre><p><a·href=""·id="agent_opts_and_types"></a></p><p>Agent·specific·config·options·and·types:</p><ul><li><p><strong><code·class="inline"·id="agent_type">agent_type()·=·master·|·sub·<optional></code></strong>·-·If·<code·class="inline">master</code>, |
| 183 | one·master·agent·is·started.·Otherwise,·no·agents·are·started.</p><p>Default·is·<code·class="inline">master</code>.</p></li><li><p><strong><code·class="inline"·id="agent_disco">agent_discovery()·=·[agent_discovery_opt()]·<optional></code></strong>·- | 183 | one·master·agent·is·started.·Otherwise,·no·agents·are·started.</p><p>Default·is·<code·class="inline">master</code>.</p></li><li><p><strong><code·class="inline"·id="agent_disco">agent_discovery()·=·[agent_discovery_opt()]·<optional></code></strong>·- |
| 184 | <code·class="inline">agent_discovery_opt()·=·{terminating,·agent_terminating_discovery_opts()}·|·{originating,·agent_originating_discovery_opts()}</code></p><p>The·<code·class="inline">terminating</code>·options·effects·discovery·initiated·by·a·manager.</p><p>The·<code·class="inline">originating</code>·options·effects·discovery·initiated·by·this·agent.</p><p>For·defaults·see·the·options·in·<code·class="inline">agent_discovery_opt()</code>.</p></li><li><p><strong><code·class="inline"·id="agent_term_disco_opts">agent_terminating_discovery_opts()·=·[agent_terminating_discovery_opt()]·<optional></code></strong>·- | 184 | <code·class="inline">agent_discovery_opt()·=·{terminating,·agent_terminating_discovery_opts()}·|·{originating,·agent_originating_discovery_opts()}</code></p><p>The·<code·class="inline">terminating</code>·options·effects·discovery·initiated·by·a·manager.</p><p>The·<code·class="inline">originating</code>·options·effects·discovery·initiated·by·this·agent.</p><p>For·defaults·see·the·options·in·<code·class="inline">agent_discovery_opt()</code>.</p></li><li><p><strong><code·class="inline"·id="agent_term_disco_opts">agent_terminating_discovery_opts()·=·[agent_terminating_discovery_opt()]·<optional></code></strong>·- |
| 185 | <code·class="inline">agent_terminating_discovery_opt()·=·{enable,·boolean()}·|·{stage2,·discovery·|·plain}·|·{trigger_username,·string()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">terminating</code>·in·this·agent·(i.e. | 185 | <code·class="inline">agent_terminating_discovery_opt()·=·{enable,·boolean()}·|·{stage2,·discovery·|·plain}·|·{trigger_username,·string()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">terminating</code>·in·this·agent·(i.e. |
| 186 | initiated·by·a·manager).</p><p>The·default·values·for·the·<code·class="inline">terminating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li><li>stage2:·<code·class="inline">discovery</code></li><li>trigger_username:·<code·class="inline">""</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_orig_disco_opts">agent_originating_discovery_opts()·=·[agent_originating_discovery_opt()]·<optional></code></strong>·- | 186 | initiated·by·a·manager).</p><p>The·default·values·for·the·<code·class="inline">terminating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li><li>stage2:·<code·class="inline">discovery</code></li><li>trigger_username:·<code·class="inline">""</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_orig_disco_opts">agent_originating_discovery_opts()·=·[agent_originating_discovery_opt()]·<optional></code></strong>·- |
| 187 | <code·class="inline">agent_originating_discovery_opt()·=·{enable,·boolean()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">originating</code>·in·this·agent.</p><p>The·default·values·for·the·<code·class="inline">originating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_mt">multi_threaded()·=·bool()·|·extended<optional></code></strong>·-·If·<code·class="inline">true</code> | 187 | <code·class="inline">agent_originating_discovery_opt()·=·{enable,·boolean()}</code></p><p>These·are·options·effecting·discovery·<code·class="inline">originating</code>·in·this·agent.</p><p>The·default·values·for·the·<code·class="inline">originating</code>·discovery·options·are:</p><ul><li>enable:·<code·class="inline">true</code></li></ul></li><li><p><strong><code·class="inline"·id="agent_mt">multi_threaded()·=·bool()·|·extended<optional></code></strong>·-·If·<code·class="inline">true</code> |
| 188 | (or·<code·class="inline">extended</code>),·the·agent·is·multi-threaded,·with·one·thread·for·each·get | 188 | (or·<code·class="inline">extended</code>),·the·agent·is·multi-threaded,·with·one·thread·for·each·get |
| 189 | request.</p><p>The·value·<code·class="inline">extended</code>·means·that·a·special·'process'·is·also·created·intended | 189 | request.</p><p>The·value·<code·class="inline">extended</code>·means·that·a·special·'process'·is·also·created·intended |
| Offset 646, 15 lines modified | Offset 646, 15 lines modified | ||
| 646 | ······<p·class="built-using"> | 646 | ······<p·class="built-using"> |
| 647 | ········Built·using | 647 | ········Built·using |
| 648 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 648 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 649 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 649 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 650 | ······</p> | 650 | ······</p> |
| 651 | <p>Copyright·©·1996-202 | 651 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 652 | ····</footer> | 652 | ····</footer> |
| 653 | ··</div> | 653 | ··</div> |
| 654 | </main> | 654 | </main> |
| 655 | </div> | 655 | </div> |
| 656 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 656 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 657 | ··<script> | 657 | ··<script> |
| 658 | ··let·initialized·=·false; | 658 | ··let·initialized·=·false; |
| Offset 364, 15 lines modified | Offset 364, 15 lines modified | ||
| 364 | ······<p·class="built-using"> | 364 | ······<p·class="built-using"> |
| 365 | ········Built·using | 365 | ········Built·using |
| 366 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 366 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 367 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 367 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 368 | ······</p> | 368 | ······</p> |
| 369 | <p>Copyright·©·1996-202 | 369 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 370 | ····</footer> | 370 | ····</footer> |
| 371 | ··</div> | 371 | ··</div> |
| 372 | </main> | 372 | </main> |
| 373 | </div> | 373 | </div> |
| 374 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 374 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 375 | ··<script> | 375 | ··<script> |
| 376 | ··let·initialized·=·false; | 376 | ··let·initialized·=·false; |
| Offset 594, 15 lines modified | Offset 594, 15 lines modified | ||
| 594 | ······<p·class="built-using"> | 594 | ······<p·class="built-using"> |
| 595 | ········Built·using | 595 | ········Built·using |
| 596 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 596 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 597 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 597 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 598 | ······</p> | 598 | ······</p> |
| 599 | <p>Copyright·©·1996-202 | 599 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 600 | ····</footer> | 600 | ····</footer> |
| 601 | ··</div> | 601 | ··</div> |
| 602 | </main> | 602 | </main> |
| 603 | </div> | 603 | </div> |
| 604 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 604 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 605 | ··<script> | 605 | ··<script> |
| 606 | ··let·initialized·=·false; | 606 | ··let·initialized·=·false; |
| Offset 158, 49 lines modified | Offset 158, 49 lines modified | ||
| 158 | Mnesia·table·<code·class="inline">snmp_variables</code>·which·must·be·a·table·with·two·attributes·(not·a | 158 | Mnesia·table·<code·class="inline">snmp_variables</code>·which·must·be·a·table·with·two·attributes·(not·a |
| 159 | Mnesia·SNMP·table).·The·SNMP·tables·are·stored·in·Mnesia·tables·with·the·same | 159 | Mnesia·SNMP·table).·The·SNMP·tables·are·stored·in·Mnesia·tables·with·the·same |
| 160 | names·as·the·SNMP·tables.·All·functions·assume·that·a·Mnesia·table·exists·with | 160 | names·as·the·SNMP·tables.·All·functions·assume·that·a·Mnesia·table·exists·with |
| 161 | the·correct·name·and·attributes.·It·is·the·programmer's·responsibility·to·ensure | 161 | the·correct·name·and·attributes.·It·is·the·programmer's·responsibility·to·ensure |
| 162 | this.·Specifically,·if·variables·are·stored·in·Mnesia,·the·table | 162 | this.·Specifically,·if·variables·are·stored·in·Mnesia,·the·table |
| 163 | <code·class="inline">snmp_variables</code>·must·be·created·by·the·programmer.·The·record·definition·for | 163 | <code·class="inline">snmp_variables</code>·must·be·created·by·the·programmer.·The·record·definition·for |
| 164 | this·table·is·defined·in·the·file·<code·class="inline">snmp/include/snmp_types.hrl</code>.</p><p>If·an·instrumentation·function·in·the·association·file·for·a·variable·<code·class="inline">myVar</code> | 164 | this·table·is·defined·in·the·file·<code·class="inline">snmp/include/snmp_types.hrl</code>.</p><p>If·an·instrumentation·function·in·the·association·file·for·a·variable·<code·class="inline">myVar</code> |
| 165 | does·not·have·a·name·when·compiling·an·MIB,·the·compiler·generates·an·entry.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 165 | does·not·have·a·name·when·compiling·an·MIB,·the·compiler·generates·an·entry.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5317991900-1">{</span><span·class="ss">myVar</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5317991900-2">{</span><span·class="ss">snmp_generic</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">var[·...·truncated·by·diffoscope;·len:·1108,·SHA:·da7a16b6a1478df32086d067e4277d22b7540d750ad43067aea7197e6e55931e·...·]-4">}</span><span·class="p">}</span><span·class="p">.</span></code></pre><h2·id="module-example"·class="section-heading"> |
| 166 | ··<a·href="#module-example"·class="hover-link"> | 166 | ··<a·href="#module-example"·class="hover-link"> |
| 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 167 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 168 | ··</a> | 168 | ··</a> |
| 169 | ··<span·class="text">Example</span> | 169 | ··<span·class="text">Example</span> |
| 170 | </h2> | 170 | </h2> |
| 171 | <p>The·following·example·shows·an·implementation·of·a·table·which·is·stored·in | 171 | <p>The·following·example·shows·an·implementation·of·a·table·which·is·stored·in |
| 172 | Mnesia,·but·with·some·checks·performed·at·set-request·operations.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">myTable_func</span><span·class="p"·data-group-id=" | 172 | Mnesia,·but·with·some·checks·performed·at·set-request·operations.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">myTable_func</span><span·class="p"·data-group-id="0913903327-1">(</span><span·class="ss">new</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">···</span><span·class="c1">%·pass·unchanged</span><span·class="w"> |
| 173 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 173 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="0913903327-2">(</span><span·class="ss">new</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-2">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id="0913903327-3">(</span><span·class="ss">delete</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">···</span><span·class="c1">%·pass·unchanged</span><span·class="w"> |
| 175 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 175 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="0913903327-4">(</span><span·class="ss">delete</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-4">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="c1">%%·change·row</span><span·class="w"> | 176 | </span><span·class="c1">%%·change·row</span><span·class="w"> |
| 177 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id=" | 177 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id="0913903327-5">(</span><span·class="ss">is_set_ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·71,·SHA:·7102ae1b7b7387cd01a2a65e35f4cf1029e6e83d8e00c735a33bd20a1b248a78·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 178 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 178 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="0913903327-6">(</span><span·class="ss">is_set_ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w"> |
| 179 | ·······························</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id=" | 179 | ·······························</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-6">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="0913903327-7">{</span><span·class="ss">noError</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="0913903327-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ······</span><span·class="nc">myApplication</span><span·class="p">:</span><span·class="nf">is_set_ok</span><span·class="p"·data-group-id=" | 181 | ······</span><span·class="nc">myApplication</span><span·class="p">:</span><span·class="nf">is_set_ok</span><span·class="p"·data-group-id="0913903327-8">(</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="0913903327-8">)</span><span·class="p">;</span><span·class="w"> |
| 182 | ····</span><span·class="n">Err</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 182 | ····</span><span·class="n">Err</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ······</span><span·class="n">Err</span><span·class="w"> | 183 | ······</span><span·class="n">Err</span><span·class="w"> |
| 184 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 184 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 185 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id=" | 185 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id="0913903327-9">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·65,·SHA:·766d6182580442bc57179e98230631677a382e95807cedbe0e3f89f4737612d3·...·]-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 186 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 186 | ··</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="0913903327-10">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w"> |
| 187 | ·······························</span><span·class="n">NameDb</span><span·class="p"·data-group-id=" | 187 | ·······························</span><span·class="n">NameDb</span><span·class="p"·data-group-id="0913903327-10">)</span><span·class="p">,</span><span·class="w"> |
| 188 | ····</span><span·class="p"·data-group-id=" | 188 | ····</span><span·class="p"·data-group-id="0913903327-11">{</span><span·class="ss">noError</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p"·data-group-id="0913903327-11">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 189 | ······</span><span·class="c1">%·Now·the·row·is·updated,·tell·the·application</span><span·class="w"> | 189 | ······</span><span·class="c1">%·Now·the·row·is·updated,·tell·the·application</span><span·class="w"> |
| 190 | ······</span><span·class="nc">myApplication</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 190 | ······</span><span·class="nc">myApplication</span><span·class="p">:</span><span·class="nf">update</span><span·class="p"·data-group-id="0913903327-12">(</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="0913903327-12">)</span><span·class="p">;</span><span·class="w"> |
| 191 | ····</span><span·class="n">Err</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 191 | ····</span><span·class="n">Err</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ······</span><span·class="n">Err</span><span·class="w"> | 192 | ······</span><span·class="n">Err</span><span·class="w"> |
| 193 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 193 | ··</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 194 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id=" | 194 | </span><span·class="nf">myTable_func</span><span·class="p"·data-group-id="0913903327-13">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·64,·SHA:·1d2851985f994d14dd4b888b1197bc1ae15ea81a1d63e4d144c9e5d08c463dcc·...·]-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">···</span><span·class="c1">%·pass·unchanged</span><span·class="w"> |
| 195 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id=" | 195 | ··</span><span·class="nc">snmp_generic</span><span·class="p">:</span><span·class="nf">table_func</span><span·class="p"·data-group-id="0913903327-14">(</span><span·class="n">Op</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·993,·SHA:·c9f9e83b74ffddda11d1ed4b5f68e2e402fc7473b5174b621933f73f571a5b8f·...·]-1">}</span><span·class="p">.</span></code></pre> |
| 196 | ····</section> | 196 | ····</section> |
| 197 | </div> | 197 | </div> |
| 198 | ··<section·id="summary"·class="details-list"> | 198 | ··<section·id="summary"·class="details-list"> |
| 199 | ····<h1·class="section-heading"> | 199 | ····<h1·class="section-heading"> |
| 200 | ······<a·class="hover-link"·href="#summary"> | 200 | ······<a·class="hover-link"·href="#summary"> |
| Offset 929, 15 lines modified | Offset 929, 15 lines modified | ||
| 929 | ······<p·class="built-using"> | 929 | ······<p·class="built-using"> |
| 930 | ········Built·using | 930 | ········Built·using |
| 931 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 931 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 932 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 932 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 933 | ······</p> | 933 | ······</p> |
| 934 | <p>Copyright·©·1996-202 | 934 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 935 | ····</footer> | 935 | ····</footer> |
| 936 | ··</div> | 936 | ··</div> |
| 937 | </main> | 937 | </main> |
| 938 | </div> | 938 | </div> |
| 939 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 939 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 940 | ··<script> | 940 | ··<script> |
| 941 | ··let·initialized·=·false; | 941 | ··let·initialized·=·false; |
| Offset 226, 62 lines modified | Offset 226, 62 lines modified | ||
| 226 | ··</a> | 226 | ··</a> |
| 227 | ··<span·class="text">Default·Implementation</span> | 227 | ··<span·class="text">Default·Implementation</span> |
| 228 | </h2> | 228 | </h2> |
| 229 | <p>Without·writing·any·instrumentation·functions,·we·can·compile·the·MIB·and·use | 229 | <p>Without·writing·any·instrumentation·functions,·we·can·compile·the·MIB·and·use |
| 230 | the·default·implementation·of·it.·Recall·that·MIBs·imported·by·"EX1-MIB.mib" | 230 | the·default·implementation·of·it.·Recall·that·MIBs·imported·by·"EX1-MIB.mib" |
| 231 | must·be·present·and·compiled·in·the·current·directory | 231 | must·be·present·and·compiled·in·the·current·directory |
| 232 | ("./STANDARD-MIB.bin","./RFC1213-MIB.bin")·when·compiling.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">unix</span><span·class="o">></span><span·class="w">·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">.</span><span·class="o">/</span><span·class="ss">sys</span><span·class="gp·unselectable"> | 232 | ("./STANDARD-MIB.bin","./RFC1213-MIB.bin")·when·compiling.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">unix</span><span·class="o">></span><span·class="w">·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">config</span><span·class="w">·</span><span·class="p">.</span><span·class="o">/</span><span·class="ss">sys</span><span·class="gp·unselectable"> |
| 233 | 1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5 | 233 | 1>·</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5904602069-1">(</span><span·class="ss">snmp</span><span·class="p"·data-group-id="5904602069-1">)</span><span·class="p">.</span><span·class="w"> |
| 234 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 234 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 235 | 2>·</span><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="5 | 235 | 2>·</span><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="5904602069-2">(</span><span·class="s">"EX1-MIB"</span><span·class="p"·data-group-id="5904602069-2">)</span><span·class="p">.</span><span·class="w"> |
| 236 | </span><span·class="n">No</span><span·class="w">·</span><span·class="ss">accessfunction</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">'friendsTable'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">using</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">.</span><span·class="w"> | 236 | </span><span·class="n">No</span><span·class="w">·</span><span·class="ss">accessfunction</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">'friendsTable'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">using</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">.</span><span·class="w"> |
| 237 | </span><span·class="n">No</span><span·class="w">·</span><span·class="ss">accessfunction</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">'myName'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">using</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">.</span><span·class="w"> | 237 | </span><span·class="n">No</span><span·class="w">·</span><span·class="ss">accessfunction</span><span·class="w">·</span><span·class="ss">for</span><span·class="w">·</span><span·class="ss">'myName'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">using</span><span·class="w">·</span><span·class="ss">default</span><span·class="p">.</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id="5 | 238 | </span><span·class="p"·data-group-id="5904602069-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"EX1-MIB.bin"</span><span·class="p"·data-group-id="5904602069-3">}</span><span·class="gp·unselectable"> |
| 239 | 3>·</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mibs</span><span·class="p"·data-group-id="5 | 239 | 3>·</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mibs</span><span·class="p"·data-group-id="5904602069-4">(</span><span·class="ss">snmp_master_agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5904602069-5">[</span><span·class="s">"EX1-MIB"</span><span·class="p"·data-group-id="5904602069-5">]</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·2b0179dfa418935358d469186767f1a82c7f832e605914e98420c78b91b40c0f·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="ss">ok</span></code></pre><p>This·MIB·is·now·loaded·into·the·agent,·and·a·manager·can·ask·questions.·As·an | 240 | </span><span·class="ss">ok</span></code></pre><p>This·MIB·is·now·loaded·into·the·agent,·and·a·manager·can·ask·questions.·As·an |
| 241 | example·of·this,·we·start·another·Erlang·system·and·the·simple·Erlang·manager·in | 241 | example·of·this,·we·start·another·Erlang·system·and·the·simple·Erlang·manager·in |
| 242 | the·toolkit:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="8 | 242 | the·toolkit:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="4866910530-1">(</span><span·class="p"·data-group-id="4866910530-2">[</span><span·class="p"·data-group-id="4866910530-3">{</span><span·class="ss">agent</span><span·class="p">,</span><span·class="s">"dront.ericsson.se"</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·250,·SHA:·12cce22e1fb24acb4d9401cbd18cd1c56e3a6c83156fb96641b8959ade7c4523·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ·</span><span·class="c1">%%·making·it·understand·symbolic·names:·{mibs,["EX1-MIB","STANDARD-MIB"]}]).</span><span·class="w"> | 243 | ·</span><span·class="c1">%%·making·it·understand·symbolic·names:·{mibs,["EX1-MIB","STANDARD-MIB"]}]).</span><span·class="w"> |
| 244 | </span><span·class="p"·data-group-id="8 | 244 | </span><span·class="p"·data-group-id="4866910530-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.89</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·bedd1cf6533036cf36ef41da503ebc294aa674a8e6b473e6e57a70bc2fa2ac4e·...·]-5">}</span><span·class="w"> |
| 245 | </span><span·class="c1">%%·a·get-next·request·with·one·OID.</span><span·class="gp·unselectable"> | 245 | </span><span·class="c1">%%·a·get-next·request·with·one·OID.</span><span·class="gp·unselectable"> |
| 246 | 2>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="8 | 246 | 2>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="4866910530-6">(</span><span·class="p"·data-group-id="4866910530-7">[</span><span·class="p"·data-group-id="4866910530-8">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">6</span><span[·...·truncated·by·diffoscope;·len:·289,·SHA:·e78ca390503236d7674fbbc09ceaf1588b52724c6a8b6047b7322909461bbca6·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 247 | </span><span·class="ss">ok</span><span·class="w"> | 247 | </span><span·class="ss">ok</span><span·class="w"> |
| 248 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 248 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 249 | </span><span·class="p"·data-group-id="8 | 249 | </span><span·class="p"·data-group-id="4866910530-9">[</span><span·class="ss">myName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-9">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·65,·SHA:·b085858eb4d7f6e2455380ca41ce6e4ca768588965eb0c41cfdc291696c841a6·...·]-10">]</span><span·class="w"> |
| 250 | </span><span·class="c1">%%·A·set-request·(now·using·symbolic·names·for·convenience)</span><span·class="gp·unselectable"> | 250 | </span><span·class="c1">%%·A·set-request·(now·using·symbolic·names·for·convenience)</span><span·class="gp·unselectable"> |
| 251 | 3>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">s</span><span·class="p"·data-group-id="8 | 251 | 3>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">s</span><span·class="p"·data-group-id="4866910530-11">(</span><span·class="p"·data-group-id="4866910530-12">[</span><span·class="p"·data-group-id="4866910530-13">{</span><span·class="p"·data-group-id="4866910530-14">[</span><span·class="ss">myName</span><span·class="p">,</span><span·class="mi">[·...·truncated·by·diffoscope;·len:·300,·SHA:·ee12a1cd43557a30c5feb02831eea001374d7702c5a7b2d7c869050737ef7acb·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="ss">ok</span><span·class="w"> | 252 | </span><span·class="ss">ok</span><span·class="w"> |
| 253 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 253 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 254 | </span><span·class="p"·data-group-id="8 | 254 | </span><span·class="p"·data-group-id="4866910530-15">[</span><span·class="ss">myName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-15">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Martin"</span><span·class="w"> |
| 255 | </span><span·class="c1">%%·Try·the·same·get-next·request·again</span><span·class="gp·unselectable"> | 255 | </span><span·class="c1">%%·Try·the·same·get-next·request·again</span><span·class="gp·unselectable"> |
| 256 | 4>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="8 | 256 | 4>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="4866910530-16">(</span><span·class="p"·data-group-id="4866910530-17">[</span><span·class="p"·data-group-id="4866910530-18">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">6</span><s[·...·truncated·by·diffoscope;·len:·294,·SHA:·deba2123b31d2c12418810d4c8ff4619a99ac3d349141c0209d59585eb47860b·...·]-16">)</span><span·class="p">.</span><span·class="w"> |
| 257 | </span><span·class="ss">ok</span><span·class="w"> | 257 | </span><span·class="ss">ok</span><span·class="w"> |
| 258 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 258 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 259 | </span><span·class="p"·data-group-id="8 | 259 | </span><span·class="p"·data-group-id="4866910530-19">[</span><span·class="ss">myName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-19">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Martin"</span><span·class="w"> |
| 260 | </span><span·class="c1">%%·...·and·we·got·the·new·value.</span><span·class="w"> | 260 | </span><span·class="c1">%%·...·and·we·got·the·new·value.</span><span·class="w"> |
| 261 | </span><span·class="c1">%%·you·can·event·do·row·operations.·How·to·add·a·row:</span><span·class="gp·unselectable"> | 261 | </span><span·class="c1">%%·you·can·event·do·row·operations.·How·to·add·a·row:</span><span·class="gp·unselectable"> |
| 262 | 5>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">s</span><span·class="p"·data-group-id="8 | 262 | 5>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">s</span><span·class="p"·data-group-id="4866910530-20">(</span><span·class="p"·data-group-id="4866910530-21">[</span><span·class="p"·data-group-id="4866910530-22">{</span><span·class="p"·data-group-id="4866910530-23">[</span><span·class="ss">fName</span><span·class="p">,</span><span·class="mi">0[·...·truncated·by·diffoscope;·len:·1100,·SHA:·8b9797737ab76a26c0525629bb59b5b189b8a70b85e6298191fa73ffc5d825ff·...·]-20">)</span><span·class="p">.</span><span·class="w"> |
| 263 | ·</span><span·class="c1">%%·createAndGo</span><span·class="w"> | 263 | ·</span><span·class="c1">%%·createAndGo</span><span·class="w"> |
| 264 | </span><span·class="ss">ok</span><span·class="w"> | 264 | </span><span·class="ss">ok</span><span·class="w"> |
| 265 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 265 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 266 | </span><span·class="p"·data-group-id="8 | 266 | </span><span·class="p"·data-group-id="4866910530-28">[</span><span·class="ss">fName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-28">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Martin"</span><span·class="w"> |
| 267 | </span><span·class="p"·data-group-id="8 | 267 | </span><span·class="p"·data-group-id="4866910530-29">[</span><span·class="ss">fAddress</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-29">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"home"</span><span·class="w"> |
| 268 | </span><span·class="p"·data-group-id="8 | 268 | </span><span·class="p"·data-group-id="4866910530-30">[</span><span·class="ss">fStatus</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-30">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="gp·unselectable"> |
| 269 | 6>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="8 | 269 | 6>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="4866910530-31">(</span><span·class="p"·data-group-id="4866910530-32">[</span><span·class="p"·data-group-id="4866910530-33">[</span><span·class="ss">myName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-33">[·...·truncated·by·diffoscope;·len:·103,·SHA:·544a1170f85437ba6b7b486417f546ee29011095299507f0a92ac93ee96b4866·...·]-31">)</span><span·class="p">.</span><span·class="w"> |
| 270 | </span><span·class="ss">ok</span><span·class="w"> | 270 | </span><span·class="ss">ok</span><span·class="w"> |
| 271 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 271 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 272 | </span><span·class="p"·data-group-id="8 | 272 | </span><span·class="p"·data-group-id="4866910530-34">[</span><span·class="ss">fName</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-34">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"Martin"</span><span·class="gp·unselectable"> |
| 273 | 7>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="8 | 273 | 7>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="4866910530-35">(</span><span·class="p"·data-group-id="4866910530-35">)</span><span·class="p">.</span><span·class="w"> |
| 274 | </span><span·class="ss">ok</span><span·class="w"> | 274 | </span><span·class="ss">ok</span><span·class="w"> |
| 275 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 275 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 276 | </span><span·class="p"·data-group-id="8 | 276 | </span><span·class="p"·data-group-id="4866910530-36">[</span><span·class="ss">fAddress</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-36">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"home"</span><span·class="gp·unselectable"> |
| 277 | 8>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="8 | 277 | 8>·</span><span·class="nc">snmp_test_mgr</span><span·class="p">:</span><span·class="nf">gn</span><span·class="p"·data-group-id="4866910530-37">(</span><span·class="p"·data-group-id="4866910530-37">)</span><span·class="p">.</span><span·class="w"> |
| 278 | </span><span·class="ss">ok</span><span·class="w"> | 278 | </span><span·class="ss">ok</span><span·class="w"> |
| 279 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> | 279 | </span><span·class="gt">*·Got·PDU:</span><span·class="w"> |
| 280 | </span><span·class="p"·data-group-id="8 | 280 | </span><span·class="p"·data-group-id="4866910530-38">[</span><span·class="ss">fStatus</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4866910530-38">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="w"> |
| 281 | </span><span·class="mi">9</span><span·class="o">></span></code></pre><h2·id="manual-implementation"·class="section-heading"> | 281 | </span><span·class="mi">9</span><span·class="o">></span></code></pre><h2·id="manual-implementation"·class="section-heading"> |
| 282 | ··<a·href="#manual-implementation"·class="hover-link"> | 282 | ··<a·href="#manual-implementation"·class="hover-link"> |
| 283 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 283 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 284 | ··</a> | 284 | ··</a> |
| 285 | ··<span·class="text">Manual·Implementation</span> | 285 | ··<span·class="text">Manual·Implementation</span> |
| 286 | </h2> | 286 | </h2> |
| 287 | <p>The·following·example·shows·a·"manual"·implementation·of·the·EX1-MIB·in·Erlang. | 287 | <p>The·following·example·shows·a·"manual"·implementation·of·the·EX1-MIB·in·Erlang. |
| Offset 291, 247 lines modified | Offset 291, 247 lines modified | ||
| 291 | <code·class="inline">friendsTable</code>.·Each·row·is·a·4-tuple.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>There·are·more·efficient·ways·to·create·tables·manually,·i.e.·to·use·the | 291 | <code·class="inline">friendsTable</code>.·Each·row·is·a·4-tuple.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>There·are·more·efficient·ways·to·create·tables·manually,·i.e.·to·use·the |
| 292 | module·<code·class="inline">snmp_index</code>.</p></section><h3·id="code"·class="section-heading"> | 292 | module·<code·class="inline">snmp_index</code>.</p></section><h3·id="code"·class="section-heading"> |
| 293 | ··<a·href="#code"·class="hover-link"> | 293 | ··<a·href="#code"·class="hover-link"> |
| 294 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 294 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 295 | ··</a> | 295 | ··</a> |
| 296 | ··<span·class="text">Code</span> | 296 | ··<span·class="text">Code</span> |
| 297 | </h3> | 297 | </h3> |
| 298 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 298 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0550494660-1">(</span><span·class="ss">ex1</span><span·class="p"·data-group-id="0550494660-1">)</span><span·class="p">.</span><span·class="w"> |
| 299 | </span><span·class="p">-</span><span·class="na">author</span><span·class="p"·data-group-id=" | 299 | </span><span·class="p">-</span><span·class="na">author</span><span·class="p"·data-group-id="0550494660-2">(</span><span·class="ss">'dummy@flop.org'</span><span·class="p"·data-group-id="0550494660-2">)</span><span·class="p">.</span><span·class="w"> |
| 300 | </span><span·class="c1">%%·External·exports</span><span·class="w"> | 300 | </span><span·class="c1">%%·External·exports</span><span·class="w"> |
| 301 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 301 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0550494660-3">(</span><span·class="p"·data-group-id="0550494660-4">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_name</span><span·class="p">/</span>[·...·truncated·by·diffoscope;·len:·381,·SHA:·aecec9884d14026b67288f9ce0003b4fe4a036956d0214d8aa54dfbaa27e580a·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 302 | </span><span·class="c1">%%·Internal·exports</span><span·class="w"> | 302 | </span><span·class="c1">%%·Internal·exports</span><span·class="w"> |
| 303 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 303 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0550494660-5">(</span><span·class="p"·data-group-id="0550494660-6">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="0550494660-6">]</span><span·class="p"·data-group-id="0550494660-5">)</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 304 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-7">(</span><span·class="ss">status_col</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="p"·data-group-id="0550494660-7">)</span><span·class="p">.</span><span·class="w"> |
| 305 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 305 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-8">(</span><span·class="ss">active</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="0550494660-8">)</span><span·class="p">.</span><span·class="w"> |
| 306 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 306 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-9">(</span><span·class="ss">notInService</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="0550494660-9">)</span><span·class="p">.</span><span·class="w"> |
| 307 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 307 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-10">(</span><span·class="ss">notReady</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">3</span><span·class="p"·data-group-id="0550494660-10">)</span><span·class="p">.</span><span·class="w"> |
| 308 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 308 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-11">(</span><span·class="ss">createAndGo</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="p"·data-group-id="0550494660-11">)</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%·Action;·written,·not·read</span><span·class="w"> |
| 309 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 309 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-12">(</span><span·class="ss">createAndWait</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">5</span><span·class="p"·data-group-id="0550494660-12">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·Action;·written,·not·read</span><span·class="w"> |
| 310 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 310 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="0550494660-13">(</span><span·class="ss">destroy</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">6</span><span·class="p"·data-group-id="0550494660-13">)</span><span·class="p">.</span><span·class="w">·······</span><span·class="c1">%·Action;·written,·not·read</span><span·class="w"> |
| 311 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 311 | </span><span·class="nf">start</span><span·class="p"·data-group-id="0550494660-14">(</span><span·class="p"·data-group-id="0550494660-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 312 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 312 | ····</span><span·class="nf">spawn</span><span·class="p"·data-group-id="0550494660-15">(</span><span·class="ss">ex1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0550494660-16">[</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·67,·SHA:·b1db3fc5cf74ce96cda60474bd52bac43d21106efbcc9b6b1ccc89841a88fe82·...·]-15">)</span><span·class="p">.</span><span·class="w"> |
| 313 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> | 313 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> |
| 314 | </span><span·class="c1">%%·Instrumentation·function·for·variable·myName.</span><span·class="w"> | 314 | </span><span·class="c1">%%·Instrumentation·function·for·variable·myName.</span><span·class="w"> |
| 315 | </span><span·class="c1">%%·Returns:·(get)·{value,·Name}</span><span·class="w"> | 315 | </span><span·class="c1">%%·Returns:·(get)·{value,·Name}</span><span·class="w"> |
| 316 | </span><span·class="c1">%%··········(set)·noError</span><span·class="w"> | 316 | </span><span·class="c1">%%··········(set)·noError</span><span·class="w"> |
| 317 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> | 317 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> |
| 318 | </span><span·class="nf">my_name</span><span·class="p"·data-group-id=" | 318 | </span><span·class="nf">my_name</span><span·class="p"·data-group-id="0550494660-17">(</span><span·class="nb">get</span><span·class="p"·data-group-id="0550494660-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 319 | ····</span><span·class="ss">ex1_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 319 | ····</span><span·class="ss">ex1_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="0550494660-18">{</span><span·class="nf">self</span><span·class="p"·data-group-id="0550494660-19">(</span><span·class="p"·data-group-id="0550494660-19">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">get_my_name</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·5d923eecbaaa7e2c51912887fcc114173d977e306b9c9eb3d54567c799ef489b·...·]-18">}</span><span·class="p">,</span><span·class="w"> |
| 320 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">wait_answer</span><span·class="p"·data-group-id=" | 320 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">wait_answer</span><span·class="p"·data-group-id="0550494660-20">(</span><span·class="p"·data-group-id="0550494660-20">)</span><span·class="p">,</span><span·class="w"> |
| 321 | ····</span><span·class="p"·data-group-id=" | 321 | ····</span><span·class="p"·data-group-id="0550494660-21">{</span><span·class="ss">value</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p"·data-group-id="0550494660-21">}</span><span·class="p">.</span><span·class="w"> |
| 322 | </span><span·class="nf">my_name</span><span·class="p"·data-group-id=" | 322 | </span><span·class="nf">my_name</span><span·class="p"·data-group-id="0550494660-22">(</span><span·class="ss">set</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NewName</span><span·class="p"·data-group-id="0550494660-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 323 | ····</span><span·class="ss">ex1_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id=" | 323 | ····</span><span·class="ss">ex1_server</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="0550494660-23">{</span><span·class="nf">self</span><span·class="p"·data-group-id="0550494660-24">(</span><span·class="p"·data-group-id="0550494660-24">)</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0550494660-25">{</[·...·truncated·by·diffoscope;·len:·213,·SHA:·e8ffe64b4db8caaff613abeb0ba9bbaa0d7229a98cdeda32cb374e98aea08d27·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 324 | ····</span><span·class="ss">noError</span><span·class="p">.</span><span·class="w"> | 324 | ····</span><span·class="ss">noError</span><span·class="p">.</span><span·class="w"> |
| 325 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> | 325 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> |
| 326 | </span><span·class="c1">%%·Instrumentation·function·for·table·friendsTable.</span><span·class="w"> | 326 | </span><span·class="c1">%%·Instrumentation·function·for·table·friendsTable.</span><span·class="w"> |
| 327 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> | 327 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> |
| 328 | </span><span·class="nf">friends_table</span><span·class="p"·data-group-id=" | 328 | </span><span·class="nf">friends_table</span><span·class="p"·data-group-id="0550494660-26">(</span><span·class="nb">get</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="0550494660-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 329 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_row</span><span·class="p"·data-group-id=" | 329 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_row</span><span·class="p"·data-group-id="0550494660-27">(</span><span·class="n">RowIndex</span><span·class="p"·data-group-id="0550494660-27">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 330 | ···</span><span·class="p"·data-group-id=" | 330 | ···</span><span·class="p"·data-group-id="0550494660-28">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-28">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 331 | ········</span><span·class="nf">get_cols</span><span·class="p"·data-group-id=" | 331 | ········</span><span·class="nf">get_cols</span><span·class="p"·data-group-id="0550494660-29">(</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-29">)</span><span·class="p">;</span><span·class="w"> |
| 332 | ···</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> | 332 | ···</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> |
| 333 | ········</span><span·class="p"·data-group-id=" | 333 | ········</span><span·class="p"·data-group-id="0550494660-30">{</span><span·class="ss">noValue</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">noSuchInstance</span><span·class="p"·data-group-id="0550494660-30">}</span><span·class="w"> |
| 334 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 334 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 335 | </span><span·class="nf">friends_table</span><span·class="p"·data-group-id=" | 335 | </span><span·class="nf">friends_table</span><span·class="p"·data-group-id="0550494660-31">(</span><span·class="ss">get_next</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RowIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cols</span><span·class="p"·data-group-id="0550494660-31">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 336 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_next_row</span><span·class="p"·data-group-id=" | 336 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_next_row</span><span·class="p"·data-group-id="0550494660-32">(</span><span·class="n">RowIndex</span><span·class="p"·data-group-id="0550494660-32">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 337 | ···</span><span·class="p"·data-group-id=" | 337 | ···</span><span·class="p"·data-group-id="0550494660-33">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-33">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 338 | ········</span><span·class="nf">get_next_cols</span><span·class="p"·data-group-id=" | 338 | ········</span><span·class="nf">get_next_cols</span><span·class="p"·data-group-id="0550494660-34">(</span><span·class="n">Cols</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-34">)</span><span·class="p">;</span><span·class="w"> |
| 339 | ···</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> | 339 | ···</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> |
| 340 | ·······</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_next_row</span><span·class="p"·data-group-id=" | 340 | ·······</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">get_next_row</span><span·class="p"·data-group-id="0550494660-35">(</span><span·class="p"·data-group-id="0550494660-36">[</span><span·class="p"·data-group-id="0550494660-36">]</span><span·class="p"·data-group-id="0550494660-35">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 341 | ·····</span><span·class="p"·data-group-id=" | 341 | ·····</span><span·class="p"·data-group-id="0550494660-37">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-37">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 342 | ·········</span><span·class="c1">%·Get·next·cols·from·first·row.</span><span·class="w"> | 342 | ·········</span><span·class="c1">%·Get·next·cols·from·first·row.</span><span·class="w"> |
| 343 | ·········</span><span·class="n">NewCols</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">add_one_to_cols</span><span·class="p"·data-group-id=" | 343 | ·········</span><span·class="n">NewCols</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">add_one_to_cols</span><span·class="p"·data-group-id="0550494660-38">(</span><span·class="n">Cols</span><span·class="p"·data-group-id="0550494660-38">)</span><span·class="p">,</span><span·class="w"> |
| 344 | ·········</span><span·class="nf">get_next_cols</span><span·class="p"·data-group-id=" | 344 | ·········</span><span·class="nf">get_next_cols</span><span·class="p"·data-group-id="0550494660-39">(</span><span·class="n">NewCols</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Row</span><span·class="p"·data-group-id="0550494660-39">)</span><span·class="p">;</span><span·class="w"> |
| 345 | ·····</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> | 345 | ·····</span><span·class="p">_</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> |
| 346 | ········</span><span·class="nf">end_of_table</span><span·class="p"·data-group-id=" | 346 | ········</span><span·class="nf">end_of_table</span><span·class="p"·data-group-id="0550494660-40">(</span><span·class="n">Cols</span><span·class="p"·data-group-id="0550494660-40">)</span><span·class="w"> |
| 347 | ········</span><span·class="k">end</span><span·class="w"> | 347 | ········</span><span·class="k">end</span><span·class="w"> |
| 348 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 348 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 349 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> | 349 | </span><span·class="c1">%%----------------------------------------------------------------</span><span·class="w"> |
| 350 | </span><span·class="c1">%%·If·RowStatus·is·set,·then:</span><span·class="w"> | 350 | </span><span·class="c1">%%·If·RowStatus·is·set,·then:</span><span·class="w"> |
| 351 | </span><span·class="c1">%%····*)·If·set·to·destroy,·check·that·row·does·exist</span><span·class="w"> | 351 | </span><span·class="c1">%%····*)·If·set·to·destroy,·check·that·row·does·exist</span><span·class="w"> |
| 352 | </span><span·class="c1">%%····*)·If·set·to·createAndGo,·check·that·row·does·not·exist·AND</span><span·class="w"> | 352 | </span><span·class="c1">%%····*)·If·set·to·createAndGo,·check·that·row·does·not·exist·AND</span><span·class="w"> |
| 353 | </span><span·class="c1">%%·········that·all·columns·are·given·values.</span><span·class="w"> | 353 | </span><span·class="c1">%%·········that·all·columns·are·given·values.</span><span·class="w"> |
| 354 | </span><span·class="c1">%%····*)·Otherwise,·error·(for·simplicity).</span><span·class="w"> | 354 | </span><span·class="c1">%%····*)·Otherwise,·error·(for·simplicity).</span><span·class="w"> |
| Max diff block lines reached; 128564/178523 bytes (72.02%) of diff not shown. | |||
| Offset 189, 15 lines modified | Offset 189, 15 lines modified | ||
| 189 | ······<p·class="built-using"> | 189 | ······<p·class="built-using"> |
| 190 | ········Built·using | 190 | ········Built·using |
| 191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 191 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 192 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 193 | ······</p> | 193 | ······</p> |
| 194 | <p>Copyright·©·1996-202 | 194 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 195 | ····</footer> | 195 | ····</footer> |
| 196 | ··</div> | 196 | ··</div> |
| 197 | </main> | 197 | </main> |
| 198 | </div> | 198 | </div> |
| 199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 199 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 200 | ··<script> | 200 | ··<script> |
| 201 | ··let·initialized·=·false; | 201 | ··let·initialized·=·false; |
| Offset 131, 21 lines modified | Offset 131, 21 lines modified | ||
| 131 | <p>Abstract·Data·Type·for·SNMP·Indexing</p><p>The·module·<code·class="inline">snmp_index</code>·implements·an·Abstract·Data·Type·(ADT)·for·an·SNMP·index | 131 | <p>Abstract·Data·Type·for·SNMP·Indexing</p><p>The·module·<code·class="inline">snmp_index</code>·implements·an·Abstract·Data·Type·(ADT)·for·an·SNMP·index |
| 132 | structure·for·SNMP·tables.·It·is·implemented·as·an·ets·table·of·the·ordered_set | 132 | structure·for·SNMP·tables.·It·is·implemented·as·an·ets·table·of·the·ordered_set |
| 133 | data-type,·which·means·that·all·operations·are·O(log·n).·In·the·table,·the·key | 133 | data-type,·which·means·that·all·operations·are·O(log·n).·In·the·table,·the·key |
| 134 | is·an·ASN.1·OBJECT·IDENTIFIER.</p><p>This·index·is·used·to·separate·the·implementation·of·the·SNMP·ordering·from·the | 134 | is·an·ASN.1·OBJECT·IDENTIFIER.</p><p>This·index·is·used·to·separate·the·implementation·of·the·SNMP·ordering·from·the |
| 135 | actual·implementation·of·the·table.·The·SNMP·ordering,·that·is·implementation·of | 135 | actual·implementation·of·the·table.·The·SNMP·ordering,·that·is·implementation·of |
| 136 | GET·NEXT,·is·implemented·in·this·module.</p><p>For·example,·suppose·there·is·an·SNMP·table,·which·is·best·implemented·in·Erlang | 136 | GET·NEXT,·is·implemented·in·this·module.</p><p>For·example,·suppose·there·is·an·SNMP·table,·which·is·best·implemented·in·Erlang |
| 137 | as·one·process·per·SNMP·table·row.·Suppose·further·that·the·INDEX·in·the·SNMP | 137 | as·one·process·per·SNMP·table·row.·Suppose·further·that·the·INDEX·in·the·SNMP |
| 138 | table·is·an·OCTET·STRING.·The·index·structure·would·be·created·as·follows:</p><pre><code·class="text">snmp_index:new(string)</code></pre><p>For·each·new·process·we·create,·we·insert·an·item·in·an·<code·class="inline">snmp_index</code>·structure:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">new_process</span><span·class="p"·data-group-id=" | 138 | table·is·an·OCTET·STRING.·The·index·structure·would·be·created·as·follows:</p><pre><code·class="text">snmp_index:new(string)</code></pre><p>For·each·new·process·we·create,·we·insert·an·item·in·an·<code·class="inline">snmp_index</code>·structure:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">new_process</span><span·class="p"·data-group-id="8571493426-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SnmpIndex</span><span·class="p"·data-group-id="8571493426-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ··</span><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_process</span><span·class="p"·data-group-id=" | 139 | ··</span><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_process</span><span·class="p"·data-group-id="8571493426-2">(</span><span·class="p"·data-group-id="8571493426-2">)</span><span·class="p">,</span><span·class="w"> |
| 140 | ··</span><span·class="n">NewSnmpIndex</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 140 | ··</span><span·class="n">NewSnmpIndex</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 141 | ····</span><span·class="nc">snmp_index</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 141 | ····</span><span·class="nc">snmp_index</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="8571493426-3">(</span><span·class="n">SnmpIndex</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="8571493426-3">)</span><span·class="p">,</span><span·class="w"> |
| 142 | ··</span><span·class="o"><</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="o">></span></code></pre><p>With·this·structure,·we·can·now·map·an·OBJECT·IDENTIFIER·in·e.g.·a·GET·NEXT | 142 | ··</span><span·class="o"><</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="o">></span></code></pre><p>With·this·structure,·we·can·now·map·an·OBJECT·IDENTIFIER·in·e.g.·a·GET·NEXT |
| 143 | request,·to·the·correct·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">get_next_pid</span><span·class="p"·data-group-id=" | 143 | request,·to·the·correct·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">get_next_pid</span><span·class="p"·data-group-id="3557628781-1">(</span><span·class="n">Oid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SnmpIndex</span><span·class="p"·data-group-id="3557628781-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 144 | ··</span><span·class="p"·data-group-id=" | 144 | ··</span><span·class="p"·data-group-id="3557628781-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3557628781-3">{</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·cla[·...·truncated·by·diffoscope;·len:·459,·SHA:·4afd704aa8ad253ba08b2a0742e2e8518a4db7e7e145ddd98c8815f66308193a·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 145 | ··</span><span·class="n">Pid</span><span·class="p">.</span></code></pre><h2·id="module-warnings"·class="section-heading"> | 145 | ··</span><span·class="n">Pid</span><span·class="p">.</span></code></pre><h2·id="module-warnings"·class="section-heading"> |
| 146 | ··<a·href="#module-warnings"·class="hover-link"> | 146 | ··<a·href="#module-warnings"·class="hover-link"> |
| 147 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 147 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 148 | ··</a> | 148 | ··</a> |
| 149 | ··<span·class="text">Warnings</span> | 149 | ··<span·class="text">Warnings</span> |
| 150 | </h2> | 150 | </h2> |
| 151 | <section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p><a·href=""·id="1"></a>·All·API·functions·that·update·the·index·return·a·<code·class="inline">NewIndex</code>·term. | 151 | <section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p><a·href=""·id="1"></a>·All·API·functions·that·update·the·index·return·a·<code·class="inline">NewIndex</code>·term. |
| Offset 763, 15 lines modified | Offset 763, 15 lines modified | ||
| 763 | ······<p·class="built-using"> | 763 | ······<p·class="built-using"> |
| 764 | ········Built·using | 764 | ········Built·using |
| 765 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 765 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 766 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 766 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 767 | ······</p> | 767 | ······</p> |
| 768 | <p>Copyright·©·1996-202 | 768 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 769 | ····</footer> | 769 | ····</footer> |
| 770 | ··</div> | 770 | ··</div> |
| 771 | </main> | 771 | </main> |
| 772 | </div> | 772 | </div> |
| 773 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 773 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 774 | ··<script> | 774 | ··<script> |
| 775 | ··let·initialized·=·false; | 775 | ··let·initialized·=·false; |
| Offset 210, 17 lines modified | Offset 210, 17 lines modified | ||
| 210 | accessible),·and·the·table·has·three·rows.·The·instrumentation·function·for·this | 210 | accessible),·and·the·table·has·three·rows.·The·instrumentation·function·for·this |
| 211 | table·is·called·<code·class="inline">my_table</code>.</p><p><a·href=""·id="getnext1"></a></p><p><img·src="assets/getnext1.gif"·alt="Contents·of·my_table"·title="Contents·of·my_table"/></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>N/A·means·not·accessible.</p></section><p>The·manager·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.1.1, | 211 | table·is·called·<code·class="inline">my_table</code>.</p><p><a·href=""·id="getnext1"></a></p><p><img·src="assets/getnext1.gif"·alt="Contents·of·my_table"·title="Contents·of·my_table"/></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>N/A·means·not·accessible.</p></section><p>The·manager·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.1.1, |
| 212 | ·········myTable.myTableEntry.5.1.1·}</code></pre><p>Since·both·operations·involve·the·1.1·index,·this·is·transformed·into·one·call | 212 | ·········myTable.myTableEntry.5.1.1·}</code></pre><p>Since·both·operations·involve·the·1.1·index,·this·is·transformed·into·one·call |
| 213 | to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[1,·1],·[3,·5])</code></pre><p>In·this·call,·<code·class="inline">[1,·1]</code>·is·the·<code·class="inline">RowIndex</code>,·where·key·1·has·value·1,·and·key·2·has | 213 | to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[1,·1],·[3,·5])</code></pre><p>In·this·call,·<code·class="inline">[1,·1]</code>·is·the·<code·class="inline">RowIndex</code>,·where·key·1·has·value·1,·and·key·2·has |
| 214 | value·1,·and·<code·class="inline">[3,·5]</code>·is·the·list·of·requested·columns.·The·function·should·now | 214 | value·1,·and·<code·class="inline">[3,·5]</code>·is·the·list·of·requested·columns.·The·function·should·now |
| 215 | return·the·lexicographically·next·elements:</p><pre><code·class="text">[{[3,·1,·2],·d},·{[5,·1,·2],·f}]</code></pre><p>This·is·illustrated·in·the·following·table:</p><p><a·href=""·id="getnext2"></a></p><p><img·src="assets/getnext2.gif"·alt="GetNext·from·[3,1,1]·and·[5,1,1]."·title="GetNext·from·[3,1,1]·and·[5,1,1]."/></p><p>The·manager·now·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.2.1, | 215 | return·the·lexicographically·next·elements:</p><pre><code·class="text">[{[3,·1,·2],·d},·{[5,·1,·2],·f}]</code></pre><p>This·is·illustrated·in·the·following·table:</p><p><a·href=""·id="getnext2"></a></p><p><img·src="assets/getnext2.gif"·alt="GetNext·from·[3,1,1]·and·[5,1,1]."·title="GetNext·from·[3,1,1]·and·[5,1,1]."/></p><p>The·manager·now·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.2.1, |
| 216 | ·········myTable.myTableEntry.5.2.1·}</code></pre><p>This·is·transformed·into·one·call·to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[2,·1],·[3,·5])</code></pre><p>The·function·should·now·return:</p><pre><code·class="text">[{[4,·1,·1],·b},·endOfTable]</code></pre><p>This·is·illustrated·in·the·following·table:</p><p><a·href=""·id="getnext3"></a></p><p><img·src="assets/getnext3.gif"·alt="GetNext·from·[3,2,1]·and·[5,2,1]."·title="GetNext·from·[3,2,1]·and·[5,2,1]."/></p><p>The·manager·now·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.1.2, | 216 | ·········myTable.myTableEntry.5.2.1·}</code></pre><p>This·is·transformed·into·one·call·to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[2,·1],·[3,·5])</code></pre><p>The·function·should·now·return:</p><pre><code·class="text">[{[4,·1,·1],·b},·endOfTable]</code></pre><p>This·is·illustrated·in·the·following·table:</p><p><a·href=""·id="getnext3"></a></p><p><img·src="assets/getnext3.gif"·alt="GetNext·from·[3,2,1]·and·[5,2,1]."·title="GetNext·from·[3,2,1]·and·[5,2,1]."/></p><p>The·manager·now·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry.3.1.2, |
| 217 | ·········myTable.myTableEntry.4.1.2·}</code></pre><p>This·will·be·transform·into·one·call·to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[1,·2],·[3,·4])</code></pre><p>The·function·should·now·return:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3330722595-1">[</span><span·class="p"·data-group-id="3330722595-2">{</span><span·class="p"·data-group-id="3330722595-3">[</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="3330722595-3">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">g</span><span·class="p"·data-group-id="3330722595-2">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3330722595-4">{</span><span·class="p"·data-group-id="3330722595-5">[</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="3330722595-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p"·data-group-id="3330722595-4">}</span><span·class="p"·data-group-id="3330722595-1">]</span></code></pre><p>This·is·illustrated·in·the·following·table:</p><p><a·href=""·id="getnext4"></a></p><p><img·src="assets/getnext4.gif"·alt="GetNext·from·[3,1,2]·and·[4,1,2]."·title="GetNext·from·[3,1,2]·and·[4,1,2]."/></p><p>The·manager·now·issues·the·following·<code·class="inline">getNext</code>·request:</p><pre><code·class="text">getNext{·myTable.myTableEntry, | ||
| 218 | ·········myTable.myTableEntry.1.3.2·}</code></pre><p>This·will·be·transform·into·two·calls·to·<code·class="inline">my_table</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_table</span><span·class="p"·data-group-id="6830895517-1">(</span><span·class="ss">get_next</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6830895517-2">[</span><span·class="p"·data-group-id="6830895517-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6830895517-3">[</span><span·class="mi">0</span><span·class="p"·data-group-id="6830895517-3">]</span><span·class="p"·data-group-id="6830895517-1">)</span><span·class="w">·</span><span·class="ow">and</span><span·class="w"> | ||
| 219 | 217 | ·········myTable.myTableEntry.4.1.2·}</code></pre><p>This·will·be·transform·into·one·call·to·<code·class="inline">my_table</code>:</p><pre><code·class="text">my_table(get_next,·[1,·2],·[3,·4])</code></pre><p>The·function·should·now·return:</p><pre><code·cl[·...·truncated·by·diffoscope;·len:·1463,·SHA:·f0d60a2100bb220895c73f957ea236d3d23d817ef13cb23c114ff78d318d3fff·...·] | |
| 218 | ·········myTable.myTableEntry.1.3.2·}</code></pre><p>This·will·be·transform·into·two·calls·to·<code·class="inline">my_table</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_table</span><span·class="p"·data-group-id="7274617057-1">(</span><span·class="ss">get_next</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7274617057-2">[</span><span·class="p"·data-group-id="7274617057-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7274617057-3">[</span><span·class="mi">0</span><span·class="p"·data-group-id="7274617057-3">]</span><span·class="p"·data-group-id="7274617057-1">)</span><span·class="w">·</span><span·class="ow">and</span><span·class="w"> | ||
| 219 | </span><span·class="nf">my_table</span><span·class="p"·data-group-id="7274617057-4">(</span><span·class="ss">get_next</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7274617057-5">[</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="7274617057-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7274617057-6">[</span><span·class="mi">1</span><span·class="p"·data-group-id="7274617057-6">]</span><span·class="p"·data-group-id="7274617057-4">)</span></code></pre><p>The·function·should·now·return:</p><pre><code·class="text">[{[3,·1,·1],·a}]·and | ||
| 220 | [{[3,·1,·1],·a}]</code></pre><p>In·both·cases,·the·first·accessible·element·in·the·table·should·be·returned.·As | 220 | [{[3,·1,·1],·a}]</code></pre><p>In·both·cases,·the·first·accessible·element·in·the·table·should·be·returned.·As |
| 221 | the·key·columns·are·not·accessible,·this·means·that·the·third·column·is·the | 221 | the·key·columns·are·not·accessible,·this·means·that·the·third·column·is·the |
| 222 | first·row.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Normally,·the·functions·described·above·behave·exactly·as·shown,·but·they·are | 222 | first·row.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Normally,·the·functions·described·above·behave·exactly·as·shown,·but·they·are |
| 223 | free·to·perform·other·actions.·For·example,·a·get-request·may·have·side | 223 | free·to·perform·other·actions.·For·example,·a·get-request·may·have·side |
| 224 | effects·such·as·setting·some·other·variable,·perhaps·a·global·<code·class="inline">lastAccessed</code> | 224 | effects·such·as·setting·some·other·variable,·perhaps·a·global·<code·class="inline">lastAccessed</code> |
| 225 | variable.</p></section><h2·id="using-the-extraargument"·class="section-heading"> | 225 | variable.</p></section><h2·id="using-the-extraargument"·class="section-heading"> |
| 226 | ··<a·href="#using-the-extraargument"·class="hover-link"> | 226 | ··<a·href="#using-the-extraargument"·class="hover-link"> |
| Offset 229, 25 lines modified | Offset 229, 25 lines modified | ||
| 229 | ··<span·class="text">Using·the·ExtraArgument</span> | 229 | ··<span·class="text">Using·the·ExtraArgument</span> |
| 230 | </h2> | 230 | </h2> |
| 231 | <p>The·<code·class="inline">ListOfExtraArguments</code>·can·be·used·to·write·generic·functions.·This·list·is | 231 | <p>The·<code·class="inline">ListOfExtraArguments</code>·can·be·used·to·write·generic·functions.·This·list·is |
| 232 | appended·to·the·standard·arguments·for·each·function.·Consider·two·read-only | 232 | appended·to·the·standard·arguments·for·each·function.·Consider·two·read-only |
| 233 | variables·for·a·device,·<code·class="inline">ipAdr</code>·and·<code·class="inline">name</code>·with·object·identifiers·1.1.23.4·and | 233 | variables·for·a·device,·<code·class="inline">ipAdr</code>·and·<code·class="inline">name</code>·with·object·identifiers·1.1.23.4·and |
| 234 | 1.1.7·respectively.·To·access·these·variables,·one·could·implement·the·two | 234 | 1.1.7·respectively.·To·access·these·variables,·one·could·implement·the·two |
| 235 | Erlang·functions·<code·class="inline">ip_access</code>·and·<code·class="inline">name_access</code>,·which·will·be·in·the·MIB.·The | 235 | Erlang·functions·<code·class="inline">ip_access</code>·and·<code·class="inline">name_access</code>,·which·will·be·in·the·MIB.·The |
| 236 | functions·could·be·specified·in·a·text·file·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 236 | functions·could·be·specified·in·a·text·file·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1395220030-1">{</span><span·class="ss">ipAdr</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1395220030-2">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ip_acc[·...·truncated·by·diffoscope;·len:·258,·SHA:·997ba9b372448f0c3194cab741d9f89dccfed67414a9d404c3ffabcbd3a6aac9·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 237 | </span><span·class="c1">%·Or·using·the·oid·syntax·for·'name'</span><span·class="w"> | 237 | </span><span·class="c1">%·Or·using·the·oid·syntax·for·'name'</span><span·class="w"> |
| 238 | </span><span·class="p"·data-group-id=" | 238 | </span><span·class="p"·data-group-id="1395220030-4">{</span><span·class="p"·data-group-id="1395220030-5">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="1395220030-5">]</span><span[·...·truncated·by·diffoscope;·len:·460,·SHA:·a7c98f0039e86a959e2db0f3f5b74a69bdae781dd885d72168dbefcce77f4ac8·...·]-4">}</span><span·class="p">.</span></code></pre><p>The·<code·class="inline">ExtraArgument</code>·parameter·is·the·empty·list.·For·example,·when·the·agent |
| 239 | receives·a·get-request·for·the·<code·class="inline">ipAdr</code>·variable,·a·call·will·be·made·to | 239 | receives·a·get-request·for·the·<code·class="inline">ipAdr</code>·variable,·a·call·will·be·made·to |
| 240 | <code·class="inline">ip_access(get)</code>.·The·value·returned·by·this·function·is·the·answer·to·the | 240 | <code·class="inline">ip_access(get)</code>.·The·value·returned·by·this·function·is·the·answer·to·the |
| 241 | get-request.</p><p>If·<code·class="inline">ip_access</code>·and·<code·class="inline">name_access</code>·are·implemented·similarly,·we·could·write·a | 241 | get-request.</p><p>If·<code·class="inline">ip_access</code>·and·<code·class="inline">name_access</code>·are·implemented·similarly,·we·could·write·a |
| 242 | <code·class="inline">generic_access</code>·function·using·the·<code·class="inline">ListOfExtraArguments</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 242 | <code·class="inline">generic_access</code>·function·using·the·<code·class="inline">ListOfExtraArguments</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5817733521-1">{</span><span·class="ss">ipAdr</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5817733521-2">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">generi[·...·truncated·by·diffoscope;·len:·302,·SHA:·41848e08a8874ed1e0884806c0023efc4c02238541eb796fcd29e25e6f32c62c·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="c1">%·The·mnemonic·'name'·is·more·convenient·than·1.1.7</span><span·class="w"> | 243 | </span><span·class="c1">%·The·mnemonic·'name'·is·more·convenient·than·1.1.7</span><span·class="w"> |
| 244 | </span><span·class="p"·data-group-id="2215815434-4">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2215815434-5">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">generic_access</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2215815434-6">[</span><span·class="ss">'NAME'</span><span·class="p"·data-group-id="2215815434-6">]</span><span·class="p"·data-group-id="2215815434-5">}</span><span·class="p"·data-group-id="2215815434-4">}</span><span·class="p">.</span></code></pre><p>When·the·agent·receives·the·same·get-request·as·above,·a·call·will·be·made·to | ||
| 245 | < | 244 | </span><span·class="p"·data-group-id="5817733521-4">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5817733521-5">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class[·...·truncated·by·diffoscope;·len:·466,·SHA:·7f3bd7cb58ce1a21618646bbd152a51f00167549e4ed1a0e25a781be87b5e3e2·...·] |
| 245 | <code·class="inline">generic_access(get,</code>'<code·class="inline">IPADR')</code>.</p><p>Yet·another·possibility,·closer·to·the·hardware,·could·be:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4724449002-1">{</span><span·class="ss">ipAdr</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4724449002-2">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">generic_access</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4724449002-3">[</span><span·class="mi">16#2543</span><span·class="p"·data-group-id="4724449002-3">]</span><span·class="p"·data-group-id="4724449002-2">}</span><span·class="p"·data-group-id="4724449002-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 246 | </span><span·class="p"·data-group-id=" | 246 | </span><span·class="p"·data-group-id="4724449002-4">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4724449002-5">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">generic[·...·truncated·by·diffoscope;·len:·293,·SHA:·37505cb5ffe84ea7935a783c611cbc15f68b9a36e2cc9702f90e1f1caac32b8f·...·]-4">}</span><span·class="p">.</span></code></pre><h2·id="default-instrumentation"·class="section-heading"> |
| 247 | ··<a·href="#default-instrumentation"·class="hover-link"> | 247 | ··<a·href="#default-instrumentation"·class="hover-link"> |
| 248 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 248 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 249 | ··</a> | 249 | ··</a> |
| 250 | ··<span·class="text">Default·Instrumentation</span> | 250 | ··<span·class="text">Default·Instrumentation</span> |
| 251 | </h2> | 251 | </h2> |
| 252 | <p><a·href=""·id="snmp_3"></a></p><p>When·the·MIB·definition·work·is·finished,·there·are·two·major·issues·left.</p><ul><li>Implementing·the·MIB</li><li>Implementing·a·Manager·Application.</li></ul><p>Implementing·an·MIB·can·be·a·tedious·task.·Most·probably,·there·is·a·need·to | 252 | <p><a·href=""·id="snmp_3"></a></p><p>When·the·MIB·definition·work·is·finished,·there·are·two·major·issues·left.</p><ul><li>Implementing·the·MIB</li><li>Implementing·a·Manager·Application.</li></ul><p>Implementing·an·MIB·can·be·a·tedious·task.·Most·probably,·there·is·a·need·to |
| 253 | test·the·agent·before·all·tables·and·variables·are·implemented.·In·this·case, | 253 | test·the·agent·before·all·tables·and·variables·are·implemented.·In·this·case, |
| Offset 345, 15 lines modified | Offset 345, 15 lines modified | ||
| 345 | ······<p·class="built-using"> | 345 | ······<p·class="built-using"> |
| 346 | ········Built·using | 346 | ········Built·using |
| 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 349 | ······</p> | 349 | ······</p> |
| 350 | <p>Copyright·©·1996-202 | 350 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 351 | ····</footer> | 351 | ····</footer> |
| 352 | ··</div> | 352 | ··</div> |
| 353 | </main> | 353 | </main> |
| 354 | </div> | 354 | </div> |
| 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 356 | ··<script> | 356 | ··<script> |
| 357 | ··let·initialized·=·false; | 357 | ··let·initialized·=·false; |
| Offset 253, 15 lines modified | Offset 253, 15 lines modified | ||
| 253 | ······<p·class="built-using"> | 253 | ······<p·class="built-using"> |
| 254 | ········Built·using | 254 | ········Built·using |
| 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 255 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 256 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 257 | ······</p> | 257 | ······</p> |
| 258 | <p>Copyright·©·1996-202 | 258 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 259 | ····</footer> | 259 | ····</footer> |
| 260 | ··</div> | 260 | ··</div> |
| 261 | </main> | 261 | </main> |
| 262 | </div> | 262 | </div> |
| 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 263 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 264 | ··<script> | 264 | ··<script> |
| 265 | ··let·initialized·=·false; | 265 | ··let·initialized·=·false; |
| Offset 145, 46 lines modified | Offset 145, 46 lines modified | ||
| 145 | and·<code·class="inline">IpPort</code>·is·an·integer.</p><p>When·<code·class="inline">Addr</code>·does·not·contain·a·port·number,·the·value·of·<code·class="inline">port</code>·is·used.</p><p>When·a·<code·class="inline">Addr</code>·is·not·specified·i.e·by·using·only·a·<code·class="inline">Domain</code>·atom,·the | 145 | and·<code·class="inline">IpPort</code>·is·an·integer.</p><p>When·<code·class="inline">Addr</code>·does·not·contain·a·port·number,·the·value·of·<code·class="inline">port</code>·is·used.</p><p>When·a·<code·class="inline">Addr</code>·is·not·specified·i.e·by·using·only·a·<code·class="inline">Domain</code>·atom,·the |
| 146 | host's·name·is·resolved·to·find·the·IP·address,·and·the·value·of·<code·class="inline">port</code>·is | 146 | host's·name·is·resolved·to·find·the·IP·address,·and·the·value·of·<code·class="inline">port</code>·is |
| 147 | used.</p></li></ul></li><li><p><code·class="inline">port</code>·-·which·defines·which·UDP·port·the·manager·uses·for·communicating | 147 | used.</p></li></ul></li><li><p><code·class="inline">port</code>·-·which·defines·which·UDP·port·the·manager·uses·for·communicating |
| 148 | with·agents.·<em>Mandatory</em>·if·<code·class="inline">transports</code>·does·not·define·a·port·number·for | 148 | with·agents.·<em>Mandatory</em>·if·<code·class="inline">transports</code>·does·not·define·a·port·number·for |
| 149 | every·transport.</p></li><li><p><code·class="inline">engine_id</code>·-·The·<code·class="inline">SnmpEngineID</code>·as·defined·in·SNMP-FRAMEWORK-MIB. | 149 | every·transport.</p></li><li><p><code·class="inline">engine_id</code>·-·The·<code·class="inline">SnmpEngineID</code>·as·defined·in·SNMP-FRAMEWORK-MIB. |
| 150 | <em>Mandatory</em>.</p></li><li><p><code·class="inline">max_message_size</code>·-·The·<code·class="inline">snmpEngineMaxMessageSize</code>·as·defined·in | 150 | <em>Mandatory</em>.</p></li><li><p><code·class="inline">max_message_size</code>·-·The·<code·class="inline">snmpEngineMaxMessageSize</code>·as·defined·in |
| 151 | SNMP-FRAMEWORK-MIB.·<em>Mandatory</em>.</p></li></ul></li><li><p><code·class="inline">Value</code>·is·the·value·for·the·variable.</p></li></ul><p>The·legacy·and·intermediate·variables·<code·class="inline">address</code>·and·<code·class="inline">domain</code>·are·still·supported | 151 | SNMP-FRAMEWORK-MIB.·<em>Mandatory</em>.</p></li></ul></li><li><p><code·class="inline">Value</code>·is·the·value·for·the·variable.</p></li></ul><p>The·legacy·and·intermediate·variables·<code·class="inline">address</code>·and·<code·class="inline">domain</code>·are·still·supported |
| 152 | so·old·configurations·will·work.</p><p>The·following·example·shows·a·<code·class="inline">manager.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5 | 152 | so·old·configurations·will·work.</p><p>The·following·example·shows·a·<code·class="inline">manager.conf</code>·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5822260164-1">{</span><span·class="ss">transports</span><span·class="p">,</span><span·class="w">·······</span><span·class="p"·data-group-id="5822260164-2">[</span><span·class="p"·data-group-id="5822260164-3">{</span><span·class="ss">transportDomainUdpIpv4</[·...·truncated·by·diffoscope;·len:·560,·SHA:·9c9434ac91eaf1f9b93c26715ab54632739f4ad7e65c6211ec536d2c77897c9c·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ····················</span><span·class="p"·data-group-id="5 | 153 | ····················</span><span·class="p"·data-group-id="5822260164-6">{</span><span·class="ss">transportDomainUdpIpv6</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5822260164-7">{</span><span·class="p"·data-group-id="5822260164-8">{</span><span·class="mi">0</span><span·clas[·...·truncated·by·diffoscope;·len:·662,·SHA:·39d51fa1a3601a932e843b9564d69daa2296957f1ad26fa82caaa8a2d4cb5571·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p"·data-group-id="5 | 154 | </span><span·class="p"·data-group-id="5822260164-9">{</span><span·class="ss">engine_id</span><span·class="p">,</span><span·class="w">········</span><span·class="s">"mgrEngine"</span><span·class="p"·data-group-id="5822260164-9">}</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="p"·data-group-id="5 | 155 | </span><span·class="p"·data-group-id="5822260164-10">{</span><span·class="ss">max_message_size</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">484</span><span·class="p"·data-group-id="5822260164-10">}</span><span·class="p">.</span></code></pre><p>The·value·of·<code·class="inline">engine_id</code>·is·a·string,·which·should·have·a·very·specific |
| 156 | structure.·See·RFC·2271/2571·for·details.</p><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 156 | structure.·See·RFC·2271/2571·for·details.</p><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 157 | </span><span·class="n">Port</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5000</span><span·class="p">,</span><span·class="w"> | 157 | </span><span·class="n">Port</span><span·class="w">··········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">5000</span><span·class="p">,</span><span·class="w"> |
| 158 | </span><span·class="n">Addr4</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 158 | </span><span·class="n">Addr4</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9358570245-1">{</span><span·class="mi">141</span><span·class="p">,</span><span·class="mi">213</span><span·class="p">,</span><span·class="mi">11</span><span·class="p">,</span><span·class="mi">24</span><span·class="p"·data-group-id="9358570245-1">}</span><span·class="p">,</span><span·class="w"> |
| 159 | </span><span·class="n">Addr6</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 159 | </span><span·class="n">Addr6</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9358570245-2">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="[·...·truncated·by·diffoscope;·len:·175,·SHA:·bfc8bd8a6cc1b6cbeebb2e71d0da82636de0203fbdf0621a3196e2181080207b·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 160 | </span><span·class="n">Transports</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0068215366-3">[</span><span·class="p"·data-group-id="0068215366-4">{</span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0068215366-5">{</span><span·class="n">Addr4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="0068215366-5">}</span><span·class="p"·data-group-id="0068215366-4">}</span><span·class="p">,</span><span·class="w"> | ||
| 161 | 160 | </span><span·class="n">Transports</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9358570245-3">[</span><span·class="p"·data-group-id="9358570245-4">{</span><span·class="ss">transportDomainUdp[·...·truncated·by·diffoscope;·len:·314,·SHA:·2297c8c2d8e86d5704e325e97a22b4cd574cdc43229b771d6f3fbcf548d056d0·...·]</span><span·class="p">,</span><span·class="w"> | |
| 161 | ·················</span><span·class="p"·data-group-id="9358570245-6">{</span><span·class="ss">transportDomainUdpIpv6</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9358570245-7">{</span><span·class="n">Addr6</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Port</span><span·class="p"·data-group-id="9358570245-7">}</span><span·class="p"·data-group-id="9358570245-6">}</span><span·class="p"·data-group-id="9358570245-3">]</span><span·class="p">,</span><span·class="w"> | ||
| 162 | </span><span·class="n">EngineID</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"mgrEngine"</span><span·class="p">,</span><span·class="w"> | 162 | </span><span·class="n">EngineID</span><span·class="w">······</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"mgrEngine"</span><span·class="p">,</span><span·class="w"> |
| 163 | </span><span·class="n">MMS</span><span·class="w">···········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">484</span><span·class="p">,</span><span·class="w"> | 163 | </span><span·class="n">MMS</span><span·class="w">···········</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">484</span><span·class="p">,</span><span·class="w"> |
| 164 | </span><span·class="n">ManagerConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 164 | </span><span·class="n">ManagerConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9358570245-8">[</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">manager_entry</span><span·class="p"·data-group-id="9358570245-9">(</span><span·class="ss">transports</span><span·class="p">,</span><span·class="w">·······</spa[·...·truncated·by·diffoscope;·len:·76,·SHA:·99f976ef6c47445a0908d14b20a8405dec17cc03df9211df18cdae6a7f68abf4·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 165 | ·················</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">manager_entry</span><span·class="p"·data-group-id=" | 165 | ·················</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">manager_entry</span><span·class="p"·data-group-id="9358570245-10">(</span><span·class="ss">engine_id</span><span·class="p">,</span><span·class="w">········</span><span·class="n">EngineID</span><span·class="p"·data-group-id="9358570245-10">)</span><span·class="p">,</span><span·class="w"> |
| 166 | ·················</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">manager_entry</span><span·class="p"·data-group-id=" | 166 | ·················</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">manager_entry</span><span·class="p"·data-group-id="9358570245-11">(</span><span·class="ss">max_message_size</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MMS</span><span·class="p"·data-group-id="9358570245-11">)</span><span·class="p"·data-group-id="9358570245-8">]</span><span·class="p">,</span><span·class="w"> |
| 167 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_manager_config</span><span·class="p"·data-group-id=" | 167 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_manager_config</span><span·class="p"·data-group-id="9358570245-12">(</span><span·class="n">ManagerDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ManagerConfig</span><span·class="p"·data-group-id="9358570245-12">)</span><span·class="p">,</span></code></pre><h2·id="users"·class="section-heading"> |
| 168 | ··<a·href="#users"·class="hover-link"> | 168 | ··<a·href="#users"·class="hover-link"> |
| 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 169 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 170 | ··</a> | 170 | ··</a> |
| 171 | ··<span·class="text">Users</span> | 171 | ··<span·class="text">Users</span> |
| 172 | </h2> | 172 | </h2> |
| 173 | <p>For·each·<em>manager·user</em>,·the·manager·needs·some·information.·This·information·is | 173 | <p>For·each·<em>manager·user</em>,·the·manager·needs·some·information.·This·information·is |
| 174 | either·added·in·the·<code·class="inline">users.conf</code>·config·file·or·by·calling·the | 174 | either·added·in·the·<code·class="inline">users.conf</code>·config·file·or·by·calling·the |
| 175 | <a·href="snmpm.html#register_user/4">register_user</a>·function·in·run-time.</p><p>Each·row·defines·a·<em>manager·user</em>·of·the·manager.</p><p>Each·entry·is·a·tuple·of·size·four:</p><p><code·class="inline">{UserId,·UserMod,·UserData,·DefaultAgentConfig}.</code></p><ul><li><code·class="inline">UserId</code>·is·any·term·(used·to·uniquely·identify·the·user).</li><li><code·class="inline">UserMod</code>·is·the·user·callback·module·(atom).</li><li><code·class="inline">UserData</code>·is·any·term·(passed·on·to·the·user·when·calling·the·<code·class="inline">UserMod</code>.</li><li><code·class="inline">DefaultAgentConfig</code>·is·a·list·of·default·agent·config's.·These·values·are | 175 | <a·href="snmpm.html#register_user/4">register_user</a>·function·in·run-time.</p><p>Each·row·defines·a·<em>manager·user</em>·of·the·manager.</p><p>Each·entry·is·a·tuple·of·size·four:</p><p><code·class="inline">{UserId,·UserMod,·UserData,·DefaultAgentConfig}.</code></p><ul><li><code·class="inline">UserId</code>·is·any·term·(used·to·uniquely·identify·the·user).</li><li><code·class="inline">UserMod</code>·is·the·user·callback·module·(atom).</li><li><code·class="inline">UserData</code>·is·any·term·(passed·on·to·the·user·when·calling·the·<code·class="inline">UserMod</code>.</li><li><code·class="inline">DefaultAgentConfig</code>·is·a·list·of·default·agent·config's.·These·values·are |
| 176 | used·as·default·values·when·this·user·registers·agents.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 176 | used·as·default·values·when·this·user·registers·agents.</li></ul><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">·········</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 177 | </span><span·class="n">UserID</span><span·class="w">·············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id=" | 177 | </span><span·class="n">UserID</span><span·class="w">·············</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">make_ref</span><span·class="p"·data-group-id="9442461478-1">(</span><span·class="p"·data-group-id="9442461478-1">)</span><span·class="p">,</span><span·class="w"> |
| 178 | </span><span·class="n">UserMod</span><span·class="w">············</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">my_manager_callback_mod</span><span·class="p">,</span><span·class="w"> | 178 | </span><span·class="n">UserMod</span><span·class="w">············</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">my_manager_callback_mod</span><span·class="p">,</span><span·class="w"> |
| 179 | </span><span·class="n">UserData</span><span·class="w">···········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id=" | 179 | </span><span·class="n">UserData</span><span·class="w">···········</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9442461478-2">(</span><span·class="p"·data-group-id="9442461478-2">)</span><span·class="p">,</span><span·class="w"> |
| 180 | </span><span·class="n">DefaultAgentConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 180 | </span><span·class="n">DefaultAgentConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9442461478-3">[</span><span·class="p"·data-group-id="9442461478-4">{</span><span·class="ss">version</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">v1</span><span·class="p"·data-group-id="9442461478-4">}</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·548,·SHA:·a7352ec243e44c6309ebba163ab4acc41345b191a3b4d9eb52dbe9cf2e672973·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 181 | </span><span·class="n">UsersConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 181 | </span><span·class="n">UsersConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9442461478-7">[</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">users_entry</span><span·class="p"·data-group-id="9442461478-8">(</span><span·class="n">UserID</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserMod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserData</span><span·class="p">,</span><span·class="w"> |
| 182 | ······································</span><span·class="n">DefaultAgentConfig</span><span·class="p"·data-group-id=" | 182 | ······································</span><span·class="n">DefaultAgentConfig</span><span·class="p"·data-group-id="9442461478-8">)</span><span·class="p"·data-group-id="9442461478-7">]</span><span·class="p">,</span><span·class="w"> |
| 183 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_users_config</span><span·class="p"·data-group-id=" | 183 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_users_config</span><span·class="p"·data-group-id="9442461478-9">(</span><span·class="n">ManagerDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UsersConfig</span><span·class="p"·data-group-id="9442461478-9">)</span><span·class="p">,</span></code></pre><h2·id="agents"·class="section-heading"> |
| 184 | ··<a·href="#agents"·class="hover-link"> | 184 | ··<a·href="#agents"·class="hover-link"> |
| 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 185 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 186 | ··</a> | 186 | ··</a> |
| 187 | ··<span·class="text">Agents</span> | 187 | ··<span·class="text">Agents</span> |
| 188 | </h2> | 188 | </h2> |
| 189 | <p>The·information·needed·to·handle·agents·should·be·stored·in·a·file·called | 189 | <p>The·information·needed·to·handle·agents·should·be·stored·in·a·file·called |
| 190 | <code·class="inline">agents.conf</code>.·It·is·also·possible·to·add·agents·in·run-time·by·calling·the | 190 | <code·class="inline">agents.conf</code>.·It·is·also·possible·to·add·agents·in·run-time·by·calling·the |
| Offset 194, 31 lines modified | Offset 194, 31 lines modified | ||
| 194 | tuple·or·a·traditional·SNMP·integer·list·containing·port·number.·<code·class="inline">IpAddr</code>·is | 194 | tuple·or·a·traditional·SNMP·integer·list·containing·port·number.·<code·class="inline">IpAddr</code>·is |
| 195 | either·a·regular·Erlang/OTP·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/inet.html#t:ip_address/0"><code·class="inline">ip_address()</code></a>·or·a | 195 | either·a·regular·Erlang/OTP·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/inet.html#t:ip_address/0"><code·class="inline">ip_address()</code></a>·or·a |
| 196 | traditional·SNMP·integer·list·not·containing·port·number,·and·<code·class="inline">IpPort</code>·is·an | 196 | traditional·SNMP·integer·list·not·containing·port·number,·and·<code·class="inline">IpPort</code>·is·an |
| 197 | integer.</li><li><code·class="inline">EngineID</code>·is·the·engine-id·of·the·agent·(string).</li><li><p><code·class="inline">Timeout</code>·is·re-transmission·timeout·(<code·class="inline">infinity</code>·|·integer).</p></li><li><code·class="inline">MaxMessageSize</code>·is·the·max·message·size·for·outgoing·messages·to·this·agent | 197 | integer.</li><li><code·class="inline">EngineID</code>·is·the·engine-id·of·the·agent·(string).</li><li><p><code·class="inline">Timeout</code>·is·re-transmission·timeout·(<code·class="inline">infinity</code>·|·integer).</p></li><li><code·class="inline">MaxMessageSize</code>·is·the·max·message·size·for·outgoing·messages·to·this·agent |
| 198 | (integer).</li><li><p><code·class="inline">Version</code>·is·the·version·(v1·|·v2·|·v3).</p></li><li><p><code·class="inline">SecModel</code>·is·the·security·model·(any·|·v1·|·v2c·|·usm).</p></li><li><code·class="inline">SecName</code>·is·the·security·name·(string).</li><li><p><code·class="inline">SecLevel</code>·is·security·level·(noAuthNoPriv·|·authNoPriv·|·authPriv).</p></li></ul><p>Legacy·configurations·using·tuples·without·<code·class="inline">Domain</code>·element,·as·well·as·with·all | 198 | (integer).</li><li><p><code·class="inline">Version</code>·is·the·version·(v1·|·v2·|·v3).</p></li><li><p><code·class="inline">SecModel</code>·is·the·security·model·(any·|·v1·|·v2c·|·usm).</p></li><li><code·class="inline">SecName</code>·is·the·security·name·(string).</li><li><p><code·class="inline">SecLevel</code>·is·security·level·(noAuthNoPriv·|·authNoPriv·|·authPriv).</p></li></ul><p>Legacy·configurations·using·tuples·without·<code·class="inline">Domain</code>·element,·as·well·as·with·all |
| 199 | <code·class="inline">TDomain</code>,·<code·class="inline">Ip</code>·and·<code·class="inline">Port</code>·elements·still·work.</p><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 199 | <code·class="inline">TDomain</code>,·<code·class="inline">Ip</code>·and·<code·class="inline">Port</code>·elements·still·work.</p><p>And·this·is·a·code·(snippet)·example·of·how·to·generate·this·file·in·runtime:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 200 | </span><span·class="n">UserID</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 200 | </span><span·class="n">UserID</span><span·class="w">·······</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="n">AgentsConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 201 | </span><span·class="n">AgentsConfig</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1531311608-1">[</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">agents_entry</span><span·class="p"·data-group-id="1531311608-2">(</span><span·class="n">UserID</span><span·class="p">,</span><span·class="w"> |
| 202 | ········································</span><span·class="s">"target·1"</span><span·class="p">,</span><span·class="w"> | 202 | ········································</span><span·class="s">"target·1"</span><span·class="p">,</span><span·class="w"> |
| 203 | » » » » » </span><span·class="s">"FOOBAR"</span><span·class="p">,</span><span·class="w"> | 203 | » » » » » </span><span·class="s">"FOOBAR"</span><span·class="p">,</span><span·class="w"> |
| 204 | » » » » » </span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 204 | » » » » » </span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1531311608-3">{</span><span·class="p"·data-group-id="1531311608-4">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·136,·SHA:·3bfe3a006b2152d0b78834e6f70bc4c58107e676849624494554d8e2c3c83c8c·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 205 | » » » » » </span><span·class="s">"agent·Engine·1"</span><span·class="w"> | 205 | » » » » » </span><span·class="s">"agent·Engine·1"</span><span·class="w"> |
| 206 | » » » » » </span><span·class="mi">1500</span><span·class="p">,</span><span·class="w"> | 206 | » » » » » </span><span·class="mi">1500</span><span·class="p">,</span><span·class="w"> |
| 207 | » » » » » </span><span·class="mi">484</span><span·class="p">.</span><span·class="w"> | 207 | » » » » » </span><span·class="mi">484</span><span·class="p">.</span><span·class="w"> |
| 208 | » » » » » </span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sec·name·1"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">noAuthNoPriv</span><span·class="p"·data-group-id=" | 208 | » » » » » </span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sec·name·1"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">noAuthNoPriv</span><span·class="p"·data-group-id="1531311608-2">)</span><span·class="p">,</span><span·class="w"> |
| 209 | » » </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">agents_entry</span><span·class="p"·data-group-id=" | 209 | » » </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">agents_entry</span><span·class="p"·data-group-id="1531311608-5">(</span><span·class="n">UserID</span><span·class="p">,</span><span·class="w"> |
| 210 | ········································</span><span·class="s">"target·2"</span><span·class="p">,</span><span·class="w"> | 210 | ········································</span><span·class="s">"target·2"</span><span·class="p">,</span><span·class="w"> |
| 211 | » » » » » </span><span·class="s">"FOOBAR"</span><span·class="p">,</span><span·class="w"> | 211 | » » » » » </span><span·class="s">"FOOBAR"</span><span·class="p">,</span><span·class="w"> |
| 212 | » » » » » </span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 212 | » » » » » </span><span·class="ss">transportDomainUdpIpv4</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1531311608-6">{</span><span·class="p"·data-group-id="1531311608-7">{</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">6</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="mi">8</span><span·cla[·...·truncated·by·diffoscope;·len:·136,·SHA:·3dc3b23e66b810600fef580e368a3e7491b638691adaea7a786e4549b1f7e83a·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 213 | » » » » » </span><span·class="s">"agent·Engine·2"</span><span·class="w"> | 213 | » » » » » </span><span·class="s">"agent·Engine·2"</span><span·class="w"> |
| 214 | » » » » » </span><span·class="mi">1500</span><span·class="p">,</span><span·class="w"> | 214 | » » » » » </span><span·class="mi">1500</span><span·class="p">,</span><span·class="w"> |
| 215 | » » » » » </span><span·class="mi">1000</span><span·class="p">.</span><span·class="w"> | 215 | » » » » » </span><span·class="mi">1000</span><span·class="p">.</span><span·class="w"> |
| 216 | » » » » » </span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sec·name·2"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">noAuthNoPriv</span><span·class="p"·data-group-id=" | 216 | » » » » » </span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">v1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"sec·name·2"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">noAuthNoPriv</span><span·class="p"·data-group-id="1531311608-5">)</span><span·class="p"·data-group-id="1531311608-1">]</span><span·class="p">,</span><span·class="w"> |
| 217 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_agents_config</span><span·class="p"·data-group-id=" | 217 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_agents_config</span><span·class="p"·data-group-id="1531311608-8">(</span><span·class="n">ManagerDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UsersConfig</span><span·class="p"·data-group-id="1531311608-8">)</span><span·class="p">,</span></code></pre><h2·id="security-data-for-usm"·class="section-heading"> |
| 218 | ··<a·href="#security-data-for-usm"·class="hover-link"> | 218 | ··<a·href="#security-data-for-usm"·class="hover-link"> |
| 219 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 219 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 220 | ··</a> | 220 | ··</a> |
| 221 | ··<span·class="text">Security·data·for·USM</span> | 221 | ··<span·class="text">Security·data·for·USM</span> |
| 222 | </h2> | 222 | </h2> |
| 223 | <p>The·information·about·Security·data·for·USM·should·be·stored·in·a·file·called | 223 | <p>The·information·about·Security·data·for·USM·should·be·stored·in·a·file·called |
| 224 | <code·class="inline">usm.conf</code>,·which·must·be·present·if·the·manager·wishes·to·use·SNMPv3·when | 224 | <code·class="inline">usm.conf</code>,·which·must·be·present·if·the·manager·wishes·to·use·SNMPv3·when |
| Offset 229, 21 lines modified | Offset 229, 21 lines modified | ||
| 229 | <code·class="inline">usmHMAC192SH256AuthProtocol</code>,·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>·or | 229 | <code·class="inline">usmHMAC192SH256AuthProtocol</code>,·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>·or |
| 230 | <code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</p></li><li><p><code·class="inline">AuthKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized | 230 | <code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</p></li><li><p><code·class="inline">AuthKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized |
| 231 | authentication·key.·It·is·not·visible·in·the·MIB.·The·length·(number·of | 231 | authentication·key.·It·is·not·visible·in·the·MIB.·The·length·(number·of |
| 232 | octets)·of·this·key·needs·to·be:</p><ul><li>16·if·<code·class="inline">usmHMACMD5AuthProtocol</code>.</li><li>20·if·<code·class="inline">usmHMACSHAAuthProtocol</code>.</li><li>28·if·<code·class="inline">usmHMAC128SHA224AuthProtocol</code>.</li><li>32·if·<code·class="inline">usmHMAC192SHA256AuthProtocol</code>.</li><li>48·if·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>.</li><li>64·if·<code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</li></ul></li><li><p><code·class="inline">PrivP</code>·is·a·<code·class="inline">usmNoPrivProtocol</code>,·<code·class="inline">usmDESPrivProtocol</code>·or | 232 | octets)·of·this·key·needs·to·be:</p><ul><li>16·if·<code·class="inline">usmHMACMD5AuthProtocol</code>.</li><li>20·if·<code·class="inline">usmHMACSHAAuthProtocol</code>.</li><li>28·if·<code·class="inline">usmHMAC128SHA224AuthProtocol</code>.</li><li>32·if·<code·class="inline">usmHMAC192SHA256AuthProtocol</code>.</li><li>48·if·<code·class="inline">usmHMAC256SHA384AuthProtocol</code>.</li><li>64·if·<code·class="inline">usmHMAC384SHA512AuthProtocol</code>.</li></ul></li><li><p><code·class="inline">PrivP</code>·is·a·<code·class="inline">usmNoPrivProtocol</code>,·<code·class="inline">usmDESPrivProtocol</code>·or |
| 233 | <code·class="inline">usmAesCfb128Protocol</code>.</p></li><li><p><code·class="inline">PrivKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized | 233 | <code·class="inline">usmAesCfb128Protocol</code>.</p></li><li><p><code·class="inline">PrivKey</code>·is·a·list·(of·integer).·This·is·the·User's·secret·localized |
| 234 | encryption·key.·It·is·not·visible·in·the·MIB.·The·length·of·this·key·needs·to | 234 | encryption·key.·It·is·not·visible·in·the·MIB.·The·length·of·this·key·needs·to |
| 235 | be·16·if·<code·class="inline">usmDESPrivProtocol</code>·or·<code·class="inline">usmAesCfb128Protocol</code>·is·used.</p></li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> | 235 | be·16·if·<code·class="inline">usmDESPrivProtocol</code>·or·<code·class="inline">usmAesCfb128Protocol</code>·is·used.</p></li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ManagerDir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"/tmp"</span><span·class="p">,</span><span·class="w"> |
| 236 | </span><span·class="n">UsmConfig</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 236 | </span><span·class="n">UsmConfig</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6222598113-1">[</span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">usm_entry</span><span·class="p"·data-group-id="6222598113-2">(</span><span·class="s">"engine"</span><span·class="p">,</span><span·class="w"> |
| 237 | ···································</span><span·class="s">"user·1"</span><span·class="p">,</span><span·class="w"> | 237 | ···································</span><span·class="s">"user·1"</span><span·class="p">,</span><span·class="w"> |
| 238 | » ···························</span><span·class="ss">usmNoAuthProtocol</span><span·class="p">,</span><span·class="w"> | 238 | » ···························</span><span·class="ss">usmNoAuthProtocol</span><span·class="p">,</span><span·class="w"> |
| 239 | » ·» » » ···</span><span·class="p"·data-group-id=" | 239 | » ·» » » ···</span><span·class="p"·data-group-id="6222598113-3">[</span><span·class="p"·data-group-id="6222598113-3">]</span><span·class="p">,</span><span·class="w"> |
| 240 | » ·» » » ···</span><span·class="ss">usmNoPrivProtocol</span><span·class="p">,</span><span·class="w"> | 240 | » ·» » » ···</span><span·class="ss">usmNoPrivProtocol</span><span·class="p">,</span><span·class="w"> |
| 241 | » ·» » » ···</span><span·class="p"·data-group-id=" | 241 | » ·» » » ···</span><span·class="p"·data-group-id="6222598113-4">[</span><span·class="p"·data-group-id="6222598113-4">]</span><span·class="p"·data-group-id="6222598113-2">)</span><span·class="p"·data-group-id="6222598113-1">]</span><span·class="p">,</span><span·class="w"> |
| 242 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_usm_config</span><span·class="p"·data-group-id=" | 242 | </span><span·class="nc">snmpm_conf</span><span·class="p">:</span><span·class="nf">write_usm_config</span><span·class="p"·data-group-id="6222598113-5">(</span><span·class="n">ManagerDir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UsmConfig</span><span·class="p"·data-group-id="6222598113-5">)</span><span·class="p">,</span></code></pre> |
| 243 | </div> | 243 | </div> |
| 244 | <div·class="bottom-actions"·id="bottom-actions"> | 244 | <div·class="bottom-actions"·id="bottom-actions"> |
| 245 | ··<div·class="bottom-actions-item"> | 245 | ··<div·class="bottom-actions-item"> |
| 246 | ······<a·href="snmp_agent_config_files.html"·class="bottom-actions-button"·rel="prev"> | 246 | ······<a·href="snmp_agent_config_files.html"·class="bottom-actions-button"·rel="prev"> |
| 247 | ········<span·class="subheader"> | 247 | ········<span·class="subheader"> |
| Offset 286, 15 lines modified | Offset 286, 15 lines modified | ||
| 286 | ······<p·class="built-using"> | 286 | ······<p·class="built-using"> |
| 287 | ········Built·using | 287 | ········Built·using |
| 288 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 288 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 289 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 289 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 290 | ······</p> | 290 | ······</p> |
| 291 | <p>Copyright·©·1996-202 | 291 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 292 | ····</footer> | 292 | ····</footer> |
| 293 | ··</div> | 293 | ··</div> |
| 294 | </main> | 294 | </main> |
| 295 | </div> | 295 | </div> |
| 296 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 296 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 297 | ··<script> | 297 | ··<script> |
| 298 | ··let·initialized·=·false; | 298 | ··let·initialized·=·false; |
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 251, 15 lines modified | Offset 251, 15 lines modified | ||
| 251 | ······<p·class="built-using"> | 251 | ······<p·class="built-using"> |
| 252 | ········Built·using | 252 | ········Built·using |
| 253 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 253 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 254 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 254 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 255 | ······</p> | 255 | ······</p> |
| 256 | <p>Copyright·©·1996-202 | 256 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 257 | ····</footer> | 257 | ····</footer> |
| 258 | ··</div> | 258 | ··</div> |
| 259 | </main> | 259 | </main> |
| 260 | </div> | 260 | </div> |
| 261 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 261 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 262 | ··<script> | 262 | ··<script> |
| 263 | ··let·initialized·=·false; | 263 | ··let·initialized·=·false; |
| Offset 137, 30 lines modified | Offset 137, 30 lines modified | ||
| 137 | before·it·will·be·compiled.·This·text·file·must·have·the·same·name·as·the·MIB, | 137 | before·it·will·be·compiled.·This·text·file·must·have·the·same·name·as·the·MIB, |
| 138 | but·with·the·suffix·<code·class="inline">.mib</code>.·This·is·necessary·for·handling·the·<code·class="inline">IMPORT</code> | 138 | but·with·the·suffix·<code·class="inline">.mib</code>.·This·is·necessary·for·handling·the·<code·class="inline">IMPORT</code> |
| 139 | statement.</p><p>The·association·file,·which·contains·the·names·of·instrumentation·functions·for | 139 | statement.</p><p>The·association·file,·which·contains·the·names·of·instrumentation·functions·for |
| 140 | the·MIB,·should·have·the·suffix·<code·class="inline">.funcs</code>.·If·the·compiler·does·not·find·the | 140 | the·MIB,·should·have·the·suffix·<code·class="inline">.funcs</code>.·If·the·compiler·does·not·find·the |
| 141 | association·file,·it·gives·a·warning·message·and·uses·default·instrumentation | 141 | association·file,·it·gives·a·warning·message·and·uses·default·instrumentation |
| 142 | functions.·(See·<a·href="snmp_instr_functions.html#snmp_3">Default·Instrumentation</a>·for | 142 | functions.·(See·<a·href="snmp_instr_functions.html#snmp_3">Default·Instrumentation</a>·for |
| 143 | more·details).</p><p>The·MIB·compiler·is·started·with·a·call·to·<code·class="inline">snmpc:compile(<mibname>).</code>·For | 143 | more·details).</p><p>The·MIB·compiler·is·started·with·a·call·to·<code·class="inline">snmpc:compile(<mibname>).</code>·For |
| 144 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id=" | 144 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="3764246682-1">(</span><span·class="s">"RFC1213-MIB"</span><span·class="p"·data-group-id="3764246682-1">)</span><span·class="p">.</span></code></pre><p>The·output·is·a·new·file·which·is·called·<code·class="inline"><mibname>.bin</code>.</p><p>The·MIB·compiler·understands·both·SMIv1·and·SMIv2·MIBs.·It·uses·the |
| 145 | MODULE-IDENTITY·statement·to·determinate·if·the·MIB·is·written·in·SMI·version·1 | 145 | MODULE-IDENTITY·statement·to·determinate·if·the·MIB·is·written·in·SMI·version·1 |
| 146 | or·2.</p><h2·id="importing-mibs"·class="section-heading"> | 146 | or·2.</p><h2·id="importing-mibs"·class="section-heading"> |
| 147 | ··<a·href="#importing-mibs"·class="hover-link"> | 147 | ··<a·href="#importing-mibs"·class="hover-link"> |
| 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 149 | ··</a> | 149 | ··</a> |
| 150 | ··<span·class="text">Importing·MIBs</span> | 150 | ··<span·class="text">Importing·MIBs</span> |
| 151 | </h2> | 151 | </h2> |
| 152 | <p>The·compiler·handles·the·<code·class="inline">IMPORT</code>·statement.·It·is·important·to·import·the | 152 | <p>The·compiler·handles·the·<code·class="inline">IMPORT</code>·statement.·It·is·important·to·import·the |
| 153 | compiled·file·and·not·the·ASN.1·(source)·file.·A·MIB·must·be·recompiled·to·make | 153 | compiled·file·and·not·the·ASN.1·(source)·file.·A·MIB·must·be·recompiled·to·make |
| 154 | changes·visible·to·other·MIBs·importing·it.</p><p>The·compiled·files·of·the·imported·MIBs·must·be·present·in·the·current | 154 | changes·visible·to·other·MIBs·importing·it.</p><p>The·compiled·files·of·the·imported·MIBs·must·be·present·in·the·current |
| 155 | directory,·or·a·directory·in·the·current·path.·The·path·is·supplied·with·the | 155 | directory,·or·a·directory·in·the·current·path.·The·path·is·supplied·with·the |
| 156 | <code·class="inline">{i,·Path}</code>·option,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id=" | 156 | <code·class="inline">{i,·Path}</code>·option,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="3426207606-1">(</span><span·class="s">"MY-MIB"</span><span·class="p">,</span><span·class="w"> |
| 157 | ·······</span><span·class="p"·data-group-id=" | 157 | ·······</span><span·class="p"·data-group-id="3426207606-2">[</span><span·class="p"·data-group-id="3426207606-3">{</span><span·class="ss">i</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3426207606-4">[</span><span·class="s">"friend_mibs/"</span><span·cl[·...·truncated·by·diffoscope;·len:·292,·SHA:·1e65635e4ecded3685d6e464390ed2adfe1ab200e0bf2f3a2b4d05873c44ad89·...·]-1">)</span><span·class="p">.</span></code></pre><p>It·is·also·possible·to·import·MIBs·from·OTP·applications·in·an·<code·class="inline">"include_lib"</code> |
| 158 | like·fashion·with·the·<code·class="inline">il</code>·option.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id=" | 158 | like·fashion·with·the·<code·class="inline">il</code>·option.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmpc</span><span·class="p">:</span><span·class="nf">compile</span><span·class="p"·data-group-id="4257654606-1">(</span><span·class="s">"MY-MIB"</span><span·class="p">,</span><span·class="w"> |
| 159 | ·······</span><span·class="p"·data-group-id=" | 159 | ·······</span><span·class="p"·data-group-id="4257654606-2">[</span><span·class="p"·data-group-id="4257654606-3">{</span><span·class="ss">il</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4257654606-4">[</span><span·class="s">"snmp/priv/mibs/"</span><spa[·...·truncated·by·diffoscope;·len:·295,·SHA:·1b76ffa5f5f466824254361ce121373185791c2bbe9b6cbb7340b3671351d466·...·]-1">)</span><span·class="p">.</span></code></pre><p>finds·the·latest·version·of·the·<code·class="inline">snmp</code>·and·<code·class="inline">myapp</code>·applications·in·the·OTP |
| 160 | system·and·uses·the·expanded·paths·as·include·paths.</p><p>Note·that·an·SMIv2·MIB·can·import·an·SMIv1·MIB·and·vice·versa.</p><p>The·following·MIBs·are·built-ins·of·the·Erlang·SNMP·compiler:·SNMPv2-SMI, | 160 | system·and·uses·the·expanded·paths·as·include·paths.</p><p>Note·that·an·SMIv2·MIB·can·import·an·SMIv1·MIB·and·vice·versa.</p><p>The·following·MIBs·are·built-ins·of·the·Erlang·SNMP·compiler:·SNMPv2-SMI, |
| 161 | RFC-1215,·RFC-1212,·SNMPv2-TC,·SNMPv2-CONF,·and·RFC1155-SMI.·They·cannot | 161 | RFC-1215,·RFC-1212,·SNMPv2-TC,·SNMPv2-CONF,·and·RFC1155-SMI.·They·cannot |
| 162 | therefore·be·compiled·separately.</p><h2·id="mib-consistency-checking"·class="section-heading"> | 162 | therefore·be·compiled·separately.</p><h2·id="mib-consistency-checking"·class="section-heading"> |
| 163 | ··<a·href="#mib-consistency-checking"·class="hover-link"> | 163 | ··<a·href="#mib-consistency-checking"·class="hover-link"> |
| 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 165 | ··</a> | 165 | ··</a> |
| 166 | ··<span·class="text">MIB·Consistency·Checking</span> | 166 | ··<span·class="text">MIB·Consistency·Checking</span> |
| Offset 262, 15 lines modified | Offset 262, 15 lines modified | ||
| 262 | ······<p·class="built-using"> | 262 | ······<p·class="built-using"> |
| 263 | ········Built·using | 263 | ········Built·using |
| 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 264 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 265 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 266 | ······</p> | 266 | ······</p> |
| 267 | <p>Copyright·©·1996-202 | 267 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 268 | ····</footer> | 268 | ····</footer> |
| 269 | ··</div> | 269 | ··</div> |
| 270 | </main> | 270 | </main> |
| 271 | </div> | 271 | </div> |
| 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 272 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 273 | ··<script> | 273 | ··<script> |
| 274 | ··let·initialized·=·false; | 274 | ··let·initialized·=·false; |
| Offset 468, 15 lines modified | Offset 468, 15 lines modified | ||
| 468 | ······<p·class="built-using"> | 468 | ······<p·class="built-using"> |
| 469 | ········Built·using | 469 | ········Built·using |
| 470 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 470 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 471 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 471 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 472 | ······</p> | 472 | ······</p> |
| 473 | <p>Copyright·©·1996-202 | 473 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 474 | ····</footer> | 474 | ····</footer> |
| 475 | ··</div> | 475 | ··</div> |
| 476 | </main> | 476 | </main> |
| 477 | </div> | 477 | </div> |
| 478 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 478 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 479 | ··<script> | 479 | ··<script> |
| 480 | ··let·initialized·=·false; | 480 | ··let·initialized·=·false; |
| Offset 130, 16 lines modified | Offset 130, 16 lines modified | ||
| 130 | ····<section·id="moduledoc"> | 130 | ····<section·id="moduledoc"> |
| 131 | <p>Encode·and·Decode·Functions·for·SNMP·PDUs</p><p>RFC1157,·RFC1905·and/or·RFC2272·should·be·studied·carefully·before·using·this | 131 | <p>Encode·and·Decode·Functions·for·SNMP·PDUs</p><p>RFC1157,·RFC1905·and/or·RFC2272·should·be·studied·carefully·before·using·this |
| 132 | module,·<code·class="inline">snmp_pdus</code>.</p><p>The·module·<code·class="inline">snmp_pdus</code>·contains·functions·for·encoding·and·decoding·of·SNMP | 132 | module,·<code·class="inline">snmp_pdus</code>.</p><p>The·module·<code·class="inline">snmp_pdus</code>·contains·functions·for·encoding·and·decoding·of·SNMP |
| 133 | protocol·data·units·(PDUs).·In·short,·this·module·converts·a·list·of·bytes·to | 133 | protocol·data·units·(PDUs).·In·short,·this·module·converts·a·list·of·bytes·to |
| 134 | Erlang·record·representations·and·vice·versa.·The·record·definitions·can·be | 134 | Erlang·record·representations·and·vice·versa.·The·record·definitions·can·be |
| 135 | found·in·the·file·<code·class="inline">snmp/include/snmp_types.hrl</code>.·If·snmpv3·is·used,·the·module | 135 | found·in·the·file·<code·class="inline">snmp/include/snmp_types.hrl</code>.·If·snmpv3·is·used,·the·module |
| 136 | that·includes·<code·class="inline">snmp_types.hrl</code>·must·define·the·constant·<code·class="inline">SNMP_USE_V3</code>·before·the | 136 | that·includes·<code·class="inline">snmp_types.hrl</code>·must·define·the·constant·<code·class="inline">SNMP_USE_V3</code>·before·the |
| 137 | header·file·is·included.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id=" | 137 | header·file·is·included.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="2459641215-1">(</span><span·class="n">SNMP_USE_V3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="2459641215-1">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 138 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="2459641215-2">(</span><span·class="s">"snmp/include/snmp_types.hrl"</span><span·class="p"·data-group-id="2459641215-2">)</span><span·class="p">.</span></code></pre><p>Encoding·and·decoding·must·be·done·explicitly·when·writing·your·own·Net·if |
| 139 | process.</p> | 139 | process.</p> |
| 140 | ····</section> | 140 | ····</section> |
| 141 | </div> | 141 | </div> |
| 142 | ··<section·id="summary"·class="details-list"> | 142 | ··<section·id="summary"·class="details-list"> |
| 143 | ····<h1·class="section-heading"> | 143 | ····<h1·class="section-heading"> |
| Offset 1007, 15 lines modified | Offset 1007, 15 lines modified | ||
| 1007 | ······<p·class="built-using"> | 1007 | ······<p·class="built-using"> |
| 1008 | ········Built·using | 1008 | ········Built·using |
| 1009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1011 | ······</p> | 1011 | ······</p> |
| 1012 | <p>Copyright·©·1996-202 | 1012 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1013 | ····</footer> | 1013 | ····</footer> |
| 1014 | ··</div> | 1014 | ··</div> |
| 1015 | </main> | 1015 | </main> |
| 1016 | </div> | 1016 | </div> |
| 1017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1018 | ··<script> | 1018 | ··<script> |
| 1019 | ··let·initialized·=·false; | 1019 | ··let·initialized·=·false; |
| Offset 410, 15 lines modified | Offset 410, 15 lines modified | ||
| 410 | ······<p·class="built-using"> | 410 | ······<p·class="built-using"> |
| 411 | ········Built·using | 411 | ········Built·using |
| 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 414 | ······</p> | 414 | ······</p> |
| 415 | <p>Copyright·©·1996-202 | 415 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 416 | ····</footer> | 416 | ····</footer> |
| 417 | ··</div> | 417 | ··</div> |
| 418 | </main> | 418 | </main> |
| 419 | </div> | 419 | </div> |
| 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 421 | ··<script> | 421 | ··<script> |
| 422 | ··let·initialized·=·false; | 422 | ··let·initialized·=·false; |
| Offset 786, 15 lines modified | Offset 786, 15 lines modified | ||
| 786 | ······<p·class="built-using"> | 786 | ······<p·class="built-using"> |
| 787 | ········Built·using | 787 | ········Built·using |
| 788 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 788 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 789 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 789 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 790 | ······</p> | 790 | ······</p> |
| 791 | <p>Copyright·©·1996-202 | 791 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 792 | ····</footer> | 792 | ····</footer> |
| 793 | ··</div> | 793 | ··</div> |
| 794 | </main> | 794 | </main> |
| 795 | </div> | 795 | </div> |
| 796 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 796 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 797 | ··<script> | 797 | ··<script> |
| 798 | ··let·initialized·=·false; | 798 | ··let·initialized·=·false; |
| Offset 739, 15 lines modified | Offset 739, 15 lines modified | ||
| 739 | ······<p·class="built-using"> | 739 | ······<p·class="built-using"> |
| 740 | ········Built·using | 740 | ········Built·using |
| 741 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 741 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 742 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 742 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 743 | ······</p> | 743 | ······</p> |
| 744 | <p>Copyright·©·1996-202 | 744 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 745 | ····</footer> | 745 | ····</footer> |
| 746 | ··</div> | 746 | ··</div> |
| 747 | </main> | 747 | </main> |
| 748 | </div> | 748 | </div> |
| 749 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 749 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 750 | ··<script> | 750 | ··<script> |
| 751 | ··let·initialized·=·false; | 751 | ··let·initialized·=·false; |
| Offset 1046, 15 lines modified | Offset 1046, 15 lines modified | ||
| 1046 | ······<p·class="built-using"> | 1046 | ······<p·class="built-using"> |
| 1047 | ········Built·using | 1047 | ········Built·using |
| 1048 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1048 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1049 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1049 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1050 | ······</p> | 1050 | ······</p> |
| 1051 | <p>Copyright·©·1996-202 | 1051 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1052 | ····</footer> | 1052 | ····</footer> |
| 1053 | ··</div> | 1053 | ··</div> |
| 1054 | </main> | 1054 | </main> |
| 1055 | </div> | 1055 | </div> |
| 1056 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1056 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1057 | ··<script> | 1057 | ··<script> |
| 1058 | ··let·initialized·=·false; | 1058 | ··let·initialized·=·false; |
| Offset 3215, 16 lines modified | Offset 3215, 16 lines modified | ||
| 3215 | ······················AgentName·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(), | 3215 | ······················AgentName·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>(), |
| 3216 | ······················Mib·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), | 3216 | ······················Mib·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>(), |
| 3217 | ······················Reason·::·already_loaded·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3217 | ······················Reason·::·already_loaded·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3218 | ······</div> | 3218 | ······</div> |
| 3219 | <p>Load·a·single·<code·class="inline">Mib</code>·into·an·agent.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib, | 3219 | <p>Load·a·single·<code·class="inline">Mib</code>·into·an·agent.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib, |
| 3220 | including·the·path·to·where·the·compiled·mib·is·found.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id=" | 3220 | including·the·path·to·where·the·compiled·mib·is·found.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id="3093674184-1">(</span><span·class="ss">my_app</span><span·class="p"·data-group-id="3093674184-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"/mibs/"</span><span·class="p">,</span><span·class="w"> |
| 3221 | ··········</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mib</span><span·class="p"·data-group-id=" | 3221 | ··········</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mib</span><span·class="p"·data-group-id="3093674184-2">(</span><span·class="ss">snmp_master_agent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"MY-MIB"</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·8198001f17a780a02ebef6bbaa99f865fd10d5d59556ec4e1e7fc3be56065819·...·]-2">)</span><span·class="p">.</span></code></pre> |
| 3222 | ··</section> | 3222 | ··</section> |
| 3223 | </section> | 3223 | </section> |
| 3224 | <section·class="detail"·id="load_mibs/1"> | 3224 | <section·class="detail"·id="load_mibs/1"> |
| 3225 | ··<div·class="detail-header"> | 3225 | ··<div·class="detail-header"> |
| 3226 | ····<a·href="#load_mibs/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3226 | ····<a·href="#load_mibs/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3227 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3227 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3326, 16 lines modified | Offset 3326, 16 lines modified | ||
| 3326 | ·······················InternalReason·::·already_loaded·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3326 | ·······················InternalReason·::·already_loaded·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3327 | ······</div> | 3327 | ······</div> |
| 3328 | <p>Load·<code·class="inline">Mibs</code>·into·an·agent.·If·the·agent·cannot·load·all·MIBs·(the·default·value | 3328 | <p>Load·<code·class="inline">Mibs</code>·into·an·agent.·If·the·agent·cannot·load·all·MIBs·(the·default·value |
| 3329 | of·the·<code·class="inline">Force</code>·argument·is·<code·class="inline">false</code>),·it·will·indicate·where·loading·was·aborted. | 3329 | of·the·<code·class="inline">Force</code>·argument·is·<code·class="inline">false</code>),·it·will·indicate·where·loading·was·aborted. |
| 3330 | The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including·the·path·to·where·the·compiled | 3330 | The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including·the·path·to·where·the·compiled |
| 3331 | mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id=" | 3331 | mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id="9475738969-1">(</span><span·class="ss">my_app</span><span·class="p"·data-group-id="9475738969-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"/mibs/"</span><span·class="p">,</span><span·class="w"> |
| 3332 | ··········</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mibs</span><span·class="p"·data-group-id=" | 3332 | ··········</span><span·class="nc">snmpa</span><span·class="p">:</span><span·class="nf">load_mibs</span><span·class="p"·data-group-id="9475738969-2">(</span><span·class="ss">snmp_master_agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9475738969-3">[</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·[·...·truncated·by·diffoscope;·len:·142,·SHA:·2b661d23f0a49a74bac0a511d7a7698529b4ee87512e5f2418369a4df578b1c5·...·]-2">)</span><span·class="p">.</span></code></pre><p>If·<code·class="inline">Force·=·true</code>·then·the·agent·will·continue·attempting·to·load·each·mib·even |
| 3333 | after·failing·to·load·a·previous·mib.·Use·with·care.</p> | 3333 | after·failing·to·load·a·previous·mib.·Use·with·care.</p> |
| 3334 | ··</section> | 3334 | ··</section> |
| 3335 | </section> | 3335 | </section> |
| 3336 | <section·class="detail"·id="log_to_io/1"> | 3336 | <section·class="detail"·id="log_to_io/1"> |
| 3337 | ··<div·class="detail-header"> | 3337 | ··<div·class="detail-header"> |
| 3338 | ····<a·href="#log_to_io/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3338 | ····<a·href="#log_to_io/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 4297, 16 lines modified | Offset 4297, 16 lines modified | ||
| 4297 | ··········································Mod·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>(), | 4297 | ··········································Mod·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>(), |
| 4298 | ··········································Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(), | 4298 | ··········································Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(), |
| 4299 | ··········································Where·::·<a·href="#t:nfilter_position/0">nfilter_position</a>(), | 4299 | ··········································Where·::·<a·href="#t:nfilter_position/0">nfilter_position</a>(), |
| 4300 | ··········································Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 4300 | ··········································Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 4301 | ······</div> | 4301 | ······</div> |
| 4302 | <p>Accepted·type·specifications·are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">register_notification_filter</span><span·class="p"·data-group-id=" | 4302 | <p>Accepted·type·specifications·are:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">register_notification_filter</span><span·class="p"·data-group-id="8188953571-1">(</span><span·class="n">Agent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·442,·SHA:·8bf8bf977ab7e851103aeab05685740e56b40a541ea6f17175520f6d9345aa45·...·]1-2">}</span><span·class="p">.</span><span·class="w"> |
| 4303 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">register_notification_filter</span><span·class="p"·data-group-id=" | 4303 | </span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">register_notification_filter</span><span·class="p"·data-group-id="8188953571-3">(</span><span·class="n">Id</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mod</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p">,</span><span·class="w">·</span><span·class=[·...·truncated·by·diffoscope;·len:·442,·SHA:·2033ec4481e9482ab736c8e146d6790e9547e383323d6dcc1832193e90b09ea6·...·]1-4">}</span><span·class="p">.</span></code></pre> |
| 4304 | ··</section> | 4304 | ··</section> |
| 4305 | </section> | 4305 | </section> |
| 4306 | <section·class="detail"·id="register_notification_filter/5"> | 4306 | <section·class="detail"·id="register_notification_filter/5"> |
| 4307 | ··<div·class="detail-header"> | 4307 | ··<div·class="detail-header"> |
| 4308 | ····<a·href="#register_notification_filter/5"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 4308 | ····<a·href="#register_notification_filter/5"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 4309 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 4309 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 4367, 16 lines modified | Offset 4367, 16 lines modified | ||
| 4367 | ·······························SubAgent·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0">pid</a>(), | 4367 | ·······························SubAgent·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pid/0">pid</a>(), |
| 4368 | ·······························Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 4368 | ·······························Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 4369 | ······</div> | 4369 | ······</div> |
| 4370 | <p>Registers·a·sub-agent·under·a·sub-tree·of·another·agent.</p><p>It·is·easy·to·make·mistakes·when·registering·sub-agents·and·this·activity·should | 4370 | <p>Registers·a·sub-agent·under·a·sub-tree·of·another·agent.</p><p>It·is·easy·to·make·mistakes·when·registering·sub-agents·and·this·activity·should |
| 4371 | be·done·carefully.·For·example,·a·strange·behaviour·would·result·from·the | 4371 | be·done·carefully.·For·example,·a·strange·behaviour·would·result·from·the |
| 4372 | following·configuration:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmp_agent</span><span·class="p">:</span><span·class="nf">register_subagent</span><span·class="p"·data-group-id=" | 4372 | following·configuration:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">snmp_agent</span><span·class="p">:</span><span·class="nf">register_subagent</span><span·class="p"·data-group-id="9431676504-1">(</span><span·class="n">MAPid</span><span·class="p">,</span><span·class="p"·data-group-id="9431676504-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·[·...·truncated·by·diffoscope;·len:·187,·SHA:·23c5916e67ce59b4b051fc3fc1c4999494fb1743c5e6cec106b8bd0185bffa0f·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 4373 | </span><span·class="nc">snmp_agent</span><span·class="p">:</span><span·class="nf">register_subagent</span><span·class="p"·data-group-id=" | 4373 | </span><span·class="nc">snmp_agent</span><span·class="p">:</span><span·class="nf">register_subagent</span><span·class="p"·data-group-id="9431676504-3">(</span><span·class="n">SA1</span><span·class="p">,</span><span·class="p"·data-group-id="9431676504-4">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·cl[·...·truncated·by·diffoscope;·len:·160,·SHA:·5e1f33b8cd42f5d7e5a431b60e86041d45fcedc284710737f92d8888545103c4·...·]-3">)</span><span·class="p">.</span></code></pre><p><code·class="inline">SA2</code>·will·not·get·requests·starting·with·object·identifier·<code·class="inline">[1,2,3]</code>·since |
| 4374 | <code·class="inline">SA1</code>·does·not.</p> | 4374 | <code·class="inline">SA1</code>·does·not.</p> |
| 4375 | ··</section> | 4375 | ··</section> |
| 4376 | </section> | 4376 | </section> |
| 4377 | <section·class="detail"·id="restart_set_worker/0"> | 4377 | <section·class="detail"·id="restart_set_worker/0"> |
| 4378 | ··<div·class="detail-header"> | 4378 | ··<div·class="detail-header"> |
| 4379 | ····<a·href="#restart_set_worker/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 4379 | ····<a·href="#restart_set_worker/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 4793, 28 lines modified | Offset 4793, 28 lines modified | ||
| 4793 | function·call·according·to·the·value·of·<code·class="inline">Recv</code>.</li></ul><p>If·<code·class="inline">Receiver</code>·has·the·value·<code·class="inline">{Tag,·Recv}</code>,·the·delivery·is·done·according·to | 4793 | function·call·according·to·the·value·of·<code·class="inline">Recv</code>.</li></ul><p>If·<code·class="inline">Receiver</code>·has·the·value·<code·class="inline">{Tag,·Recv}</code>,·the·delivery·is·done·according·to |
| 4794 | <code·class="inline">Recv</code>:</p><ul><li><p><code·class="inline">pid()·|·atom()</code>·-·The·info·will·be·delivered·in·the·following·messages:</p><ul><li><p><code·class="inline">{snmp_targets,·Tag,·Addresses}</code></p><p>This·inform·the·user·which·target·addresses·the·notification·was·sent·to.</p></li><li><p><code·class="inline">{snmp_notification,·Tag,·{got_response,·Address}}</code></p><p>This·informs·the·user·that·this·target·address·acknowledged·the | 4794 | <code·class="inline">Recv</code>:</p><ul><li><p><code·class="inline">pid()·|·atom()</code>·-·The·info·will·be·delivered·in·the·following·messages:</p><ul><li><p><code·class="inline">{snmp_targets,·Tag,·Addresses}</code></p><p>This·inform·the·user·which·target·addresses·the·notification·was·sent·to.</p></li><li><p><code·class="inline">{snmp_notification,·Tag,·{got_response,·Address}}</code></p><p>This·informs·the·user·that·this·target·address·acknowledged·the |
| 4795 | notification.</p></li><li><p><code·class="inline">{snmp_notification,·Tag,·{no_response,·Address}}</code></p><p>This·informs·the·user·that·this·target·address·did·not·acknowledge | 4795 | notification.</p></li><li><p><code·class="inline">{snmp_notification,·Tag,·{no_response,·Address}}</code></p><p>This·informs·the·user·that·this·target·address·did·not·acknowledge |
| 4796 | notification.</p></li></ul><p>The·notification·is·sent·as·an·Inform-Request·to·each·target·address·in | 4796 | notification.</p></li></ul><p>The·notification·is·sent·as·an·Inform-Request·to·each·target·address·in |
| 4797 | <code·class="inline">Addresses</code>·and·if·there·are·no·targets·for·which·an·Inform-Request·is·sent, | 4797 | <code·class="inline">Addresses</code>·and·if·there·are·no·targets·for·which·an·Inform-Request·is·sent, |
| 4798 | <code·class="inline">Addresses</code>·is·the·empty·list·<code·class="inline">[]</code>.</p><p>The·<code·class="inline">receiver</code>·will·first·be·sent·the·<code·class="inline">snmp_targets</code>·message,·and·then·for | 4798 | <code·class="inline">Addresses</code>·is·the·empty·list·<code·class="inline">[]</code>.</p><p>The·<code·class="inline">receiver</code>·will·first·be·sent·the·<code·class="inline">snmp_targets</code>·message,·and·then·for |
| 4799 | each·address·in·<code·class="inline">Addresses</code>·list,·one·of·the·two·<code·class="inline">snmp_notification</code>·messages.</p></li><li><p><code·class="inline">{Mod,·Func,·Args}</code>·-·The·info·will·be·delivered·via·the·function·call:</p><p><code·class="inline">Mod:Func([Msg·|·Args])</code></p><p>where·<code·class="inline">Msg</code>·has·the·same·content·and·purpose·as·the·messages·descrived·above.</p></li></ul><p><code·class="inline">Address</code>·is·a·management·target·address·and·<code·class="inline">Addresses</code>·is·a·list·of·management | 4799 | each·address·in·<code·class="inline">Addresses</code>·list,·one·of·the·two·<code·class="inline">snmp_notification</code>·messages.</p></li><li><p><code·class="inline">{Mod,·Func,·Args}</code>·-·The·info·will·be·delivered·via·the·function·call:</p><p><code·class="inline">Mod:Func([Msg·|·Args])</code></p><p>where·<code·class="inline">Msg</code>·has·the·same·content·and·purpose·as·the·messages·descrived·above.</p></li></ul><p><code·class="inline">Address</code>·is·a·management·target·address·and·<code·class="inline">Addresses</code>·is·a·list·of·management |
| 4800 | target·addresses.·They·are·defined·as·followes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="n">Addresses</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="18 | 4800 | target·addresses.·They·are·defined·as·followes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">········</span><span·class="n">Addresses</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5201898753-1">[</span><span·class="nf">address</span><span·class="p"·data-group-id="5201898753-2">(</span><span·class="p"·data-group-id="5201898753-2">)</span><span·class="p"·data-group-id="5201898753-1">]</span><span·class="w"> |
| 4801 | ········</span><span·class="n">Address</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">address</span><span·class="p"·data-group-id="18 | 4801 | ········</span><span·class="n">Address</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">address</span><span·class="p"·data-group-id="5201898753-3">(</span><span·class="p"·data-group-id="5201898753-3">)</span><span·class="w"> |
| 4802 | ········</span><span·class="nf">address</span><span·class="p"·data-group-id="1867711838-4">(</span><span·class="p"·data-group-id="1867711838-4">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">v1_address</span><span·class="p"·data-group-id="1867711838-5">(</span><span·class="p"·data-group-id="1867711838-5">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">v3_address</span><span·class="p"·data-group-id="1867711838-6">(</span><span·class="p"·data-group-id="1867711838-6">)</span><span·class="w"> | ||
| 4803 | ········</span><span·class="nf">v1_address</span><span·class="p"·data-group-id="1867711838-7">(</span><span·class="p"·data-group-id="1867711838-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="1867711838-8">{</span><span·class="n">TDomain</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TAddress</span><span·class="p"·data-group-id="1867711838-8">}</span><span·class="w"> | ||
| 4804 | ········</span><span·class="nf"> | 4802 | ········</span><span·class="nf">address</span><span·class="p"·data-group-id="5201898753-4">(</span><span·class="p"·data-group-id="5201898753-4">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">v1_address</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·282,·SHA:·762b3a2e6b307a94cd1372ee00bce8c5516e9bb84c6883b0a67659f28220f128·...·]</span><span·class="w"> |
| 4803 | ········</span><span·class="nf">v1_address</span><span·class="p"·data-group-id="5201898753-7">(</span><span·class="p"·data-group-id="5201898753-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5201898753-8">{</span><span·class="n">TDomain</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TAddress</span><span·class="p"·data-group-id="5201898753-8">}</span><span·class="w"> | ||
| 4804 | ········</span><span·class="nf">v3_address</span><span·class="p"·data-group-id="5201898753-9">(</span><span·class="p"·data-group-id="5201898753-9">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5201898753-10">{</span><span·class="p"·data-group-id="5201898753-11">{</span><span·class="n">TDomain</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TAddress</span><span·class="p"·data-group-id="5201898753-11">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">V3MsgData</span><span·class="p"·data-group-id="5201898753-10">}</span><span·class="w"> | ||
| 4805 | ········</span><span·class="n">TDomain</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tdoamin</span><span·class="p"·data-group-id="18 | 4805 | ········</span><span·class="n">TDomain</span><span·class="w">····</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">tdoamin</span><span·class="p"·data-group-id="5201898753-12">(</span><span·class="p"·data-group-id="5201898753-12">)</span><span·class="w"> |
| 4806 | ········</span><span·class="n">TAddress</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">taddress</span><span·class="p"·data-group-id="18 | 4806 | ········</span><span·class="n">TAddress</span><span·class="w">···</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">taddress</span><span·class="p"·data-group-id="5201898753-13">(</span><span·class="p"·data-group-id="5201898753-13">)</span><span·class="w"> |
| 4807 | ········</span><span·class="nf">tdomain</span><span·class="p"·data-group-id="18 | 4807 | ········</span><span·class="nf">tdomain</span><span·class="p"·data-group-id="5201898753-14">(</span><span·class="p"·data-group-id="5201898753-14">)</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="n">The</span><span·class="w">·</span><span·class="ss">oid</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">snmpUDPDomain</span><span·class="w"> |
| 4808 | ·····················</span><span·class="n">This</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">only</span><span·class="w">·</span><span·class="ss">supported</span><span·class="w">·</span><span·class="ss">transport</span><span·class="w">·</span><span·class="ss">domain</span><span·class="p">.</span><span·class="w"> | 4808 | ·····················</span><span·class="n">This</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">only</span><span·class="w">·</span><span·class="ss">supported</span><span·class="w">·</span><span·class="ss">transport</span><span·class="w">·</span><span·class="ss">domain</span><span·class="p">.</span><span·class="w"> |
| 4809 | ········</span><span·class="nf">taddress</span><span·class="p"·data-group-id="18 | 4809 | ········</span><span·class="nf">taddress</span><span·class="p"·data-group-id="5201898753-15">(</span><span·class="p"·data-group-id="5201898753-15">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5201898753-16">[</span><span·class="n">A1</span><span·class="p">,</span><spa[·...·truncated·by·diffoscope;·len:·378,·SHA:·6b4b2a4b321a632b789147c41487029bdac02d829cda102aeeccb3221c2bc81c·...·]-16">]</span><span·class="w"> |
| 4810 | ·····················</span><span·class="n">The</span><span·class="w">·</span><span·class="mi">4</span><span·class="w">·</span><span·class="ss">first</span><span·class="w">·</span><span·class="ss">bytes</span><span·class="w">·</span><span·class="ss">makes</span><span·class="w">·</span><span·class="ss">up</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">IP</span><span·class="o">-</span><span·class="ss">address</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">last</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> | 4810 | ·····················</span><span·class="n">The</span><span·class="w">·</span><span·class="mi">4</span><span·class="w">·</span><span·class="ss">first</span><span·class="w">·</span><span·class="ss">bytes</span><span·class="w">·</span><span·class="ss">makes</span><span·class="w">·</span><span·class="ss">up</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">IP</span><span·class="o">-</span><span·class="ss">address</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">last</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 4811 | ·····················</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">UDP</span><span·class="o">-</span><span·class="ss">port</span><span·class="w">·</span><span·class="ss">number</span><span·class="p">.</span><span·class="w"> | 4811 | ·····················</span><span·class="ss">the</span><span·class="w">·</span><span·class="n">UDP</span><span·class="o">-</span><span·class="ss">port</span><span·class="w">·</span><span·class="ss">number</span><span·class="p">.</span><span·class="w"> |
| 4812 | ········</span><span·class="n">V3MsgData</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">v3_msg_data</span><span·class="p"·data-group-id="18 | 4812 | ········</span><span·class="n">V3MsgData</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">v3_msg_data</span><span·class="p"·data-group-id="5201898753-17">(</span><span·class="p"·data-group-id="5201898753-17">)</span><span·class="w"> |
| 4813 | ········</span><span·class="nf">v3_msg_data</span><span·class="p"·data-group-id="18 | 4813 | ········</span><span·class="nf">v3_msg_data</span><span·class="p"·data-group-id="5201898753-18">(</span><span·class="p"·data-group-id="5201898753-18">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="5201898753-19">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·e6529a0f6d746046798f17152de5a664b28d3aa7156f6f44815fa6cb3441bc15·...·]-19">)</span></code></pre><p>If·<code·class="inline">Receiver</code>·is·a·<a·href="#t:notification_delivery_info/0"><code·class="inline">notification_delivery_info/0</code></a>·record,·then·the·information |
| 4814 | about·the·notification·delivery·will·be·delivered·to·the·<code·class="inline">receiver</code>·via·the | 4814 | about·the·notification·delivery·will·be·delivered·to·the·<code·class="inline">receiver</code>·via·the |
| 4815 | callback·functions·defined·by·the·<a·href="snmpa_notification_delivery_info_receiver.html"><code·class="inline">snmpa_notification_delivery_info_receiver</code></a> | 4815 | callback·functions·defined·by·the·<a·href="snmpa_notification_delivery_info_receiver.html"><code·class="inline">snmpa_notification_delivery_info_receiver</code></a> |
| 4816 | behaviour·according·to·the·content·of·the·<a·href="#t:notification_delivery_info/0"><code·class="inline">notification_delivery_info/0</code></a> | 4816 | behaviour·according·to·the·content·of·the·<a·href="#t:notification_delivery_info/0"><code·class="inline">notification_delivery_info/0</code></a> |
| 4817 | record.</p><p>The·optional·argument·<code·class="inline">Varbinds</code>·defines·values·for·the·objects·in·the | 4817 | record.</p><p>The·optional·argument·<code·class="inline">Varbinds</code>·defines·values·for·the·objects·in·the |
| 4818 | notification.·If·no·value·is·given·for·an·object,·the·<code·class="inline">Agent</code>·performs·a | 4818 | notification.·If·no·value·is·given·for·an·object,·the·<code·class="inline">Agent</code>·performs·a |
| 4819 | get-operation·to·retrieve·the·value.</p><p><code·class="inline">Varbinds</code>·is·a·list·of·<code·class="inline">Varbind</code>,·where·each·<code·class="inline">Varbind</code>·is·one·of:</p><ul><li><code·class="inline">{Variable,·Value}</code>,·where·<code·class="inline">Variable</code>·is·the·symbolic·name·of·a·scalar | 4819 | get-operation·to·retrieve·the·value.</p><p><code·class="inline">Varbinds</code>·is·a·list·of·<code·class="inline">Varbind</code>,·where·each·<code·class="inline">Varbind</code>·is·one·of:</p><ul><li><code·class="inline">{Variable,·Value}</code>,·where·<code·class="inline">Variable</code>·is·the·symbolic·name·of·a·scalar |
| 4820 | variable·referred·to·in·the·notification·specification.</li><li><code·class="inline">{Column,·RowIndex,·Value}</code>,·where·<code·class="inline">Column</code>·is·the·symbolic·name·of·a·column | 4820 | variable·referred·to·in·the·notification·specification.</li><li><code·class="inline">{Column,·RowIndex,·Value}</code>,·where·<code·class="inline">Column</code>·is·the·symbolic·name·of·a·column |
| Offset 5781, 15 lines modified | Offset 5781, 15 lines modified | ||
| 5781 | ······<p·class="built-using"> | 5781 | ······<p·class="built-using"> |
| 5782 | ········Built·using | 5782 | ········Built·using |
| 5783 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 5783 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 5784 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 5784 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 5785 | ······</p> | 5785 | ······</p> |
| 5786 | <p>Copyright·©·1996-202 | 5786 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 5787 | ····</footer> | 5787 | ····</footer> |
| 5788 | ··</div> | 5788 | ··</div> |
| 5789 | </main> | 5789 | </main> |
| 5790 | </div> | 5790 | </div> |
| 5791 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 5791 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 5792 | ··<script> | 5792 | ··<script> |
| 5793 | ··let·initialized·=·false; | 5793 | ··let·initialized·=·false; |
| Offset 3627, 15 lines modified | Offset 3627, 15 lines modified | ||
| 3627 | ······<p·class="built-using"> | 3627 | ······<p·class="built-using"> |
| 3628 | ········Built·using | 3628 | ········Built·using |
| 3629 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3629 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3630 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3630 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3631 | ······</p> | 3631 | ······</p> |
| 3632 | <p>Copyright·©·1996-202 | 3632 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3633 | ····</footer> | 3633 | ····</footer> |
| 3634 | ··</div> | 3634 | ··</div> |
| 3635 | </main> | 3635 | </main> |
| 3636 | </div> | 3636 | </div> |
| 3637 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3637 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3638 | ··<script> | 3638 | ··<script> |
| 3639 | ··let·initialized·=·false; | 3639 | ··let·initialized·=·false; |
| Offset 238, 15 lines modified | Offset 238, 15 lines modified | ||
| 238 | ······<p·class="built-using"> | 238 | ······<p·class="built-using"> |
| 239 | ········Built·using | 239 | ········Built·using |
| 240 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 240 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 241 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 241 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 242 | ······</p> | 242 | ······</p> |
| 243 | <p>Copyright·©·1996-202 | 243 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 244 | ····</footer> | 244 | ····</footer> |
| 245 | ··</div> | 245 | ··</div> |
| 246 | </main> | 246 | </main> |
| 247 | </div> | 247 | </div> |
| 248 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 248 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 249 | ··<script> | 249 | ··<script> |
| 250 | ··let·initialized·=·false; | 250 | ··let·initialized·=·false; |
| Offset 261, 15 lines modified | Offset 261, 15 lines modified | ||
| 261 | ······<p·class="built-using"> | 261 | ······<p·class="built-using"> |
| 262 | ········Built·using | 262 | ········Built·using |
| 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 265 | ······</p> | 265 | ······</p> |
| 266 | <p>Copyright·©·1996-202 | 266 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 267 | ····</footer> | 267 | ····</footer> |
| 268 | ··</div> | 268 | ··</div> |
| 269 | </main> | 269 | </main> |
| 270 | </div> | 270 | </div> |
| 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 272 | ··<script> | 272 | ··<script> |
| 273 | ··let·initialized·=·false; | 273 | ··let·initialized·=·false; |
| Offset 261, 15 lines modified | Offset 261, 15 lines modified | ||
| 261 | ······<p·class="built-using"> | 261 | ······<p·class="built-using"> |
| 262 | ········Built·using | 262 | ········Built·using |
| 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 263 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 264 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 265 | ······</p> | 265 | ······</p> |
| 266 | <p>Copyright·©·1996-202 | 266 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 267 | ····</footer> | 267 | ····</footer> |
| 268 | ··</div> | 268 | ··</div> |
| 269 | </main> | 269 | </main> |
| 270 | </div> | 270 | </div> |
| 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 271 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 272 | ··<script> | 272 | ··<script> |
| 273 | ··let·initialized·=·false; | 273 | ··let·initialized·=·false; |
| Offset 268, 15 lines modified | Offset 268, 15 lines modified | ||
| 268 | ······<p·class="built-using"> | 268 | ······<p·class="built-using"> |
| 269 | ········Built·using | 269 | ········Built·using |
| 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 272 | ······</p> | 272 | ······</p> |
| 273 | <p>Copyright·©·1996-202 | 273 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 274 | ····</footer> | 274 | ····</footer> |
| 275 | ··</div> | 275 | ··</div> |
| 276 | </main> | 276 | </main> |
| 277 | </div> | 277 | </div> |
| 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 279 | ··<script> | 279 | ··<script> |
| 280 | ··let·initialized·=·false; | 280 | ··let·initialized·=·false; |
| Offset 257, 15 lines modified | Offset 257, 15 lines modified | ||
| 257 | ······<p·class="built-using"> | 257 | ······<p·class="built-using"> |
| 258 | ········Built·using | 258 | ········Built·using |
| 259 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 259 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 260 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 260 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 261 | ······</p> | 261 | ······</p> |
| 262 | <p>Copyright·©·1996-202 | 262 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 263 | ····</footer> | 263 | ····</footer> |
| 264 | ··</div> | 264 | ··</div> |
| 265 | </main> | 265 | </main> |
| 266 | </div> | 266 | </div> |
| 267 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 267 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 268 | ··<script> | 268 | ··<script> |
| 269 | ··let·initialized·=·false; | 269 | ··let·initialized·=·false; |
| Offset 709, 15 lines modified | Offset 709, 15 lines modified | ||
| 709 | ······<p·class="built-using"> | 709 | ······<p·class="built-using"> |
| 710 | ········Built·using | 710 | ········Built·using |
| 711 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 711 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 712 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 712 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 713 | ······</p> | 713 | ······</p> |
| 714 | <p>Copyright·©·1996-202 | 714 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 715 | ····</footer> | 715 | ····</footer> |
| 716 | ··</div> | 716 | ··</div> |
| 717 | </main> | 717 | </main> |
| 718 | </div> | 718 | </div> |
| 719 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 719 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 720 | ··<script> | 720 | ··<script> |
| 721 | ··let·initialized·=·false; | 721 | ··let·initialized·=·false; |
| Offset 1094, 15 lines modified | Offset 1094, 15 lines modified | ||
| 1094 | ······<p·class="built-using"> | 1094 | ······<p·class="built-using"> |
| 1095 | ········Built·using | 1095 | ········Built·using |
| 1096 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1096 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1097 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1097 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1098 | ······</p> | 1098 | ······</p> |
| 1099 | <p>Copyright·©·1996-202 | 1099 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1100 | ····</footer> | 1100 | ····</footer> |
| 1101 | ··</div> | 1101 | ··</div> |
| 1102 | </main> | 1102 | </main> |
| 1103 | </div> | 1103 | </div> |
| 1104 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1104 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1105 | ··<script> | 1105 | ··<script> |
| 1106 | ··let·initialized·=·false; | 1106 | ··let·initialized·=·false; |
| Offset 811, 15 lines modified | Offset 811, 15 lines modified | ||
| 811 | ······<p·class="built-using"> | 811 | ······<p·class="built-using"> |
| 812 | ········Built·using | 812 | ········Built·using |
| 813 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 813 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 814 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 814 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 815 | ······</p> | 815 | ······</p> |
| 816 | <p>Copyright·©·1996-202 | 816 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 817 | ····</footer> | 817 | ····</footer> |
| 818 | ··</div> | 818 | ··</div> |
| 819 | </main> | 819 | </main> |
| 820 | </div> | 820 | </div> |
| 821 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 821 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 822 | ··<script> | 822 | ··<script> |
| 823 | ··let·initialized·=·false; | 823 | ··let·initialized·=·false; |
| Offset 979, 15 lines modified | Offset 979, 15 lines modified | ||
| 979 | ······<p·class="built-using"> | 979 | ······<p·class="built-using"> |
| 980 | ········Built·using | 980 | ········Built·using |
| 981 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 981 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 982 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 982 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 983 | ······</p> | 983 | ······</p> |
| 984 | <p>Copyright·©·1996-202 | 984 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 985 | ····</footer> | 985 | ····</footer> |
| 986 | ··</div> | 986 | ··</div> |
| 987 | </main> | 987 | </main> |
| 988 | </div> | 988 | </div> |
| 989 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 989 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 990 | ··<script> | 990 | ··<script> |
| 991 | ··let·initialized·=·false; | 991 | ··let·initialized·=·false; |
| Offset 474, 15 lines modified | Offset 474, 15 lines modified | ||
| 474 | ······<p·class="built-using"> | 474 | ······<p·class="built-using"> |
| 475 | ········Built·using | 475 | ········Built·using |
| 476 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 476 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 477 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 477 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 478 | ······</p> | 478 | ······</p> |
| 479 | <p>Copyright·©·1996-202 | 479 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 480 | ····</footer> | 480 | ····</footer> |
| 481 | ··</div> | 481 | ··</div> |
| 482 | </main> | 482 | </main> |
| 483 | </div> | 483 | </div> |
| 484 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 484 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 485 | ··<script> | 485 | ··<script> |
| 486 | ··let·initialized·=·false; | 486 | ··let·initialized·=·false; |
| Offset 486, 15 lines modified | Offset 486, 15 lines modified | ||
| 486 | ······<p·class="built-using"> | 486 | ······<p·class="built-using"> |
| 487 | ········Built·using | 487 | ········Built·using |
| 488 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 488 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 489 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 489 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 490 | ······</p> | 490 | ······</p> |
| 491 | <p>Copyright·©·1996-202 | 491 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 492 | ····</footer> | 492 | ····</footer> |
| 493 | ··</div> | 493 | ··</div> |
| 494 | </main> | 494 | </main> |
| 495 | </div> | 495 | </div> |
| 496 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 496 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 497 | ··<script> | 497 | ··<script> |
| 498 | ··let·initialized·=·false; | 498 | ··let·initialized·=·false; |
| Offset 410, 15 lines modified | Offset 410, 15 lines modified | ||
| 410 | ······<p·class="built-using"> | 410 | ······<p·class="built-using"> |
| 411 | ········Built·using | 411 | ········Built·using |
| 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 414 | ······</p> | 414 | ······</p> |
| 415 | <p>Copyright·©·1996-202 | 415 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 416 | ····</footer> | 416 | ····</footer> |
| 417 | ··</div> | 417 | ··</div> |
| 418 | </main> | 418 | </main> |
| 419 | </div> | 419 | </div> |
| 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 421 | ··<script> | 421 | ··<script> |
| 422 | ··let·initialized·=·false; | 422 | ··let·initialized·=·false; |
| Offset 319, 15 lines modified | Offset 319, 15 lines modified | ||
| 319 | ······<p·class="built-using"> | 319 | ······<p·class="built-using"> |
| 320 | ········Built·using | 320 | ········Built·using |
| 321 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 321 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 322 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 322 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 323 | ······</p> | 323 | ······</p> |
| 324 | <p>Copyright·©·1996-202 | 324 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 325 | ····</footer> | 325 | ····</footer> |
| 326 | ··</div> | 326 | ··</div> |
| 327 | </main> | 327 | </main> |
| 328 | </div> | 328 | </div> |
| 329 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 329 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 330 | ··<script> | 330 | ··<script> |
| 331 | ··let·initialized·=·false; | 331 | ··let·initialized·=·false; |
| Offset 360, 15 lines modified | Offset 360, 15 lines modified | ||
| 360 | ······<p·class="built-using"> | 360 | ······<p·class="built-using"> |
| 361 | ········Built·using | 361 | ········Built·using |
| 362 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 362 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 363 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 363 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 364 | ······</p> | 364 | ······</p> |
| 365 | <p>Copyright·©·1996-202 | 365 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 366 | ····</footer> | 366 | ····</footer> |
| 367 | ··</div> | 367 | ··</div> |
| 368 | </main> | 368 | </main> |
| 369 | </div> | 369 | </div> |
| 370 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 370 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 371 | ··<script> | 371 | ··<script> |
| 372 | ··let·initialized·=·false; | 372 | ··let·initialized·=·false; |
| Offset 401, 15 lines modified | Offset 401, 15 lines modified | ||
| 401 | ······<p·class="built-using"> | 401 | ······<p·class="built-using"> |
| 402 | ········Built·using | 402 | ········Built·using |
| 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 403 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 404 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 405 | ······</p> | 405 | ······</p> |
| 406 | <p>Copyright·©·1996-202 | 406 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 407 | ····</footer> | 407 | ····</footer> |
| 408 | ··</div> | 408 | ··</div> |
| 409 | </main> | 409 | </main> |
| 410 | </div> | 410 | </div> |
| 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 411 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 412 | ··<script> | 412 | ··<script> |
| 413 | ··let·initialized·=·false; | 413 | ··let·initialized·=·false; |
| Offset 127, 15 lines modified | Offset 127, 15 lines modified | ||
| 127 | <p>SNMP·MIB·compiler·frontend</p><h2·id="synopsis"·class="section-heading"> | 127 | <p>SNMP·MIB·compiler·frontend</p><h2·id="synopsis"·class="section-heading"> |
| 128 | ··<a·href="#synopsis"·class="hover-link"> | 128 | ··<a·href="#synopsis"·class="hover-link"> |
| 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 129 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 130 | ··</a> | 130 | ··</a> |
| 131 | ··<span·class="text">Synopsis</span> | 131 | ··<span·class="text">Synopsis</span> |
| 132 | </h2> | 132 | </h2> |
| 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">snmpc</span><span·class="w">·</span><span·class="p"·data-group-id=" | 133 | <pre><code·class="makeup·erlang"·translate="no"><span·class="ss">snmpc</span><span·class="w">·</span><span·class="p"·data-group-id="7540272595-1">[</span><span·class="ss">options</span><span·class="p"·data-group-id="7540272595-1">]</span><span·class="w">·</span><span·class="ss">file</span><span·class="p">.</span><span·class="ss">mib</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">file</span><span·class="p">.</span><span·class="ss">bin</span></code></pre><h2·id="description"·class="section-heading"> |
| 134 | ··<a·href="#description"·class="hover-link"> | 134 | ··<a·href="#description"·class="hover-link"> |
| 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 135 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 136 | ··</a> | 136 | ··</a> |
| 137 | ··<span·class="text">Description</span> | 137 | ··<span·class="text">Description</span> |
| 138 | </h2> | 138 | </h2> |
| 139 | <p>The·<code·class="inline">snmpc</code>·program·provides·a·way·to·run·the·SNMP·MIB·compiler·of·the·Erlang | 139 | <p>The·<code·class="inline">snmpc</code>·program·provides·a·way·to·run·the·SNMP·MIB·compiler·of·the·Erlang |
| 140 | system.</p><p><code·class="inline">snmpc</code>·compiles·an·SNMP·MIB·file.·See·<a·href="snmpc.html#compile/1">compile/1,2</a>·for·more | 140 | system.</p><p><code·class="inline">snmpc</code>·compiles·an·SNMP·MIB·file.·See·<a·href="snmpc.html#compile/1">compile/1,2</a>·for·more |
| Offset 211, 15 lines modified | Offset 211, 15 lines modified | ||
| 211 | ······<p·class="built-using"> | 211 | ······<p·class="built-using"> |
| 212 | ········Built·using | 212 | ········Built·using |
| 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 215 | ······</p> | 215 | ······</p> |
| 216 | <p>Copyright·©·1996-202 | 216 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 217 | ····</footer> | 217 | ····</footer> |
| 218 | ··</div> | 218 | ··</div> |
| 219 | </main> | 219 | </main> |
| 220 | </div> | 220 | </div> |
| 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 222 | ··<script> | 222 | ··<script> |
| 223 | ··let·initialized·=·false; | 223 | ··let·initialized·=·false; |
| Offset 1944, 16 lines modified | Offset 1944, 16 lines modified | ||
| 1944 | ······<div·class="specs"> | 1944 | ······<div·class="specs"> |
| 1945 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·load_mib(MibName)·->·ok·|·{error,·Reason}·when·MibName·::·<a·href="snmp.html#t:mib_name/0">snmp:mib_name</a>(),·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1945 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·load_mib(MibName)·->·ok·|·{error,·Reason}·when·MibName·::·<a·href="snmp.html#t:mib_name/0">snmp:mib_name</a>(),·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1946 | ······</div> | 1946 | ······</div> |
| 1947 | <p>Load·a·<code·class="inline">Mib</code>·into·the·manager.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including | 1947 | <p>Load·a·<code·class="inline">Mib</code>·into·the·manager.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including |
| 1948 | the·path·to·where·the·compiled·mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id=" | 1948 | the·path·to·where·the·compiled·mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id="6598245618-1">(</span><span·class="ss">my_app</span><span·class="p"·data-group-id="6598245618-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"/mibs/"</span><span·class="p">,</span><span·class="w"> |
| 1949 | ··········</span><span·class="nc">snmpm</span><span·class="p">:</span><span·class="nf">load_mib</span><span·class="p"·data-group-id=" | 1949 | ··········</span><span·class="nc">snmpm</span><span·class="p">:</span><span·class="nf">load_mib</span><span·class="p"·data-group-id="6598245618-2">(</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"MY-MIB"</span><span·class="p"·data-group-id="6598245618-2">)</span><span·class="p">.</span></code></pre> |
| 1950 | ··</section> | 1950 | ··</section> |
| 1951 | </section> | 1951 | </section> |
| 1952 | <section·class="detail"·id="log_to_io/1"> | 1952 | <section·class="detail"·id="log_to_io/1"> |
| 1953 | ··<div·class="detail-header"> | 1953 | ··<div·class="detail-header"> |
| 1954 | ····<a·href="#log_to_io/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1954 | ····<a·href="#log_to_io/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1955 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1955 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3450, 16 lines modified | Offset 3450, 16 lines modified | ||
| 3450 | ······<div·class="specs"> | 3450 | ······<div·class="specs"> |
| 3451 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·unload_mib(MibName)·->·ok·|·{error,·Reason}·when·MibName·::·<a·href="snmp.html#t:mib_name/0">snmp:mib_name</a>(),·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 3451 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·unload_mib(MibName)·->·ok·|·{error,·Reason}·when·MibName·::·<a·href="snmp.html#t:mib_name/0">snmp:mib_name</a>(),·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 3452 | ······</div> | 3452 | ······</div> |
| 3453 | <p>Unload·a·<code·class="inline">Mib</code>·from·the·manager.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including | 3453 | <p>Unload·a·<code·class="inline">Mib</code>·from·the·manager.·The·<code·class="inline">MibName</code>·is·the·name·of·the·Mib,·including |
| 3454 | the·path·to·where·the·compiled·mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id=" | 3454 | the·path·to·where·the·compiled·mib·is·found.·For·example,</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··········</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">priv_dir</span><span·class="p"·data-group-id="3516865066-1">(</span><span·class="ss">my_app</span><span·class="p"·data-group-id="3516865066-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"/mibs/"</span><span·class="p">,</span><span·class="w"> |
| 3455 | ··········</span><span·class="nc">snmpm</span><span·class="p">:</span><span·class="nf">unload_mib</span><span·class="p"·data-group-id=" | 3455 | ··········</span><span·class="nc">snmpm</span><span·class="p">:</span><span·class="nf">unload_mib</span><span·class="p"·data-group-id="3516865066-2">(</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"MY-MIB"</span><span·class="p"·data-group-id="3516865066-2">)</span><span·class="p">.</span></code></pre> |
| 3456 | ··</section> | 3456 | ··</section> |
| 3457 | </section> | 3457 | </section> |
| 3458 | <section·class="detail"·id="unregister_agent/2"> | 3458 | <section·class="detail"·id="unregister_agent/2"> |
| 3459 | ··<div·class="detail-header"> | 3459 | ··<div·class="detail-header"> |
| 3460 | ····<a·href="#unregister_agent/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 3460 | ····<a·href="#unregister_agent/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 3461 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 3461 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 3891, 15 lines modified | Offset 3891, 15 lines modified | ||
| 3891 | ······<p·class="built-using"> | 3891 | ······<p·class="built-using"> |
| 3892 | ········Built·using | 3892 | ········Built·using |
| 3893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3895 | ······</p> | 3895 | ······</p> |
| 3896 | <p>Copyright·©·1996-202 | 3896 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3897 | ····</footer> | 3897 | ····</footer> |
| 3898 | ··</div> | 3898 | ··</div> |
| 3899 | </main> | 3899 | </main> |
| 3900 | </div> | 3900 | </div> |
| 3901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3902 | ··<script> | 3902 | ··<script> |
| 3903 | ··let·initialized·=·false; | 3903 | ··let·initialized·=·false; |
| Offset 1308, 15 lines modified | Offset 1308, 15 lines modified | ||
| 1308 | ······<p·class="built-using"> | 1308 | ······<p·class="built-using"> |
| 1309 | ········Built·using | 1309 | ········Built·using |
| 1310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1312 | ······</p> | 1312 | ······</p> |
| 1313 | <p>Copyright·©·1996-202 | 1313 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1314 | ····</footer> | 1314 | ····</footer> |
| 1315 | ··</div> | 1315 | ··</div> |
| 1316 | </main> | 1316 | </main> |
| 1317 | </div> | 1317 | </div> |
| 1318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1319 | ··<script> | 1319 | ··<script> |
| 1320 | ··let·initialized·=·false; | 1320 | ··let·initialized·=·false; |
| Offset 623, 15 lines modified | Offset 623, 15 lines modified | ||
| 623 | ······<p·class="built-using"> | 623 | ······<p·class="built-using"> |
| 624 | ········Built·using | 624 | ········Built·using |
| 625 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 625 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 626 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 626 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 627 | ······</p> | 627 | ······</p> |
| 628 | <p>Copyright·©·1996-202 | 628 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 629 | ····</footer> | 629 | ····</footer> |
| 630 | ··</div> | 630 | ··</div> |
| 631 | </main> | 631 | </main> |
| 632 | </div> | 632 | </div> |
| 633 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 633 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 634 | ··<script> | 634 | ··<script> |
| 635 | ··let·initialized·=·false; | 635 | ··let·initialized·=·false; |
| Offset 552, 15 lines modified | Offset 552, 15 lines modified | ||
| 552 | ······<p·class="built-using"> | 552 | ······<p·class="built-using"> |
| 553 | ········Built·using | 553 | ········Built·using |
| 554 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 554 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 555 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 555 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 556 | ······</p> | 556 | ······</p> |
| 557 | <p>Copyright·©·1996-202 | 557 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 558 | ····</footer> | 558 | ····</footer> |
| 559 | ··</div> | 559 | ··</div> |
| 560 | </main> | 560 | </main> |
| 561 | </div> | 561 | </div> |
| 562 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 562 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 563 | ··<script> | 563 | ··<script> |
| 564 | ··let·initialized·=·false; | 564 | ··let·initialized·=·false; |
| Offset 478, 15 lines modified | Offset 478, 15 lines modified | ||
| 478 | ······<p·class="built-using"> | 478 | ······<p·class="built-using"> |
| 479 | ········Built·using | 479 | ········Built·using |
| 480 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 480 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 481 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 481 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 482 | ······</p> | 482 | ······</p> |
| 483 | <p>Copyright·©·1996-202 | 483 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 484 | ····</footer> | 484 | ····</footer> |
| 485 | ··</div> | 485 | ··</div> |
| 486 | </main> | 486 | </main> |
| 487 | </div> | 487 | </div> |
| 488 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 488 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 489 | ··<script> | 489 | ··<script> |
| 490 | ··let·initialized·=·false; | 490 | ··let·initialized·=·false; |
| Offset 693, 15 lines modified | Offset 693, 15 lines modified | ||
| 693 | ······<p·class="built-using"> | 693 | ······<p·class="built-using"> |
| 694 | ········Built·using | 694 | ········Built·using |
| 695 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 695 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 696 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 696 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 697 | ······</p> | 697 | ······</p> |
| 698 | <p>Copyright·©·1996-202 | 698 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 699 | ····</footer> | 699 | ····</footer> |
| 700 | ··</div> | 700 | ··</div> |
| 701 | </main> | 701 | </main> |
| 702 | </div> | 702 | </div> |
| 703 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 703 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 704 | ··<script> | 704 | ··<script> |
| 705 | ··let·initialized·=·false; | 705 | ··let·initialized·=·false; |
| Offset 18, 15 lines modified | Offset 18, 15 lines modified | ||
| 18 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 18 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 19 | dist/lato-latin-400-normal-W7754I4D.woff2 | 19 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 20 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 20 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 21 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 21 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 22 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 22 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 23 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 23 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 24 | dist/remixicon-NKANDIL5.woff2 | 24 | dist/remixicon-NKANDIL5.woff2 |
| 25 | dist/search_data- | 25 | dist/search_data-377AF1D8.js |
| 26 | dist/sidebar_items-60D78207.js | 26 | dist/sidebar_items-60D78207.js |
| 27 | hardening.html | 27 | hardening.html |
| 28 | index.html | 28 | index.html |
| 29 | introduction.html | 29 | introduction.html |
| 30 | notes.html | 30 | notes.html |
| 31 | search.html | 31 | search.html |
| 32 | ssh.html | 32 | ssh.html |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | ······<p·class="built-using"> | 273 | ······<p·class="built-using"> |
| 274 | ········Built·using | 274 | ········Built·using |
| 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 277 | ······</p> | 277 | ······</p> |
| 278 | <p>Copyright·©·1996-202 | 278 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 279 | ····</footer> | 279 | ····</footer> |
| 280 | ··</div> | 280 | ··</div> |
| 281 | </main> | 281 | </main> |
| 282 | </div> | 282 | </div> |
| 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 284 | ··<script> | 284 | ··<script> |
| 285 | ··let·initialized·=·false; | 285 | ··let·initialized·=·false; |
| Offset 138, 31 lines modified | Offset 138, 31 lines modified | ||
| 138 | the·<a·href="configure_algos.html">Configuring·algorithms·in·SSH</a>·chapter.</p><h2·id="options-configuration"·class="section-heading"> | 138 | the·<a·href="configure_algos.html">Configuring·algorithms·in·SSH</a>·chapter.</p><h2·id="options-configuration"·class="section-heading"> |
| 139 | ··<a·href="#options-configuration"·class="hover-link"> | 139 | ··<a·href="#options-configuration"·class="hover-link"> |
| 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 140 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 141 | ··</a> | 141 | ··</a> |
| 142 | ··<span·class="text">Options·configuration</span> | 142 | ··<span·class="text">Options·configuration</span> |
| 143 | </h2> | 143 | </h2> |
| 144 | <p>There·are·from·OTP-23.0·two·main·ways·to·set·an·option:</p><ul><li><p>Like·before,·in·the·<code·class="inline">Options</code>·parameter·in·the·Erlang·code·in·a·call·to·for | 144 | <p>There·are·from·OTP-23.0·two·main·ways·to·set·an·option:</p><ul><li><p>Like·before,·in·the·<code·class="inline">Options</code>·parameter·in·the·Erlang·code·in·a·call·to·for |
| 145 | example·<a·href="ssh.html#daemon/3"><code·class="inline">ssh:daemon/3</code></a>·or·<a·href="ssh.html#connect/3"><code·class="inline">ssh:connect/3</code></a>·or·any·of·their·variants.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="4 | 145 | example·<a·href="ssh.html#daemon/3"><code·class="inline">ssh:daemon/3</code></a>·or·<a·href="ssh.html#connect/3"><code·class="inline">ssh:connect/3</code></a>·or·any·of·their·variants.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="4610428755-1">(</span><span·class="mi">22</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4610428755-2">[</span><span·class="p"·data-group-id="4610428755-3">{</span><span·class="ss">user</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·625,·SHA:·2afa50eeda2b07d072464a985d943b2fd61bde59afaab6170a93cd566d421448·...·]9-1">{</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ssh</span><span·class="p">,</span><span·class="w"> |
| 146 | ·</span><span·class="p"·data-group-id=" | 146 | ·</span><span·class="p"·data-group-id="6834444059-2">[</span><span·class="p"·data-group-id="6834444059-3">{</span><span·class="ss">description</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"SSH-2·for·Erlang/OTP"</span><span·class="p"·data-group-id="6834444059-3">}</span><span·class="p">,</span><span·class="w"> |
| 147 | ··</span><span·class="p"·data-group-id=" | 147 | ··</span><span·class="p"·data-group-id="6834444059-4">{</span><span·class="ss">vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"4.9"</span><span·class="p"·data-group-id="6834444059-4">}</span><span·class="p">,</span><span·class="w"> |
| 148 | ··</span><span·class="p"·data-group-id=" | 148 | ··</span><span·class="p"·data-group-id="6834444059-5">{</span><span·class="ss">modules</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6834444059-6">[</span><span·class="ss">ssh</span><span·class="p">,</span><span·class="w"> |
| 149 | ········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 149 | ········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 150 | ·········</span><span·class="ss">ssh_xfer</span><span·class="p"·data-group-id=" | 150 | ·········</span><span·class="ss">ssh_xfer</span><span·class="p"·data-group-id="6834444059-6">]</span><span·class="p"·data-group-id="6834444059-5">}</span><span·class="p">,</span><span·class="w"> |
| 151 | ··</span><span·class="p"·data-group-id=" | 151 | ··</span><span·class="p"·data-group-id="6834444059-7">{</span><span·class="ss">registered</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6834444059-8">[</span><span·class="p"·data-group-id="6834444059-8">]</span><span·class="p"·data-group-id="6834444059-7">}</span><span·class="p">,</span><span·class="w"> |
| 152 | ··</span><span·class="p"·data-group-id=" | 152 | ··</span><span·class="p"·data-group-id="6834444059-9">{</span><span·class="ss">applications</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6834444059-10">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">s[·...·truncated·by·diffoscope;·len:·266,·SHA:·cea885bff1dcb4f28d9d7ce1a429559374bc10c40d091736feeae5dc1cc76a62·...·]9-9">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ··</span><span·class="p"·data-group-id=" | 153 | ··</span><span·class="p"·data-group-id="6834444059-11">{</span><span·class="ss">env</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6834444059-12">[</span><span·class="p"·data-group-id="6834444059-13">{</span><span·class="ss">user</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·128,·SHA:·3844b4f8f8ef0f21fcf0a57f1e54e99f2d166ecaab7a3bd029306d81c7bfb238·...·]9-13">}</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<·HERE</span><span·class="w"> |
| 154 | ··</span><span·class="p"·data-group-id=" | 154 | ··</span><span·class="p"·data-group-id="6834444059-14">{</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6834444059-15">{</span><span·class="ss">ssh_app</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·177,·SHA:·3ff808c57cb24347f24f323ba49056898ba717ad738eea59ccf5109d5ad5dc00·...·]9-14">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ·······</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre></li><li><p>In·a·.config·file:</p><pre><code·class="text">erl·-config·ex1</code></pre><p>where·<code·class="inline">ex1.config</code>·contains:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 155 | ·······</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre></li><li><p>In·a·.config·file:</p><pre><code·class="text">erl·-config·ex1</code></pre><p>where·<code·class="inline">ex1.config</code>·contains:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8591149980-1">[</span><span·class="w"> |
| 156 | </span><span·class="p"·data-group-id=" | 156 | </span><span·class="p"·data-group-id="8591149980-2">{</span><span·class="ss">ssh</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8591149980-3">[</span><span·class="p"·data-group-id="8591149980-4">{</span><span·class="ss">user</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·208,·SHA:·6252833082dc078fe2865d8791e6f8af3a1e8306dcdd8ab5b95910b722e39e7e·...·]-2">}</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="8591149980-1">]</span><span·class="p">.</span></code></pre></li></ul><p>If·the·option·is·intended·only·for·a·server·or·for·a·client,·it·may·be·set·in |
| 158 | this·way:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="111 | 158 | this·way:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2111747531-1">[</span><span·class="w"> |
| 159 | </span><span·class="p"·data-group-id="111 | 159 | </span><span·class="p"·data-group-id="2111747531-2">{</span><span·class="ss">ssh</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2111747531-3">[</span><span·class="p"·data-group-id="2111747531-4">{</span><span·class="ss">server_options</span><span·class="p"[·...·truncated·by·diffoscope;·len:·376,·SHA:·3c874906f07552f4e2476afda5a1a083975740f03bbddb0642b960f4a4720168·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 160 | ·······</span><span·class="p"·data-group-id="111 | 160 | ·······</span><span·class="p"·data-group-id="2111747531-7">{</span><span·class="ss">client_options</span><span·class="p">,</span><span·class="p"·data-group-id="2111747531-8">[</span><span·class="p"·data-group-id="2111747531-9">{</span><span·class="ss">user</span><span·class="p">,</span><span·class="w[·...·truncated·by·diffoscope;·len:·195,·SHA:·32b68b2604f43bf9309abb962e4b8f661879f2e4668066999f1cd3cb4650894b·...·]-7">}</span><span·class="w"> |
| 161 | </span><span·class="p"·data-group-id="111 | 161 | </span><span·class="p"·data-group-id="2111747531-3">]</span><span·class="p">.</span></code></pre><p>A·server·(daemon)·will·use·the·user·name·<code·class="inline">foo</code>,·and·a·client·will·use·the·name |
| 162 | <code·class="inline">bar</code>.</p></li></ul><h2·id="precedence"·class="section-heading"> | 162 | <code·class="inline">bar</code>.</p></li></ul><h2·id="precedence"·class="section-heading"> |
| 163 | ··<a·href="#precedence"·class="hover-link"> | 163 | ··<a·href="#precedence"·class="hover-link"> |
| 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 164 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 165 | ··</a> | 165 | ··</a> |
| 166 | ··<span·class="text">Precedence</span> | 166 | ··<span·class="text">Precedence</span> |
| 167 | </h2> | 167 | </h2> |
| 168 | <p>If·an·option·is·set·in·more·than·one·way,·what·happens?</p><p>There·is·an·ordering,·which·is:</p><ul><li>Level·0:·Hard-coded·default·values·in·the·OTP·SSH·source·code</li><li>Level·1:·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/config.html">OTP·Configuration·Parameters</a></li><li>Level·2:·Options·in·the·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/config.html">OTP·Configuration·Parameters</a> | 168 | <p>If·an·option·is·set·in·more·than·one·way,·what·happens?</p><p>There·is·an·ordering,·which·is:</p><ul><li>Level·0:·Hard-coded·default·values·in·the·OTP·SSH·source·code</li><li>Level·1:·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/config.html">OTP·Configuration·Parameters</a></li><li>Level·2:·Options·in·the·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/config.html">OTP·Configuration·Parameters</a> |
| Offset 225, 96 lines modified | Offset 225, 96 lines modified | ||
| 225 | ··························'aes192-cbc','aes128-cbc','3des-cbc']}]}, | 225 | ··························'aes192-cbc','aes128-cbc','3des-cbc']}]}, |
| 226 | ·{mac,[{client2server,['hmac-sha2-256','hmac-sha2-512', | 226 | ·{mac,[{client2server,['hmac-sha2-256','hmac-sha2-512', |
| 227 | ·······················'hmac-sha1']}, | 227 | ·······················'hmac-sha1']}, |
| 228 | ·······{server2client,['hmac-sha2-256','hmac-sha2-512', | 228 | ·······{server2client,['hmac-sha2-256','hmac-sha2-512', |
| 229 | ·······················'hmac-sha1']}]}, | 229 | ·······················'hmac-sha1']}]}, |
| 230 | ·{compression,[{client2server,[none,'zlib@openssh.com',zlib]}, | 230 | ·{compression,[{client2server,[none,'zlib@openssh.com',zlib]}, |
| 231 | ···············{server2client,[none,'zlib@openssh.com',zlib]}]}]</code></pre><p>Note·that·the·algorithms·in·the·file·<code·class="inline">ex2.config</code>·is·not·yet·applied.·They·will | 231 | ···············{server2client,[none,'zlib@openssh.com',zlib]}]}]</code></pre><p>Note·that·the·algorithms·in·the·file·<code·class="inline">ex2.config</code>·is·not·yet·applied.·They·will |
| 232 | be·when·we·start·ssh:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 232 | be·when·we·start·ssh:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5861810792-1">(</span><span·class="p"·data-group-id="5861810792-1">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 233 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 234 | 3>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">default_algorithms</span><span·class="p"·data-group-id=" | 234 | 3>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">default_algorithms</span><span·class="p"·data-group-id="5861810792-2">(</span><span·class="p"·data-group-id="5861810792-2">)</span><span·class="p">.</span><span·class="w"> |
| 235 | </span><span·class="p"·data-group-id=" | 235 | </span><span·class="p"·data-group-id="5861810792-3">[</span><span·class="p"·data-group-id="5861810792-4">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-5">[</span><span·class="ss">'ecdh-sha2-nistp384'</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·69,·SHA:·dda42be27685b941767a8aef1ba677898a12f396666d7cf3fc55bd1ffea76ff3·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 236 | ·</span><span·class="p"·data-group-id=" | 236 | ·</span><span·class="p"·data-group-id="5861810792-6">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-7">[</span><span·class="ss">'ssh-rsa'</span><span·class="p"·data-group-id="5861810792-7">]</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·eb1fd40c84015a9522bdfb00c905fe6948529ba7e4ae0e2991c50ac28ad05fa1·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ·</span><span·class="p"·data-group-id=" | 237 | ·</span><span·class="p"·data-group-id="5861810792-8">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-9">[</span><span·class="p"·data-group-id="5861810792-10">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class=[·...·truncated·by·diffoscope;·len:·181,·SHA:·def8e9d739772e2f0b6ea9203d14a46e16c179a686534032bf62264186bb1855·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 238 | ··········</span><span·class="p"·data-group-id=" | 238 | ··········</span><span·class="p"·data-group-id="5861810792-12">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-13">[</span><span·class="ss">'aes192-ctr'</span><span·class="p"·data-group-id="5861810792-13">]</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·128,·SHA:·7a02cfde736fb856b360e31a3411a9d9ce2d18aed5e49bab56b125fe9dacdfc8·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ·</span><span·class="p"·data-group-id=" | 239 | ·</span><span·class="p"·data-group-id="5861810792-14">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-15">[</span><span·class="p"·data-group-id="5861810792-16">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·179,·SHA:·ec0a31a93949ef589ade86becc5b296519860821a77f52d529cc0f7df6f9327a·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 240 | ·······</span><span·class="p"·data-group-id="6353534450-18">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="6353534450-19">[</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="6353534450-19">]</span><span·class="p"·data-group-id="6353534450-18">}</span><span·class="p"·data-group-id="6353534450-15">]</span><span·class="p"·data-group-id="6353534450-14">}</span><span·class="p">,</span><span·class="w"> | ||
| 241 | ·</span><span·class="p"·data-group-id="6353534450-20">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="6353534450-21">[</span><span·class="p"·data-group-id="6353534450-22">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="p"·data-group-id="6353534450-23">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="6353534450-23">]</span><span·class="p"·data-group-id="6353534450-22">}</span><span·class="p">,</span><span·class="w"> | ||
| 242 | ······· | 240 | ·······</span><span·class="p"·data-group-id="5861810792-18">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-19">[</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="586181[·...·truncated·by·diffoscope;·len:·196,·SHA:·09924fe24e42f1455dbc3ce9f0ac9c2da83e13b8a9d6c08cd63295c69d964a82·...·]</span><span·class="w"> |
| 241 | ·</span><span·class="p"·data-group-id="5861810792-20">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-21">[</span><span·class="p"·data-group-id="5861810792-22">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-23">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="5861810792-23">]</span><span·class="p"·data-group-id="5861810792-22">}</span><span·class="p">,</span><span·class="w"> | ||
| 242 | ···············</span><span·class="p"·data-group-id="5861810792-24">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="5861810792-25">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="5861810792-25">]</span><span·class="p"·data-group-id="5861810792-24">}</span><span·class="p"·data-group-id="5861810792-21">]</span><span·class="p"·data-group-id="5861810792-20">}</span><span·class="p"·data-group-id="5861810792-3">]</span><span·class="w"> | ||
| 243 | </span><span·class="mi">4</span><span·class="o">></span></code></pre><p>We·see·that·the·algorithm·set·is·changed·to·the·one·in·the·<code·class="inline">ex2.config</code>.·Since | 243 | </span><span·class="mi">4</span><span·class="o">></span></code></pre><p>We·see·that·the·algorithm·set·is·changed·to·the·one·in·the·<code·class="inline">ex2.config</code>.·Since |
| 244 | <code·class="inline">compression</code>·is·not·specified·in·the·file,·the·hard-coded·default·is·still·used | 244 | <code·class="inline">compression</code>·is·not·specified·in·the·file,·the·hard-coded·default·is·still·used |
| 245 | for·that·entry.</p><h4>Establishing·a·connection·(ssh:connect·et·al)·or·starting·a·daemon·(ssh:daemon)</h4><p>Both·when·the·client·establishes·a·connection·with·ssh:connect·or·other | 245 | for·that·entry.</p><h4>Establishing·a·connection·(ssh:connect·et·al)·or·starting·a·daemon·(ssh:daemon)</h4><p>Both·when·the·client·establishes·a·connection·with·ssh:connect·or·other |
| 246 | functions,·or·a·daemon·is·started·with·ssh:daemon,·the·option·lists·in·the | 246 | functions,·or·a·daemon·is·started·with·ssh:daemon,·the·option·lists·in·the |
| 247 | function·calls·are·also·used.</p><p>If·a·client·is·started·(ssh:connect·et·al),·the·environment·variable | 247 | function·calls·are·also·used.</p><p>If·a·client·is·started·(ssh:connect·et·al),·the·environment·variable |
| 248 | <code·class="inline">client_options</code>·is·used.·Similarly·for·a·daemon·the·<code·class="inline">server_options</code>·variable | 248 | <code·class="inline">client_options</code>·is·used.·Similarly·for·a·daemon·the·<code·class="inline">server_options</code>·variable |
| 249 | is·handled.</p><p>If·any·<a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·is | 249 | is·handled.</p><p>If·any·<a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·is |
| 250 | present,·the·one·with·the·highest·level·is·used,·that·is,·the·<code·class="inline">Option</code>·list | 250 | present,·the·one·with·the·highest·level·is·used,·that·is,·the·<code·class="inline">Option</code>·list |
| 251 | parameter·has·the·highest·priority.·Then·the | 251 | parameter·has·the·highest·priority.·Then·the |
| 252 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>·on·all·levels·in | 252 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>·on·all·levels·in |
| 253 | order·starting·with·level·0·are·applied.</p><p>We·continue·the·example·above·by·connecting·to·a·server·and·modifying·the·<code·class="inline">kex</code> | 253 | order·starting·with·level·0·are·applied.</p><p>We·continue·the·example·above·by·connecting·to·a·server·and·modifying·the·<code·class="inline">kex</code> |
| 254 | algorithm·set.·We·remove·the·only·one·(<code·class="inline">'ecdh-sha2-nistp384'</code>)·and·add | 254 | algorithm·set.·We·remove·the·only·one·(<code·class="inline">'ecdh-sha2-nistp384'</code>)·and·add |
| 255 | <code·class="inline">'curve25519-sha256@libssh.org'</code>·by·appending·it·to·the·now·empty·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="p"·data-group-id=" | 255 | <code·class="inline">'curve25519-sha256@libssh.org'</code>·by·appending·it·to·the·now·empty·list:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="p"·data-group-id="5446137345-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="5446137345-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ssh</span><span·cl[·...·truncated·by·diffoscope;·len:·88,·SHA:·6f01cb9367eeb6261885a61a17ff833312400ba2c965b902c2a4329e8f559c46·...·]-2">(</span><span·class="ss">loopback</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">22</span><span·class="p">,</span><span·class="w"> |
| 256 | ························</span><span·class="p"·data-group-id=" | 256 | ························</span><span·class="p"·data-group-id="5446137345-3">[</span><span·class="p"·data-group-id="5446137345-4">{</span><span·class="ss">modify_algorithms</span><span·class="p">,</span><span·class="w"> |
| 257 | ·································</span><span·class="p"·data-group-id=" | 257 | ·································</span><span·class="p"·data-group-id="5446137345-5">[</span><span·class="p"·data-group-id="5446137345-6">{</span><span·class="ss">rm</span><span·class="p">,</span><span·class="w"> |
| 258 | ·····································</span><span·class="p"·data-group-id=" | 258 | ·····································</span><span·class="p"·data-group-id="5446137345-7">[</span><span·class="w">·</span><span·class="p"·data-group-id="5446137345-8">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="5446137345-9">[</span><span·class="ss">'ecdh-sha2-nistp384'</span><[·...·truncated·by·diffoscope;·len:·170,·SHA:·22181bcaecd9ab866d014bfa09f540603a0ae1a1091f5b875191272efffc78f1·...·]-7">]</span><span·class="w"> |
| 259 | » » » » ··</span><span·class="p"·data-group-id=" | 259 | » » » » ··</span><span·class="p"·data-group-id="5446137345-6">}</span><span·class="p">,</span><span·class="w"> |
| 260 | ··································</span><span·class="p"·data-group-id=" | 260 | ··································</span><span·class="p"·data-group-id="5446137345-10">{</span><span·class="ss">append</span><span·class="p">,</span><span·class="w"> |
| 261 | » » » ·············</span><span·class="p"·data-group-id=" | 261 | » » » ·············</span><span·class="p"·data-group-id="5446137345-11">[</span><span·class="w">·</span><span·class="p"·data-group-id="5446137345-12">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="5446137345-13">[</span><span·class="ss">'curve25519-sha256@libssh.org[·...·truncated·by·diffoscope;·len:·185,·SHA:·bb091326d6f6b75f99c154ff850ac2d05351582e108d568b7a57910a86d3dbe8·...·]-11">]</span><span·class="w"> |
| 262 | » » » » ··</span><span·class="p"·data-group-id=" | 262 | » » » » ··</span><span·class="p"·data-group-id="5446137345-10">}</span><span·class="w"> |
| 263 | » » » » ·</span><span·class="p"·data-group-id=" | 263 | » » » » ·</span><span·class="p"·data-group-id="5446137345-5">]</span><span·class="w"> |
| 264 | » ·················</span><span·class="p"·data-group-id=" | 264 | » ·················</span><span·class="p"·data-group-id="5446137345-4">}</span><span·class="w"> |
| 265 | ························</span><span·class="p"·data-group-id=" | 265 | ························</span><span·class="p"·data-group-id="5446137345-3">]</span><span·class="p"·data-group-id="5446137345-2">)</span><span·class="p">.</span><span·class="w"> |
| 266 | </span><span·class="p"·data-group-id=" | 266 | </span><span·class="p"·data-group-id="5446137345-14">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o">></span><span·class="mf">0.118</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="5446137345-14">}</span></code></pre><p>We·check·which·algorithms·are·negotiated·by·the·client·and·the·server,·and·note |
| 267 | that·the·(only)·<code·class="inline">kex</code>·algorithm·<code·class="inline">'curve25519-sha256@libssh.org'</code>·was·selected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connection_info</span><span·class="p"·data-group-id=" | 267 | that·the·(only)·<code·class="inline">kex</code>·algorithm·<code·class="inline">'curve25519-sha256@libssh.org'</code>·was·selected:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connection_info</span><span·class="p"·data-group-id="2384953336-1">(</span><span·class="n">C</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">algorithms</span><span·class="p"·data-group-id="2384953336-1">)</span><span·class="p">.</span><span·class="w"> |
| 268 | </span><span·class="p"·data-group-id=" | 268 | </span><span·class="p"·data-group-id="2384953336-2">{</span><span·class="ss">algorithms</span><span·class="p">,</span><span·class="p"·data-group-id="2384953336-3">[</span><span·class="p"·data-group-id="2384953336-4">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="ss">&#[·...·truncated·by·diffoscope;·len:·82,·SHA:·0c75e739fcc117b5d0a8b2784bf8a5f94e1644543b64e46e8fbb429bf8408d95·...·]36-4">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ·············</span><span·class="p"·data-group-id=" | 269 | ·············</span><span·class="p"·data-group-id="2384953336-5">{</span><span·class="ss">hkey</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p"·data-group-id="2384953336-5">}</span><span·class="p">,</span><span·class="w"> |
| 270 | ·············</span><span·class="p"·data-group-id=" | 270 | ·············</span><span·class="p"·data-group-id="2384953336-6">{</span><span·class="ss">send_mac</span><span·class="p">,</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="2384953336-6">}</span><span·class="p">,</span><span·class="w"> |
| 271 | ·············</span><span·class="p"·data-group-id=" | 271 | ·············</span><span·class="p"·data-group-id="2384953336-7">{</span><span·class="ss">recv_mac</span><span·class="p">,</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="2384953336-7">}</span><span·class="p">,</span><span·class="w"> |
| 272 | ·············</span><span·class="p"·data-group-id=" | 272 | ·············</span><span·class="p"·data-group-id="2384953336-8">{</span><span·class="ss">encrypt</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p"·data-group-id="2384953336-8">}</span><span·class="p">,</span><span·class="w"> |
| 273 | ·············</span><span·class="p"·data-group-id=" | 273 | ·············</span><span·class="p"·data-group-id="2384953336-9">{</span><span·class="ss">decrypt</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p"·data-group-id="2384953336-9">}</span><span·class="p">,</span><span·class="w"> |
| 274 | ·············</span><span·class="p"·data-group-id=" | 274 | ·············</span><span·class="p"·data-group-id="2384953336-10">{</span><span·class="ss">compress</span><span·class="p">,</span><span·class="ss">none</span><span·class="p"·data-group-id="2384953336-10">}</span><span·class="p">,</span><span·class="w"> |
| 275 | ·············</span><span·class="p"·data-group-id=" | 275 | ·············</span><span·class="p"·data-group-id="2384953336-11">{</span><span·class="ss">decompress</span><span·class="p">,</span><span·class="ss">none</span><span·class="p"·data-group-id="2384953336-11">}</span><span·class="p">,</span><span·class="w"> |
| 276 | ·············</span><span·class="p"·data-group-id=" | 276 | ·············</span><span·class="p"·data-group-id="2384953336-12">{</span><span·class="ss">send_ext_info</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="2384953336-12">}</span><span·class="p">,</span><span·class="w"> |
| 277 | ·············</span><span·class="p"·data-group-id=" | 277 | ·············</span><span·class="p"·data-group-id="2384953336-13">{</span><span·class="ss">recv_ext_info</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="2384953336-13">}</span><span·class="p"·data-group-id="2384953336-3">]</span><span·class="p"·data-group-id="238495[·...·truncated·by·diffoscope;·len:·2,·SHA:·c6f3ac57944a531490cd39902d0f777715fd005efac9a30622d5f5205e7f6894·...·]36-2">}</span></code></pre><h4>Example·of·modify_algorithms·handling</h4><p>We·will·now·check·if·the |
| 278 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>·on·a·lower·level | 278 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>·on·a·lower·level |
| 279 | is·applied·to·a | 279 | is·applied·to·a |
| 280 | <a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·on·a·higher | 280 | <a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·on·a·higher |
| 281 | level.·We·will·do·that·by·enabling·the·<code·class="inline">ssh-dss</code>·algorithm·that·is·supported, | 281 | level.·We·will·do·that·by·enabling·the·<code·class="inline">ssh-dss</code>·algorithm·that·is·supported, |
| 282 | but·not·in·the·default·set.</p><p>The·config·file·<code·class="inline">ex3.config</code>·has·the·contents:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 282 | but·not·in·the·default·set.</p><p>The·config·file·<code·class="inline">ex3.config</code>·has·the·contents:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8895768260-1">[</span><span·class="w"> |
| 283 | ·</span><span·class="p"·data-group-id=" | 283 | ·</span><span·class="p"·data-group-id="8895768260-2">{</span><span·class="ss">ssh</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8895768260-3">[</span><span·class="p"·data-group-id="8895768260-4">{</span><span·class="ss">modify_algorithms</span><span·class="p">,</span><span·class="w"> |
| 284 | ·········</span><span·class="p"·data-group-id=" | 284 | ·········</span><span·class="p"·data-group-id="8895768260-5">[</span><span·class="w">·</span><span·class="p"·data-group-id="8895768260-6">{</span><span·class="ss">prepend</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8895768260-7">[</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·481,·SHA:·a1f5d66c10ad4b5dfc72fcd93e5b50dfa5ab5aacc603c44bf96ca6bedaff3c2d·...·]-5">]</span><span·class="w"> |
| 285 | ········</span><span·class="p"·data-group-id=" | 285 | ········</span><span·class="p"·data-group-id="8895768260-4">}</span><span·class="p"·data-group-id="8895768260-3">]</span><span·class="p"·data-group-id="8895768260-2">}</span><span·class="w"> |
| 286 | </span><span·class="p"·data-group-id=" | 286 | </span><span·class="p"·data-group-id="8895768260-1">]</span><span·class="p">.</span></code></pre><p>A·newly·started·erlang·shell·shows·that·no·<code·class="inline">'ssh-dss'</code>·is·present·in·the |
| 287 | <code·class="inline">public_key</code>·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 287 | <code·class="inline">public_key</code>·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="0242117436-1">(</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">default_algorithms</span><span·class="p"·data-group-id="0242117436-2">(</span><span·[·...·truncated·by·diffoscope;·len:·88,·SHA:·8f21b0fcd74bab322ffe9dd163a46b070c00399779df9c0cccdae9bd20b68305·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 288 | </span><span·class="p"·data-group-id=" | 288 | </span><span·class="p"·data-group-id="0242117436-3">[</span><span·class="ss">'ecdsa-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdsa-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 289 | ·</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-ed25519'</span><span·class="p">,</span><span·class="ss">'ssh-ed448'</span><span·class="p">,</span><span·class="w"> | 289 | ·</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-ed25519'</span><span·class="p">,</span><span·class="ss">'ssh-ed448'</span><span·class="p">,</span><span·class="w"> |
| 290 | ·</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p"·data-group-id=" | 290 | ·</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p"·data-group-id="0242117436-3">]</span><span·class="w"> |
| 291 | </span><span·class="mi">2</span><span·class="o">></span></code></pre><p>A·call·to·<a·href="ssh.html#connect/3"><code·class="inline">ssh:connect/3</code></a>·removes·all·algorithms·but·one·of·each·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7 | 291 | </span><span·class="mi">2</span><span·class="o">></span></code></pre><p>A·call·to·<a·href="ssh.html#connect/3"><code·class="inline">ssh:connect/3</code></a>·removes·all·algorithms·but·one·of·each·type:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7661926786-1">(</span><span·class="p"·data-group-id="7661926786-1">)</span><span·class="p">.</span><span·class="w"> |
| 292 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 292 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 293 | 3>·</span><span·class="p"·data-group-id="7 | 293 | 3>·</span><span·class="p"·data-group-id="7661926786-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="7661926786-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ssh</span><span·cla[·...·truncated·by·diffoscope;·len:·87,·SHA:·a671cc587f7f3f70b38b2a5a533fea27a1325f5fbcb046da5ded79be8a739030·...·]-3">(</span><span·class="ss">loopback</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">22</span><span·class="p">,</span><span·class="w"> |
| 294 | ························</span><span·class="p"·data-group-id="7 | 294 | ························</span><span·class="p"·data-group-id="7661926786-4">[</span><span·class="p"·data-group-id="7661926786-5">{</span><span·class="ss">preferred_algorithms</span><span·class="p">,</span><span·class="w"> |
| 295 | ·························</span><span·class="p"·data-group-id="7 | 295 | ·························</span><span·class="p"·data-group-id="7661926786-6">[</span><span·class="p"·data-group-id="7661926786-7">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661926786-8">[</span><span·class="ss">'ecdsa-sha2-nistp256'<[·...·truncated·by·diffoscope;·len:·100,·SHA:·4d3f957d083172d270bbfb6dc52508522db1e6dffff979fc4a4c041a644d3869·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 296 | » » » ··</span><span·class="p"·data-group-id="7 | 296 | » » » ··</span><span·class="p"·data-group-id="7661926786-9">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661926786-10">[</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p"·data-group-id="7661926786-10">]</span>[·...·truncated·by·diffoscope;·len:·41,·SHA:·9c067f75bfb8a323d4be2229fbecaaacec4a7f89ab1a6eb409afe0654c8fdc2f·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 297 | » » ··········</span><span·class="p"·data-group-id="7 | 297 | » » ··········</span><span·class="p"·data-group-id="7661926786-11">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661926786-12">[</span><span·class="ss">'chacha20-poly1305@openssh.com'</span><span·class="p"·data-group-id="76619267[·...·truncated·by·diffoscope;·len:·56,·SHA:·ffe3e1f190498fa91decfb05320ba228594ff99c5fc204bfadbc5aba4d79e82f·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 298 | » » » ··</span><span·class="p"·data-group-id="7 | 298 | » » » ··</span><span·class="p"·data-group-id="7661926786-13">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661926786-14">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p"·data-group-id="7661926786-14">]</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·95335efb5860d6bf825deb54c2bbffe5d23f8287efd357413b787848e89ce5e3·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 299 | » » » ··</span><span·class="p"·data-group-id="7 | 299 | » » » ··</span><span·class="p"·data-group-id="7661926786-15">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7661926786-16">[</span><span·class="ss">none</span><span·class="p"·data-group-id="7661926786-16">]</span><span·class="p"[·...·truncated·by·diffoscope;·len:·26,·SHA:·7768e70e5f9833640d70319656e690f81b8a2352f803a4d39e0c2b038027cdee·...·]-15">}</span><span·class="w"> |
| 300 | » » » ··</span><span·class="p"·data-group-id="7 | 300 | » » » ··</span><span·class="p"·data-group-id="7661926786-6">]</span><span·class="p"·data-group-id="7661926786-5">}</span><span·class="w"> |
| 301 | » » » ·</span><span·class="p"·data-group-id="7 | 301 | » » » ·</span><span·class="p"·data-group-id="7661926786-4">]</span><span·class="p"·data-group-id="7661926786-3">)</span><span·class="p">.</span><span·class="w"> |
| 302 | </span><span·class="p"·data-group-id="7 | 302 | </span><span·class="p"·data-group-id="7661926786-17">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.101</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="7661926786-17">}</span><span·class="gp·unselectable"> |
| 303 | 4>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connection_info</span><span·class="p"·data-group-id="7 | 303 | 4>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">connection_info</span><span·class="p"·data-group-id="7661926786-18">(</span><span·class="n">C</span><span·class="p">,</span><span·class="ss">algorithms</span><span·class="p"·data-group-id="7661926786-18">)</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="p"·data-group-id="7 | 304 | </span><span·class="p"·data-group-id="7661926786-19">{</span><span·class="ss">algorithms</span><span·class="p">,</span><span·class="p"·data-group-id="7661926786-20">[</span><span·class="p"·data-group-id="7661926786-21">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·76,·SHA:·1302bd1617e01e1e5cd9497c1ce8cb3b488a29c3ceaf2fc51e2f86451b02b400·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 305 | ·············</span><span·class="p"·data-group-id="7 | 305 | ·············</span><span·class="p"·data-group-id="7661926786-22">{</span><span·class="ss">hkey</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id="7661926786-22">}</span><span·class="p">,</span><span·class="w"> |
| 306 | ·············</span><span·class="p"·data-group-id="7 | 306 | ·············</span><span·class="p"·data-group-id="7661926786-23">{</span><span·class="ss">send_mac</span><span·class="p">,</span><span·class="ss">'chacha20-poly1305@openssh.com'</span><span·class="p"·data-group-id="7661926786-23">}</span><span·class="p">,</span><span·class="w"> |
| 307 | ·············</span><span·class="p"·data-group-id="7 | 307 | ·············</span><span·class="p"·data-group-id="7661926786-24">{</span><span·class="ss">recv_mac</span><span·class="p">,</span><span·class="ss">'chacha20-poly1305@openssh.com'</span><span·class="p"·data-group-id="7661926786-24">}</span><span·class="p">,</span><span·class="w"> |
| 308 | ·············</span><span·class="p"·data-group-id="7 | 308 | ·············</span><span·class="p"·data-group-id="7661926786-25">{</span><span·class="ss">encrypt</span><span·class="p">,</span><span·class="ss">'chacha20-poly1305@openssh.com'</span><span·class="p"·data-group-id="7661926786-25">}</span><span·class="p">,</span><span·class="w"> |
| 309 | ·············</span><span·class="p"·data-group-id="7 | 309 | ·············</span><span·class="p"·data-group-id="7661926786-26">{</span><span·class="ss">decrypt</span><span·class="p">,</span><span·class="ss">'chacha20-poly1305@openssh.com'</span><span·class="p"·data-group-id="7661926786-26">}</span><span·class="p">,</span><span·class="w"> |
| 310 | ·············</span><span·class="p"·data-group-id="7 | 310 | ·············</span><span·class="p"·data-group-id="7661926786-27">{</span><span·class="ss">compress</span><span·class="p">,</span><span·class="ss">none</span><span·class="p"·data-group-id="7661926786-27">}</span><span·class="p">,</span><span·class="w"> |
| 311 | ·············</span><span·class="p"·data-group-id="7 | 311 | ·············</span><span·class="p"·data-group-id="7661926786-28">{</span><span·class="ss">decompress</span><span·class="p">,</span><span·class="ss">none</span><span·class="p"·data-group-id="7661926786-28">}</span><span·class="p">,</span><span·class="w"> |
| 312 | ·············</span><span·class="p"·data-group-id="7 | 312 | ·············</span><span·class="p"·data-group-id="7661926786-29">{</span><span·class="ss">send_ext_info</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="7661926786-29">}</span><span·class="p">,</span><span·class="w"> |
| 313 | ·············</span><span·class="p"·data-group-id="7 | 313 | ·············</span><span·class="p"·data-group-id="7661926786-30">{</span><span·class="ss">recv_ext_info</span><span·class="p">,</span><span·class="ss">true</span><span·class="p"·data-group-id="7661926786-30">}</span><span·class="p"·data-group-id="7661926786-20">]</span><span·class="p"·data-group-id="766192[·...·truncated·by·diffoscope;·len:·4,·SHA:·e6d445aff8b38aac050077fbe9a48c3236d6bfcd84f635de9dc64810a856e89f·...·]-19">}</span><span·class="w"> |
| 314 | </span><span·class="mi">5</span><span·class="o">></span></code></pre><p>But·<code·class="inline">'ssh-dss'</code>·is·selected·although·the·call·inserted·<em>only</em> | 314 | </span><span·class="mi">5</span><span·class="o">></span></code></pre><p>But·<code·class="inline">'ssh-dss'</code>·is·selected·although·the·call·inserted·<em>only</em> |
| 315 | <code·class="inline">'ecdsa-sha2-nistp256'</code>·as·acceptable.</p><p>This·example·showed·that·we·could·augment·the·set·of·algorithms·with·a | 315 | <code·class="inline">'ecdsa-sha2-nistp256'</code>·as·acceptable.</p><p>This·example·showed·that·we·could·augment·the·set·of·algorithms·with·a |
| 316 | config-file·without·the·need·to·change·the·actual·call.</p><p>For·demonstration·purposes·we·used·<code·class="inline">prepend</code>·instead·of·<code·class="inline">append</code>.·This·forces | 316 | config-file·without·the·need·to·change·the·actual·call.</p><p>For·demonstration·purposes·we·used·<code·class="inline">prepend</code>·instead·of·<code·class="inline">append</code>.·This·forces |
| 317 | the·negotiation·to·select·<code·class="inline">ssh-dss</code>·since·the·the·full·list·of·public·key | 317 | the·negotiation·to·select·<code·class="inline">ssh-dss</code>·since·the·the·full·list·of·public·key |
| Max diff block lines reached; 744/63310 bytes (1.18%) of diff not shown. | |||
| Offset 166, 37 lines modified | Offset 166, 37 lines modified | ||
| 166 | ··</a> | 166 | ··</a> |
| 167 | ··<span·class="text">The·SSH·app's·mechanism</span> | 167 | ··<span·class="text">The·SSH·app's·mechanism</span> |
| 168 | </h3> | 168 | </h3> |
| 169 | <p>The·set·of·algorithms·that·the·SSH·app·uses·by·default·depends·on·the·algorithms | 169 | <p>The·set·of·algorithms·that·the·SSH·app·uses·by·default·depends·on·the·algorithms |
| 170 | supported·by·the:</p><ul><li><a·href="../../../../lib/crypto-5.5.3/doc/html/crypto.html"><code·class="inline">crypto</code></a>·app,</li><li>The·cryptolib·OTP·is·linked·with,·usually·the·one·the·OS·uses,·probably | 170 | supported·by·the:</p><ul><li><a·href="../../../../lib/crypto-5.5.3/doc/html/crypto.html"><code·class="inline">crypto</code></a>·app,</li><li>The·cryptolib·OTP·is·linked·with,·usually·the·one·the·OS·uses,·probably |
| 171 | OpenSSL,</li><li>and·finally·what·the·SSH·app·implements</li></ul><p>Due·to·this,·it·impossible·to·list·in·documentation·what·algorithms·that·are | 171 | OpenSSL,</li><li>and·finally·what·the·SSH·app·implements</li></ul><p>Due·to·this,·it·impossible·to·list·in·documentation·what·algorithms·that·are |
| 172 | available·in·a·certain·installation.</p><p>There·is·an·important·command·to·list·the·actual·algorithms·and·their·ordering: | 172 | available·in·a·certain·installation.</p><p>There·is·an·important·command·to·list·the·actual·algorithms·and·their·ordering: |
| 173 | <a·href="ssh.html#default_algorithms/0"><code·class="inline">ssh:default_algorithms/0</code></a>.</p><pre·id="example_default_algorithms"><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">0>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">default_algorithms</span><span·class="p"·data-group-id=" | 173 | <a·href="ssh.html#default_algorithms/0"><code·class="inline">ssh:default_algorithms/0</code></a>.</p><pre·id="example_default_algorithms"><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">0>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">default_algorithms</span><span·class="p"·data-group-id="3834972110-1">(</span><span·class="p"·data-group-id="3834972110-1">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="p"·data-group-id=" | 174 | </span><span·class="p"·data-group-id="3834972110-2">[</span><span·class="p"·data-group-id="3834972110-3">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-4">[</span><span·class="ss">'ecdh-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdh-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 175 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> | 175 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> |
| 176 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> | 176 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> |
| 177 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> | 177 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> |
| 178 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> | 178 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> |
| 179 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> | 179 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> |
| 180 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id=" | 180 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id="3834972110-4">]</span><span·class="p"·data-group-id="3834972110-3">}</span><span·class="p">,</span><span·class="w"> |
| 181 | ·</span><span·class="p"·data-group-id=" | 181 | ·</span><span·class="p"·data-group-id="3834972110-5">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-6">[</span><span·class="ss">'ecdsa-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdsa-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 182 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> | 182 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> |
| 183 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id=" | 183 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id="3834972110-6">]</span><span·class="p"·data-group-id="3834972110-5">}</span><span·class="p">,</span><span·class="w"> |
| 184 | ·</span><span·class="p"·data-group-id=" | 184 | ·</span><span·class="p"·data-group-id="3834972110-7">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-8">[</span><span·class="p"·data-group-id="3834972110-9">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·7693dd81abdb1293b8f560f3c579c5d2c346c7cda77e856b18d5540836950c84·...·]-10">[</span><span·class="ss">'aes256-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> |
| 185 | ··························</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> | 185 | ··························</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> |
| 186 | ··························</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id=" | 186 | ··························</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id="3834972110-10">]</span><span·class="p"·data-group-id="3834972110-9">}</span><span·class="p">,</span><span·class="w"> |
| 187 | ··········</span><span·class="p"·data-group-id=" | 187 | ··········</span><span·class="p"·data-group-id="3834972110-11">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-12">[</span><span·class="ss">'aes256-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="w"> |
| 188 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> | 188 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> |
| 189 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id=" | 189 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id="3834972110-12">]</span><span·class="p"·data-group-id="3834972110-11">}</span><span·class="p"·data-group-id="3834972110-8">]</span><span·class="p"·data-group-id="3834972110-7">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ·</span><span·class="p"·data-group-id=" | 190 | ·</span><span·class="p"·data-group-id="3834972110-13">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-14">[</span><span·class="p"·data-group-id="3834972110-15">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·7693dd81abdb1293b8f560f3c579c5d2c346c7cda77e856b18d5540836950c84·...·]-16">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 191 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 191 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="3834972110-16">]</span><span·class="p"·data-group-id="3834972110-15">}</span><span·class="p">,</span><span·class="w"> |
| 192 | ·······</span><span·class="p"·data-group-id=" | 192 | ·······</span><span·class="p"·data-group-id="3834972110-17">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-18">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 193 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 193 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="3834972110-18">]</span><span·class="p"·data-group-id="3834972110-17">}</span><span·class="p"·data-group-id="3834972110-14">]</span><span·class="p"·data-group-id="3834972110-13">}</span><span·class="p">,</span><span·class="w"> |
| 194 | ·</span><span·class="p"·data-group-id="1617285387-19">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="1617285387-20">[</span><span·class="p"·data-group-id="1617285387-21">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="p"·data-group-id="1617285387-22">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="1617285387-22">]</span><span·class="p"·data-group-id="1617285387-21">}</span><span·class="p">,</span><span·class="w"> | ||
| 195 | · | 194 | ·</span><span·class="p"·data-group-id="3834972110-19">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-20">[</span><span·class="p"·data-group-id="3834972110-21">{</span><span·class="ss">client2serv[·...·truncated·by·diffoscope;·len:·389,·SHA:·d95495c31da8dcee8e86ca6a8db9a9a6d25c3e0b874bd36694db6d8d33ab6075·...·] |
| 195 | ···············</span><span·class="p"·data-group-id="3834972110-23">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="3834972110-24">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="3834972110-24">]</span><span·class="p"·data-group-id="3834972110-23">}</span><span·class="p"·data-group-id="3834972110-20">]</span><span·class="p"·data-group-id="3834972110-19">}</span><span·class="p"·data-group-id="3834972110-2">]</span></code></pre><p>To·change·the·algorithm·list,·there·are·two·options·which·can·be·used·in | ||
| 196 | <a·href="ssh.html#connect/3">ssh:connect/2,3,4</a>·and·<a·href="ssh.html#daemon/2">ssh:daemon/2,3</a>.·The | 196 | <a·href="ssh.html#connect/3">ssh:connect/2,3,4</a>·and·<a·href="ssh.html#daemon/2">ssh:daemon/2,3</a>.·The |
| 197 | options·could·of·course·be·used·in·all·other·functions·that·initiates | 197 | options·could·of·course·be·used·in·all·other·functions·that·initiates |
| 198 | connections.</p><p>The·options·are | 198 | connections.</p><p>The·options·are |
| 199 | <a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·and | 199 | <a·href="ssh.html#t:preferred_algorithms_common_option/0">preferred_algorithms</a>·and |
| 200 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>.·The·first·one | 200 | <a·href="ssh.html#t:modify_algorithms_common_option/0">modify_algorithms</a>.·The·first·one |
| 201 | replaces·the·default·set,·while·the·latter·modifies·the·default·set.</p><h2·id="replacing-the-default-set-preferred_algorithms"·class="section-heading"> | 201 | replaces·the·default·set,·while·the·latter·modifies·the·default·set.</p><h2·id="replacing-the-default-set-preferred_algorithms"·class="section-heading"> |
| 202 | ··<a·href="#replacing-the-default-set-preferred_algorithms"·class="hover-link"> | 202 | ··<a·href="#replacing-the-default-set-preferred_algorithms"·class="hover-link"> |
| Offset 211, 264 lines modified | Offset 211, 264 lines modified | ||
| 211 | friends·does.</p><h3·id="example-1"·class="section-heading"> | 211 | friends·does.</p><h3·id="example-1"·class="section-heading"> |
| 212 | ··<a·href="#example-1"·class="hover-link"> | 212 | ··<a·href="#example-1"·class="hover-link"> |
| 213 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 213 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 214 | ··</a> | 214 | ··</a> |
| 215 | ··<span·class="text">Example·1</span> | 215 | ··<span·class="text">Example·1</span> |
| 216 | </h3> | 216 | </h3> |
| 217 | <p>Replace·the·kex·algorithms·list·with·the·single·algorithm | 217 | <p>Replace·the·kex·algorithms·list·with·the·single·algorithm |
| 218 | <code·class="inline">'diffie-hellman-group14-sha256'</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id=" | 218 | <code·class="inline">'diffie-hellman-group14-sha256'</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id="7630383457-1">(</span><span·class="w"> |
| 219 | ···············</span><span·class="p"·data-group-id=" | 219 | ···············</span><span·class="p"·data-group-id="7630383457-2">[</span><span·class="p"·data-group-id="7630383457-3">{</span><span·class="ss">preferred_algorithms</span><span·class="p">,</span><span·class="w"> |
| 220 | ·····················</span><span·class="p"·data-group-id=" | 220 | ·····················</span><span·class="p"·data-group-id="7630383457-4">[</span><span·class="p"·data-group-id="7630383457-5">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7630383457-6">[</span><span·class="ss">'diffie-hellman-group14-sha256&#[·...·truncated·by·diffoscope;·len:·104,·SHA:·7c1cb02069e858bd5b1bbf43f15305f8ac599e9e299cd6ac92ffd341a3222592·...·]-5">}</span><span·class="w"> |
| 221 | ·····················</span><span·class="p"·data-group-id=" | 221 | ·····················</span><span·class="p"·data-group-id="7630383457-4">]</span><span·class="w"> |
| 222 | ················</span><span·class="p"·data-group-id=" | 222 | ················</span><span·class="p"·data-group-id="7630383457-3">}</span><span·class="w"> |
| 223 | ··············</span><span·class="p"·data-group-id=" | 223 | ··············</span><span·class="p"·data-group-id="7630383457-2">]</span><span·class="p"·data-group-id="7630383457-1">)</span><span·class="p">.</span><span·class="w"> |
| 224 | </span><span·class="p"·data-group-id=" | 224 | </span><span·class="p"·data-group-id="7630383457-7">[</span><span·class="p"·data-group-id="7630383457-8">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-9">[</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p[·...·truncated·by·diffoscope;·len:·80,·SHA:·ac7b88ef4d39793a16054a5db2eb1bc671216ad9d8fb3e902a114a91bac8d463·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 225 | ·</span><span·class="p"·data-group-id=" | 225 | ·</span><span·class="p"·data-group-id="7630383457-10">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-11">[</span><span·class="ss">'ecdsa-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdsa-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 226 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> | 226 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> |
| 227 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id=" | 227 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id="7630383457-11">]</span><span·class="p"·data-group-id="7630383457-10">}</span><span·class="p">,</span><span·class="w"> |
| 228 | ·</span><span·class="p"·data-group-id=" | 228 | ·</span><span·class="p"·data-group-id="7630383457-12">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-13">[</span><span·class="p"·data-group-id="7630383457-14">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·31,·SHA:·b993f866f918f4695bcd5989fc28cc579b25213f0c0de539b7a3ed83fb14a87e·...·]-15">[</span><span·class="ss">'aes256-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> |
| 229 | ··························</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> | 229 | ··························</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="w"> |
| 230 | ··························</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id=" | 230 | ··························</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id="7630383457-15">]</span><span·class="p"·data-group-id="7630383457-14">}</span><span·class="p">,</span><span·class="w"> |
| 231 | ··········</span><span·class="p"·data-group-id=" | 231 | ··········</span><span·class="p"·data-group-id="7630383457-16">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-17">[</span><span·class="ss">'aes256-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="w"> |
| 232 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> | 232 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> |
| 233 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id=" | 233 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id="7630383457-17">]</span><span·class="p"·data-group-id="7630383457-16">}</span><span·class="p"·data-group-id="7630383457-13">]</span><span·class="p"·data-group-id="7630383457-12">}</span><span·class="p">,</span><span·class="w"> |
| 234 | ·</span><span·class="p"·data-group-id=" | 234 | ·</span><span·class="p"·data-group-id="7630383457-18">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-19">[</span><span·class="p"·data-group-id="7630383457-20">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·b813cdfdfda05f1b7cd8e047887cb6fcbc504964790d7f8ec6aa607beab66eb5·...·]-21">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 235 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 235 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="7630383457-21">]</span><span·class="p"·data-group-id="7630383457-20">}</span><span·class="p">,</span><span·class="w"> |
| 236 | ·······</span><span·class="p"·data-group-id=" | 236 | ·······</span><span·class="p"·data-group-id="7630383457-22">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-23">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 237 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 237 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="7630383457-23">]</span><span·class="p"·data-group-id="7630383457-22">}</span><span·class="p"·data-group-id="7630383457-19">]</span><span·class="p"·data-group-id="7630383457-18">}</span><span·class="p">,</span><span·class="w"> |
| 238 | ·</span><span·class="p"·data-group-id=" | 238 | ·</span><span·class="p"·data-group-id="7630383457-24">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-25">[</span><span·class="p"·data-group-id="7630383457-26">{</span><span·class="ss">client2server</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·298,·SHA:·a8f7846be73db302bbedbf4c64b4143fd05f0574b9216c56ffa04bcaf1d6a714·...·]-26">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ···············</span><span·class="p"·data-group-id=" | 239 | ···············</span><span·class="p"·data-group-id="7630383457-28">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="7630383457-29">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">[·...·truncated·by·diffoscope;·len:·293,·SHA:·2c199e3b3bdfdd4621cd6ad9590f5c3a9514e35e6d9c7abc491350b193cbbcc9·...·]-7">]</span></code></pre><p>Note·that·the·unmentioned·lists·(<code·class="inline">public_key</code>,·<code·class="inline">cipher</code>,·<code·class="inline">mac</code>·and |
| 240 | <code·class="inline">compression</code>)·are·unchanged.</p><h3·id="example-2"·class="section-heading"> | 240 | <code·class="inline">compression</code>)·are·unchanged.</p><h3·id="example-2"·class="section-heading"> |
| 241 | ··<a·href="#example-2"·class="hover-link"> | 241 | ··<a·href="#example-2"·class="hover-link"> |
| 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 242 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 243 | ··</a> | 243 | ··</a> |
| 244 | ··<span·class="text">Example·2</span> | 244 | ··<span·class="text">Example·2</span> |
| 245 | </h3> | 245 | </h3> |
| 246 | <p>In·the·lists·that·are·divided·in·two·for·the·two·directions·(for·example·<code·class="inline">cipher</code>)·it·is | 246 | <p>In·the·lists·that·are·divided·in·two·for·the·two·directions·(for·example·<code·class="inline">cipher</code>)·it·is |
| 247 | possible·to·change·both·directions·at·once:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id=" | 247 | possible·to·change·both·directions·at·once:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id="8222682538-1">(</span><span·class="w"> |
| 248 | ···············</span><span·class="p"·data-group-id=" | 248 | ···············</span><span·class="p"·data-group-id="8222682538-2">[</span><span·class="p"·data-group-id="8222682538-3">{</span><span·class="ss">preferred_algorithms</span><span·class="p">,</span><span·class="w"> |
| 249 | ·····················</span><span·class="p"·data-group-id=" | 249 | ·····················</span><span·class="p"·data-group-id="8222682538-4">[</span><span·class="p"·data-group-id="8222682538-5">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-6">[</span><span·class="ss">'aes128-ctr'</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·64,·SHA:·d75050c34f910595aed5c76cb0c5141e6d719753678be23694771d38ac08c62f·...·]-5">}</span><span·class="w"> |
| 250 | ·····················</span><span·class="p"·data-group-id=" | 250 | ·····················</span><span·class="p"·data-group-id="8222682538-4">]</span><span·class="w"> |
| 251 | ················</span><span·class="p"·data-group-id=" | 251 | ················</span><span·class="p"·data-group-id="8222682538-3">}</span><span·class="w"> |
| 252 | ··············</span><span·class="p"·data-group-id=" | 252 | ··············</span><span·class="p"·data-group-id="8222682538-2">]</span><span·class="p"·data-group-id="8222682538-1">)</span><span·class="p">.</span><span·class="w"> |
| 253 | </span><span·class="p"·data-group-id=" | 253 | </span><span·class="p"·data-group-id="8222682538-7">[</span><span·class="p"·data-group-id="8222682538-8">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-9">[</span><span·class="ss">'ecdh-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdh-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 254 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> | 254 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> |
| 255 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> | 255 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> |
| 256 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> | 256 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> |
| 257 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> | 257 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> |
| 258 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> | 258 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> |
| 259 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id=" | 259 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id="8222682538-9">]</span><span·class="p"·data-group-id="8222682538-8">}</span><span·class="p">,</span><span·class="w"> |
| 260 | ·</span><span·class="p"·data-group-id=" | 260 | ·</span><span·class="p"·data-group-id="8222682538-10">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-11">[</span><span·class="ss">'ecdsa-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdsa-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 261 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> | 261 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> |
| 262 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id=" | 262 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id="8222682538-11">]</span><span·class="p"·data-group-id="8222682538-10">}</span><span·class="p">,</span><span·class="w"> |
| 263 | ·</span><span·class="p"·data-group-id=" | 263 | ·</span><span·class="p"·data-group-id="8222682538-12">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-13">[</span><span·class="p"·data-group-id="8222682538-14">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·183,·SHA:·a95aa408a7705f916613c2b7cb425844502aea6d17898b8db5b1ec30d6f5d9da·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 264 | ··········</span><span·class="p"·data-group-id=" | 264 | ··········</span><span·class="p"·data-group-id="8222682538-16">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-17">[</span><span·class="ss">'aes128-ctr'</span><span·class="p"·data-group-id="8222682538-17">]</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·129,·SHA:·486ab55a1d399fd38bb955c3f6e9b1988d3b2f3a186a91b7b58a2018eae7854b·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ·</span><span·class="p"·data-group-id=" | 265 | ·</span><span·class="p"·data-group-id="8222682538-18">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-19">[</span><span·class="p"·data-group-id="8222682538-20">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·c8f2bae7f7810f324a7b6e90023b13cc7a7006369ec6c5e7504b45f120004fb6·...·]-21">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 266 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 266 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="8222682538-21">]</span><span·class="p"·data-group-id="8222682538-20">}</span><span·class="p">,</span><span·class="w"> |
| 267 | ·······</span><span·class="p"·data-group-id=" | 267 | ·······</span><span·class="p"·data-group-id="8222682538-22">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-23">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| 268 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id=" | 268 | ·······················</span><span·class="ss">'hmac-sha1'</span><span·class="p"·data-group-id="8222682538-23">]</span><span·class="p"·data-group-id="8222682538-22">}</span><span·class="p"·data-group-id="8222682538-19">]</span><span·class="p"·data-group-id="8222682538-18">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ·</span><span·class="p"·data-group-id=" | 269 | ·</span><span·class="p"·data-group-id="8222682538-24">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-25">[</span><span·class="p"·data-group-id="8222682538-26">{</span><span·class="ss">client2server</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·298,·SHA:·523c8552478242a4b3d6d2006c9c6f79fcf76b88658bb7b88a5fc09d41911cb3·...·]-26">}</span><span·class="p">,</span><span·class="w"> |
| 270 | ···············</span><span·class="p"·data-group-id=" | 270 | ···············</span><span·class="p"·data-group-id="8222682538-28">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="8222682538-29">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">'zlib@openssh.com'</span><span·class="p">[·...·truncated·by·diffoscope;·len:·293,·SHA:·851f5ed48a6e0633610f6fc216213a38be0134a2b9bf7c22e867b6cc3ee14c2e·...·]-7">]</span></code></pre><p>Note·that·both·lists·in·<code·class="inline">cipher</code>·has·been·changed·to·the·provided·value |
| 271 | (<code·class="inline">'aes128-ctr'</code>).</p><h3·id="example-3"·class="section-heading"> | 271 | (<code·class="inline">'aes128-ctr'</code>).</p><h3·id="example-3"·class="section-heading"> |
| 272 | ··<a·href="#example-3"·class="hover-link"> | 272 | ··<a·href="#example-3"·class="hover-link"> |
| 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 273 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 274 | ··</a> | 274 | ··</a> |
| 275 | ··<span·class="text">Example·3</span> | 275 | ··<span·class="text">Example·3</span> |
| 276 | </h3> | 276 | </h3> |
| 277 | <p>In·the·lists·that·are·divided·in·two·for·the·two·directions·(for·example·<code·class="inline">cipher</code>)·it·is | 277 | <p>In·the·lists·that·are·divided·in·two·for·the·two·directions·(for·example·<code·class="inline">cipher</code>)·it·is |
| 278 | possible·to·change·only·one·of·the·directions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id=" | 278 | possible·to·change·only·one·of·the·directions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">chk_algos_opts</span><span·class="p"·data-group-id="7514494798-1">(</span><span·class="w"> |
| 279 | ···············</span><span·class="p"·data-group-id=" | 279 | ···············</span><span·class="p"·data-group-id="7514494798-2">[</span><span·class="p"·data-group-id="7514494798-3">{</span><span·class="ss">preferred_algorithms</span><span·class="p">,</span><span·class="w"> |
| 280 | ·····················</span><span·class="p"·data-group-id=" | 280 | ·····················</span><span·class="p"·data-group-id="7514494798-4">[</span><span·class="p"·data-group-id="7514494798-5">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-6">[</span><span·class="p"·data-group-id="7514494798-7">{</span><span·class="ss">clie[·...·truncated·by·diffoscope;·len:·336,·SHA:·e6c3dad3dac914b5c58163a81435818290ef89cbea4dc8178873f1a9544c99cd·...·]8-5">}</span><span·class="w"> |
| 281 | ·····················</span><span·class="p"·data-group-id=" | 281 | ·····················</span><span·class="p"·data-group-id="7514494798-4">]</span><span·class="w"> |
| 282 | ················</span><span·class="p"·data-group-id=" | 282 | ················</span><span·class="p"·data-group-id="7514494798-3">}</span><span·class="w"> |
| 283 | ··············</span><span·class="p"·data-group-id=" | 283 | ··············</span><span·class="p"·data-group-id="7514494798-2">]</span><span·class="p"·data-group-id="7514494798-1">)</span><span·class="p">.</span><span·class="w"> |
| 284 | </span><span·class="p"·data-group-id=" | 284 | </span><span·class="p"·data-group-id="7514494798-9">[</span><span·class="p"·data-group-id="7514494798-10">{</span><span·class="ss">kex</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-11">[</span><span·class="ss">'ecdh-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdh-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 285 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> | 285 | ·······</span><span·class="ss">'ecdh-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'diffie-hellman-group-exchange-sha256'</span><span·class="p">,</span><span·class="w"> |
| 286 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> | 286 | ·······</span><span·class="ss">'diffie-hellman-group16-sha512'</span><span·class="p">,</span><span·class="w"> |
| 287 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> | 287 | ·······</span><span·class="ss">'diffie-hellman-group18-sha512'</span><span·class="p">,</span><span·class="w"> |
| 288 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> | 288 | ·······</span><span·class="ss">'diffie-hellman-group14-sha256'</span><span·class="p">,</span><span·class="w"> |
| 289 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> | 289 | ·······</span><span·class="ss">'diffie-hellman-group14-sha1'</span><span·class="p">,</span><span·class="w"> |
| 290 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id=" | 290 | ·······</span><span·class="ss">'diffie-hellman-group-exchange-sha1'</span><span·class="p"·data-group-id="7514494798-11">]</span><span·class="p"·data-group-id="7514494798-10">}</span><span·class="p">,</span><span·class="w"> |
| 291 | ·</span><span·class="p"·data-group-id=" | 291 | ·</span><span·class="p"·data-group-id="7514494798-12">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-13">[</span><span·class="ss">'ecdsa-sha2-nistp384'</span><span·class="p">,</span><span·class="ss">'ecdsa-sha2-nistp521'</span><span·class="p">,</span><span·class="w"> |
| 292 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> | 292 | ··············</span><span·class="ss">'ecdsa-sha2-nistp256'</span><span·class="p">,</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span·class="ss">'rsa-sha2-256'</span><span·class="p">,</span><span·class="w"> |
| 293 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id=" | 293 | ··············</span><span·class="ss">'rsa-sha2-512'</span><span·class="p">,</span><span·class="ss">'ssh-dss'</span><span·class="p"·data-group-id="7514494798-13">]</span><span·class="p"·data-group-id="7514494798-12">}</span><span·class="p">,</span><span·class="w"> |
| 294 | ·</span><span·class="p"·data-group-id=" | 294 | ·</span><span·class="p"·data-group-id="7514494798-14">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-15">[</span><span·class="p"·data-group-id="7514494798-16">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·182,·SHA:·85219c698d2906ba3c2f483599427e5d7a3d3b80d3069feff95a9fad44b0a056·...·]8-16">}</span><span·class="p">,</span><span·class="w"> |
| 295 | ··········</span><span·class="p"·data-group-id=" | 295 | ··········</span><span·class="p"·data-group-id="7514494798-18">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-19">[</span><span·class="ss">'aes256-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes256-ctr'</span><span·class="p">,</span><span·class="w"> |
| 296 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> | 296 | ··························</span><span·class="ss">'aes192-ctr'</span><span·class="p">,</span><span·class="ss">'aes128-gcm@openssh.com'</span><span·class="p">,</span><span·class="ss">'aes128-ctr'</span><span·class="p">,</span><span·class="w"> |
| 297 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id=" | 297 | ··························</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·class="p"·data-group-id="7514494798-19">]</span><span·class="p"·data-group-id="7514494798-18">}</span><span·class="p"·data-group-id="7514494798-15">]</span><span·class="p"·data-group-id="7514494798-14">}</span><span·class="p">,</span><span·class="w"> |
| 298 | ·</span><span·class="p"·data-group-id=" | 298 | ·</span><span·class="p"·data-group-id="7514494798-20">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="7514494798-21">[</span><span·class="p"·data-group-id="7514494798-22">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·27,·SHA:·ecc871a82a8ab3478294e6c7fe06a1c1dd3cf42d2e83d29b372d40e841955eb7·...·]8-23">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha2-512'</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 69516/128016 bytes (54.30%) of diff not shown. | |||
| Offset 210, 24 lines modified | Offset 210, 24 lines modified | ||
| 210 | ··<span·class="text">Verifying·the·remote·client·in·a·daemon·(server)</span> | 210 | ··<span·class="text">Verifying·the·remote·client·in·a·daemon·(server)</span> |
| 211 | </h2> | 211 | </h2> |
| 212 | <ul><li><p><strong>Password·checking</strong>·-·The·default·password·checking·is·with·the·list·in·the | 212 | <ul><li><p><strong>Password·checking</strong>·-·The·default·password·checking·is·with·the·list·in·the |
| 213 | <a·href="ssh.html#option-user_passwords">user_passwords</a>·option·in·the·SSH·daemon.·It | 213 | <a·href="ssh.html#option-user_passwords">user_passwords</a>·option·in·the·SSH·daemon.·It |
| 214 | could·be·replaced·with·a·<a·href="ssh.html#option-pwdfun">pwdfun</a>·plugin.·The·arity | 214 | could·be·replaced·with·a·<a·href="ssh.html#option-pwdfun">pwdfun</a>·plugin.·The·arity |
| 215 | four·variant·(<a·href="ssh.html#t:pwdfun_4/0"><code·class="inline">pwdfun_4()</code></a>)·can·also·be·used·for | 215 | four·variant·(<a·href="ssh.html#t:pwdfun_4/0"><code·class="inline">pwdfun_4()</code></a>)·can·also·be·used·for |
| 216 | introducing·delays·after·failed·password·checking·attempts.·Here·is·a·simple | 216 | introducing·delays·after·failed·password·checking·attempts.·Here·is·a·simple |
| 217 | example·of·such·a·pwdfun:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 217 | example·of·such·a·pwdfun:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="5717621686-1">(</span><span·class="n">User</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Password</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">PeerAddress</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·95,·SHA:·2cd0ec4530787c67a78e4e6cda0524a6140100c7cccb95110e7f4f7a8af34991·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 218 | ········</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id=" | 218 | ········</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id="5717621686-2">(</span><span·class="p"·data-group-id="5717621686-3">{</span><span·class="n">User</span><span·class="p">,</span><span·class="n">Password</span><span·class="p"·data-group-id="5717621686-3">}</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·185,·SHA:·aacd75835b94f0aea2b52362d6d61b770f738de3b9658d386062da50cfd1596f·...·]-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 219 | ············</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 219 | ············</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ················</span><span·class="p"·data-group-id=" | 220 | ················</span><span·class="p"·data-group-id="5717621686-5">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p"·data-group-id="5717621686-5">}</span><span·class="p">;</span><span·class="w">·</span><span·class="c1">%·Reset·delay·time</span><span·class="w"> |
| 221 | ············</span><span·class="ss">false</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">State</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 221 | ············</span><span·class="ss">false</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">State</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 222 | ················</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">sleep</span><span·class="p"·data-group-id=" | 222 | ················</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">sleep</span><span·class="p"·data-group-id="5717621686-6">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="5717621686-6">)</span><span·class="p">,</span><span·class="w"> |
| 223 | ················</span><span·class="p"·data-group-id=" | 223 | ················</span><span·class="p"·data-group-id="5717621686-7">{</span><span·class="ss">false</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2000</span><span·class="p"·data-group-id="5717621686-7">}</span><span·class="p">;</span><span·class="w">·</span><span·class="c1">%·Next·delay·is·2000·ms</span><span·class="w"> |
| 224 | ············</span><span·class="ss">false</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_integer</span><span·class="p"·data-group-id=" | 224 | ············</span><span·class="ss">false</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_integer</span><span·class="p"·data-group-id="5717621686-8">(</span><span·class="n">State</span><span·class="p"·data-group-id="5717621686-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 225 | ················</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">sleep</span><span·class="p"·data-group-id=" | 225 | ················</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">sleep</span><span·class="p"·data-group-id="5717621686-9">(</span><span·class="n">State</span><span·class="p"·data-group-id="5717621686-9">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ················</span><span·class="p"·data-group-id=" | 226 | ················</span><span·class="p"·data-group-id="5717621686-10">{</span><span·class="ss">false</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="o">*</span><span·class="n">State</span><span·class="p"·data-group-id="5717621686-10">}</span><span·class="w">·</span><span·class="c1">%·Double·the·delay·for·each·failure</span><span·class="w"> |
| 227 | ········</span><span·class="k">end</span><span·class="w"> | 227 | ········</span><span·class="k">end</span><span·class="w"> |
| 228 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>If·a·public·key·is·used·for·logging·in,·there·is·normally·no·checking·of·the | 228 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>If·a·public·key·is·used·for·logging·in,·there·is·normally·no·checking·of·the |
| 229 | user·name.·It·could·be·enabled·by·setting·the·option | 229 | user·name.·It·could·be·enabled·by·setting·the·option |
| 230 | <a·href="ssh.html#option-pk_check_user"><code·class="inline">pk_check_user</code></a>·to·<code·class="inline">true</code>.·In·that·case·the | 230 | <a·href="ssh.html#option-pk_check_user"><code·class="inline">pk_check_user</code></a>·to·<code·class="inline">true</code>.·In·that·case·the |
| 231 | pwdfun·will·get·the·atom·<code·class="inline">pubkey</code>·in·the·password·argument.</p></li></ul><h2·id="hardening-in-the-cryptographic-area"·class="section-heading"> | 231 | pwdfun·will·get·the·atom·<code·class="inline">pubkey</code>·in·the·password·argument.</p></li></ul><h2·id="hardening-in-the-cryptographic-area"·class="section-heading"> |
| 232 | ··<a·href="#hardening-in-the-cryptographic-area"·class="hover-link"> | 232 | ··<a·href="#hardening-in-the-cryptographic-area"·class="hover-link"> |
| 233 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 233 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 288, 15 lines modified | Offset 288, 15 lines modified | ||
| 288 | ··<span·class="text">The·id·string</span> | 288 | ··<span·class="text">The·id·string</span> |
| 289 | </h3> | 289 | </h3> |
| 290 | <p>One·way·to·reduce·the·risk·of·intrusion·is·to·not·convey·which·software·and | 290 | <p>One·way·to·reduce·the·risk·of·intrusion·is·to·not·convey·which·software·and |
| 291 | which·version·the·intruder·is·connected·to.·This·limits·the·risk·of·an·intruder | 291 | which·version·the·intruder·is·connected·to.·This·limits·the·risk·of·an·intruder |
| 292 | exploiting·known·faults·or·peculiarities·learned·by·reading·the·public·code.</p><p>Each·SSH·client·or·daemon·presents·themselves·to·each·other·with·brand·and | 292 | exploiting·known·faults·or·peculiarities·learned·by·reading·the·public·code.</p><p>Each·SSH·client·or·daemon·presents·themselves·to·each·other·with·brand·and |
| 293 | version.·This·may·look·like</p><pre><code·class="text">SSH-2.0-Erlang/4.10</code></pre><p>or</p><pre><code·class="text">SSH-2.0-OpenSSH_7.6p1·Ubuntu-4ubuntu0.3</code></pre><p>This·brand·and·version·may·be·changed·with·the·option | 293 | version.·This·may·look·like</p><pre><code·class="text">SSH-2.0-Erlang/4.10</code></pre><p>or</p><pre><code·class="text">SSH-2.0-OpenSSH_7.6p1·Ubuntu-4ubuntu0.3</code></pre><p>This·brand·and·version·may·be·changed·with·the·option |
| 294 | <a·href="ssh.html#t:id_string_common_option/0">id_string</a>.·We·start·a·daemon·with·that | 294 | <a·href="ssh.html#t:id_string_common_option/0">id_string</a>.·We·start·a·daemon·with·that |
| 295 | option:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">»</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">daemon</span><span·class="p"·data-group-id=" | 295 | option:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">»</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">daemon</span><span·class="p"·data-group-id="0463870520-1">(</span><span·class="mi">1234</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0463870520-2">[</span><span·class="p"·data-group-id="0463870520-3">{</span><span·class="ss">id_string</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·339,·SHA:·6e95f17bd955f43c80f745f451b904fc2b5bcd231248b12ced95435db62ce866·...·]-1">)</span><span·class="p">.</span></code></pre><p>and·the·daemon·will·present·itself·as:</p><pre><code·class="text">SSH-2.0-hi·there</code></pre><p>It·is·possible·to·replace·the·string·with·one·randomly·generated·for·each |
| 296 | connection·attempt.·See·the·reference·manual·for | 296 | connection·attempt.·See·the·reference·manual·for |
| 297 | <a·href="ssh.html#t:id_string_common_option/0">id_string</a>.</p><h2·id="client-connection-options"·class="section-heading"> | 297 | <a·href="ssh.html#t:id_string_common_option/0">id_string</a>.</p><h2·id="client-connection-options"·class="section-heading"> |
| 298 | ··<a·href="#client-connection-options"·class="hover-link"> | 298 | ··<a·href="#client-connection-options"·class="hover-link"> |
| 299 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 299 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 300 | ··</a> | 300 | ··</a> |
| 301 | ··<span·class="text">Client·connection·options</span> | 301 | ··<span·class="text">Client·connection·options</span> |
| 302 | </h2> | 302 | </h2> |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 268, 15 lines modified | Offset 268, 15 lines modified | ||
| 268 | ······<p·class="built-using"> | 268 | ······<p·class="built-using"> |
| 269 | ········Built·using | 269 | ········Built·using |
| 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 270 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 271 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 272 | ······</p> | 272 | ······</p> |
| 273 | <p>Copyright·©·1996-202 | 273 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 274 | ····</footer> | 274 | ····</footer> |
| 275 | ··</div> | 275 | ··</div> |
| 276 | </main> | 276 | </main> |
| 277 | </div> | 277 | </div> |
| 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 278 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 279 | ··<script> | 279 | ··<script> |
| 280 | ··let·initialized·=·false; | 280 | ··let·initialized·=·false; |
| Offset 3433, 15 lines modified | Offset 3433, 15 lines modified | ||
| 3433 | ······<p·class="built-using"> | 3433 | ······<p·class="built-using"> |
| 3434 | ········Built·using | 3434 | ········Built·using |
| 3435 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3435 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3436 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3436 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3437 | ······</p> | 3437 | ······</p> |
| 3438 | <p>Copyright·©·1996-202 | 3438 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3439 | ····</footer> | 3439 | ····</footer> |
| 3440 | ··</div> | 3440 | ··</div> |
| 3441 | </main> | 3441 | </main> |
| 3442 | </div> | 3442 | </div> |
| 3443 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3443 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3444 | ··<script> | 3444 | ··<script> |
| 3445 | ··let·initialized·=·false; | 3445 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-377AF1D8.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 3369, 22 lines modified | Offset 3369, 22 lines modified | ||
| 3369 | ··········<pre·translate="no"><span·class="attribute">-type</span>·double_algs(AlgType)·::·[{client2server,·[AlgType]}·|·{server2client,·[AlgType]}]·|·[AlgType].</pre> | 3369 | ··········<pre·translate="no"><span·class="attribute">-type</span>·double_algs(AlgType)·::·[{client2server,·[AlgType]}·|·{server2client,·[AlgType]}]·|·[AlgType].</pre> |
| 3370 | ······</div> | 3370 | ······</div> |
| 3371 | <p>List·of·algorithms·to·use·in·the·algorithm·negotiation.·The·default | 3371 | <p>List·of·algorithms·to·use·in·the·algorithm·negotiation.·The·default |
| 3372 | <a·href="#t:algs_list/0"><code·class="inline">algs_list/0</code></a>·can·be·obtained·from·<a·href="#default_algorithms/0"><code·class="inline">default_algorithms/0</code></a>.</p><p>If·an·alg_entry()·is·missing·in·the·algs_list(),·the·default·value·is·used·for | 3372 | <a·href="#t:algs_list/0"><code·class="inline">algs_list/0</code></a>·can·be·obtained·from·<a·href="#default_algorithms/0"><code·class="inline">default_algorithms/0</code></a>.</p><p>If·an·alg_entry()·is·missing·in·the·algs_list(),·the·default·value·is·used·for |
| 3373 | that·entry.</p><p>Here·is·an·example·of·this·option:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ··</span><span·class="p"·data-group-id=" | 3373 | that·entry.</p><p>Here·is·an·example·of·this·option:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">» ··</span><span·class="p"·data-group-id="6303888040-1">{</span><span·class="ss">preferred_algorithms</span><span·class="p">,</span><span·class="w"> |
| 3374 | » ··</span><span·class="p"·data-group-id=" | 3374 | » ··</span><span·class="p"·data-group-id="6303888040-2">[</span><span·class="p"·data-group-id="6303888040-3">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="p"·data-group-id="6303888040-4">[</span><span·class="ss">'ssh-rsa'</span><span·class="p">,</span><span[·...·truncated·by·diffoscope;·len:·130,·SHA:·8ac30af2248b62dbf4f94809b1cecdba5a6beb3c6fbd7731a72a6be952fde90d·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 3375 | » ··</span><span·class="p"·data-group-id=" | 3375 | » ··</span><span·class="p"·data-group-id="6303888040-5">{</span><span·class="ss">cipher</span><span·class="p">,</span><span·class="p"·data-group-id="6303888040-6">[</span><span·class="p"·data-group-id="6303888040-7">{</span><span·class="ss">client2server</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·178,·SHA:·6c5a4835787ac1cc01d46cc98594a65989b234b6030f9066896ede70d071152d·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 3376 | ··········</span><span·class="p"·data-group-id=" | 3376 | ··········</span><span·class="p"·data-group-id="6303888040-9">{</span><span·class="ss">server2client</span><span·class="p">,</span><span·class="p"·data-group-id="6303888040-10">[</span><span·class="ss">'aes128-cbc'</span><span·class="p">,</span><span·class="ss">'3des-cbc'</span><span·cla[·...·truncated·by·diffoscope;·len:·192,·SHA:·221107ef862441bfd7251209b11c8be460e2070dbae54af26547d4a838a715a2·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 3377 | » ··</span><span·class="p"·data-group-id=" | 3377 | » ··</span><span·class="p"·data-group-id="6303888040-11">{</span><span·class="ss">mac</span><span·class="p">,</span><span·class="p"·data-group-id="6303888040-12">[</span><span·class="ss">'hmac-sha2-256'</span><span·class="p">,</span><span·class="ss">'hmac-sha1'</span><span·class="p[·...·truncated·by·diffoscope;·len:·81,·SHA:·137d5296c54fac4b81d1651637d27275391969b80ec3f9d6e416ec15f3529b32·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 3378 | » ··</span><span·class="p"·data-group-id=" | 3378 | » ··</span><span·class="p"·data-group-id="6303888040-13">{</span><span·class="ss">compression</span><span·class="p">,</span><span·class="p"·data-group-id="6303888040-14">[</span><span·class="ss">none</span><span·class="p">,</span><span·class="ss">zlib</span><span·class="p"·data-group-id="630388804[·...·truncated·by·diffoscope;·len:·55,·SHA:·257ae0cd809d1ddb1141dffce6fa3c8720c5da6f106548974eb6b47cb357854c·...·]-13">}</span><span·class="w"> |
| 3379 | » ··</span><span·class="p"·data-group-id=" | 3379 | » ··</span><span·class="p"·data-group-id="6303888040-2">]</span><span·class="w"> |
| 3380 | » ··</span><span·class="p"·data-group-id=" | 3380 | » ··</span><span·class="p"·data-group-id="6303888040-1">}</span></code></pre><p>The·example·specifies·different·algorithms·in·the·two·directions·(client2server |
| 3381 | and·server2client),·for·cipher·but·specifies·the·same·algorithms·for·mac·and | 3381 | and·server2client),·for·cipher·but·specifies·the·same·algorithms·for·mac·and |
| 3382 | compression·in·both·directions.·The·kex·(key·exchange)·is·implicit·but | 3382 | compression·in·both·directions.·The·kex·(key·exchange)·is·implicit·but |
| 3383 | public_key·is·set·explicitly.</p><p>For·background·and·more·examples·see·the | 3383 | public_key·is·set·explicitly.</p><p>For·background·and·more·examples·see·the |
| 3384 | <a·href="configure_algos.html#introduction">User's·Guide</a>.</p><p>If·an·algorithm·name·occurs·more·than·once·in·a·list,·the·behaviour·is | 3384 | <a·href="configure_algos.html#introduction">User's·Guide</a>.</p><p>If·an·algorithm·name·occurs·more·than·once·in·a·list,·the·behaviour·is |
| 3385 | undefined.·The·tags·in·the·property·lists·are·also·assumed·to·occur·at·most·one | 3385 | undefined.·The·tags·in·the·property·lists·are·also·assumed·to·occur·at·most·one |
| 3386 | time.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Changing·the·values·can·make·a·connection·less·secure.·Do·not·change·unless | 3386 | time.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Changing·the·values·can·make·a·connection·less·secure.·Do·not·change·unless |
| 3387 | you·know·exactly·what·you·are·doing.·If·you·do·not·understand·the·values·then | 3387 | you·know·exactly·what·you·are·doing.·If·you·do·not·understand·the·values·then |
| Offset 5105, 29 lines modified | Offset 5105, 29 lines modified | ||
| 5105 | ·································StringOrString·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()].</pre> | 5105 | ·································StringOrString·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()·|·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>()].</pre> |
| 5106 | ······</div> | 5106 | ······</div> |
| 5107 | <p>hostkey_fingerprint([DigestType],·HostKey)·-> | 5107 | <p>hostkey_fingerprint([DigestType],·HostKey)·-> |
| 5108 | [string()]hostkey_fingerprint(DigestType,·HostKey)·->·string()</p><p>Calculates·a·ssh·fingerprint·from·a·public·host·key·as·openssh·does.</p><p>The·algorithm·in·<a·href="#hostkey_fingerprint/1"><code·class="inline">hostkey_fingerprint/1</code></a>·is·md5·to·be | 5108 | [string()]hostkey_fingerprint(DigestType,·HostKey)·->·string()</p><p>Calculates·a·ssh·fingerprint·from·a·public·host·key·as·openssh·does.</p><p>The·algorithm·in·<a·href="#hostkey_fingerprint/1"><code·class="inline">hostkey_fingerprint/1</code></a>·is·md5·to·be |
| 5109 | compatible·with·older·ssh-keygen·commands.·The·string·from·the·second·variant·is | 5109 | compatible·with·older·ssh-keygen·commands.·The·string·from·the·second·variant·is |
| 5110 | prepended·by·the·algorithm·name·in·uppercase·as·in·newer·ssh-keygen·commands.</p><p>Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7 | 5110 | prepended·by·the·algorithm·name·in·uppercase·as·in·newer·ssh-keygen·commands.</p><p>Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7054478840-1">(</span><span·class="n">Key</span><span·class="p"·data-group-id="7054478840-1">)</span><span·class="p">.</span><span·class="w"> |
| 5111 | ·</span><span·class="s">"f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84"</span><span·class="w"> | 5111 | ·</span><span·class="s">"f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84"</span><span·class="w"> |
| 5112 | ·</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7 | 5112 | ·</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7054478840-2">(</span><span·class="nb">md5</span><span·class="p">,</span><span·class="n">Key</span><span·class="p"·data-group-id="7054478840-2">)</span><span·class="p">.</span><span·class="w"> |
| 5113 | ·</span><span·class="s">"MD5:f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84"</span><span·class="w"> | 5113 | ·</span><span·class="s">"MD5:f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84"</span><span·class="w"> |
| 5114 | ·</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7 | 5114 | ·</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7054478840-3">(</span><span·class="ss">sha</span><span·class="p">,</span><span·class="n">Key</span><span·class="p"·data-group-id="7054478840-3">)</span><span·class="p">.</span><span·class="w"> |
| 5115 | ·</span><span·class="s">"SHA1:bSLY/C4QXLDL/Iwmhyg0PGW9UbY"</span><span·class="w"> | 5115 | ·</span><span·class="s">"SHA1:bSLY/C4QXLDL/Iwmhyg0PGW9UbY"</span><span·class="w"> |
| 5116 | ·</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7 | 5116 | ·</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7054478840-4">(</span><span·class="ss">sha256</span><span·class="p">,</span><span·class="n">Key</span><span·class="p"·data-group-id="7054478840-4">)</span><span·class="p">.</span><span·class="w"> |
| 5117 | ·</span><span·class="s">"SHA256:aZGXhabfbf4oxglxltItWeHU7ub3Dc31NcNw2cMJePQ"</span><span·class="w"> | 5117 | ·</span><span·class="s">"SHA256:aZGXhabfbf4oxglxltItWeHU7ub3Dc31NcNw2cMJePQ"</span><span·class="w"> |
| 5118 | ·</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7 | 5118 | ·</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">ssh</span><span·class="p">:</span><span·class="nf">hostkey_fingerprint</span><span·class="p"·data-group-id="7054478840-5">(</span><span·class="p"·data-group-id="7054478840-6">[</span><span·class="ss">sha</span><span·class="p">,</span><span·class="ss">sha256</span><span·class="p"·data-group-id="7054478840-6">]</span><span·class="p">,</span><span·class="n">Key</spa[·...·truncated·by·diffoscope;·len:·43,·SHA:·27a563b68e8793f519e986566ddda8a3dc8594fbc6d33f42efb510fb4119aab1·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 5119 | ·</span><span·class="p"·data-group-id="7 | 5119 | ·</span><span·class="p"·data-group-id="7054478840-7">[</span><span·class="s">"SHA1:bSLY/C4QXLDL/Iwmhyg0PGW9UbY"</span><span·class="p">,</span><span·class="w"> |
| 5120 | ··</span><span·class="s">"SHA256:aZGXhabfbf4oxglxltItWeHU7ub3Dc31NcNw2cMJePQ"</span><span·class="p"·data-group-id="7 | 5120 | ··</span><span·class="s">"SHA256:aZGXhabfbf4oxglxltItWeHU7ub3Dc31NcNw2cMJePQ"</span><span·class="p"·data-group-id="7054478840-7">]</span></code></pre> |
| 5121 | ··</section> | 5121 | ··</section> |
| 5122 | </section> | 5122 | </section> |
| 5123 | <section·class="detail"·id="set_sock_opts/2"> | 5123 | <section·class="detail"·id="set_sock_opts/2"> |
| 5124 | ··<div·class="detail-header"> | 5124 | ··<div·class="detail-header"> |
| 5125 | ····<a·href="#set_sock_opts/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 5125 | ····<a·href="#set_sock_opts/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 5126 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 5126 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 5668, 15 lines modified | Offset 5668, 15 lines modified | ||
| 5668 | ······<p·class="built-using"> | 5668 | ······<p·class="built-using"> |
| 5669 | ········Built·using | 5669 | ········Built·using |
| 5670 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 5670 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 5671 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 5671 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 5672 | ······</p> | 5672 | ······</p> |
| 5673 | <p>Copyright·©·1996-202 | 5673 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 5674 | ····</footer> | 5674 | ····</footer> |
| 5675 | ··</div> | 5675 | ··</div> |
| 5676 | </main> | 5676 | </main> |
| 5677 | </div> | 5677 | </div> |
| 5678 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 5678 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 5679 | ··<script> | 5679 | ··<script> |
| 5680 | ··let·initialized·=·false; | 5680 | ··let·initialized·=·false; |
| Offset 131, 19 lines modified | Offset 131, 19 lines modified | ||
| 131 | <p>Callback·module·for·using·an·SSH·agent·instead·of·the·default·ssh_file·callback.</p><p>This·module·defines·a·callback·handler·for·the·communication·with·an | 131 | <p>Callback·module·for·using·an·SSH·agent·instead·of·the·default·ssh_file·callback.</p><p>This·module·defines·a·callback·handler·for·the·communication·with·an |
| 132 | <a·href="https://tools.ietf.org/html/draft-miller-ssh-agent-02">SSH·Agent</a>·and·can·be | 132 | <a·href="https://tools.ietf.org/html/draft-miller-ssh-agent-02">SSH·Agent</a>·and·can·be |
| 133 | used·to·replace·the·<a·href="ssh_file.html">default·callback</a>.·This·allows·to·issue | 133 | used·to·replace·the·<a·href="ssh_file.html">default·callback</a>.·This·allows·to·issue |
| 134 | signing·requests·to·an·agent·that·stores·SSH·private·keys·to·perform | 134 | signing·requests·to·an·agent·that·stores·SSH·private·keys·to·perform |
| 135 | authentication.</p><p>Ssh_agent·implements·the·<a·href="ssh_client_key_api.html"><code·class="inline">ssh_client_key_api</code></a>,·to·allow·it·to·be·used·by | 135 | authentication.</p><p>Ssh_agent·implements·the·<a·href="ssh_client_key_api.html"><code·class="inline">ssh_client_key_api</code></a>,·to·allow·it·to·be·used·by |
| 136 | setting·the·option·<a·href="ssh.html#t:key_cb_common_option/0"><code·class="inline">key_cb</code></a>·when·starting·a | 136 | setting·the·option·<a·href="ssh.html#t:key_cb_common_option/0"><code·class="inline">key_cb</code></a>·when·starting·a |
| 137 | client·(with·for·example·<a·href="ssh.html#connect/3">ssh:connect</a>, | 137 | client·(with·for·example·<a·href="ssh.html#connect/3">ssh:connect</a>, |
| 138 | <a·href="ssh.html#shell/1">ssh:shell</a>·).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="18 | 138 | <a·href="ssh.html#shell/1">ssh:shell</a>·).</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="0180878023-1">{</span><span·class="ss">key_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0180878023-2">{</span><span·class="ss">ssh_agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·178,·SHA:·c07dfc72b4f556cd6a3f7f311148ca8485eb6399a97c1b47d92d5548301925a1·...·]-1">}</span></code></pre><p>The·agent·communication·is·established·through·a·UNIX·domain·socket.·By·default, |
| 139 | the·socket·path·will·be·fetched·from·the·<code·class="inline">SSH_AUTH_SOCK</code>·environment·variable, | 139 | the·socket·path·will·be·fetched·from·the·<code·class="inline">SSH_AUTH_SOCK</code>·environment·variable, |
| 140 | which·is·the·default·socket·path·in·the·agent·implementation·of | 140 | which·is·the·default·socket·path·in·the·agent·implementation·of |
| 141 | <a·href="http://www.openssh.com">OpenSSH</a>.</p><p><a·href=""·id="SOCKET_PATH"></a>·In·order·to·set·a·different·socket·path·the·<code·class="inline">socket_path</code> | 141 | <a·href="http://www.openssh.com">OpenSSH</a>.</p><p><a·href=""·id="SOCKET_PATH"></a>·In·order·to·set·a·different·socket·path·the·<code·class="inline">socket_path</code> |
| 142 | option·can·be·set.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id=" | 142 | option·can·be·set.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="8914442408-1">{</span><span·class="ss">key_cb</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8914442408-2">{</span><span·class="ss">ssh_agent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·400,·SHA:·9bde5af2a61637efe71eb7f43ec8a8eea5e72f2f1c447afebb45f34fd1e1a806·...·]-1">}</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·functions·are·<em>Callbacks</em>·for·the·SSH·app.·They·are·not·intended·to·be |
| 143 | called·from·the·user's·code!</p></section> | 143 | called·from·the·user's·code!</p></section> |
| 144 | ····</section> | 144 | ····</section> |
| 145 | </div> | 145 | </div> |
| 146 | ··<section·id="summary"·class="details-list"> | 146 | ··<section·id="summary"·class="details-list"> |
| 147 | ····<h1·class="section-heading"> | 147 | ····<h1·class="section-heading"> |
| Offset 547, 15 lines modified | Offset 547, 15 lines modified | ||
| 547 | ······<p·class="built-using"> | 547 | ······<p·class="built-using"> |
| 548 | ········Built·using | 548 | ········Built·using |
| 549 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 549 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 550 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 550 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 551 | ······</p> | 551 | ······</p> |
| 552 | <p>Copyright·©·1996-202 | 552 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 553 | ····</footer> | 553 | ····</footer> |
| 554 | ··</div> | 554 | ··</div> |
| 555 | </main> | 555 | </main> |
| 556 | </div> | 556 | </div> |
| 557 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 557 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 558 | ··<script> | 558 | ··<script> |
| 559 | ··let·initialized·=·false; | 559 | ··let·initialized·=·false; |
| Offset 347, 15 lines modified | Offset 347, 15 lines modified | ||
| 347 | ······<p·class="built-using"> | 347 | ······<p·class="built-using"> |
| 348 | ········Built·using | 348 | ········Built·using |
| 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 351 | ······</p> | 351 | ······</p> |
| 352 | <p>Copyright·©·1996-202 | 352 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 353 | ····</footer> | 353 | ····</footer> |
| 354 | ··</div> | 354 | ··</div> |
| 355 | </main> | 355 | </main> |
| 356 | </div> | 356 | </div> |
| 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 358 | ··<script> | 358 | ··<script> |
| 359 | ··let·initialized·=·false; | 359 | ··let·initialized·=·false; |
| Offset 956, 15 lines modified | Offset 956, 15 lines modified | ||
| 956 | ······<p·class="built-using"> | 956 | ······<p·class="built-using"> |
| 957 | ········Built·using | 957 | ········Built·using |
| 958 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 958 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 959 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 959 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 960 | ······</p> | 960 | ······</p> |
| 961 | <p>Copyright·©·1996-202 | 961 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 962 | ····</footer> | 962 | ····</footer> |
| 963 | ··</div> | 963 | ··</div> |
| 964 | </main> | 964 | </main> |
| 965 | </div> | 965 | </div> |
| 966 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 966 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 967 | ··<script> | 967 | ··<script> |
| 968 | ··let·initialized·=·false; | 968 | ··let·initialized·=·false; |
| Offset 523, 15 lines modified | Offset 523, 15 lines modified | ||
| 523 | ······<p·class="built-using"> | 523 | ······<p·class="built-using"> |
| 524 | ········Built·using | 524 | ········Built·using |
| 525 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 525 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 526 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 526 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 527 | ······</p> | 527 | ······</p> |
| 528 | <p>Copyright·©·1996-202 | 528 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 529 | ····</footer> | 529 | ····</footer> |
| 530 | ··</div> | 530 | ··</div> |
| 531 | </main> | 531 | </main> |
| 532 | </div> | 532 | </div> |
| 533 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 533 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 534 | ··<script> | 534 | ··<script> |
| 535 | ··let·initialized·=·false; | 535 | ··let·initialized·=·false; |
| Offset 1937, 15 lines modified | Offset 1937, 15 lines modified | ||
| 1937 | ······<p·class="built-using"> | 1937 | ······<p·class="built-using"> |
| 1938 | ········Built·using | 1938 | ········Built·using |
| 1939 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1939 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1940 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1940 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1941 | ······</p> | 1941 | ······</p> |
| 1942 | <p>Copyright·©·1996-202 | 1942 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1943 | ····</footer> | 1943 | ····</footer> |
| 1944 | ··</div> | 1944 | ··</div> |
| 1945 | </main> | 1945 | </main> |
| 1946 | </div> | 1946 | </div> |
| 1947 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1947 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1948 | ··<script> | 1948 | ··<script> |
| 1949 | ··let·initialized·=·false; | 1949 | ··let·initialized·=·false; |
| Offset 1002, 15 lines modified | Offset 1002, 15 lines modified | ||
| 1002 | ······<p·class="built-using"> | 1002 | ······<p·class="built-using"> |
| 1003 | ········Built·using | 1003 | ········Built·using |
| 1004 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1004 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1005 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1005 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1006 | ······</p> | 1006 | ······</p> |
| 1007 | <p>Copyright·©·1996-202 | 1007 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1008 | ····</footer> | 1008 | ····</footer> |
| 1009 | ··</div> | 1009 | ··</div> |
| 1010 | </main> | 1010 | </main> |
| 1011 | </div> | 1011 | </div> |
| 1012 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1012 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1013 | ··<script> | 1013 | ··<script> |
| 1014 | ··let·initialized·=·false; | 1014 | ··let·initialized·=·false; |
| Offset 375, 15 lines modified | Offset 375, 15 lines modified | ||
| 375 | ······<p·class="built-using"> | 375 | ······<p·class="built-using"> |
| 376 | ········Built·using | 376 | ········Built·using |
| 377 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 377 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 378 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 378 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 379 | ······</p> | 379 | ······</p> |
| 380 | <p>Copyright·©·1996-202 | 380 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 381 | ····</footer> | 381 | ····</footer> |
| 382 | ··</div> | 382 | ··</div> |
| 383 | </main> | 383 | </main> |
| 384 | </div> | 384 | </div> |
| 385 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 385 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 386 | ··<script> | 386 | ··<script> |
| 387 | ··let·initialized·=·false; | 387 | ··let·initialized·=·false; |
| Offset 321, 15 lines modified | Offset 321, 15 lines modified | ||
| 321 | ······<p·class="built-using"> | 321 | ······<p·class="built-using"> |
| 322 | ········Built·using | 322 | ········Built·using |
| 323 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 323 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 324 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 324 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 325 | ······</p> | 325 | ······</p> |
| 326 | <p>Copyright·©·1996-202 | 326 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 327 | ····</footer> | 327 | ····</footer> |
| 328 | ··</div> | 328 | ··</div> |
| 329 | </main> | 329 | </main> |
| 330 | </div> | 330 | </div> |
| 331 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 331 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 332 | ··<script> | 332 | ··<script> |
| 333 | ··let·initialized·=·false; | 333 | ··let·initialized·=·false; |
| Offset 2794, 15 lines modified | Offset 2794, 15 lines modified | ||
| 2794 | ······<p·class="built-using"> | 2794 | ······<p·class="built-using"> |
| 2795 | ········Built·using | 2795 | ········Built·using |
| 2796 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2796 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2797 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2797 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2798 | ······</p> | 2798 | ······</p> |
| 2799 | <p>Copyright·©·1996-202 | 2799 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2800 | ····</footer> | 2800 | ····</footer> |
| 2801 | ··</div> | 2801 | ··</div> |
| 2802 | </main> | 2802 | </main> |
| 2803 | </div> | 2803 | </div> |
| 2804 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2804 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2805 | ··<script> | 2805 | ··<script> |
| 2806 | ··let·initialized·=·false; | 2806 | ··let·initialized·=·false; |
| Offset 238, 15 lines modified | Offset 238, 15 lines modified | ||
| 238 | ······<p·class="built-using"> | 238 | ······<p·class="built-using"> |
| 239 | ········Built·using | 239 | ········Built·using |
| 240 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 240 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 241 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 241 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 242 | ······</p> | 242 | ······</p> |
| 243 | <p>Copyright·©·1996-202 | 243 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 244 | ····</footer> | 244 | ····</footer> |
| 245 | ··</div> | 245 | ··</div> |
| 246 | </main> | 246 | </main> |
| 247 | </div> | 247 | </div> |
| 248 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 248 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 249 | ··<script> | 249 | ··<script> |
| 250 | ··let·initialized·=·false; | 250 | ··let·initialized·=·false; |
| Offset 243, 15 lines modified | Offset 243, 15 lines modified | ||
| 243 | ······<p·class="built-using"> | 243 | ······<p·class="built-using"> |
| 244 | ········Built·using | 244 | ········Built·using |
| 245 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 245 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 246 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 246 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 247 | ······</p> | 247 | ······</p> |
| 248 | <p>Copyright·©·1996-202 | 248 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 249 | ····</footer> | 249 | ····</footer> |
| 250 | ··</div> | 250 | ··</div> |
| 251 | </main> | 251 | </main> |
| 252 | </div> | 252 | </div> |
| 253 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 253 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 254 | ··<script> | 254 | ··<script> |
| 255 | ··let·initialized·=·false; | 255 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 209, 15 lines modified | Offset 209, 15 lines modified | ||
| 209 | ······<p·class="built-using"> | 209 | ······<p·class="built-using"> |
| 210 | ········Built·using | 210 | ········Built·using |
| 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 211 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 212 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 213 | ······</p> | 213 | ······</p> |
| 214 | <p>Copyright·©·1996-202 | 214 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 215 | ····</footer> | 215 | ····</footer> |
| 216 | ··</div> | 216 | ··</div> |
| 217 | </main> | 217 | </main> |
| 218 | </div> | 218 | </div> |
| 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 219 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 220 | ··<script> | 220 | ··<script> |
| 221 | ··let·initialized·=·false; | 221 | ··let·initialized·=·false; |
| Offset 3565, 15 lines modified | Offset 3565, 15 lines modified | ||
| 3565 | ······<p·class="built-using"> | 3565 | ······<p·class="built-using"> |
| 3566 | ········Built·using | 3566 | ········Built·using |
| 3567 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3567 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3568 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3568 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3569 | ······</p> | 3569 | ······</p> |
| 3570 | <p>Copyright·©·1996-202 | 3570 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3571 | ····</footer> | 3571 | ····</footer> |
| 3572 | ··</div> | 3572 | ··</div> |
| 3573 | </main> | 3573 | </main> |
| 3574 | </div> | 3574 | </div> |
| 3575 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3575 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3576 | ··<script> | 3576 | ··<script> |
| 3577 | ··let·initialized·=·false; | 3577 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 127, 17 lines modified | Offset 127, 17 lines modified | ||
| 127 | ··</h1> | 127 | ··</h1> |
| 128 | ····<section·id="moduledoc"> | 128 | ····<section·id="moduledoc"> |
| 129 | <p>Interface·functions·for·TLS·(Transport·Layer·Security) | 129 | <p>Interface·functions·for·TLS·(Transport·Layer·Security) |
| 130 | and·DTLS·(Datagram·Transport·Layer·Security).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·application's·name·is·still·SSL·because·the·first·versions·of·the | 130 | and·DTLS·(Datagram·Transport·Layer·Security).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·application's·name·is·still·SSL·because·the·first·versions·of·the |
| 131 | TLS·protocol·were·named·SSL·(Secure·Socket·Layer).·However,·no·version | 131 | TLS·protocol·were·named·SSL·(Secure·Socket·Layer).·However,·no·version |
| 132 | of·the·old·SSL·protocol·is·supported·by·this·application.</p></section><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ssl</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="7813942476-1">(</span><span·class="p"·data-group-id="7813942476-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ssl</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="7813942476-2">(</span><span·class="s">"google.com"</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">443</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7813942476-3">[</span><span·class="p"·data-group-id="7813942476-4">{</span><span·class="ss">verify</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">verify_peer</span><span·class="p"·data-group-id="7813942476-4">}</span><span·class="p">,</span><span·class="w"> | ||
| 133 | ····</span><span·class="p"·data-group-id="7813942476-5">{</span><span·class="ss">cacerts</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">public_key</span><span·class="p">:</span><span·class="nf">cacerts_get</span><span·class="p"·data-group-id="7813942476-6">(</span><span·class="p"·data-group-id="7813942476-6">)</span><span·class="p"·data-group-id="7813942476-5">}</span><span·class="p"·data-group-id="7813942476-3">]</span><span·class="p"·data-group-id="7813942476-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 134 | 132 | of·the·old·SSL·protocol·is·supported·by·this·application.</p></section><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ssl</span><span·class="p">:</span><span·class="nf">start</span[·...·truncated·by·diffoscope;·len:·770,·SHA:·5e41756732269eb2f17b0a036a8e8e10788493591787f97648bbcedd80bd9ba6·...·] | |
| 133 | ····</span><span·class="p"·data-group-id="6595447496-5">{</span><span·class="ss">cacerts</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">public_key</span><span·class="p">:</span><span·class="nf">cacerts_get</span><span·class="p"·data-group-id="6595447496-6">(</span><span·class="p"·data-group-id="6595447496-6">)</span><span·class="p"·data-group-id="6595447496-5">}</span><span·class="p"·data-group-id="6595447496-3">]</span><span·class="p"·data-group-id="6595447496-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 134 | </span><span·class="p"·data-group-id="6595447496-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="6595447496-8">{</span><span·class="ss">sslsocket</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6595447496-9">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="6595447496-9">]</span><span·class="p"·data-group-id="6595447496-8">}</span><span·class="p"·data-group-id="6595447496-7">}</span></code></pre><p>See·<a·href="using_ssl.html">Examples</a>·for·detailed·usage·and·more·examples·of | ||
| 135 | this·API.</p><p>Special·Erlang·node·configuration·for·the·application·can·be·found·in | 135 | this·API.</p><p>Special·Erlang·node·configuration·for·the·application·can·be·found·in |
| 136 | <a·href="ssl_app.html">SSL·Application</a>.</p> | 136 | <a·href="ssl_app.html">SSL·Application</a>.</p> |
| 137 | ····</section> | 137 | ····</section> |
| 138 | </div> | 138 | </div> |
| 139 | ··<section·id="summary"·class="details-list"> | 139 | ··<section·id="summary"·class="details-list"> |
| Offset 2487, 34 lines modified | Offset 2487, 34 lines modified | ||
| 2487 | from·the·cipher·suite.</p><p>In·TLS-1.2·a·somewhat·more·explicit·negotiation·is·made·possible·using·a·list·of | 2487 | from·the·cipher·suite.</p><p>In·TLS-1.2·a·somewhat·more·explicit·negotiation·is·made·possible·using·a·list·of |
| 2488 | <code·class="inline">{HashAlgo,·SignAlgo}</code>·tuples.</p><p>In·TLS-1.3,·these·algorithm·pairs·are·replaced·by·<a·href="#t:sign_scheme/0">signature | 2488 | <code·class="inline">{HashAlgo,·SignAlgo}</code>·tuples.</p><p>In·TLS-1.3,·these·algorithm·pairs·are·replaced·by·<a·href="#t:sign_scheme/0">signature |
| 2489 | schemes</a>·that·are·completely·decoupled·from·the | 2489 | schemes</a>·that·are·completely·decoupled·from·the |
| 2490 | cipher·suite.</p><p>Signature·algorithms·used·for·certificates·can·be·overridden·by·the | 2490 | cipher·suite.</p><p>Signature·algorithms·used·for·certificates·can·be·overridden·by·the |
| 2491 | <a·href="#t:sign_scheme/0">signature·schemes</a>·supplied·by·the | 2491 | <a·href="#t:sign_scheme/0">signature·schemes</a>·supplied·by·the |
| 2492 | <code·class="inline">signature_algs_cert</code>·option.</p><p>The·TLS-1.2·default·is·<code·class="inline">Default_TLS_12_Alg_Pairs</code>·interleaved·with | 2492 | <code·class="inline">signature_algs_cert</code>·option.</p><p>The·TLS-1.2·default·is·<code·class="inline">Default_TLS_12_Alg_Pairs</code>·interleaved·with |
| 2493 | <code·class="inline">rsa_pss_schemes</code>·since·ssl-11.0·(Erlang/OTP·25).·<code·class="inline">pss_pss</code>·is | 2493 | <code·class="inline">rsa_pss_schemes</code>·since·ssl-11.0·(Erlang/OTP·25).·<code·class="inline">pss_pss</code>·is |
| 2494 | preferred·over·<code·class="inline">pss_rsae</code>,·which·in·turn·is·preferred·over·<code·class="inline">rsa</code>.</p><p>The·list·for·<code·class="inline">Default_TLS_12_Alg_Pairs</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 2494 | preferred·over·<code·class="inline">pss_rsae</code>,·which·in·turn·is·preferred·over·<code·class="inline">rsa</code>.</p><p>The·list·for·<code·class="inline">Default_TLS_12_Alg_Pairs</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8295309804-1">[</span><span·class="w"> |
| 2495 | </span><span·class="p"·data-group-id=" | 2495 | </span><span·class="p"·data-group-id="8295309804-2">{</span><span·class="ss">sha512</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ecdsa</span><span·class="p"·data-group-id="8295309804-2">}</span><span·class="p">,</span><span·class="w"> |
| 2496 | </span><span·class="p"·data-group-id=" | 2496 | </span><span·class="p"·data-group-id="8295309804-3">{</span><span·class="ss">sha512</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">rsa</span><span·class="p"·data-group-id="8295309804-3">}</span><span·class="p">,</span><span·class="w"> |
| 2497 | </span><span·class="p"·data-group-id=" | 2497 | </span><span·class="p"·data-group-id="8295309804-4">{</span><span·class="ss">sha384</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ecdsa</span><span·class="p"·data-group-id="8295309804-4">}</span><span·class="p">,</span><span·class="w"> |
| 2498 | </span><span·class="p"·data-group-id=" | 2498 | </span><span·class="p"·data-group-id="8295309804-5">{</span><span·class="ss">sha384</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">rsa</span><span·class="p"·data-group-id="8295309804-5">}</span><span·class="p">,</span><span·class="w"> |
| 2499 | </span><span·class="p"·data-group-id=" | 2499 | </span><span·class="p"·data-group-id="8295309804-6">{</span><span·class="ss">sha256</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ecdsa</span><span·class="p"·data-group-id="8295309804-6">}</span><span·class="p">,</span><span·class="w"> |
| 2500 | </span><span·class="p"·data-group-id=" | 2500 | </span><span·class="p"·data-group-id="8295309804-7">{</span><span·class="ss">sha256</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">rsa</span><span·class="p"·data-group-id="8295309804-7">}</span><span·class="w"> |
| 2501 | </span><span·class="p"·data-group-id=" | 2501 | </span><span·class="p"·data-group-id="8295309804-1">]</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Change</h4><ul><li>Support·for·<code·class="inline">{md5,·rsa}</code>·was·removed·from·the·TLS-1.2·default·in |
| 2502 | ssl-8.0·(Erlang/OTP·22).</li><li>Support·for·<code·class="inline">{sha,·_}</code>·(SHA1)·and·<code·class="inline">{sha224,·_}</code>·was·removed | 2502 | ssl-8.0·(Erlang/OTP·22).</li><li>Support·for·<code·class="inline">{sha,·_}</code>·(SHA1)·and·<code·class="inline">{sha224,·_}</code>·was·removed |
| 2503 | from·the·TLS-1.2·default·in·ssl-11.0·(Erlang/OTP·26).</li></ul></section><p>The·list·for·<code·class="inline">rsa_pss_schemes</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 2503 | from·the·TLS-1.2·default·in·ssl-11.0·(Erlang/OTP·26).</li></ul></section><p>The·list·for·<code·class="inline">rsa_pss_schemes</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0763786423-1">[</span><span·class="ss">rsa_pss_pss_sha512</span><span·class="p">,</span><span·class="w"> |
| 2504 | </span><span·class="ss">rsa_pss_pss_sha384</span><span·class="p">,</span><span·class="w"> | 2504 | </span><span·class="ss">rsa_pss_pss_sha384</span><span·class="p">,</span><span·class="w"> |
| 2505 | </span><span·class="ss">rsa_pss_pss_sha256</span><span·class="p">,</span><span·class="w"> | 2505 | </span><span·class="ss">rsa_pss_pss_sha256</span><span·class="p">,</span><span·class="w"> |
| 2506 | </span><span·class="ss">rsa_pss_rsae_sha512</span><span·class="p">,</span><span·class="w"> | 2506 | </span><span·class="ss">rsa_pss_rsae_sha512</span><span·class="p">,</span><span·class="w"> |
| 2507 | </span><span·class="ss">rsa_pss_rsae_sha384</span><span·class="p">,</span><span·class="w"> | 2507 | </span><span·class="ss">rsa_pss_rsae_sha384</span><span·class="p">,</span><span·class="w"> |
| 2508 | </span><span·class="ss">rsa_pss_rsae_sha256</span><span·class="p"·data-group-id=" | 2508 | </span><span·class="ss">rsa_pss_rsae_sha256</span><span·class="p"·data-group-id="0763786423-1">]</span></code></pre><p>The·list·of·<code·class="inline">TLS_13_Legacy_Schemes</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3370118273-1">[</span><span·class="w"> |
| 2509 | </span><span·class="c1">%%·Legacy·algorithms·only·applicable·to·certificate·signatures</span><span·class="w"> | 2509 | </span><span·class="c1">%%·Legacy·algorithms·only·applicable·to·certificate·signatures</span><span·class="w"> |
| 2510 | </span><span·class="ss">rsa_pkcs1_sha512</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha512,·rsa}</span><span·class="w"> | 2510 | </span><span·class="ss">rsa_pkcs1_sha512</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha512,·rsa}</span><span·class="w"> |
| 2511 | </span><span·class="ss">rsa_pkcs1_sha384</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha384,·rsa}</span><span·class="w"> | 2511 | </span><span·class="ss">rsa_pkcs1_sha384</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha384,·rsa}</span><span·class="w"> |
| 2512 | </span><span·class="ss">rsa_pkcs1_sha256</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha256,·rsa}</span><span·class="w"> | 2512 | </span><span·class="ss">rsa_pkcs1_sha256</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%%·Corresponds·to·{sha256,·rsa}</span><span·class="w"> |
| 2513 | </span><span·class="p"·data-group-id=" | 2513 | </span><span·class="p"·data-group-id="3370118273-1">]</span></code></pre><p>The·list·of·<code·class="inline">Default_TLS_13_Schemes</code>·is·defined·as·follows:</p><pre><code·class="text">[ |
| 2514 | %%·EDDSA | 2514 | %%·EDDSA |
| 2515 | eddsa_ed25519, | 2515 | eddsa_ed25519, |
| 2516 | eddsa_ed448 | 2516 | eddsa_ed448 |
| 2517 | %%·ECDSA | 2517 | %%·ECDSA |
| 2518 | ecdsa_secp521r1_sha512, | 2518 | ecdsa_secp521r1_sha512, |
| 2519 | ecdsa_secp384r1_sha384, | 2519 | ecdsa_secp384r1_sha384, |
| Offset 2592, 16 lines modified | Offset 2592, 16 lines modified | ||
| 2592 | ······<div·class="specs"> | 2592 | ······<div·class="specs"> |
| 2593 | ··········<pre·translate="no"><span·class="attribute">-type</span>·anchor_fun()·::·fun().</pre> | 2593 | ··········<pre·translate="no"><span·class="attribute">-type</span>·anchor_fun()·::·fun().</pre> |
| 2594 | ······</div> | 2594 | ······</div> |
| 2595 | <p>Claim·an·intermediate·CA·in·the·chain·as·trusted.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="9 | 2595 | <p>Claim·an·intermediate·CA·in·the·chain·as·trusted.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="9963939692-1">(</span><span·class="n">Chain</span><span·class="p">:</span><span·class="p">:</span><span·class="p"·data-group-id="9963939692-2">[</span><span·class="nc">public_key</span><span·class="p">:</span><span·class="nf">der_encoded</span><span·class="[·...·truncated·by·diffoscope;·len:·187,·SHA:·cdff0b261ec600721157c624d1edde83ad50f2b4b59cf440a1375c7dc05740a4·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 2596 | ······</span><span·class="p"·data-group-id="9 | 2596 | ······</span><span·class="p"·data-group-id="9963939692-4">{</span><span·class="ss">trusted_ca</span><span·class="p">,</span><span·class="w">·</span><span·class="n">DerCert</span><span·class="p">:</span><span·class="p">:</span><span·class="nc">public_key</span><span·class="p">:</span><span·class="nf">[·...·truncated·by·diffoscope;·len:·165,·SHA:·21b0b9832b40ad888b0a39b56611179f245dcfbd71b7791ae67c7e7e311f299e·...·]-4">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">unknown_ca</span><span·class="p">.</span></code></pre><p>TLS·then·uses·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#pkix_path_validation/3"><code·class="inline">public_key:pkix_path_validation/3</code></a>·with·the·selected·CA |
| 2597 | as·the·trusted·anchor·and·verifies·the·rest·of·the·chain.</p> | 2597 | as·the·trusted·anchor·and·verifies·the·rest·of·the·chain.</p> |
| 2598 | ··</section> | 2598 | ··</section> |
| 2599 | </section> | 2599 | </section> |
| 2600 | <section·class="detail"·id="t:cert_key_conf/0"> | 2600 | <section·class="detail"·id="t:cert_key_conf/0"> |
| 2601 | ··<div·class="detail-header"> | 2601 | ··<div·class="detail-header"> |
| 2602 | ····<a·href="#t:cert_key_conf/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 2602 | ····<a·href="#t:cert_key_conf/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| Offset 3023, 15 lines modified | Offset 3023, 15 lines modified | ||
| 3023 | <a·href="#connect/3">connect/3,4</a>·unless·it·is·of·type·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/inet.html#t:ip_address/0"><code·class="inline">inet:ip_address()</code></a>. | 3023 | <a·href="#connect/3">connect/3,4</a>·unless·it·is·of·type·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/inet.html#t:ip_address/0"><code·class="inline">inet:ip_address()</code></a>. |
| 3024 | The·hostname·will·also·be·used·in·the·hostname·verification·of·the·peer | 3024 | The·hostname·will·also·be·used·in·the·hostname·verification·of·the·peer |
| 3025 | certificate·using·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#pkix_verify_hostname/2"><code·class="inline">public_key:pkix_verify_hostname/2</code></a>. | 3025 | certificate·using·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#pkix_verify_hostname/2"><code·class="inline">public_key:pkix_verify_hostname/2</code></a>. |
| 3026 | The·special·value·<code·class="inline">disable</code>·prevents·the·Server·Name·Indication·extension·from | 3026 | The·special·value·<code·class="inline">disable</code>·prevents·the·Server·Name·Indication·extension·from |
| 3027 | being·sent·and·disables·the·hostname·verification·check.</p></li><li><p><strong><code·class="inline">{customize_hostname_check,·HostNameCheckOpts}</code></strong>·-·Customization·option</p><p>Customizes·the·hostname·verification·of·the·peer·certificate,·as·various | 3027 | being·sent·and·disables·the·hostname·verification·check.</p></li><li><p><strong><code·class="inline">{customize_hostname_check,·HostNameCheckOpts}</code></strong>·-·Customization·option</p><p>Customizes·the·hostname·verification·of·the·peer·certificate,·as·various |
| 3028 | protocols·that·use·TLS,·such·as·HTTP·or·LDAP,·may·require·different·approaches.·For | 3028 | protocols·that·use·TLS,·such·as·HTTP·or·LDAP,·may·require·different·approaches.·For |
| 3029 | example,·here·is·how·to·use·standard·hostname·checking·for·HTTPS·implemented·in | 3029 | example,·here·is·how·to·use·standard·hostname·checking·for·HTTPS·implemented·in |
| 3030 | <a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_app.html">Public_Key</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1 | 3030 | <a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_app.html">Public_Key</a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1671965559-1">{</span><span·class="ss">customize_hostname_check</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1671965559-2">[</span><span·class="p"·data-group-id="1671965559-3">{</span><span·class="ss">match_fun</span>[·...·truncated·by·diffoscope;·len:·441,·SHA:·5161e4c9c376debe42d4f4fcf911bea9c4ed358d55479be4f8c5891a5fe86f9c·...·]9-1">}</span></code></pre><p>For·futher·description·of·the·customize·options,·see |
| 3031 | <a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#pkix_verify_hostname/3"><code·class="inline">public_key:pkix_verify_hostname/3</code></a>.</p></li><li><p><strong><code·class="inline">{client_certificate_authorities,·UseCertAuth}</code></strong>·-·Inter-op·hint·option</p><p>If·<code·class="inline">UseCertAuth</code>·is·set·to·<code·class="inline">true</code>,·sends·the·certificate·authorities | 3031 | <a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#pkix_verify_hostname/3"><code·class="inline">public_key:pkix_verify_hostname/3</code></a>.</p></li><li><p><strong><code·class="inline">{client_certificate_authorities,·UseCertAuth}</code></strong>·-·Inter-op·hint·option</p><p>If·<code·class="inline">UseCertAuth</code>·is·set·to·<code·class="inline">true</code>,·sends·the·certificate·authorities |
| 3032 | extension·in·the·TLS-1.3·client·hello.·The·default·is·<code·class="inline">false</code>.·Note | 3032 | extension·in·the·TLS-1.3·client·hello.·The·default·is·<code·class="inline">false</code>.·Note |
| 3033 | that·setting·<code·class="inline">UseCertAuth</code>·to·<code·class="inline">true</code>·can·result·in·a·significant | 3033 | that·setting·<code·class="inline">UseCertAuth</code>·to·<code·class="inline">true</code>·can·result·in·a·significant |
| 3034 | overhead·if·there·exists·many·trusted·CA·certificates.·(Since | 3034 | overhead·if·there·exists·many·trusted·CA·certificates.·(Since |
| 3035 | Erlang/OTP·24.3.)</p></li><li><p><strong><code·class="inline">{stapling,·Stapling}</code></strong>·-·Certificate·revocation·check·option</p><p>If·<code·class="inline">Stapling</code>·is·atom·<code·class="inline">staple</code>·or·a·map,·OCSP·stapling·will·be | 3035 | Erlang/OTP·24.3.)</p></li><li><p><strong><code·class="inline">{stapling,·Stapling}</code></strong>·-·Certificate·revocation·check·option</p><p>If·<code·class="inline">Stapling</code>·is·atom·<code·class="inline">staple</code>·or·a·map,·OCSP·stapling·will·be |
| 3036 | enabled,·meaning·that·an·extension·of·type·"status_request"·will·be | 3036 | enabled,·meaning·that·an·extension·of·type·"status_request"·will·be |
| 3037 | included·in·the·client·hello·to·indicate·the·desire·to·receive | 3037 | included·in·the·client·hello·to·indicate·the·desire·to·receive |
| Offset 3161, 25 lines modified | Offset 3161, 25 lines modified | ||
| 3161 | ··········{early_data,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()}·| | 3161 | ··········{early_data,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()}·| |
| 3162 | ··········{middlebox_comp_mode,·MiddleBoxMode·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}.</pre> | 3162 | ··········{middlebox_comp_mode,·MiddleBoxMode·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()}.</pre> |
| 3163 | ······</div> | 3163 | ······</div> |
| 3164 | <p>Options·only·relevant·for·TLS-1.3.</p><ul><li><p><strong><code·class="inline">{session_tickets,·SessionTickets}</code></strong>·-·Use·of·session·tickets</p><p>Configures·the·session·ticket·functionality.·Allowed·values·are·<code·class="inline">disabled</code>, | 3164 | <p>Options·only·relevant·for·TLS-1.3.</p><ul><li><p><strong><code·class="inline">{session_tickets,·SessionTickets}</code></strong>·-·Use·of·session·tickets</p><p>Configures·the·session·ticket·functionality.·Allowed·values·are·<code·class="inline">disabled</code>, |
| 3165 | <code·class="inline">manual</code>,·and·<code·class="inline">auto</code>.·If·it·is·set·to·<code·class="inline">manual</code>·the·client·will·send·the·ticket | 3165 | <code·class="inline">manual</code>,·and·<code·class="inline">auto</code>.·If·it·is·set·to·<code·class="inline">manual</code>·the·client·will·send·the·ticket |
| 3166 | information·to·user·process·in·a·3-tuple:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 3166 | information·to·user·process·in·a·3-tuple:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8773614749-1">{</span><span·class="ss">ssl</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">session_ticket</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8773614749-2">{</span><span·class="n">SNI<[·...·truncated·by·diffoscope;·len:·181,·SHA:·ffbd85c5f2485ddc16404f09653538269f0bb55e9ef480e20d561be8e50197e9·...·]-1">}</span></code></pre><p>where·<code·class="inline">SNI</code>·is·the·ServerNameIndication·and·<code·class="inline">TicketData</code>·is·the·extended·ticket |
| 3167 | data·that·can·be·used·in·subsequent·session·resumptions.</p><p>If·it·is·set·to·<code·class="inline">auto</code>,·the·client·automatically·handles·received·tickets·and | 3167 | data·that·can·be·used·in·subsequent·session·resumptions.</p><p>If·it·is·set·to·<code·class="inline">auto</code>,·the·client·automatically·handles·received·tickets·and |
| 3168 | tries·to·use·them·when·making·new·TLS·connections·(session·resumption·with | 3168 | tries·to·use·them·when·making·new·TLS·connections·(session·resumption·with |
| 3169 | pre-shared·keys).</p><p>Ticket·lifetime,·the·number·of·tickets·sent·by·the·server,·and·the | 3169 | pre-shared·keys).</p><p>Ticket·lifetime,·the·number·of·tickets·sent·by·the·server,·and·the |
| 3170 | maximum·number·of·tickets·stored·by·the·server·in·stateful·mode·are·configured | 3170 | maximum·number·of·tickets·stored·by·the·server·in·stateful·mode·are·configured |
| 3171 | by·<a·href="ssl_app.html#configuration">application·variables</a>.</p><p>See·also | 3171 | by·<a·href="ssl_app.html#configuration">application·variables</a>.</p><p>See·also |
| 3172 | <a·href="using_ssl.html#session-tickets-and-session-resumption-in-tls-1-3">SSL·User's·Guide,·Session·Tickets·and·Session·Resumption·in·TLS·1.3</a>.</p></li><li><p><strong><code·class="inline">{use_ticket,·Tickets}</code></strong></p><p>Configures·the·session·tickets·to·be·used·for·session·resumption.·It·is·a | 3172 | <a·href="using_ssl.html#session-tickets-and-session-resumption-in-tls-1-3">SSL·User's·Guide,·Session·Tickets·and·Session·Resumption·in·TLS·1.3</a>.</p></li><li><p><strong><code·class="inline">{use_ticket,·Tickets}</code></strong></p><p>Configures·the·session·tickets·to·be·used·for·session·resumption.·It·is·a |
| 3173 | mandatory·option·in·<code·class="inline">manual</code>·mode·(<code·class="inline">{session_tickets,·manual}</code>).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Session·tickets·are·only·sent·to·the·user·if·option·<code·class="inline">session_tickets</code>·is·set·to | 3173 | mandatory·option·in·<code·class="inline">manual</code>·mode·(<code·class="inline">{session_tickets,·manual}</code>).</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Session·tickets·are·only·sent·to·the·user·if·option·<code·class="inline">session_tickets</code>·is·set·to |
| 3174 | <code·class="inline">manual</code></p><p>This·option·is·supported·by·TLS-1.3.·See·also | 3174 | <code·class="inline">manual</code></p><p>This·option·is·supported·by·TLS-1.3.·See·also |
| 3175 | <a·href="using_ssl.html#session-tickets-and-session-resumption-in-tls-1-3">SSL·User's·Guide,·Session·Tickets·and·Session·Resumption·in·TLS·1.3</a>.</p></section></li><li><p><strong><code·class="inline">{early_data,·EarlyData}</code></strong></p><p>Configures·the·early·data·to·be·sent·by·the·client.</p><p>To·verify·that·the·server·has·the·intention·to·process·the·early | 3175 | <a·href="using_ssl.html#session-tickets-and-session-resumption-in-tls-1-3">SSL·User's·Guide,·Session·Tickets·and·Session·Resumption·in·TLS·1.3</a>.</p></section></li><li><p><strong><code·class="inline">{early_data,·EarlyData}</code></strong></p><p>Configures·the·early·data·to·be·sent·by·the·client.</p><p>To·verify·that·the·server·has·the·intention·to·process·the·early |
| 3176 | data,·the·following·tuple·is·sent·to·the·user·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8 | 3176 | data,·the·following·tuple·is·sent·to·the·user·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8202924159-1">{</span><span·class="ss">ssl</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SslSocket</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8202924159-2">{</span><span·class="ss">early_data[·...·truncated·by·diffoscope;·len:·178,·SHA:·284b7c16b775e8c921bc609bd621ed3c89bc152b2f851d408e575409f303879a·...·]-1">}</span></code></pre><p>where·<code·class="inline">Result</code>·is·either·<code·class="inline">accepted</code>·or·<code·class="inline">rejected</code>.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>It·is·the·responsibility·of·the·user·to·handle·rejected·<code·class="inline">EarlyData</code>·and·to |
| 3177 | resend·when·appropriate.</p></section></li><li><p><strong><code·class="inline">{middlebox_comp_mode,·MiddleBoxMode}</code></strong></p><p>Configures·the·middlebox·compatibility·mode·for·a·TLS-1.3·connection.</p><p>A·significant·number·of·middleboxes·misbehave·when·a·TLS-1.3 | 3177 | resend·when·appropriate.</p></section></li><li><p><strong><code·class="inline">{middlebox_comp_mode,·MiddleBoxMode}</code></strong></p><p>Configures·the·middlebox·compatibility·mode·for·a·TLS-1.3·connection.</p><p>A·significant·number·of·middleboxes·misbehave·when·a·TLS-1.3 |
| 3178 | connection·is·negotiated.·Implementations·can·increase·the·chance·of | 3178 | connection·is·negotiated.·Implementations·can·increase·the·chance·of |
| 3179 | making·connections·through·those·middleboxes·by·adapting·the·TLS-1.3 | 3179 | making·connections·through·those·middleboxes·by·adapting·the·TLS-1.3 |
| 3180 | handshake·to·resemble·that·of·a·TLS-1.2·handshake.</p><p>The·middlebox·compatibility·mode·is·enabled·(<code·class="inline">true</code>)·by·default.</p></li></ul> | 3180 | handshake·to·resemble·that·of·a·TLS-1.2·handshake.</p><p>The·middlebox·compatibility·mode·is·enabled·(<code·class="inline">true</code>)·by·default.</p></li></ul> |
| 3181 | ··</section> | 3181 | ··</section> |
| 3182 | </section> | 3182 | </section> |
| Offset 3606, 28 lines modified | Offset 3606, 28 lines modified | ||
| 3606 | and·key·options.·For·examples,·see·the·<a·href="using_ssl.html">User's·Guide</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">eddsa</code>·certificates·are·only·supported·by·TLS-1.3·implementations·that·do·not·support·<code·class="inline">dsa</code> | 3606 | and·key·options.·For·examples,·see·the·<a·href="using_ssl.html">User's·Guide</a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><code·class="inline">eddsa</code>·certificates·are·only·supported·by·TLS-1.3·implementations·that·do·not·support·<code·class="inline">dsa</code> |
| 3607 | certificates.·<code·class="inline">rsa_pss_pss</code>·(RSA·certificates·using·Probabilistic·Signature | 3607 | certificates.·<code·class="inline">rsa_pss_pss</code>·(RSA·certificates·using·Probabilistic·Signature |
| 3608 | Scheme)·are·supported·in·TLS-1.2·and·TLS-1.3,·but·some·TLS-1.2·implementations | 3608 | Scheme)·are·supported·in·TLS-1.2·and·TLS-1.3,·but·some·TLS-1.2·implementations |
| 3609 | do·not·support·<code·class="inline">rsa_pss_pss</code>.</p></section></li><li><p><strong><code·class="inline">{depth,·AllowedCertChainLen}</code></strong>·-·Limits·the·accepted·number·of·certificates·in·the·certificate·chain.</p><p>Maximum·number·of·non-self-issued·intermediate·certificates·that·can·follow·the | 3609 | do·not·support·<code·class="inline">rsa_pss_pss</code>.</p></section></li><li><p><strong><code·class="inline">{depth,·AllowedCertChainLen}</code></strong>·-·Limits·the·accepted·number·of·certificates·in·the·certificate·chain.</p><p>Maximum·number·of·non-self-issued·intermediate·certificates·that·can·follow·the |
| 3610 | peer·certificate·in·a·valid·certification·path.·So,·if·depth·is·0·the·PEER·must | 3610 | peer·certificate·in·a·valid·certification·path.·So,·if·depth·is·0·the·PEER·must |
| 3611 | be·signed·by·the·trusted·ROOT-CA·directly;·if·1·the·path·can·be·PEER,·CA, | 3611 | be·signed·by·the·trusted·ROOT-CA·directly;·if·1·the·path·can·be·PEER,·CA, |
| 3612 | ROOT-CA;·if·2·the·path·can·be·PEER,·CA,·CA,·ROOT-CA,·and·so·on.·The·default | 3612 | ROOT-CA;·if·2·the·path·can·be·PEER,·CA,·CA,·ROOT-CA,·and·so·on.·The·default |
| 3613 | value·is·10.·Used·to·mitigate·DoS·attack·possibilities.</p></li><li><p><strong><code·class="inline">{verify_fun,·Verify}</code></strong>·-·Customize·certificate·path·validation</p><p>The·verification·fun·is·to·be·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 3613 | value·is·10.·Used·to·mitigate·DoS·attack·possibilities.</p></li><li><p><strong><code·class="inline">{verify_fun,·Verify}</code></strong>·-·Customize·certificate·path·validation</p><p>The·verification·fun·is·to·be·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="5633562718-1">(</span><span·class="n">OtpCert</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'OTPCertificate'</span><span·class="p"·data-group-id="56335[·...·truncated·by·diffoscope;·len:·58,·SHA:·860010c15d00b19bf305f1d04c92c9a754de391e6d492bab35296c73462e647a·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 3614 | ····</span><span·class="n">Event</span><span·class="p">,</span><span·class="w">·</span><span·class="n">InitialUserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id=" | 3614 | ····</span><span·class="n">Event</span><span·class="p">,</span><span·class="w">·</span><span·class="n">InitialUserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="5633562718-3">(</span><span·class="p"·data-group-id="5633562718-3">)</span><span·class="p"·data-group-id="5633562718-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 3615 | ··</span><span·class="p"·data-group-id=" | 3615 | ··</span><span·class="p"·data-group-id="5633562718-4">{</span><span·class="ss">valid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">UserState</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><[·...·truncated·by·diffoscope;·len:·146,·SHA:·f2160fe5ab9af8244a1f79fbb53979a8721c3ef2331e3bc51814c0c04c1be73a·...·]-4">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 3616 | ··</span><span·class="p"·data-group-id=" | 3616 | ··</span><span·class="p"·data-group-id="5633562718-6">{</span><span·class="ss">fail</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span[·...·truncated·by·diffoscope;·len:·661,·SHA:·2527dcb810d413bec8657164a491194bcab842320623398a46bcb40648345cf6·...·]-8">}</span><span·class="p">.</span><span·class="w"> |
| 3617 | </span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 3617 | </span><span·class="nf">fun</span><span·class="p"·data-group-id="5633562718-10">(</span><span·class="n">OtpCert</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">'OTPCertificate'</span><span·class="p"·data-group-id="5633[·...·truncated·by·diffoscope;·len:·435,·SHA:·17575642f6c035f2c868034758d2178d18d6b233781ba7946ff48303f5589006·...·]-12">)</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 55427/94300 bytes (58.78%) of diff not shown. | |||
| Offset 273, 15 lines modified | Offset 273, 15 lines modified | ||
| 273 | ······<p·class="built-using"> | 273 | ······<p·class="built-using"> |
| 274 | ········Built·using | 274 | ········Built·using |
| 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 275 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 276 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 277 | ······</p> | 277 | ······</p> |
| 278 | <p>Copyright·©·1996-202 | 278 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 279 | ····</footer> | 279 | ····</footer> |
| 280 | ··</div> | 280 | ··</div> |
| 281 | </main> | 281 | </main> |
| 282 | </div> | 282 | </div> |
| 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 283 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 284 | ··<script> | 284 | ··<script> |
| 285 | ··let·initialized·=·false; | 285 | ··let·initialized·=·false; |
| Offset 357, 15 lines modified | Offset 357, 15 lines modified | ||
| 357 | ······<p·class="built-using"> | 357 | ······<p·class="built-using"> |
| 358 | ········Built·using | 358 | ········Built·using |
| 359 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 359 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 360 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 360 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 361 | ······</p> | 361 | ······</p> |
| 362 | <p>Copyright·©·1996-202 | 362 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 363 | ····</footer> | 363 | ····</footer> |
| 364 | ··</div> | 364 | ··</div> |
| 365 | </main> | 365 | </main> |
| 366 | </div> | 366 | </div> |
| 367 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 367 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 368 | ··<script> | 368 | ··<script> |
| 369 | ··let·initialized·=·false; | 369 | ··let·initialized·=·false; |
| Offset 512, 15 lines modified | Offset 512, 15 lines modified | ||
| 512 | ······<p·class="built-using"> | 512 | ······<p·class="built-using"> |
| 513 | ········Built·using | 513 | ········Built·using |
| 514 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 514 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 515 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 515 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 516 | ······</p> | 516 | ······</p> |
| 517 | <p>Copyright·©·1996-202 | 517 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 518 | ····</footer> | 518 | ····</footer> |
| 519 | ··</div> | 519 | ··</div> |
| 520 | </main> | 520 | </main> |
| 521 | </div> | 521 | </div> |
| 522 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 522 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 523 | ··<script> | 523 | ··<script> |
| 524 | ··let·initialized·=·false; | 524 | ··let·initialized·=·false; |
| Offset 143, 22 lines modified | Offset 143, 22 lines modified | ||
| 143 | </h2> | 143 | </h2> |
| 144 | <p>Boot·scripts·are·built·using·the·<code·class="inline">systools</code>·utility·in·the·SASL·application.·For | 144 | <p>Boot·scripts·are·built·using·the·<code·class="inline">systools</code>·utility·in·the·SASL·application.·For |
| 145 | more·information·on·<code·class="inline">systools</code>,·see·the·SASL·documentation.·This·is·only·an | 145 | more·information·on·<code·class="inline">systools</code>,·see·the·SASL·documentation.·This·is·only·an |
| 146 | example·of·what·can·be·done.</p><p>The·simplest·boot·script·possible·includes·only·the·Kernel·and·STDLIB | 146 | example·of·what·can·be·done.</p><p>The·simplest·boot·script·possible·includes·only·the·Kernel·and·STDLIB |
| 147 | applications.·Such·a·script·is·located·in·the·<code·class="inline">bin</code>·directory·of·the·Erlang | 147 | applications.·Such·a·script·is·located·in·the·<code·class="inline">bin</code>·directory·of·the·Erlang |
| 148 | distribution.·The·source·for·the·script·is·found·under·the·Erlang·installation | 148 | distribution.·The·source·for·the·script·is·found·under·the·Erlang·installation |
| 149 | top·directory·under·<code·class="inline">releases/<OTP·version>/start_clean.rel</code>.</p><p>Do·the·following:</p><ul><li>Copy·that·script·to·another·location·(and·preferably·another·name).</li><li>Add·the·applications·Crypto,·Public·Key,·and·SSL·with·their·current·version | 149 | top·directory·under·<code·class="inline">releases/<OTP·version>/start_clean.rel</code>.</p><p>Do·the·following:</p><ul><li>Copy·that·script·to·another·location·(and·preferably·another·name).</li><li>Add·the·applications·Crypto,·Public·Key,·and·SSL·with·their·current·version |
| 150 | numbers·after·the·STDLIB·application.</li></ul><p>The·following·shows·an·example·<code·class="inline">.rel</code>·file·with·TLS·added:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id=" | 150 | numbers·after·the·STDLIB·application.</li></ul><p>The·following·shows·an·example·<code·class="inline">.rel</code>·file·with·TLS·added:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="p"·data-group-id="7485985559-1">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7485985559-2">{</span><span·class="s">"OTP··APN·181·01"</span><span·class="p">,</span><span·class="s">"R15A&q[·...·truncated·by·diffoscope;·len:·320,·SHA:·b0737adb6c5b8af41dad4bf330801229f4ed3c69f5c81f8bb4c3e77609d9d054·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 151 | ······</span><span·class="p"·data-group-id=" | 151 | ······</span><span·class="p"·data-group-id="7485985559-4">[</span><span·class="p"·data-group-id="7485985559-5">{</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="s">"2.15"</span><span·class="p"·data-group-id="7485985559-5">}</span><span·class="p">,</span><span·class="w"> |
| 152 | ······</span><span·class="p"·data-group-id=" | 152 | ······</span><span·class="p"·data-group-id="7485985559-6">{</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="s">"1.18"</span><span·class="p"·data-group-id="7485985559-6">}</span><span·class="p">,</span><span·class="w"> |
| 153 | ······</span><span·class="p"·data-group-id=" | 153 | ······</span><span·class="p"·data-group-id="7485985559-7">{</span><span·class="ss">crypto</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2.0.3"</span><span·class="p"·data-group-id="7485985559-7">}</span><span·class="p">,</span><span·class="w"> |
| 154 | ······</span><span·class="p"·data-group-id=" | 154 | ······</span><span·class="p"·data-group-id="7485985559-8">{</span><span·class="ss">public_key</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"0.12"</span><span·class="p"·data-group-id="7485985559-8">}</span><span·class="p">,</span><span·class="w"> |
| 155 | ······</span><span·class="p"·data-group-id=" | 155 | ······</span><span·class="p"·data-group-id="7485985559-9">{</span><span·class="ss">asn1</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"4.0"</span><span·class="p"·data-group-id="7485985559-9">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ······</span><span·class="p"·data-group-id=" | 156 | ······</span><span·class="p"·data-group-id="7485985559-10">{</span><span·class="ss">ssl</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"5.0"</span><span·class="p"·data-group-id="7485985559-10">}</span><span·class="w"> |
| 157 | ······</span><span·class="p"·data-group-id=" | 157 | ······</span><span·class="p"·data-group-id="7485985559-4">]</span><span·class="p"·data-group-id="7485985559-1">}</span><span·class="p">.</span></code></pre><p>The·version·numbers·differ·in·your·system.·Whenever·one·of·the·applications |
| 158 | included·in·the·script·is·upgraded,·change·the·script.</p><p>Do·the·following:</p><ul><li><p>Build·the·boot·script.</p><p>Assuming·the·<code·class="inline">.rel·file</code>·is·stored·in·a·file·<code·class="inline">start_ssl.rel</code>·in·the·current | 158 | included·in·the·script·is·upgraded,·change·the·script.</p><p>Do·the·following:</p><ul><li><p>Build·the·boot·script.</p><p>Assuming·the·<code·class="inline">.rel·file</code>·is·stored·in·a·file·<code·class="inline">start_ssl.rel</code>·in·the·current |
| 159 | directory,·a·boot·script·can·be·built·as·follows:</p></li></ul><pre><code·class="text">···1>·systools:make_script("start_ssl",[]).</code></pre><p>There·is·now·a·<code·class="inline">start_ssl.boot</code>·file·in·the·current·directory.</p><p>Do·the·following:</p><ul><li>Test·the·boot·script.·To·do·this,·start·Erlang·with·the·<code·class="inline">-boot</code>·command-line | 159 | directory,·a·boot·script·can·be·built·as·follows:</p></li></ul><pre><code·class="text">···1>·systools:make_script("start_ssl",[]).</code></pre><p>There·is·now·a·<code·class="inline">start_ssl.boot</code>·file·in·the·current·directory.</p><p>Do·the·following:</p><ul><li>Test·the·boot·script.·To·do·this,·start·Erlang·with·the·<code·class="inline">-boot</code>·command-line |
| 160 | parameter·specifying·this·boot·script·(with·its·full·path,·but·without·the | 160 | parameter·specifying·this·boot·script·(with·its·full·path,·but·without·the |
| 161 | <code·class="inline">.boot</code>·suffix).·In·UNIX·it·can·look·as·follows:</li></ul><pre><code·class="text">$·erl·-boot·/home/me/ssl/start_ssl | 161 | <code·class="inline">.boot</code>·suffix).·In·UNIX·it·can·look·as·follows:</li></ul><pre><code·class="text">$·erl·-boot·/home/me/ssl/start_ssl |
| 162 | Erlang·(BEAM)·emulator·version·5.0 | 162 | Erlang·(BEAM)·emulator·version·5.0 |
| 163 | Eshell·V5.0··(abort·with·^G) | 163 | Eshell·V5.0··(abort·with·^G) |
| Offset 197, 18 lines modified | Offset 197, 18 lines modified | ||
| 197 | function·body·cannot·be·compiled·when·consulting·a·file.·Also·the·encoding | 197 | function·body·cannot·be·compiled·when·consulting·a·file.·Also·the·encoding |
| 198 | of·the·file·can·be·specified·as·defined·by·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/epp.html"><code·class="inline">epp</code></a>.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·tamper·with·the·socket·options·<code·class="inline">list</code>,·<code·class="inline">binary</code>,·<code·class="inline">active</code>,·<code·class="inline">packet</code>, | 198 | of·the·file·can·be·specified·as·defined·by·module·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/epp.html"><code·class="inline">epp</code></a>.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·tamper·with·the·socket·options·<code·class="inline">list</code>,·<code·class="inline">binary</code>,·<code·class="inline">active</code>,·<code·class="inline">packet</code>, |
| 199 | <code·class="inline">nodelay</code>·and·<code·class="inline">deliver</code>·since·they·are·used·by·the·distribution·protocol·handler | 199 | <code·class="inline">nodelay</code>·and·<code·class="inline">deliver</code>·since·they·are·used·by·the·distribution·protocol·handler |
| 200 | itself.·Other·raw·socket·options·such·as·<code·class="inline">packet_size</code>·may·interfere·severely, | 200 | itself.·Other·raw·socket·options·such·as·<code·class="inline">packet_size</code>·may·interfere·severely, |
| 201 | so·beware!</p></section><p>For·TLS·to·work,·at·least·a·public·key·and·a·certificate·must·be·specified·for | 201 | so·beware!</p></section><p>For·TLS·to·work,·at·least·a·public·key·and·a·certificate·must·be·specified·for |
| 202 | the·server·side·and·the·client·needs·to·specify·CAs·that·it·trusts·(client·certification | 202 | the·server·side·and·the·client·needs·to·specify·CAs·that·it·trusts·(client·certification |
| 203 | is·optional·and·requires·more·configuration).</p><p>In·the·following·example·(to·keep·it·simple),·the·PEM·file·<code·class="inline">"/home/me/ssl/erlserver.pem"</code> | 203 | is·optional·and·requires·more·configuration).</p><p>In·the·following·example·(to·keep·it·simple),·the·PEM·file·<code·class="inline">"/home/me/ssl/erlserver.pem"</code> |
| 204 | contains·both·the·server·certificate·and·its·private·key·.</p><p>Create·a·file·named·for·example·<code·class="inline">"/home/me/ssl/ssl_test@myhost.conf"</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 204 | contains·both·the·server·certificate·and·its·private·key·.</p><p>Create·a·file·named·for·example·<code·class="inline">"/home/me/ssl/ssl_test@myhost.conf"</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0102841108-1">[</span><span·class="p"·data-group-id="0102841108-2">{</span><span·class="ss">server</span><span·class="p">,</span><span·class="w"> |
| 205 | ··</span><span·class="p"·data-group-id=" | 205 | ··</span><span·class="p"·data-group-id="0102841108-3">[</span><span·class="p"·data-group-id="0102841108-4">{</span><span·class="ss">certfile</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/me/ssl/erlserver.pem"</span><span·class="p"·data-group-id="010284110[·...·truncated·by·diffoscope;·len:·107,·SHA:·805bdfef2d989a88a4809b289311162a108f16d07cfe2266ade6abe02d673fb9·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 206 | ·</span><span·class="p"·data-group-id=" | 206 | ·</span><span·class="p"·data-group-id="0102841108-5">{</span><span·class="ss">client</span><span·class="p">,</span><span·class="w"> |
| 207 | ··</span><span·class="p"·data-group-id=" | 207 | ··</span><span·class="p"·data-group-id="0102841108-6">[</span><span·class="p"·data-group-id="0102841108-7">{</span><span·class="ss">cacertfile</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"/home/me/ssl/client_trusted.pem"</span><span·class="p"·data-group-id="01[·...·truncated·by·diffoscope;·len:·167,·SHA:·88e92fa7e3823d3b038213a793e273ad26508aa180da52c6c5b00e7aa34ecc0e·...·]-1">]</span><span·class="p">.</span></code></pre><p>And·then·start·the·node·like·this·(line·breaks·in·the·command·are·for |
| 208 | readability,·and·shall·not·be·there·when·typed):</p><pre><code·class="text">$·erl·-boot·/home/me/ssl/start_ssl·-proto_dist·inet_tls | 208 | readability,·and·shall·not·be·there·when·typed):</p><pre><code·class="text">$·erl·-boot·/home/me/ssl/start_ssl·-proto_dist·inet_tls |
| 209 | ··-ssl_dist_optfile·"/home/me/ssl/ssl_test@myhost.conf" | 209 | ··-ssl_dist_optfile·"/home/me/ssl/ssl_test@myhost.conf" |
| 210 | ··-sname·ssl_test</code></pre><p>The·options·in·the·<code·class="inline">{server,·Opts}</code>·tuple·are·used·when·calling | 210 | ··-sname·ssl_test</code></pre><p>The·options·in·the·<code·class="inline">{server,·Opts}</code>·tuple·are·used·when·calling |
| 211 | <a·href="ssl.html#handshake/3"><code·class="inline">ssl:handshake/3</code></a>,·and·the·options·in·the·<code·class="inline">{client,·Opts}</code>·tuple·are·used·when | 211 | <a·href="ssl.html#handshake/3"><code·class="inline">ssl:handshake/3</code></a>,·and·the·options·in·the·<code·class="inline">{client,·Opts}</code>·tuple·are·used·when |
| 212 | calling·<a·href="ssl.html#connect/4"><code·class="inline">ssl:connect/4</code></a>.</p><p>For·the·client,·the·option·<code·class="inline">{server_name_indication,·atom_to_list(TargetNode)}</code> | 212 | calling·<a·href="ssl.html#connect/4"><code·class="inline">ssl:connect/4</code></a>.</p><p>For·the·client,·the·option·<code·class="inline">{server_name_indication,·atom_to_list(TargetNode)}</code> |
| 213 | is·added·when·connecting.·This·makes·it·possible·to·use·the·client·option | 213 | is·added·when·connecting.·This·makes·it·possible·to·use·the·client·option |
| 214 | <code·class="inline">{verify,·verify_peer}</code>,·and·the·client·will·verify·that·the·certificate·matches | 214 | <code·class="inline">{verify,·verify_peer}</code>,·and·the·client·will·verify·that·the·certificate·matches |
| Offset 224, 33 lines modified | Offset 224, 33 lines modified | ||
| 224 | ··<a·href="#verify_fun-configuration-example"·class="hover-link"> | 224 | ··<a·href="#verify_fun-configuration-example"·class="hover-link"> |
| 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 225 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 226 | ··</a> | 226 | ··</a> |
| 227 | ··<span·class="text">verify_fun·Configuration·Example</span> | 227 | ··<span·class="text">verify_fun·Configuration·Example</span> |
| 228 | </h2> | 228 | </h2> |
| 229 | <p>The·<code·class="inline">verify_fun</code>·option·creates·a·reference·to·the·implementing | 229 | <p>The·<code·class="inline">verify_fun</code>·option·creates·a·reference·to·the·implementing |
| 230 | function·since·the·configuration·is·evaluated·as·an·Erlang·term.·In | 230 | function·since·the·configuration·is·evaluated·as·an·Erlang·term.·In |
| 231 | an·example·file·for·use·with·<code·class="inline">-ssl_dist_optfile</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 231 | an·example·file·for·use·with·<code·class="inline">-ssl_dist_optfile</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0415500741-1">[</span><span·class="p"·data-group-id="0415500741-2">{</span><span·class="ss">server</span><span·class="p">,</span><span·class="p"·data-group-id="0415500741-3">[</span><span·class="p"·data-group-id="0415500741-4">{</span><span·class="ss">fail[·...·truncated·by·diffoscope;·len:·116,·SHA:·e41da5194dd22da805e118e1592925f8db9a6111899b8249906fe8527009b30e·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 232 | ··········</span><span·class="p"·data-group-id=" | 232 | ··········</span><span·class="p"·data-group-id="0415500741-5">{</span><span·class="ss">certfile</span><span·class="p">,</span><span·class="s">"/home/me/ssl/cert.pem"</span><span·class="p"·data-group-id="0415500741-5">}</span><span·class="p">,</span><span·class="w"> |
| 233 | ··········</span><span·class="p"·data-group-id=" | 233 | ··········</span><span·class="p"·data-group-id="0415500741-6">{</span><span·class="ss">keyfile</span><span·class="p">,</span><span·class="s">"/home/me/ssl/privkey.pem"</span><span·class="p"·data-group-id="0415500741-6">}</span><span·class="p">,</span><span·class="w"> |
| 234 | ··········</span><span·class="p"·data-group-id=" | 234 | ··········</span><span·class="p"·data-group-id="0415500741-7">{</span><span·class="ss">cacertfile</span><span·class="p">,</span><span·class="s">"/home/me/ssl/ca_cert.pem"</span><span·class="p"·data-group-id="0415500741-7">}</span><span·class="p">,</span><span·class="w"> |
| 235 | ··········</span><span·class="p"·data-group-id=" | 235 | ··········</span><span·class="p"·data-group-id="0415500741-8">{</span><span·class="ss">verify</span><span·class="p">,</span><span·class="ss">verify_peer</span><span·class="p"·data-group-id="0415500741-8">}</span><span·class="p">,</span><span·class="w"> |
| 236 | ··········</span><span·class="p"·data-group-id=" | 236 | ··········</span><span·class="p"·data-group-id="0415500741-9">{</span><span·class="ss">verify_fun</span><span·class="p">,</span><span·class="p"·data-group-id="0415500741-10">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">mydist</span><span·class="p">:</span><span·class="ss">v[·...·truncated·by·diffoscope;·len:·338,·SHA:·2c2d9a2d53dd9201895e02a765b6dad146ae4b742f3ed26a2605a2b07a1db01d·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ·</span><span·class="p"·data-group-id=" | 237 | ·</span><span·class="p"·data-group-id="0415500741-11">{</span><span·class="ss">client</span><span·class="p">,</span><span·class="p"·data-group-id="0415500741-12">[</span><span·class="p"·data-group-id="0415500741-13">{</span><span·class="ss">certfile</span><span·class="p">,</span><span·class="s"[·...·truncated·by·diffoscope;·len:·82,·SHA:·16df857835d535129b16a464c71529348d9942b8fb5a22fb9380776f9488401a·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 238 | ··········</span><span·class="p"·data-group-id=" | 238 | ··········</span><span·class="p"·data-group-id="0415500741-14">{</span><span·class="ss">keyfile</span><span·class="p">,</span><span·class="s">"/home/me/ssl/privkey.pem"</span><span·class="p"·data-group-id="0415500741-14">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ··········</span><span·class="p"·data-group-id=" | 239 | ··········</span><span·class="p"·data-group-id="0415500741-15">{</span><span·class="ss">cacertfile</span><span·class="p">,</span><span·class="s">"/home/me/ssl/ca_cert.pem"</span><span·class="p"·data-group-id="0415500741-15">}</span><span·class="p">,</span><span·class="w"> |
| 240 | ··········</span><span·class="p"·data-group-id=" | 240 | ··········</span><span·class="p"·data-group-id="0415500741-16">{</span><span·class="ss">verify</span><span·class="p">,</span><span·class="ss">verify_peer</span><span·class="p"·data-group-id="0415500741-16">}</span><span·class="p">,</span><span·class="w"> |
| 241 | ··········</span><span·class="p"·data-group-id=" | 241 | ··········</span><span·class="p"·data-group-id="0415500741-17">{</span><span·class="ss">verify_fun</span><span·class="p">,</span><span·class="p"·data-group-id="0415500741-18">{</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">mydist</span><span·class="p">:</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·395,·SHA:·a3c3e387abe3d38fdda62f9876dafa8362c7eb54c67421e56ef72c6db5c4e6c7·...·]-1">]</span><span·class="p">.</span><span·class="w"> |
| 242 | </span></code></pre><p><code·class="inline">mydist:verify/3</code>·will·be·called·with:</p><ul><li>OtpCert,·the·other·party's·certificate·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_records.html#pkix-certificates">PKIX·Certificates</a></li><li>SslStatus,·OTP's·verification·outcome,·such·as·<code·class="inline">valid</code>·or·a·tuple·<code·class="inline">{bad_cert,·unknown_ca}</code></li><li>Init·will·be·<code·class="inline">"any·initial·value"</code></li></ul><p>A·pattern·for·<code·class="inline">verify/3</code>·will·look·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">verify</span><span·class="p"·data-group-id=" | 242 | </span></code></pre><p><code·class="inline">mydist:verify/3</code>·will·be·called·with:</p><ul><li>OtpCert,·the·other·party's·certificate·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_records.html#pkix-certificates">PKIX·Certificates</a></li><li>SslStatus,·OTP's·verification·outcome,·such·as·<code·class="inline">valid</code>·or·a·tuple·<code·class="inline">{bad_cert,·unknown_ca}</code></li><li>Init·will·be·<code·class="inline">"any·initial·value"</code></li></ul><p>A·pattern·for·<code·class="inline">verify/3</code>·will·look·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">verify</span><span·class="p"·data-group-id="5347312127-1">(</span><span·class="n">OtpCert</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">SslStatus</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Init</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·40f1acf678ab0cbecae2f4e62f5469b59882d418134df766702a1e276d4ae86f·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 243 | ····</span><span·class="n">IsOk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">is_ok</span><span·class="p"·data-group-id=" | 243 | ····</span><span·class="n">IsOk</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">is_ok</span><span·class="p"·data-group-id="5347312127-2">(</span><span·class="n">OtpCert</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Init</span><span·class="p"·data-group-id="5347312127-2">)</span><span·class="p">,</span><span·class="w"> |
| 244 | ····</span><span·class="n">NewInitValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"some·new·value"</span><span·class="p">,</span><span·class="w"> | 244 | ····</span><span·class="n">NewInitValue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"some·new·value"</span><span·class="p">,</span><span·class="w"> |
| 245 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">IsOk</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 245 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="n">IsOk</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 246 | ·······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 246 | ·······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 247 | ···········</span><span·class="p"·data-group-id=" | 247 | ···········</span><span·class="p"·data-group-id="5347312127-3">{</span><span·class="ss">valid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NewInitValue</span><span·class="p"·data-group-id="5347312127-3">}</span><span·class="p">;</span><span·class="w"> |
| 248 | ·······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 248 | ·······</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 249 | ···········</span><span·class="p"·data-group-id=" | 249 | ···········</span><span·class="p"·data-group-id="5347312127-4">{</span><span·class="ss">failure</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NewInitValue</span><span·class="p"·data-group-id="5347312127-4">}</span><span·class="w"> |
| 250 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p><code·class="inline">verify_fun</code>·can·accept·a·<code·class="inline">verify/4</code>·function,·which·will·receive:</p><ul><li>OtpCert,·the·other·party's·certificate·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_records.html#pkix-certificates">PKIX·Certificates</a></li><li>DerCert,·the·other·party's·original·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#t:der_encoded/0">DER·Encoded</a>·certificate</li><li>SslStatus,·OTP's·verification·outcome,·such·as·<code·class="inline">valid</code>·or·a·tuple·<code·class="inline">{bad_cert,·unknown_ca}</code></li><li>Init·will·be·<code·class="inline">"any·initial·value"</code></li></ul><p>The·<code·class="inline">verify/4</code>·can·use·the·DerCert·for·atypical·workarounds·such·as | 250 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p><code·class="inline">verify_fun</code>·can·accept·a·<code·class="inline">verify/4</code>·function,·which·will·receive:</p><ul><li>OtpCert,·the·other·party's·certificate·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key_records.html#pkix-certificates">PKIX·Certificates</a></li><li>DerCert,·the·other·party's·original·<a·href="../../../../lib/public_key-1.17.1/doc/html/public_key.html#t:der_encoded/0">DER·Encoded</a>·certificate</li><li>SslStatus,·OTP's·verification·outcome,·such·as·<code·class="inline">valid</code>·or·a·tuple·<code·class="inline">{bad_cert,·unknown_ca}</code></li><li>Init·will·be·<code·class="inline">"any·initial·value"</code></li></ul><p>The·<code·class="inline">verify/4</code>·can·use·the·DerCert·for·atypical·workarounds·such·as |
| 251 | handling·decoding·errors·and·directly·verifying·signatures.</p><p>For·more·details·see·<code·class="inline">{verify_fun,·Verify}</code>·<a·href="ssl.html#t:common_option_cert/0">in·common_option_cert</a></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·legacy·command·line·format·for·<code·class="inline">verify_fun</code>·cannot·be·used | 251 | handling·decoding·errors·and·directly·verifying·signatures.</p><p>For·more·details·see·<code·class="inline">{verify_fun,·Verify}</code>·<a·href="ssl.html#t:common_option_cert/0">in·common_option_cert</a></p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·legacy·command·line·format·for·<code·class="inline">verify_fun</code>·cannot·be·used |
| 252 | in·a·<code·class="inline">-ssl_dist_optfile</code>·file·as·described·below·in | 252 | in·a·<code·class="inline">-ssl_dist_optfile</code>·file·as·described·below·in |
| 253 | <a·href="#specifying-tls-options-legacy">Specifying·TLS·Options·(Legacy)</a>.</p></section><h2·id="using-tls-distribution-over-ipv6"·class="section-heading"> | 253 | <a·href="#specifying-tls-options-legacy">Specifying·TLS·Options·(Legacy)</a>.</p></section><h2·id="using-tls-distribution-over-ipv6"·class="section-heading"> |
| 254 | ··<a·href="#using-tls-distribution-over-ipv6"·class="hover-link"> | 254 | ··<a·href="#using-tls-distribution-over-ipv6"·class="hover-link"> |
| 255 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 255 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 256 | ··</a> | 256 | ··</a> |
| Offset 300, 27 lines modified | Offset 300, 27 lines modified | ||
| 300 | in·that·variable·and·are·then·interpreted·as·command-line·arguments·for·all | 300 | in·that·variable·and·are·then·interpreted·as·command-line·arguments·for·all |
| 301 | subsequent·invocations·of·Erlang.</p><p>In·a·Unix·(Bourne)·shell,·it·can·look·as·follows·(line·breaks·are·for | 301 | subsequent·invocations·of·Erlang.</p><p>In·a·Unix·(Bourne)·shell,·it·can·look·as·follows·(line·breaks·are·for |
| 302 | readability,·they·are·not·to·be·there·when·typed):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="n">ERL_FLAGS</span><span·class="o">=</span><span·class="s">"-boot·/home/me/ssl/start_ssl·-proto_dist·inet_tls | 302 | readability,·they·are·not·to·be·there·when·typed):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="n">ERL_FLAGS</span><span·class="o">=</span><span·class="s">"-boot·/home/me/ssl/start_ssl·-proto_dist·inet_tls |
| 303 | ··-ssl_dist_opt·server_certfile·/home/me/ssl/erlserver.pem | 303 | ··-ssl_dist_opt·server_certfile·/home/me/ssl/erlserver.pem |
| 304 | ··-ssl_dist_opt·server_secure_renegotiate·true·client_secure_renegotiate·true"</span><span·class="w"> | 304 | ··-ssl_dist_opt·server_secure_renegotiate·true·client_secure_renegotiate·true"</span><span·class="w"> |
| 305 | </span><span·class="sc">$·</span><span·class="ss">export</span><span·class="w">·</span><span·class="n">ERL_FLAGS</span><span·class="w"> | 305 | </span><span·class="sc">$·</span><span·class="ss">export</span><span·class="w">·</span><span·class="n">ERL_FLAGS</span><span·class="w"> |
| 306 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">sname</span><span·class="w">·</span><span·class="ss">ssl_test</span><span·class="w"> | 306 | </span><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">sname</span><span·class="w">·</span><span·class="ss">ssl_test</span><span·class="w"> |
| 307 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id=" | 307 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id="9066960673-1">(</span><span·class="n">BEAM</span><span·class="p"·data-group-id="9066960673-1">)</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="mf">5.[·...·truncated·by·diffoscope;·len:·156,·SHA:·ac27ab469c05d3ee271024a2b450792a43d1446c11b285585ba46234000d4667·...·]-2">]</span><span·class="w"> |
| 308 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id=" | 308 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">··</span><span·class="p"·data-group-id="9066960673-3">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="9066960673-3">)</span><span·class="gp·unselectable"> |
| 309 | (ssl_test@myhost)1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_arguments</span><span·class="p"·data-group-id=" | 309 | (ssl_test@myhost)1>·</span><span·class="nc">init</span><span·class="p">:</span><span·class="nf">get_arguments</span><span·class="p"·data-group-id="9066960673-4">(</span><span·class="p"·data-group-id="9066960673-4">)</span><span·class="p">.</span><span·class="w"> |
| 310 | </span><span·class="p"·data-group-id=" | 310 | </span><span·class="p"·data-group-id="9066960673-5">[</span><span·class="p"·data-group-id="9066960673-6">{</span><span·class="ss">root</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-7">[</span><span·class="s">"/usr/local/erlang"</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·70,·SHA:·3bee6d38ef8b2d9968f9c25616dbbff260cc31183aaf937e9639122c89167463·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 311 | ·</span><span·class="p"·data-group-id=" | 311 | ·</span><span·class="p"·data-group-id="9066960673-8">{</span><span·class="ss">progname</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-9">[</span><span·class="s">"erl·"</span><span·class="p"·data-group-id="9066960673-9">]</span><span·class="p"·data-group-id="90[·...·truncated·by·diffoscope;·len:·8,·SHA:·e49612af0354c6d1849d2369e855900f6673a76de321ba389fe4b9123e173898·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 312 | ·</span><span·class="p"·data-group-id=" | 312 | ·</span><span·class="p"·data-group-id="9066960673-10">{</span><span·class="ss">sname</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-11">[</span><span·class="s">"ssl_test"</span><span·class="p"·data-group-id="9066960673-11">]</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·242d669c93c728b029400a938fd93e067c0643cce36e4ac287bb92e14e6239b4·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 313 | ·</span><span·class="p"·data-group-id=" | 313 | ·</span><span·class="p"·data-group-id="9066960673-12">{</span><span·class="ss">boot</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-13">[</span><span·class="s">"/home/me/ssl/start_ssl"</span><span·class="p"·data-group-id="9066960673-13">]</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·1cf0251204042975dc0bbef5e5f621564bebd80a24f7215db426e1e08451372d·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 314 | ·</span><span·class="p"·data-group-id=" | 314 | ·</span><span·class="p"·data-group-id="9066960673-14">{</span><span·class="ss">proto_dist</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-15">[</span><span·class="s">"inet_tls"</span><span·class="p"·data-group-id="9066960673-15">]</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·8b47f96e82af4c942e43e1de867d05fef6a6884c51aeec86e9bfe2dd60c7f4b1·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 315 | ·</span><span·class="p"·data-group-id=" | 315 | ·</span><span·class="p"·data-group-id="9066960673-16">{</span><span·class="ss">ssl_dist_opt</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-17">[</span><span·class="s">"server_certfile"</span><span·class="p">,</span><span·class="s">"/home/me/ssl/erlserver.[·...·truncated·by·diffoscope;·len:·111,·SHA:·688d18febf43e1b63f6a3c977cd9b3baf687e3adcc8d9829f0f30362ac0c5287·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 316 | ·</span><span·class="p"·data-group-id=" | 316 | ·</span><span·class="p"·data-group-id="9066960673-18">{</span><span·class="ss">ssl_dist_opt</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-19">[</span><span·class="s">"server_secure_renegotiate"</span><span·class="p">,</span><span·class="s">"true"</span><span·class="p">,</span><span·class="w"> |
| 317 | ················</span><span·class="s">"client_secure_renegotiate"</span><span·class="p">,</span><span·class="s">"true"</span><span·class="p"·data-group-id=" | 317 | ················</span><span·class="s">"client_secure_renegotiate"</span><span·class="p">,</span><span·class="s">"true"</span><span·class="p"·data-group-id="9066960673-19">]</span><span·class="w"> |
| 318 | ·</span><span·class="p"·data-group-id=" | 318 | ·</span><span·class="p"·data-group-id="9066960673-20">{</span><span·class="ss">home</span><span·class="p">,</span><span·class="p"·data-group-id="9066960673-21">[</span><span·class="s">"/home/me"</span><span·class="p"·data-group-id="9066960673-21">]</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·0fcd8d553ec662a36db1c0ef5d9e658dd879d831ab6e4063d4144e199c887190·...·]-20">}</span><span·class="p">]</span></code></pre><p>The·<code·class="inline">init:get_arguments()</code>·call·verifies·that·the·correct·arguments·are·supplied |
| 319 | to·the·emulator.</p> | 319 | to·the·emulator.</p> |
| 320 | </div> | 320 | </div> |
| 321 | <div·class="bottom-actions"·id="bottom-actions"> | 321 | <div·class="bottom-actions"·id="bottom-actions"> |
| 322 | ··<div·class="bottom-actions-item"> | 322 | ··<div·class="bottom-actions-item"> |
| 323 | ······<a·href="using_ssl.html"·class="bottom-actions-button"·rel="prev"> | 323 | ······<a·href="using_ssl.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 364, 15 lines modified | Offset 364, 15 lines modified | ||
| 364 | ······<p·class="built-using"> | 364 | ······<p·class="built-using"> |
| 365 | ········Built·using | 365 | ········Built·using |
| 366 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 366 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 367 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 367 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 368 | ······</p> | 368 | ······</p> |
| 369 | <p>Copyright·©·1996-202 | 369 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 370 | ····</footer> | 370 | ····</footer> |
| 371 | ··</div> | 371 | ··</div> |
| 372 | </main> | 372 | </main> |
| 373 | </div> | 373 | </div> |
| 374 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 374 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 375 | ··<script> | 375 | ··<script> |
| 376 | ··let·initialized·=·false; | 376 | ··let·initialized·=·false; |
| Offset 275, 15 lines modified | Offset 275, 15 lines modified | ||
| 275 | ······<p·class="built-using"> | 275 | ······<p·class="built-using"> |
| 276 | ········Built·using | 276 | ········Built·using |
| 277 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 277 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 278 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 278 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 279 | ······</p> | 279 | ······</p> |
| 280 | <p>Copyright·©·1996-202 | 280 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 281 | ····</footer> | 281 | ····</footer> |
| 282 | ··</div> | 282 | ··</div> |
| 283 | </main> | 283 | </main> |
| 284 | </div> | 284 | </div> |
| 285 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 285 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 286 | ··<script> | 286 | ··<script> |
| 287 | ··let·initialized·=·false; | 287 | ··let·initialized·=·false; |
| Offset 695, 15 lines modified | Offset 695, 15 lines modified | ||
| 695 | ······<p·class="built-using"> | 695 | ······<p·class="built-using"> |
| 696 | ········Built·using | 696 | ········Built·using |
| 697 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 697 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 698 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 698 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 699 | ······</p> | 699 | ······</p> |
| 700 | <p>Copyright·©·1996-202 | 700 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 701 | ····</footer> | 701 | ····</footer> |
| 702 | ··</div> | 702 | ··</div> |
| 703 | </main> | 703 | </main> |
| 704 | </div> | 704 | </div> |
| 705 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 705 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 706 | ··<script> | 706 | ··<script> |
| 707 | ··let·initialized·=·false; | 707 | ··let·initialized·=·false; |
| Offset 256, 15 lines modified | Offset 256, 15 lines modified | ||
| 256 | ······<p·class="built-using"> | 256 | ······<p·class="built-using"> |
| 257 | ········Built·using | 257 | ········Built·using |
| 258 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 258 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 259 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 259 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 260 | ······</p> | 260 | ······</p> |
| 261 | <p>Copyright·©·1996-202 | 261 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 262 | ····</footer> | 262 | ····</footer> |
| 263 | ··</div> | 263 | ··</div> |
| 264 | </main> | 264 | </main> |
| 265 | </div> | 265 | </div> |
| 266 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 266 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 267 | ··<script> | 267 | ··<script> |
| 268 | ··let·initialized·=·false; | 268 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 823, 15 lines modified | Offset 823, 15 lines modified | ||
| 823 | ······<p·class="built-using"> | 823 | ······<p·class="built-using"> |
| 824 | ········Built·using | 824 | ········Built·using |
| 825 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 825 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 826 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 826 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 827 | ······</p> | 827 | ······</p> |
| 828 | <p>Copyright·©·1996-202 | 828 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 829 | ····</footer> | 829 | ····</footer> |
| 830 | ··</div> | 830 | ··</div> |
| 831 | </main> | 831 | </main> |
| 832 | </div> | 832 | </div> |
| 833 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 833 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 834 | ··<script> | 834 | ··<script> |
| 835 | ··let·initialized·=·false; | 835 | ··let·initialized·=·false; |
| Offset 143, 60 lines modified | Offset 143, 60 lines modified | ||
| 143 | ··</a> | 143 | ··</a> |
| 144 | ··<span·class="text">Quick·start</span> | 144 | ··<span·class="text">Quick·start</span> |
| 145 | </h2> | 145 | </h2> |
| 146 | <p><code·class="inline">argparse</code>·is·designed·to·work·with·<a·href="../../../../erts-15.2.7/doc/html/escript_cmd.html"><code·class="inline">escript</code></a>.·The | 146 | <p><code·class="inline">argparse</code>·is·designed·to·work·with·<a·href="../../../../erts-15.2.7/doc/html/escript_cmd.html"><code·class="inline">escript</code></a>.·The |
| 147 | example·below·is·a·fully·functioning·Erlang·program·accepting·two·command·line | 147 | example·below·is·a·fully·functioning·Erlang·program·accepting·two·command·line |
| 148 | arguments·and·printing·their·product.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ch">#!/usr/bin/env·escript | 148 | arguments·and·printing·their·product.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ch">#!/usr/bin/env·escript |
| 149 | </span><span·class="w"> | 149 | </span><span·class="w"> |
| 150 | </span><span·class="nf">main</span><span·class="p"·data-group-id=" | 150 | </span><span·class="nf">main</span><span·class="p"·data-group-id="0841781056-1">(</span><span·class="n">Args</span><span·class="p"·data-group-id="0841781056-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 151 | ····</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id=" | 151 | ····</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="0841781056-2">(</span><span·class="n">Args</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">cli</span><span·class="p"·data-group-id="0841781056-3">(</span><span·class="p"·data-group-id="0841781056-3">)</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·305,·SHA:·226320fb4c2136edcc44252a24558850327576a890548292ae104f593d4ad1e4·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 152 | </span><span·class="nf">cli</span><span·class="p"·data-group-id=" | 152 | </span><span·class="nf">cli</span><span·class="p"·data-group-id="0841781056-5">(</span><span·class="p"·data-group-id="0841781056-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ····</span><span·class="p"·data-group-id=" | 153 | ····</span><span·class="p"·data-group-id="0841781056-6">#{</span><span·class="w"> |
| 154 | ········</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 154 | ········</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0841781056-7">[</span><span·class="w"> |
| 155 | ············</span><span·class="p"·data-group-id=" | 155 | ············</span><span·class="p"·data-group-id="0841781056-8">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">left</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·123,·SHA:·a1af44bb433a99df9ba42d00046233c00b8c716569b5819fcd3369c59dde94d5·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 156 | ············</span><span·class="p"·data-group-id=" | 156 | ············</span><span·class="p"·data-group-id="0841781056-9">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">right</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">type</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·124,·SHA:·38edfc053c8dd5f1708d5c1417426ac164017b49309482744ff92a5949a68d89·...·]-9">}</span><span·class="w"> |
| 157 | ········</span><span·class="p"·data-group-id=" | 157 | ········</span><span·class="p"·data-group-id="0841781056-7">]</span><span·class="p">,</span><span·class="w"> |
| 158 | ········</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> | 158 | ········</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w"> |
| 159 | ············</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 159 | ············</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="0841781056-10">(</span><span·class="p"·data-group-id="0841781056-11">#{</span><span·class="ss">left</span><span·class="w">·</span><span·class="p">:=</span><span·class="w">·</span><span·class="n">Left</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·223,·SHA:·dd46540e1ba9e7ae548608d037d267507a336b23625f9ff29697c0526a6860b7·...·]-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 160 | ················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 160 | ················</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0841781056-12">(</span><span·class="s">"</span><span·class="si">~b</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841781056-13">[</span><span·class="n">Left<[·...·truncated·by·diffoscope;·len:·201,·SHA:·41324dba64f84147a562ae404550e6023fa4ab350f8a9191920d2d369cf338fd·...·]-12">)</span><span·class="w"> |
| 161 | ············</span><span·class="k">end</span><span·class="w"> | 161 | ············</span><span·class="k">end</span><span·class="w"> |
| 162 | ····</span><span·class="p"·data-group-id=" | 162 | ····</span><span·class="p"·data-group-id="0841781056-6">}</span><span·class="p">.</span></code></pre><p>Running·this·script·with·no·arguments·results·in·an·error,·accompanied·by·the |
| 163 | usage·information.</p><p>The·<code·class="inline">cli</code>·function·defines·a·single·command·with·embedded·handler·accepting·a | 163 | usage·information.</p><p>The·<code·class="inline">cli</code>·function·defines·a·single·command·with·embedded·handler·accepting·a |
| 164 | map.·Keys·of·the·map·are·argument·names·as·defined·by·the·<code·class="inline">argument</code>·field·of | 164 | map.·Keys·of·the·map·are·argument·names·as·defined·by·the·<code·class="inline">argument</code>·field·of |
| 165 | the·command,·<code·class="inline">left</code>·and·<code·class="inline">right</code>·in·the·example.·Values·are·taken·from·the | 165 | the·command,·<code·class="inline">left</code>·and·<code·class="inline">right</code>·in·the·example.·Values·are·taken·from·the |
| 166 | command·line,·and·converted·into·integers,·as·requested·by·the·type | 166 | command·line,·and·converted·into·integers,·as·requested·by·the·type |
| 167 | specification.·Both·arguments·in·the·example·above·are·required·(and·therefore | 167 | specification.·Both·arguments·in·the·example·above·are·required·(and·therefore |
| 168 | defined·as·positional).</p><h2·id="module-command-hierarchy"·class="section-heading"> | 168 | defined·as·positional).</p><h2·id="module-command-hierarchy"·class="section-heading"> |
| 169 | ··<a·href="#module-command-hierarchy"·class="hover-link"> | 169 | ··<a·href="#module-command-hierarchy"·class="hover-link"> |
| 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 171 | ··</a> | 171 | ··</a> |
| 172 | ··<span·class="text">Command·hierarchy</span> | 172 | ··<span·class="text">Command·hierarchy</span> |
| 173 | </h2> | 173 | </h2> |
| 174 | <p>A·command·may·contain·nested·commands,·forming·a·hierarchy.·Arguments·defined·at | 174 | <p>A·command·may·contain·nested·commands,·forming·a·hierarchy.·Arguments·defined·at |
| 175 | the·upper·level·command·are·automatically·added·to·all·nested·commands.·Nested | 175 | the·upper·level·command·are·automatically·added·to·all·nested·commands.·Nested |
| 176 | commands·example·(assuming·<code·class="inline">progname</code>·is·<code·class="inline">nested</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">cli</span><span·class="p"·data-group-id=" | 176 | commands·example·(assuming·<code·class="inline">progname</code>·is·<code·class="inline">nested</code>):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">cli</span><span·class="p"·data-group-id="0677128075-1">(</span><span·class="p"·data-group-id="0677128075-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 177 | ··</span><span·class="p"·data-group-id=" | 177 | ··</span><span·class="p"·data-group-id="0677128075-2">#{</span><span·class="w"> |
| 178 | ····</span><span·class="c1">%%·top·level·argument·applicable·to·all·commands</span><span·class="w"> | 178 | ····</span><span·class="c1">%%·top·level·argument·applicable·to·all·commands</span><span·class="w"> |
| 179 | ····</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 179 | ····</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-3">[</span><span·class="p"·data-group-id="0677128075-4">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">top</span><span·class="p"·data-group-id="0677128075-4">}</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·9ddac26563df6e549a6f3723b6304d4cb9e9e1ccfa720002db38928f8a9d8958·...·]-3">]</span><span·class="p">,</span><span·class="w"> |
| 180 | ······</span><span·class="ss">commands</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 180 | ······</span><span·class="ss">commands</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-5">#{</span><span·class="w"> |
| 181 | ········</span><span·class="s">"first"</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 181 | ········</span><span·class="s">"first"</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-6">#{</span><span·class="w"> |
| 182 | ··········</span><span·class="c1">%%·argument·applicable·to·"first"·command·and</span><span·class="w"> | 182 | ··········</span><span·class="c1">%%·argument·applicable·to·"first"·command·and</span><span·class="w"> |
| 183 | ··········</span><span·class="c1">%%··all·commands·nested·into·"first"</span><span·class="w"> | 183 | ··········</span><span·class="c1">%%··all·commands·nested·into·"first"</span><span·class="w"> |
| 184 | ··········</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 184 | ··········</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-7">[</span><span·class="p"·data-group-id="0677128075-8">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">mid</span><span·class="p"·data-group-id="0677128075-8">}</s[·...·truncated·by·diffoscope;·len:·45,·SHA:·9ddac26563df6e549a6f3723b6304d4cb9e9e1ccfa720002db38928f8a9d8958·...·]-7">]</span><span·class="p">,</span><span·class="w"> |
| 185 | ··········</span><span·class="ss">commands</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 185 | ··········</span><span·class="ss">commands</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-9">#{</span><span·class="w"> |
| 186 | ············</span><span·class="s">"second"</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 186 | ············</span><span·class="s">"second"</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-10">#{</span><span·class="w"> |
| 187 | ··············</span><span·class="c1">%%·argument·only·applicable·for·"second"·command</span><span·class="w"> | 187 | ··············</span><span·class="c1">%%·argument·only·applicable·for·"second"·command</span><span·class="w"> |
| 188 | ··············</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 188 | ··············</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-11">[</span><span·class="p"·data-group-id="0677128075-12">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">bottom</span><span·class="p"·data-group-id="0677128075-12[·...·truncated·by·diffoscope;·len:·51,·SHA:·906a105f7384574ff6a484827a2b1c3cbc72113e766def39e3a33cbaacb41b68·...·]-11">]</span><span·class="p">,</span><span·class="w"> |
| 189 | ··············</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id=" | 189 | ··············</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="0677128075-13">(</span><span·class="n">A</span><span·class="p"·data-group-id="0677128075-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span[·...·truncated·by·diffoscope;·len:·386,·SHA:·4ae330ce501163fdb644a515da2302db5b56a3e7fabc65ce45caf6671c16164b·...·]-14">)</span><span·class="w">·</span><span·class="k">end</span><span·class="w"> |
| 190 | ··········</span><span·class="p"·data-group-id=" | 190 | ··········</span><span·class="p"·data-group-id="0677128075-10">}</span><span·class="w"> |
| 191 | ········</span><span·class="p"·data-group-id=" | 191 | ········</span><span·class="p"·data-group-id="0677128075-9">}</span><span·class="w"> |
| 192 | ······</span><span·class="p"·data-group-id=" | 192 | ······</span><span·class="p"·data-group-id="0677128075-6">}</span><span·class="w"> |
| 193 | ····</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="p"·data-group-id="0677128075-5">}</span><span·class="w"> |
| 194 | ··</span><span·class="p"·data-group-id=" | 194 | ··</span><span·class="p"·data-group-id="0677128075-2">}</span><span·class="p">.</span></code></pre><p>In·the·example·above,·a·3-level·hierarchy·is·defined.·First·is·the·script·itself |
| 195 | (<code·class="inline">nested</code>),·accepting·the·only·argument·<code·class="inline">top</code>.·Since·it·has·no·associated | 195 | (<code·class="inline">nested</code>),·accepting·the·only·argument·<code·class="inline">top</code>.·Since·it·has·no·associated |
| 196 | handler,·<a·href="#run/3"><code·class="inline">run/3</code></a>·will·not·accept·user·input·omitting·nested·command·selection. | 196 | handler,·<a·href="#run/3"><code·class="inline">run/3</code></a>·will·not·accept·user·input·omitting·nested·command·selection. |
| 197 | For·this·example,·user·has·to·supply·5·arguments·in·the·command·line,·two·being | 197 | For·this·example,·user·has·to·supply·5·arguments·in·the·command·line,·two·being |
| 198 | command·names,·and·another·3·-·required·positional·arguments:</p><pre><code·class="text">./nested.erl·one·first·second·two·three | 198 | command·names,·and·another·3·-·required·positional·arguments:</p><pre><code·class="text">./nested.erl·one·first·second·two·three |
| 199 | #{top·=>·"one",mid·=>·"two",bottom·=>·"three"}</code></pre><p>Commands·have·preference·over·positional·argument·values.·In·the·example·above, | 199 | #{top·=>·"one",mid·=>·"two",bottom·=>·"three"}</code></pre><p>Commands·have·preference·over·positional·argument·values.·In·the·example·above, |
| 200 | commands·and·positional·arguments·are·interleaving,·and·<code·class="inline">argparse</code>·matches | 200 | commands·and·positional·arguments·are·interleaving,·and·<code·class="inline">argparse</code>·matches |
| 201 | command·name·first.</p><h2·id="module-arguments"·class="section-heading"> | 201 | command·name·first.</p><h2·id="module-arguments"·class="section-heading"> |
| Offset 206, 22 lines modified | Offset 206, 22 lines modified | ||
| 206 | ··<span·class="text">Arguments</span> | 206 | ··<span·class="text">Arguments</span> |
| 207 | </h2> | 207 | </h2> |
| 208 | <p><code·class="inline">argparse</code>·supports·positional·and·optional·arguments.·Optional·arguments,·or | 208 | <p><code·class="inline">argparse</code>·supports·positional·and·optional·arguments.·Optional·arguments,·or |
| 209 | options·for·short,·must·be·prefixed·with·a·special·character·(<code·class="inline">-</code>·is·the·default | 209 | options·for·short,·must·be·prefixed·with·a·special·character·(<code·class="inline">-</code>·is·the·default |
| 210 | on·all·operating·systems).·Both·options·and·positional·arguments·have·1·or·more | 210 | on·all·operating·systems).·Both·options·and·positional·arguments·have·1·or·more |
| 211 | associated·values.·See·<a·href="#t:argument/0"><code·class="inline">argument·specification</code></a>·to·find·more | 211 | associated·values.·See·<a·href="#t:argument/0"><code·class="inline">argument·specification</code></a>·to·find·more |
| 212 | details·about·supported·combinations.</p><p>In·the·user·input,·short·options·may·be·concatenated·with·their·values.·Long | 212 | details·about·supported·combinations.</p><p>In·the·user·input,·short·options·may·be·concatenated·with·their·values.·Long |
| 213 | options·support·values·separated·by·<code·class="inline">=</code>.·Consider·this·definition:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">cli</span><span·class="p"·data-group-id="8 | 213 | options·support·values·separated·by·<code·class="inline">=</code>.·Consider·this·definition:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">cli</span><span·class="p"·data-group-id="8021065139-1">(</span><span·class="p"·data-group-id="8021065139-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 214 | ··</span><span·class="p"·data-group-id="8 | 214 | ··</span><span·class="p"·data-group-id="8021065139-2">#{</span><span·class="w"> |
| 215 | ····</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8 | 215 | ····</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8021065139-3">[</span><span·class="w"> |
| 216 | ······</span><span·class="p"·data-group-id="8 | 216 | ······</span><span·class="p"·data-group-id="8021065139-4">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">long</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">long</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·131,·SHA:·d15fc1c9b0d63dab17392691a82e3cea9656c93adf20c02cf9351b59617cde63·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 217 | ······</span><span·class="p"·data-group-id="8 | 217 | ······</span><span·class="p"·data-group-id="8021065139-5">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">short</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">short</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·119,·SHA:·5f403c3342bd48738860379fbf013b316fea2da4d2e2ec6f4a0b820a8f149eeb·...·]-5">}</span><span·class="w"> |
| 218 | ····</span><span·class="p"·data-group-id="8 | 218 | ····</span><span·class="p"·data-group-id="8021065139-3">]</span><span·class="p">,</span><span·class="w"> |
| 219 | ····</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8 | 219 | ····</span><span·class="ss">handler</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8021065139-6">(</span><span·class="n">Args</span><span·class="p"·data-group-id="8021065139-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span[·...·truncated·by·diffoscope;·len:·386,·SHA:·181276f7c564b15d6ae7e958c72e39d94f1720ce01ee2f40e454e97b632b305e·...·]-7">)</span><span·class="w">·</span><span·class="k">end</span><span·class="w"> |
| 220 | ··</span><span·class="p"·data-group-id="8 | 220 | ··</span><span·class="p"·data-group-id="8021065139-2">}</span><span·class="p">.</span></code></pre><p>Running·<code·class="inline">./args·--long=VALUE</code>·prints·<code·class="inline">#{long·=>·"VALUE"}</code>,·running |
| 221 | <code·class="inline">./args·-sVALUE</code>·prints·<code·class="inline">#{short·=>·"VALUE"}</code></p><p><code·class="inline">argparse</code>·supports·boolean·flags·concatenation:·it·is·possible·to·shorten | 221 | <code·class="inline">./args·-sVALUE</code>·prints·<code·class="inline">#{short·=>·"VALUE"}</code></p><p><code·class="inline">argparse</code>·supports·boolean·flags·concatenation:·it·is·possible·to·shorten |
| 222 | <code·class="inline">-r·-f·-v</code>·to·<code·class="inline">-rfv</code>.</p><p>Shortened·option·names·are·not·supported:·it·is·not·possible·to·use·<code·class="inline">--my-argum</code> | 222 | <code·class="inline">-r·-f·-v</code>·to·<code·class="inline">-rfv</code>.</p><p>Shortened·option·names·are·not·supported:·it·is·not·possible·to·use·<code·class="inline">--my-argum</code> |
| 223 | instead·of·<code·class="inline">--my-argument-name</code>·even·when·such·option·can·be·unambiguously | 223 | instead·of·<code·class="inline">--my-argument-name</code>·even·when·such·option·can·be·unambiguously |
| 224 | found.</p> | 224 | found.</p> |
| 225 | ····</section> | 225 | ····</section> |
| 226 | </div> | 226 | </div> |
| Offset 598, 119 lines modified | Offset 598, 119 lines modified | ||
| 598 | as·optional.·Optional·arguments·do·not·have·specific·order·and·may·appear | 598 | as·optional.·Optional·arguments·do·not·have·specific·order·and·may·appear |
| 599 | anywhere·in·the·command·line.·Positional·arguments·are·ordered·the·same·way·as | 599 | anywhere·in·the·command·line.·Positional·arguments·are·ordered·the·same·way·as |
| 600 | they·appear·in·the·arguments·list·of·the·command·specification.</p><p>By·default,·all·positional·arguments·must·be·present·in·the·command·line.·The | 600 | they·appear·in·the·arguments·list·of·the·command·specification.</p><p>By·default,·all·positional·arguments·must·be·present·in·the·command·line.·The |
| 601 | parser·will·return·an·error·otherwise.·Options,·however,·may·be·omitted,·in | 601 | parser·will·return·an·error·otherwise.·Options,·however,·may·be·omitted,·in |
| 602 | which·case·resulting·argument·map·will·either·contain·the·default·value,·or·not | 602 | which·case·resulting·argument·map·will·either·contain·the·default·value,·or·not |
| 603 | have·the·key·at·all.</p><ul><li><p><strong><code·class="inline">name</code></strong>·-·Sets·the·argument·name·in·the·parsed·argument·map.·If·<code·class="inline">help</code>·is | 603 | have·the·key·at·all.</p><ul><li><p><strong><code·class="inline">name</code></strong>·-·Sets·the·argument·name·in·the·parsed·argument·map.·If·<code·class="inline">help</code>·is |
| 604 | not·defined,·name·is·also·used·to·generate·the·default·usage·message.</p></li><li><p><strong><code·class="inline">short</code></strong>·-·Defines·a·short·(single·character)·form·of·an·optional·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Define·a·command·accepting·argument·named·myarg,·with·short·form·$a:</span><span·class="gp·unselectable"> | 604 | not·defined,·name·is·also·used·to·generate·the·default·usage·message.</p></li><li><p><strong><code·class="inline">short</code></strong>·-·Defines·a·short·(single·character)·form·of·an·optional·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Define·a·command·accepting·argument·named·myarg,·with·short·form·$a:</span><span·class="gp·unselectable"> |
| 605 | 1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 605 | 1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="8057499327-1">#{</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8057499327-2">[</span><span·class="p"·data-group-id="8057499327-3">#{</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·442,·SHA:·70f4f20f7f0fb5e1c406c00200e3b69c4a64e21b996b599851e7b5f0e7723e40·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 606 | </span><span·class="c1">%%·Parse·command·line·"-a·str":</span><span·class="gp·unselectable"> | 606 | </span><span·class="c1">%%·Parse·command·line·"-a·str":</span><span·class="gp·unselectable"> |
| 607 | 2>·</span><span·class="p"·data-group-id=" | 607 | 2>·</span><span·class="p"·data-group-id="8057499327-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·620,·SHA:·404eca18c8ab261ee47dcd833dadd10046fd2640db6dbbfa9e71b73e136fea2a·...·]-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">.</span><span·class="w"> |
| 608 | </span><span·class="p"·data-group-id=" | 608 | </span><span·class="p"·data-group-id="8057499327-7">#{</span><span·class="ss">myarg</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"str"</span><span·class="p"·data-group-id="8057499327-7">}</span><span·class="w"> |
| 609 | </span><span·class="c1">%%·Option·value·can·be·concatenated·with·the·switch:·"-astr"</span><span·class="gp·unselectable"> | 609 | </span><span·class="c1">%%·Option·value·can·be·concatenated·with·the·switch:·"-astr"</span><span·class="gp·unselectable"> |
| 610 | 3>·</span><span·class="p"·data-group-id=" | 610 | 3>·</span><span·class="p"·data-group-id="8057499327-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·539,·SHA:·c72929cb2880ea64dce0c3d92075818e0dba7c1b0d55ff845beee497c3aa2bf4·...·]-9">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">.</span><span·class="w"> |
| 611 | </span><span·class="p"·data-group-id=" | 611 | </span><span·class="p"·data-group-id="8057499327-11">#{</span><span·class="ss">myarg</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"str"</span><span·class="p"·data-group-id="8057499327-11">}</span></code></pre><p>By·default·all·options·expect·a·single·value·following·the·option·switch.·The |
| 612 | only·exception·is·an·option·of·a·boolean·type.</p></li><li><p><strong><code·class="inline">long</code></strong>·-·Defines·a·long·form·of·an·optional·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 612 | only·exception·is·an·option·of·a·boolean·type.</p></li><li><p><strong><code·class="inline">long</code></strong>·-·Defines·a·long·form·of·an·optional·argument.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9832910414-1">#{</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="9832910414-2">[</span><span·class="p"·data-group-id="9832910414-3">#{</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·454,·SHA:·262c0e57d85d9e111312aa9ea03ccbb2d88cfe66c964b1c5286ae0bf41b9362a·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 613 | </span><span·class="c1">%%·Parse·command·line·"-name·Erlang":</span><span·class="gp·unselectable"> | 613 | </span><span·class="c1">%%·Parse·command·line·"-name·Erlang":</span><span·class="gp·unselectable"> |
| 614 | 2>·</span><span·class="p"·data-group-id=" | 614 | 2>·</span><span·class="p"·data-group-id="9832910414-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·626,·SHA:·63e64ad6613c63d8310c8476fe3425e86cc726f6f0f4d3bff555acadb73c8561·...·]-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">.</span><span·class="w"> |
| 615 | </span><span·class="p"·data-group-id=" | 615 | </span><span·class="p"·data-group-id="9832910414-7">#{</span><span·class="ss">myarg</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"Erlang"</span><span·class="p"·data-group-id="9832910414-7">}</span><span·class="w"> |
| 616 | </span><span·class="c1">%%·Or·use·"="·to·separate·the·switch·and·the·value:</span><span·class="gp·unselectable"> | 616 | </span><span·class="c1">%%·Or·use·"="·to·separate·the·switch·and·the·value:</span><span·class="gp·unselectable"> |
| 617 | 3>·</span><span·class="p"·data-group-id=" | 617 | 3>·</span><span·class="p"·data-group-id="9832910414-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·546,·SHA:·989320bd1bb86c3d19a1c2144e5efb2b849003cf6f7ee5662ff3d062e57c2a71·...·]-9">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArgMap</span><span·class="p">.</span><span·class="w"> |
| 618 | </span><span·class="p"·data-group-id=" | 618 | </span><span·class="p"·data-group-id="9832910414-11">#{</span><span·class="ss">myarg</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"Erlang"</span><span·class="p"·data-group-id="9832910414-11">}</span></code></pre><p>If·neither·<code·class="inline">short</code>·not·<code·class="inline">long</code>·is·defined,·the·argument·is·treated·as |
| 619 | positional.</p></li><li><p><strong><code·class="inline">required</code></strong>·-·Forces·the·parser·to·expect·the·argument·to·be·present·in·the | 619 | positional.</p></li><li><p><strong><code·class="inline">required</code></strong>·-·Forces·the·parser·to·expect·the·argument·to·be·present·in·the |
| 620 | command·line.·By·default,·all·positional·argument·are·required,·and·all | 620 | command·line.·By·default,·all·positional·argument·are·required,·and·all |
| 621 | options·are·not.</p></li><li><p><strong><code·class="inline">default</code></strong>·-·Specifies·the·default·value·to·put·in·the·parsed·argument·map | 621 | options·are·not.</p></li><li><p><strong><code·class="inline">default</code></strong>·-·Specifies·the·default·value·to·put·in·the·parsed·argument·map |
| 622 | if·the·value·is·not·supplied·in·the·command·line.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 622 | if·the·value·is·not·supplied·in·the·command·line.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="7510532137-1">(</span><span·class="p"·data-group-id="7510532137-2">[</span><span·class="p"·data-group-id="7510532137-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7510532137-3">#{</span><span·class="ss">arguments[·...·truncated·by·diffoscope;·len:·702,·SHA:·28c8941be1a71e669fb417c4cc9be919268701e74017c80d6d15026a3d5dd8be·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 623 | </span><span·class="p"·data-group-id=" | 623 | </span><span·class="p"·data-group-id="7510532137-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7510532137-7">#{</span><span·class="p"·data-group-id="7510532137-7">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 624 | 2>·</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 624 | 2>·</span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="7510532137-8">(</span><span·class="p"·data-group-id="7510532137-9">[</span><span·class="p"·data-group-id="7510532137-9">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7510532137-10">#{</span><span·class="ss">argument[·...·truncated·by·diffoscope;·len:·901,·SHA:·d72023fd72a5d98a1a2a60b1c604b01b951f5f1e721440c1bf0d6048131a74b4·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 625 | </span><span·class="p"·data-group-id=" | 625 | </span><span·class="p"·data-group-id="7510532137-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7510532137-14">#{</span><span·class="ss">myarg</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"d[·...·truncated·by·diffoscope;·len:·56,·SHA:·6b1936eefb710bc921578fbedf65e579fbfad13572f2e046dbe85767f6254058·...·]-14">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre></li><li><p><strong><code·class="inline">type</code></strong>·-·Defines·type·conversion·and·validation·routine.·The·default·is |
| 626 | <code·class="inline">string</code>,·assuming·no·conversion.</p></li><li><p><strong><code·class="inline">nargs</code></strong>·-·Defines·the·number·of·following·arguments·to·consume·from·the | 626 | <code·class="inline">string</code>,·assuming·no·conversion.</p></li><li><p><strong><code·class="inline">nargs</code></strong>·-·Defines·the·number·of·following·arguments·to·consume·from·the |
| 627 | command·line.·By·default,·the·parser·consumes·the·next·argument·and·converts | 627 | command·line.·By·default,·the·parser·consumes·the·next·argument·and·converts |
| 628 | it·into·an·Erlang·term·according·to·the·specified·type.</p><ul><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pos_integer/0"><code·class="inline">pos_integer/0</code></a></strong>·-·Consume·exactly·this·number·of·positional·arguments, | 628 | it·into·an·Erlang·term·according·to·the·specified·type.</p><ul><li><p><strong><a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:pos_integer/0"><code·class="inline">pos_integer/0</code></a></strong>·-·Consume·exactly·this·number·of·positional·arguments, |
| 629 | fail·if·there·is·not·enough.·Value·in·the·argument·map·contains·a·list·of | 629 | fail·if·there·is·not·enough.·Value·in·the·argument·map·contains·a·list·of |
| 630 | exactly·this·length.·Example,·defining·a·positional·argument·expecting·3 | 630 | exactly·this·length.·Example,·defining·a·positional·argument·expecting·3 |
| 631 | integer·values:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 631 | integer·values:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Cmd</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0173750485-1">#{</span><span·class="ss">arguments</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0173750485-2">[</span><span·class="p"·data-group-id="0173750485-3">#{</span><span·class="ss">[·...·truncated·by·diffoscope;·len:·623,·SHA:·8a40146415f29b15414d136be12d7052c7f528b5e1f75d4f2f0ff38885b05160·...·]-1">}</span><span·class="p">,</span><span·class="w"> |
| 632 | </span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 632 | </span><span·class="nc">argparse</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="0173750485-4">(</span><span·class="p"·data-group-id="0173750485-5">[</span><span·class="s">"1"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"2"</span><span·class="p">,</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·191,·SHA:·99a6d48f656f3e2b4f010f3e07f7cd37e500e1c6f8d6b7314b3910aef49a32aa·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| Max diff block lines reached; 69081/128714 bytes (53.67%) of diff not shown. | |||
| Offset 132, 22 lines modified | Offset 132, 22 lines modified | ||
| 132 | is·used·for·entries·that·have·not·been·explicitly·set.</p><p>Arrays·uses·<em>zero</em>-based·indexing.·This·is·a·deliberate·design·choice·and | 132 | is·used·for·entries·that·have·not·been·explicitly·set.</p><p>Arrays·uses·<em>zero</em>-based·indexing.·This·is·a·deliberate·design·choice·and |
| 133 | differs·from·other·Erlang·data·structures,·for·example,·tuples.</p><p>Unless·specified·by·the·user·when·the·array·is·created,·the·default·value·is·the | 133 | differs·from·other·Erlang·data·structures,·for·example,·tuples.</p><p>Unless·specified·by·the·user·when·the·array·is·created,·the·default·value·is·the |
| 134 | atom·<code·class="inline">undefined</code>.·There·is·no·difference·between·an·unset·entry·and·an·entry | 134 | atom·<code·class="inline">undefined</code>.·There·is·no·difference·between·an·unset·entry·and·an·entry |
| 135 | that·has·been·explicitly·set·to·the·same·value·as·the·default·one·(compare | 135 | that·has·been·explicitly·set·to·the·same·value·as·the·default·one·(compare |
| 136 | <a·href="#reset/2"><code·class="inline">reset/2</code></a>).·If·you·need·to·differentiate·between·unset·and·set·entries,·ensure | 136 | <a·href="#reset/2"><code·class="inline">reset/2</code></a>).·If·you·need·to·differentiate·between·unset·and·set·entries,·ensure |
| 137 | that·the·default·value·cannot·be·confused·with·the·values·of·set·entries.</p><p>The·array·never·shrinks·automatically.·If·an·index·<code·class="inline">I</code>·has·been·used·to·set·an | 137 | that·the·default·value·cannot·be·confused·with·the·values·of·set·entries.</p><p>The·array·never·shrinks·automatically.·If·an·index·<code·class="inline">I</code>·has·been·used·to·set·an |
| 138 | entry·successfully,·all·indices·in·the·range·<code·class="inline">[0,I]</code>·stay·accessible·unless·the | 138 | entry·successfully,·all·indices·in·the·range·<code·class="inline">[0,I]</code>·stay·accessible·unless·the |
| 139 | array·size·is·explicitly·changed·by·calling·<a·href="#resize/2"><code·class="inline">resize/2</code></a>.</p><p><em>Examples:</em></p><p>Create·a·fixed-size·array·with·entries·0-9·set·to·<code·class="inline">undefined</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 139 | array·size·is·explicitly·changed·by·calling·<a·href="#resize/2"><code·class="inline">resize/2</code></a>.</p><p><em>Examples:</em></p><p>Create·a·fixed-size·array·with·entries·0-9·set·to·<code·class="inline">undefined</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="6135777709-1">(</span><span·class="mi">10</span><span·class="p"·data-group-id="6135777709-1">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="mi">10</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">size</span><span·class="p"·data-group-id=" | 140 | </span><span·class="mi">10</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">size</span><span·class="p"·data-group-id="6135777709-2">(</span><span·class="n">A0</span><span·class="p"·data-group-id="6135777709-2">)</span><span·class="p">.</span></code></pre><p>Create·an·extendible·array·and·set·entry·17·to·<code·class="inline">true</code>,·causing·the·array·to·grow |
| 141 | automatically:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">set</span><span·class="p"·data-group-id=" | 141 | automatically:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">A1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">set</span><span·class="p"·data-group-id="4435282124-1">(</span><span·class="mi">17</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><spa[·...·truncated·by·diffoscope;·len:·143,·SHA:·5e3ce31773e0bca1339b8026846fedc874015105b975cac6202fee4fc1a07dc1·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 142 | </span><span·class="mi">18</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">size</span><span·class="p"·data-group-id=" | 142 | </span><span·class="mi">18</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">size</span><span·class="p"·data-group-id="4435282124-3">(</span><span·class="n">A1</span><span·class="p"·data-group-id="4435282124-3">)</span><span·class="p">.</span></code></pre><p>Read·back·a·stored·value:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">true</span><span·class[·...·truncated·by·diffoscope;·len:·862,·SHA:·ac18b39b38a02e5499768c43a0a044d78019ed9ad9281eccc95274fb1e41cac8·...·]-1">)</span></code></pre><p>Accessing·an·entry·beyond·the·last·set·entry·also·returns·the·default·value,·if |
| 143 | the·array·does·not·have·fixed·size:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">undefined</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="4 | 143 | the·array·does·not·have·fixed·size:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">undefined</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">array</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="4740816243-1">(</span><span·class="mi">18</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A1</span><span·class="p"·data-group-id="4740816243-1">)</span><span·class="p">.</span></code></pre><p>"Sparse"·functions·ignore·default[·...·truncated·by·diffoscope;·len:·514,·SHA:·662bb345a8faccf2016c744104f1a3532523598bca90e5090c3bebf26c7e0709·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="p"·data-group-id=" | 144 | </span><span·class="p"·data-group-id="1964880103-2">[</span><span·class="p"·data-group-id="1964880103-3">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="1964880103-3">}</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·1017,·SHA:·fd2fe5cfdeb794c4ebe9caf02e477908ffa1e185c52b48c3e9d1baed90772b59·...·]-1">)</span><span·class="p">.</span></code></pre><p>A·fixed-size·array·does·not·grow·automatically·and·does·not·allow·accesses |
| 145 | beyond·the·last·set·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 145 | beyond·the·last·set·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="2274014558-1">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="p"·data-group-id="2274014558-2">{</span><span·class="ss">badarg</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="2274014558[·...·truncated·by·diffoscope;·len:·643,·SHA:·745b17fdda9a0a06e62e6e01efb5ad2f97cace2e87acdbed43558193e711bc72·...·]8-3">)</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="p"·data-group-id=" | 146 | </span><span·class="p"·data-group-id="2274014558-5">{</span><span·class="ss">'EXIT'</span><span·class="p">,</span><span·class="p"·data-group-id="2274014558-6">{</span><span·class="ss">badarg</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="2274014558[·...·truncated·by·diffoscope;·len:·567,·SHA:·0ad50848d11a718233fdf1f2401c39c0c3c64d14004116a4a2c05f980245025c·...·]8-7">)</span><span·class="p">.</span></code></pre> |
| 147 | ····</section> | 147 | ····</section> |
| 148 | </div> | 148 | </div> |
| 149 | ··<section·id="summary"·class="details-list"> | 149 | ··<section·id="summary"·class="details-list"> |
| 150 | ····<h1·class="section-heading"> | 150 | ····<h1·class="section-heading"> |
| 151 | ······<a·class="hover-link"·href="#summary"> | 151 | ······<a·class="hover-link"·href="#summary"> |
| Offset 1138, 15 lines modified | Offset 1138, 15 lines modified | ||
| 1138 | ······</div> | 1138 | ······</div> |
| 1139 | <p>Creates·a·new·array·according·to·the·specified·options.·By·default,·the·array·is | 1139 | <p>Creates·a·new·array·according·to·the·specified·options.·By·default,·the·array·is |
| 1140 | extendible·and·has·initial·size·zero.·Array·indices·start·at·<code·class="inline">0</code>.</p><p><code·class="inline">Options</code>·is·a·single·term·or·a·list·of·terms,·selected·from·the·following:</p><ul><li><p><strong><code·class="inline">N::integer()·>=·0</code>·or·<code·class="inline">{size,·N::integer()·>=·0}</code></strong>·-·Specifies·the·initial | 1140 | extendible·and·has·initial·size·zero.·Array·indices·start·at·<code·class="inline">0</code>.</p><p><code·class="inline">Options</code>·is·a·single·term·or·a·list·of·terms,·selected·from·the·following:</p><ul><li><p><strong><code·class="inline">N::integer()·>=·0</code>·or·<code·class="inline">{size,·N::integer()·>=·0}</code></strong>·-·Specifies·the·initial |
| 1141 | array·size;·this·also·implies·<code·class="inline">{fixed,·true}</code>.·If·<code·class="inline">N</code>·is·not·a·non-negative | 1141 | array·size;·this·also·implies·<code·class="inline">{fixed,·true}</code>.·If·<code·class="inline">N</code>·is·not·a·non-negative |
| 1142 | integer,·the·call·fails·with·reason·<code·class="inline">badarg</code>.</p></li><li><p><strong><code·class="inline">fixed</code>·or·<code·class="inline">{fixed,·true}</code></strong>·-·Creates·a·fixed-size·array.·See·also·<a·href="#fix/1"><code·class="inline">fix/1</code></a>.</p></li><li><p><strong><code·class="inline">{fixed,·false}</code></strong>·-·Creates·an·extendible·(non-fixed-size)·array.</p></li><li><p><strong><code·class="inline">{default,·Value}</code></strong>·-·Sets·the·default·value·for·the·array·to·<code·class="inline">Value</code>.</p></li></ul><p>Options·are·processed·in·the·order·they·occur·in·the·list,·that·is,·later | 1142 | integer,·the·call·fails·with·reason·<code·class="inline">badarg</code>.</p></li><li><p><strong><code·class="inline">fixed</code>·or·<code·class="inline">{fixed,·true}</code></strong>·-·Creates·a·fixed-size·array.·See·also·<a·href="#fix/1"><code·class="inline">fix/1</code></a>.</p></li><li><p><strong><code·class="inline">{fixed,·false}</code></strong>·-·Creates·an·extendible·(non-fixed-size)·array.</p></li><li><p><strong><code·class="inline">{default,·Value}</code></strong>·-·Sets·the·default·value·for·the·array·to·<code·class="inline">Value</code>.</p></li></ul><p>Options·are·processed·in·the·order·they·occur·in·the·list,·that·is,·later |
| 1143 | options·have·higher·precedence.</p><p>The·default·value·is·used·as·the·value·of·uninitialized·entries,·and·cannot·be | 1143 | options·have·higher·precedence.</p><p>The·default·value·is·used·as·the·value·of·uninitialized·entries,·and·cannot·be |
| 1144 | changed·once·the·array·has·been·created.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 1144 | changed·once·the·array·has·been·created.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="0052780750-1">(</span><span·class="mi">100</span><span·class="p"·data-group-id="0052780750-1">)</span></code></pre><p>creates·a·fixed-size·array·of·size·100.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">array</span><span·class="p">:<[·...·truncated·by·diffoscope;·len:·1391,·SHA:·f8e34d7b359af6e9239f7aa32a54b30882c7179684a6e24e15f6f76d8b004b4c·...·]-1">)</span></code></pre><p>creates·an·extendible·array·with·initial·size·10·whose·default·value·is·<code·class="inline">-1</code>.</p><p>See·also·<a·href="#fix/1"><code·class="inline">fix/1</code></a>,·<a·href="#from_list/2"><code·class="inline">from_list/2</code></a>,·<a·href="#get/2"><code·class="inline">get/2</code></a>,·<a·href="#new/0"><code·class="inline">new/0</code></a>,·<a·href="#new/2"><code·class="inline">new/2</code></a>,·<a·href="#set/3"><code·class="inline">set/3</code></a>.</p> |
| 1145 | ··</section> | 1145 | ··</section> |
| 1146 | </section> | 1146 | </section> |
| 1147 | <section·class="detail"·id="new/2"> | 1147 | <section·class="detail"·id="new/2"> |
| 1148 | ··<div·class="detail-header"> | 1148 | ··<div·class="detail-header"> |
| 1149 | ····<a·href="#new/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1149 | ····<a·href="#new/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1150 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1150 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1169, 15 lines modified | Offset 1169, 15 lines modified | ||
| 1169 | ······</div> | 1169 | ······</div> |
| 1170 | <p>Creates·a·new·array·according·to·the·specified·size·and·options.</p><p>If·<code·class="inline">Size</code>·is·not·a·non-negative·integer,·the·call·fails·with·reason·<code·class="inline">badarg</code>. | 1170 | <p>Creates·a·new·array·according·to·the·specified·size·and·options.</p><p>If·<code·class="inline">Size</code>·is·not·a·non-negative·integer,·the·call·fails·with·reason·<code·class="inline">badarg</code>. |
| 1171 | By·default,·the·array·has·fixed·size.·Notice·that·any·size·specifications·in | 1171 | By·default,·the·array·has·fixed·size.·Notice·that·any·size·specifications·in |
| 1172 | <code·class="inline">Options</code>·override·parameter·<code·class="inline">Size</code>.</p><p>If·<code·class="inline">Options</code>·is·a·list,·this·is·equivalent·to | 1172 | <code·class="inline">Options</code>·override·parameter·<code·class="inline">Size</code>.</p><p>If·<code·class="inline">Options</code>·is·a·list,·this·is·equivalent·to |
| 1173 | <a·href="#new/1"><code·class="inline">new([{size,·Size}·|·Options])</code></a>,·otherwise·it·is·equivalent·to | 1173 | <a·href="#new/1"><code·class="inline">new([{size,·Size}·|·Options])</code></a>,·otherwise·it·is·equivalent·to |
| 1174 | <a·href="#new/1"><code·class="inline">new([{size,·Size}·|·[Options]])</code></a>.·However,·using·this·function | 1174 | <a·href="#new/1"><code·class="inline">new([{size,·Size}·|·[Options]])</code></a>.·However,·using·this·function |
| 1175 | directly·is·more·efficient.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 1175 | directly·is·more·efficient.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">array</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="8954829437-1">(</span><span·class="mi">100</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8954829437-2">{</span><span·class="ss">default</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·68,·SHA:·77161a470053f1181e7a5742c6985abb4af6b637e5b64d2ee70f41da4a37d92d·...·]-1">)</span></code></pre><p>creates·a·fixed-size·array·of·size·100,·whose·default·value·is·<code·class="inline">0</code>.</p><p>See·also·<a·href="#new/1"><code·class="inline">new/1</code></a>.</p> |
| 1176 | ··</section> | 1176 | ··</section> |
| 1177 | </section> | 1177 | </section> |
| 1178 | <section·class="detail"·id="relax/1"> | 1178 | <section·class="detail"·id="relax/1"> |
| 1179 | ··<div·class="detail-header"> | 1179 | ··<div·class="detail-header"> |
| 1180 | ····<a·href="#relax/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1180 | ····<a·href="#relax/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1181 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1181 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1583, 15 lines modified | Offset 1583, 15 lines modified | ||
| 1583 | ······<p·class="built-using"> | 1583 | ······<p·class="built-using"> |
| 1584 | ········Built·using | 1584 | ········Built·using |
| 1585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1587 | ······</p> | 1587 | ······</p> |
| 1588 | <p>Copyright·©·1996-202 | 1588 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1589 | ····</footer> | 1589 | ····</footer> |
| 1590 | ··</div> | 1590 | ··</div> |
| 1591 | </main> | 1591 | </main> |
| 1592 | </div> | 1592 | </div> |
| 1593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1594 | ··<script> | 1594 | ··<script> |
| 1595 | ··let·initialized·=·false; | 1595 | ··let·initialized·=·false; |
| Offset 128, 15 lines modified | Offset 128, 15 lines modified | ||
| 128 | <p>Assert·macros.</p><h2·id="description"·class="section-heading"> | 128 | <p>Assert·macros.</p><h2·id="description"·class="section-heading"> |
| 129 | ··<a·href="#description"·class="hover-link"> | 129 | ··<a·href="#description"·class="hover-link"> |
| 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 130 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 131 | ··</a> | 131 | ··</a> |
| 132 | ··<span·class="text">Description</span> | 132 | ··<span·class="text">Description</span> |
| 133 | </h2> | 133 | </h2> |
| 134 | <p>The·include·file·<code·class="inline">assert.hrl</code>·provides·macros·for·inserting·assertions·in·your | 134 | <p>The·include·file·<code·class="inline">assert.hrl</code>·provides·macros·for·inserting·assertions·in·your |
| 135 | program·code.</p><p>Include·the·following·directive·in·the·module·from·which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 135 | program·code.</p><p>Include·the·following·directive·in·the·module·from·which·the·function·is·called:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="5784719179-1">(</span><span·class="s">"stdlib/include/assert.hrl"</span><span·class="p"·data-group-id="5784719179-1">)</span><span·class="p">.</span></code></pre><p>When·an·assertion·succeeds,·the·assert·macro·yields·the·atom·<code·class="inline">ok</code>.·When·an |
| 136 | assertion·fails,·an·exception·of·type·<code·class="inline">error</code>·is·generated.·The·associated·error | 136 | assertion·fails,·an·exception·of·type·<code·class="inline">error</code>·is·generated.·The·associated·error |
| 137 | term·has·the·form·<code·class="inline">{Macro,·Info}</code>.·<code·class="inline">Macro</code>·is·the·macro·name,·for·example, | 137 | term·has·the·form·<code·class="inline">{Macro,·Info}</code>.·<code·class="inline">Macro</code>·is·the·macro·name,·for·example, |
| 138 | <code·class="inline">assertEqual</code>.·<code·class="inline">Info</code>·is·a·list·of·tagged·values,·such·as | 138 | <code·class="inline">assertEqual</code>.·<code·class="inline">Info</code>·is·a·list·of·tagged·values,·such·as |
| 139 | <code·class="inline">[{module,·M},·{line,·L},·...]</code>,·which·gives·more·information·about·the·location | 139 | <code·class="inline">[{module,·M},·{line,·L},·...]</code>,·which·gives·more·information·about·the·location |
| 140 | and·cause·of·the·exception.·All·entries·in·the·<code·class="inline">Info</code>·list·are·optional;·do·not | 140 | and·cause·of·the·exception.·All·entries·in·the·<code·class="inline">Info</code>·list·are·optional;·do·not |
| 141 | rely·programmatically·on·any·of·them·being·present.</p><p>Each·assert·macro·has·a·corresponding·version·with·an·extra·argument,·for·adding | 141 | rely·programmatically·on·any·of·them·being·present.</p><p>Each·assert·macro·has·a·corresponding·version·with·an·extra·argument,·for·adding |
| 142 | comments·to·assertions.·These·can·for·example·be·printed·as·part·of·error | 142 | comments·to·assertions.·These·can·for·example·be·printed·as·part·of·error |
| Offset 156, 15 lines modified | Offset 156, 15 lines modified | ||
| 156 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 156 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 157 | ··</a> | 157 | ··</a> |
| 158 | ··<span·class="text">Macros</span> | 158 | ··<span·class="text">Macros</span> |
| 159 | </h2> | 159 | </h2> |
| 160 | <ul><li><p><strong><code·class="inline">assert(BoolExpr)</code></strong></p></li><li><p><strong><code·class="inline">assert(BoolExpr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">BoolExpr</code>·completes·normally | 160 | <ul><li><p><strong><code·class="inline">assert(BoolExpr)</code></strong></p></li><li><p><strong><code·class="inline">assert(BoolExpr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">BoolExpr</code>·completes·normally |
| 161 | returning·<code·class="inline">true</code>.</p></li><li><p><strong><code·class="inline">assertNot(BoolExpr)</code></strong></p></li><li><p><strong><code·class="inline">assertNot(BoolExpr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">BoolExpr</code>·completes·normally | 161 | returning·<code·class="inline">true</code>.</p></li><li><p><strong><code·class="inline">assertNot(BoolExpr)</code></strong></p></li><li><p><strong><code·class="inline">assertNot(BoolExpr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">BoolExpr</code>·completes·normally |
| 162 | returning·<code·class="inline">false</code>.</p></li><li><p><strong><code·class="inline">assertMatch(GuardedPattern,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertMatch(GuardedPattern,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code>·completes | 162 | returning·<code·class="inline">false</code>.</p></li><li><p><strong><code·class="inline">assertMatch(GuardedPattern,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertMatch(GuardedPattern,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code>·completes |
| 163 | normally·yielding·a·value·that·matches·<code·class="inline">GuardedPattern</code>,·for·example:</p><pre><code·class="text">?assertMatch({bork,·_},·f())</code></pre><p>Notice·that·a·guard·<code·class="inline">when·...</code>·can·be·included:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="nf">assertMatch</span><span·class="p"·data-group-id="54 | 163 | normally·yielding·a·value·that·matches·<code·class="inline">GuardedPattern</code>,·for·example:</p><pre><code·class="text">?assertMatch({bork,·_},·f())</code></pre><p>Notice·that·a·guard·<code·class="inline">when·...</code>·can·be·included:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="nf">assertMatch</span><span·class="p"·data-group-id="5482398916-1">(</span><span·class="p"·data-group-id="5482398916-2">{</span><span·class="ss">bork</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="5482398916-2">}</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·389,·SHA:·ae48ca5776858d1f09fdd457c2f5e9893bd9fa31dc89931d6c7c20a1346cdde5·...·]-1">)</span></code></pre></li><li><p><strong><code·class="inline">assertNotMatch(GuardedPattern,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertNotMatch(GuardedPattern,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code> |
| 164 | completes·normally·yielding·a·value·that·does·not·match·<code·class="inline">GuardedPattern</code>.</p><p>As·in·<code·class="inline">assertMatch</code>,·<code·class="inline">GuardedPattern</code>·can·have·a·<code·class="inline">when</code>·part.</p></li><li><p><strong><code·class="inline">assertEqual(ExpectedValue,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertEqual(ExpectedValue,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code>·completes | 164 | completes·normally·yielding·a·value·that·does·not·match·<code·class="inline">GuardedPattern</code>.</p><p>As·in·<code·class="inline">assertMatch</code>,·<code·class="inline">GuardedPattern</code>·can·have·a·<code·class="inline">when</code>·part.</p></li><li><p><strong><code·class="inline">assertEqual(ExpectedValue,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertEqual(ExpectedValue,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code>·completes |
| 165 | normally·yielding·a·value·that·is·exactly·equal·to·<code·class="inline">ExpectedValue</code>.</p></li><li><p><strong><code·class="inline">assertNotEqual(ExpectedValue,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertNotEqual(ExpectedValue,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code> | 165 | normally·yielding·a·value·that·is·exactly·equal·to·<code·class="inline">ExpectedValue</code>.</p></li><li><p><strong><code·class="inline">assertNotEqual(ExpectedValue,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertNotEqual(ExpectedValue,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code> |
| 166 | completes·normally·yielding·a·value·that·is·not·exactly·equal·to | 166 | completes·normally·yielding·a·value·that·is·not·exactly·equal·to |
| 167 | <code·class="inline">ExpectedValue</code>.</p></li><li><p><strong><code·class="inline">assertException(Class,·Term,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertException(Class,·Term,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code> | 167 | <code·class="inline">ExpectedValue</code>.</p></li><li><p><strong><code·class="inline">assertException(Class,·Term,·Expr)</code></strong></p></li><li><p><strong><code·class="inline">assertException(Class,·Term,·Expr,·Comment)</code></strong>·-·Tests·that·<code·class="inline">Expr</code> |
| 168 | completes·abnormally·with·an·exception·of·type·<code·class="inline">Class</code>·and·with·the·associated | 168 | completes·abnormally·with·an·exception·of·type·<code·class="inline">Class</code>·and·with·the·associated |
| 169 | <code·class="inline">Term</code>.·The·assertion·fails·if·<code·class="inline">Expr</code>·raises·a·different·exception·or·if·it | 169 | <code·class="inline">Term</code>.·The·assertion·fails·if·<code·class="inline">Expr</code>·raises·a·different·exception·or·if·it |
| 170 | completes·normally·returning·any·value.</p><p>Notice·that·both·<code·class="inline">Class</code>·and·<code·class="inline">Term</code>·can·be·guarded·patterns,·as·in | 170 | completes·normally·returning·any·value.</p><p>Notice·that·both·<code·class="inline">Class</code>·and·<code·class="inline">Term</code>·can·be·guarded·patterns,·as·in |
| Offset 218, 15 lines modified | Offset 218, 15 lines modified | ||
| 218 | ······<p·class="built-using"> | 218 | ······<p·class="built-using"> |
| 219 | ········Built·using | 219 | ········Built·using |
| 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 222 | ······</p> | 222 | ······</p> |
| 223 | <p>Copyright·©·1996-202 | 223 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 224 | ····</footer> | 224 | ····</footer> |
| 225 | ··</div> | 225 | ··</div> |
| 226 | </main> | 226 | </main> |
| 227 | </div> | 227 | </div> |
| 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 229 | ··<script> | 229 | ··<script> |
| 230 | ··let·initialized·=·false; | 230 | ··let·initialized·=·false; |
| Offset 649, 24 lines modified | Offset 649, 24 lines modified | ||
| 649 | ····················Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> | 649 | ····················Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> |
| 650 | ······</div> | 650 | ······</div> |
| 651 | <p>Decodes·a·base64·string·encoded·using·the·standard·alphabet·according·to | 651 | <p>Decodes·a·base64·string·encoded·using·the·standard·alphabet·according·to |
| 652 | <a·href="https://datatracker.ietf.org/doc/html/rfc4648#section-4">RFC·4648·Section·4</a>·to | 652 | <a·href="https://datatracker.ietf.org/doc/html/rfc4648#section-4">RFC·4648·Section·4</a>·to |
| 653 | plain·ASCII.</p><p>The·function·will·strips·away·any·whitespace·characters·and·check·for·the | 653 | plain·ASCII.</p><p>The·function·will·strips·away·any·whitespace·characters·and·check·for·the |
| 654 | the·correct·number·of·<code·class="inline">=</code>·padding·characters·at·the·end·of·the·encoded·string.</p><p>See·<a·href="#t:decode_options/0"><code·class="inline">decode_options/0</code></a>·for·details·on·which·options·can·be·passed.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 654 | the·correct·number·of·<code·class="inline">=</code>·padding·characters·at·the·end·of·the·encoded·string.</p><p>See·<a·href="#t:decode_options/0"><code·class="inline">decode_options/0</code></a>·for·details·on·which·options·can·be·passed.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="4490904263-1">(</span><span·class="s">"AQIDBA=="</span><span·class="p"·data-group-id="4490904263-1">)</span><span·class="p">.</span><span·class="w"> |
| 655 | </span><span·class="p"·data-group-id=" | 655 | </span><span·class="p"·data-group-id="4490904263-2"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4490904263-2">>></span><span·class="gp·unselectable"> |
| 656 | 2>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 656 | 2>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="4490904263-3">(</span><span·class="s">"AQ·ID·BA=="</span><span·class="p"·data-group-id="4490904263-3">)</span><span·class="p">.</span><span·class="w"> |
| 657 | </span><span·class="p"·data-group-id=" | 657 | </span><span·class="p"·data-group-id="4490904263-4"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4490904263-4">>></span><span·class="gp·unselectable"> |
| 658 | 3>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 658 | 3>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="4490904263-5">(</span><span·class="s">"AQIDBA="</span><span·class="p"·data-group-id="4490904263-5">)</span><span·class="p">.</span><span·class="w"> |
| 659 | </span><span·class="gt">**·exception·error:·missing_padding | 659 | </span><span·class="gt">**·exception·error:·missing_padding |
| 660 | ·····in·function··base64:decode_list/7·(base64.erl,·line·734) | 660 | ·····in·function··base64:decode_list/7·(base64.erl,·line·734) |
| 661 | ········***·data·to·decode·is·missing·final·=·padding·characters,·if·this·is·intended,·use·the·`padding·=>·false`·option</span><span·class="gp·unselectable"> | 661 | ········***·data·to·decode·is·missing·final·=·padding·characters,·if·this·is·intended,·use·the·`padding·=>·false`·option</span><span·class="gp·unselectable"> |
| 662 | 4>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 662 | 4>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="4490904263-6">(</span><span·class="s">"AQIDBA="</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4490904263-7">#{</span><span·class="w">·</span><span·class="ss">padding</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·188,·SHA:·bb4590d66333a7aac5f4f145e24b7437f09d1cd22d16dca65d457b45ec6c6aea·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 663 | </span><span·class="p"·data-group-id=" | 663 | </span><span·class="p"·data-group-id="4490904263-8"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4490904263-8">>></span></code></pre> |
| 664 | ··</section> | 664 | ··</section> |
| 665 | </section> | 665 | </section> |
| 666 | <section·class="detail"·id="decode_to_string/1"> | 666 | <section·class="detail"·id="decode_to_string/1"> |
| 667 | ··<div·class="detail-header"> | 667 | ··<div·class="detail-header"> |
| 668 | ····<a·href="#decode_to_string/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 668 | ····<a·href="#decode_to_string/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 669 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 669 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 896, 18 lines modified | Offset 896, 18 lines modified | ||
| 896 | ·························Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> | 896 | ·························Data·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> |
| 897 | ······</div> | 897 | ······</div> |
| 898 | <p>Decodes·a·base64·"mime"·string·encoded·using·the·standard·alphabet·according·to | 898 | <p>Decodes·a·base64·"mime"·string·encoded·using·the·standard·alphabet·according·to |
| 899 | <a·href="https://datatracker.ietf.org/doc/html/rfc4648#section-4">RFC·4648·Section·4</a>·to | 899 | <a·href="https://datatracker.ietf.org/doc/html/rfc4648#section-4">RFC·4648·Section·4</a>·to |
| 900 | plain·ASCII.</p><p>The·function·will·strips·away·any·illegal·characters.·It·does·<em>not</em>·check·for·the | 900 | plain·ASCII.</p><p>The·function·will·strips·away·any·illegal·characters.·It·does·<em>not</em>·check·for·the |
| 901 | the·correct·number·of·<code·class="inline">=</code>·padding·characters·at·the·end·of·the·encoded·string.</p><p>See·<a·href="#t:decode_options/0"><code·class="inline">decode_options/0</code></a>·for·details·on·which·options·can·be·passed.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">mime_decode</span><span·class="p"·data-group-id=" | 901 | the·correct·number·of·<code·class="inline">=</code>·padding·characters·at·the·end·of·the·encoded·string.</p><p>See·<a·href="#t:decode_options/0"><code·class="inline">decode_options/0</code></a>·for·details·on·which·options·can·be·passed.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">mime_decode</span><span·class="p"·data-group-id="3167242211-1">(</span><span·class="s">"AQIDBA=="</span><span·class="p"·data-group-id="3167242211-1">)</span><span·class="p">.</span><span·class="w"> |
| 902 | </span><span·class="p"·data-group-id=" | 902 | </span><span·class="p"·data-group-id="3167242211-2"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="3167242211-2">>></span><span·class="gp·unselectable"> |
| 903 | 2>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">mime_decode</span><span·class="p"·data-group-id=" | 903 | 2>·</span><span·class="nc">base64</span><span·class="p">:</span><span·class="nf">mime_decode</span><span·class="p"·data-group-id="3167242211-3">(</span><span·class="s">"AQIDB=A="</span><span·class="p"·data-group-id="3167242211-3">)</span><span·class="p">.</span><span·class="w"> |
| 904 | </span><span·class="p"·data-group-id=" | 904 | </span><span·class="p"·data-group-id="3167242211-4"><<</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="3167242211-4">>></span></code></pre> |
| 905 | ··</section> | 905 | ··</section> |
| 906 | </section> | 906 | </section> |
| 907 | <section·class="detail"·id="mime_decode_to_string/1"> | 907 | <section·class="detail"·id="mime_decode_to_string/1"> |
| 908 | ··<div·class="detail-header"> | 908 | ··<div·class="detail-header"> |
| 909 | ····<a·href="#mime_decode_to_string/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 909 | ····<a·href="#mime_decode_to_string/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 910 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 910 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 991, 15 lines modified | Offset 991, 15 lines modified | ||
| 991 | ······<p·class="built-using"> | 991 | ······<p·class="built-using"> |
| 992 | ········Built·using | 992 | ········Built·using |
| 993 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 993 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 994 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 994 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 995 | ······</p> | 995 | ······</p> |
| 996 | <p>Copyright·©·1996-202 | 996 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 997 | ····</footer> | 997 | ····</footer> |
| 998 | ··</div> | 998 | ··</div> |
| 999 | </main> | 999 | </main> |
| 1000 | </div> | 1000 | </div> |
| 1001 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1001 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1002 | ··<script> | 1002 | ··<script> |
| 1003 | ··let·initialized·=·false; | 1003 | ··let·initialized·=·false; |
| Offset 147, 16 lines modified | Offset 147, 16 lines modified | ||
| 147 | <a·href="#strip_files/1"><code·class="inline">strip_files/1</code></a>,·and/or·<a·href="#strip_release/1"><code·class="inline">strip_release/1</code></a>.</p><h2·id="module-reconstruct-source-code"·class="section-heading"> | 147 | <a·href="#strip_files/1"><code·class="inline">strip_files/1</code></a>,·and/or·<a·href="#strip_release/1"><code·class="inline">strip_release/1</code></a>.</p><h2·id="module-reconstruct-source-code"·class="section-heading"> |
| 148 | ··<a·href="#module-reconstruct-source-code"·class="hover-link"> | 148 | ··<a·href="#module-reconstruct-source-code"·class="hover-link"> |
| 149 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 149 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 150 | ··</a> | 150 | ··</a> |
| 151 | ··<span·class="text">Reconstruct·Source·Code</span> | 151 | ··<span·class="text">Reconstruct·Source·Code</span> |
| 152 | </h2> | 152 | </h2> |
| 153 | <p>The·following·example·shows·how·to·reconstruct·Erlang·source·code·from·the·debug | 153 | <p>The·following·example·shows·how·to·reconstruct·Erlang·source·code·from·the·debug |
| 154 | information·in·a·BEAM·file·<code·class="inline">Beam</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9262007897-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9262007897-2">{</span><span·class="p">_</span><span·class="p">,</span><span·class="p"·data-group-id="9262007897-3">[</span><span·class="p"·data-group-id="9262007897-4">{</span><span·class="ss">abstract_code</span><span·class="p">,</span><span·class="p"·data-group-id="9262007897-5">{</span><span·class="p">_</span><span·class="p">,</span><span·class="n">AC</span><span·class="p"·data-group-id="9262007897-5">}</span><span·class="p"·data-group-id="9262007897-4">}</span><span·class="p"·data-group-id="9262007897-3">]</span><span·class="p"·data-group-id="9262007897-2">}</span><span·class="p"·data-group-id="9262007897-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">chunks</span><span·class="p"·data-group-id="9262007897-6">(</span><span·class="n">Beam</span><span·class="p">,</span><span·class="p"·data-group-id="9262007897-7">[</span><span·class="ss">abstract_code</span><span·class="p"·data-group-id="9262007897-7">]</span><span·class="p"·data-group-id="9262007897-6">)</span><span·class="p">.</span><span·class="w"> | ||
| 155 | 154 | information·in·a·BEAM·file·<code·class="inline">Beam</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7518554583-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7518554583[·...·truncated·by·diffoscope;·len:·1114,·SHA:·747fd113f31d57236a1c018b738a9e53969a32529b579413361f904920638f9b·...·]"> | |
| 155 | </span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">fwrite</span><span·class="p"·data-group-id="7518554583-8">(</span><span·class="s">"</span><span·class="si">~s</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7518554583-9">[</span><span·class="nc">erl_prettypr</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7518554583-10">(</span><span·class="nc">erl_syntax</span><span·class="p">:</span><span·class="nf">form_list</span><span·class="p"·data-group-id="7518554583-11">(</span><span·class="n">AC</span><span·class="p"·data-group-id="7518554583-11">)</span><span·class="p"·data-group-id="7518554583-10">)</span><span·class="p"·data-group-id="7518554583-9">]</span><span·class="p"·data-group-id="7518554583-8">)</span><span·class="p">.</span></code></pre><h2·id="module-encrypted-debug-information"·class="section-heading"> | ||
| 156 | ··<a·href="#module-encrypted-debug-information"·class="hover-link"> | 156 | ··<a·href="#module-encrypted-debug-information"·class="hover-link"> |
| 157 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 157 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 158 | ··</a> | 158 | ··</a> |
| 159 | ··<span·class="text">Encrypted·Debug·Information</span> | 159 | ··<span·class="text">Encrypted·Debug·Information</span> |
| 160 | </h2> | 160 | </h2> |
| 161 | <p>The·debug·information·can·be·encrypted·to·keep·the·source·code·secret,·but·still | 161 | <p>The·debug·information·can·be·encrypted·to·keep·the·source·code·secret,·but·still |
| 162 | be·able·to·use·tools·such·as·Debugger·or·Xref.</p><p>To·use·encrypted·debug·information,·a·key·must·be·provided·to·the·compiler·and | 162 | be·able·to·use·tools·such·as·Debugger·or·Xref.</p><p>To·use·encrypted·debug·information,·a·key·must·be·provided·to·the·compiler·and |
| Offset 178, 21 lines modified | Offset 178, 21 lines modified | ||
| 178 | ··</a> | 178 | ··</a> |
| 179 | ··<span·class="text">.erlang.crypt</span> | 179 | ··<span·class="text">.erlang.crypt</span> |
| 180 | </h2> | 180 | </h2> |
| 181 | <p><code·class="inline">beam_lib</code>·searches·for·<code·class="inline">.erlang.crypt</code>·in·the·current·directory,·then·the | 181 | <p><code·class="inline">beam_lib</code>·searches·for·<code·class="inline">.erlang.crypt</code>·in·the·current·directory,·then·the |
| 182 | <a·href="../../../../erts-15.2.7/doc/html/init.html#home">user's·home·directory</a>·and·then | 182 | <a·href="../../../../erts-15.2.7/doc/html/init.html#home">user's·home·directory</a>·and·then |
| 183 | <a·href="filename.html#user_config"><code·class="inline">filename:basedir(user_config,·"erlang")</code></a>.·If·the | 183 | <a·href="filename.html#user_config"><code·class="inline">filename:basedir(user_config,·"erlang")</code></a>.·If·the |
| 184 | file·is·found·and·contains·a·key,·<code·class="inline">beam_lib</code>·implicitly·creates·a·crypto·key·fun | 184 | file·is·found·and·contains·a·key,·<code·class="inline">beam_lib</code>·implicitly·creates·a·crypto·key·fun |
| 185 | and·registers·it.</p><p>File·<code·class="inline">.erlang.crypt</code>·is·to·contain·a·single·list·of·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 185 | and·registers·it.</p><p>File·<code·class="inline">.erlang.crypt</code>·is·to·contain·a·single·list·of·tuples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9006647627-1">{</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mode</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·67,·SHA:·a781b2cc60f6901c81b85b5aeca1c3a2fdb07ea627331e847e57fb8c84ec7961·...·]-1">}</span></code></pre><p><code·class="inline">Mode</code>·is·the·type·of·crypto·algorithm;·currently,·the·only·allowed·value·is |
| 186 | <code·class="inline">des3_cbc</code>.·<code·class="inline">Module</code>·is·either·an·atom,·in·which·case·<code·class="inline">Key</code>·is·only·used·for·the | 186 | <code·class="inline">des3_cbc</code>.·<code·class="inline">Module</code>·is·either·an·atom,·in·which·case·<code·class="inline">Key</code>·is·only·used·for·the |
| 187 | module·<code·class="inline">Module</code>,·or·<code·class="inline">[]</code>,·in·which·case·<code·class="inline">Key</code>·is·used·for·all·modules.·<code·class="inline">Key</code>·is | 187 | module·<code·class="inline">Module</code>,·or·<code·class="inline">[]</code>,·in·which·case·<code·class="inline">Key</code>·is·used·for·all·modules.·<code·class="inline">Key</code>·is |
| 188 | the·non-empty·key·string.</p><p><code·class="inline">Key</code>·in·the·first·tuple·where·both·<code·class="inline">Mode</code>·and·<code·class="inline">Module</code>·match·is·used.</p><p>The·following·is·an·example·of·an·<code·class="inline">.erlang.crypt</code>·file·that·returns·the·same·key | 188 | the·non-empty·key·string.</p><p><code·class="inline">Key</code>·in·the·first·tuple·where·both·<code·class="inline">Mode</code>·and·<code·class="inline">Module</code>·match·is·used.</p><p>The·following·is·an·example·of·an·<code·class="inline">.erlang.crypt</code>·file·that·returns·the·same·key |
| 189 | for·all·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 189 | for·all·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5019414679-1">[</span><span·class="p"·data-group-id="5019414679-2">{</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">des3_cbc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·302,·SHA:·c49f29f1700ab956b39a23599082006312d3fca08cbd3cc18567c374164dc0ac·...·]9-1">]</span><span·class="p">.</span></code></pre><p>The·following·is·a·slightly·more·complicated·example·of·an·<code·class="inline">.erlang.crypt</code> |
| 190 | providing·one·key·for·module·<code·class="inline">t</code>·and·another·key·for·all·other·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 190 | providing·one·key·for·module·<code·class="inline">t</code>·and·another·key·for·all·other·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8795681251-1">[</span><span·class="p"·data-group-id="8795681251-2">{</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">des3_cbc</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">t<[·...·truncated·by·diffoscope;·len:·136,·SHA:·d7fb1324279eb9849e9e601193a040286568656e2b4a914d28f8b3ad88acf85c·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 191 | ·</span><span·class="p"·data-group-id=" | 191 | ·</span><span·class="p"·data-group-id="8795681251-3">{</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">des3_cbc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8795681251-4">[</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·250,·SHA:·bead026b94a8f8d86a08ab9216e571a158d0688aeba9a670031e03cfb111935e·...·]-1">]</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Do·not·use·any·of·the·keys·in·these·examples.·Use·your·own·keys.</p></section> |
| 192 | ····</section> | 192 | ····</section> |
| 193 | </div> | 193 | </div> |
| 194 | ··<section·id="summary"·class="details-list"> | 194 | ··<section·id="summary"·class="details-list"> |
| 195 | ····<h1·class="section-heading"> | 195 | ····<h1·class="section-heading"> |
| 196 | ······<a·class="hover-link"·href="#summary"> | 196 | ······<a·class="hover-link"·href="#summary"> |
| Offset 1494, 19 lines modified | Offset 1494, 19 lines modified | ||
| 1494 | ························when·CryptoKeyFun·::·<a·href="#t:crypto_fun/0">crypto_fun</a>(),·Reason·::·badfun·|·exists·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1494 | ························when·CryptoKeyFun·::·<a·href="#t:crypto_fun/0">crypto_fun</a>(),·Reason·::·badfun·|·exists·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1495 | ······</div> | 1495 | ······</div> |
| 1496 | <p>Registers·an·unary·fun·that·is·called·if·<code·class="inline">beam_lib</code>·must·read·an·<code·class="inline">debug_info</code> | 1496 | <p>Registers·an·unary·fun·that·is·called·if·<code·class="inline">beam_lib</code>·must·read·an·<code·class="inline">debug_info</code> |
| 1497 | chunk·that·has·been·encrypted.·The·fun·is·held·in·a·process·that·is·started·by | 1497 | chunk·that·has·been·encrypted.·The·fun·is·held·in·a·process·that·is·started·by |
| 1498 | the·function.</p><p>If·a·fun·is·already·registered·when·attempting·to·register·a·fun, | 1498 | the·function.</p><p>If·a·fun·is·already·registered·when·attempting·to·register·a·fun, |
| 1499 | <code·class="inline">{error,·exists}</code>·is·returned.</p><p>The·fun·must·handle·the·following·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">CryptoKeyFun</span><span·class="p"·data-group-id=" | 1499 | <code·class="inline">{error,·exists}</code>·is·returned.</p><p>The·fun·must·handle·the·following·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">CryptoKeyFun</span><span·class="p"·data-group-id="6893436994-1">(</span><span·class="ss">init</span><span·class="p"·data-group-id="6893436994-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">|</span><sp[·...·truncated·by·diffoscope;·len:·509,·SHA:·1b7e88d94e0cfa02b79bd06ffd6feae4c9b6873e2647752c1cc0d6b64129c589·...·]-3">}</span></code></pre><p>Called·when·the·fun·is·registered,·in·the·process·that·holds·the·fun.·Here·the |
| 1500 | crypto·key·fun·can·do·any·necessary·initializations.·If·<code·class="inline">{ok,·NewCryptoKeyFun}</code> | 1500 | crypto·key·fun·can·do·any·necessary·initializations.·If·<code·class="inline">{ok,·NewCryptoKeyFun}</code> |
| 1501 | is·returned,·<code·class="inline">NewCryptoKeyFun</code>·is·registered·instead·of·<code·class="inline">CryptoKeyFun</code>.·If | 1501 | is·returned,·<code·class="inline">NewCryptoKeyFun</code>·is·registered·instead·of·<code·class="inline">CryptoKeyFun</code>.·If |
| 1502 | <code·class="inline">{error,·Term}</code>·is·returned,·the·registration·is·aborted·and | 1502 | <code·class="inline">{error,·Term}</code>·is·returned,·the·registration·is·aborted·and |
| 1503 | <a·href="#crypto_key_fun/1"><code·class="inline">crypto_key_fun/1</code></a>·also·returns·<code·class="inline">{error,·Term}</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">CryptoKeyFun</span><span·class="p"·data-group-id=" | 1503 | <a·href="#crypto_key_fun/1"><code·class="inline">crypto_key_fun/1</code></a>·also·returns·<code·class="inline">{error,·Term}</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">CryptoKeyFun</span><span·class="p"·data-group-id="2951419237-1">(</span><span·class="p"·data-group-id="2951419237-2">{</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Mode</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</[·...·truncated·by·diffoscope;·len:·178,·SHA:·1d2c56c9a767e773d34a5c765ed440bce5db29c0bd5c563452d4a9d9ba19c9f2·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Key</span></code></pre><p>Called·when·the·key·is·needed·for·module·<code·class="inline">Module</code>·in·the·file·named·<code·class="inline">Filename</code>. |
| 1504 | <code·class="inline">Mode</code>·is·the·type·of·crypto·algorithm;·currently,·the·only·possible·value·is | 1504 | <code·class="inline">Mode</code>·is·the·type·of·crypto·algorithm;·currently,·the·only·possible·value·is |
| 1505 | <code·class="inline">des3_cbc</code>.·The·call·is·to·fail·(raise·an·exception)·if·no·key·is·available.</p><pre><code·class="text">CryptoKeyFun(clear)·->·term()</code></pre><p>Called·before·the·fun·is·unregistered.·Here·any·cleaning·up·can·be·done.·The | 1505 | <code·class="inline">des3_cbc</code>.·The·call·is·to·fail·(raise·an·exception)·if·no·key·is·available.</p><pre><code·class="text">CryptoKeyFun(clear)·->·term()</code></pre><p>Called·before·the·fun·is·unregistered.·Here·any·cleaning·up·can·be·done.·The |
| 1506 | return·value·is·not·important,·but·is·passed·back·to·the·caller·of | 1506 | return·value·is·not·important,·but·is·passed·back·to·the·caller·of |
| 1507 | <a·href="#clear_crypto_key_fun/0"><code·class="inline">clear_crypto_key_fun/0</code></a>·as·part·of·its·return·value.</p> | 1507 | <a·href="#clear_crypto_key_fun/0"><code·class="inline">clear_crypto_key_fun/0</code></a>·as·part·of·its·return·value.</p> |
| 1508 | ··</section> | 1508 | ··</section> |
| 1509 | </section> | 1509 | </section> |
| 1510 | <section·class="detail"·id="diff_dirs/2"> | 1510 | <section·class="detail"·id="diff_dirs/2"> |
| Offset 1843, 22 lines modified | Offset 1843, 22 lines modified | ||
| 1843 | ······</div> | 1843 | ······</div> |
| 1844 | <p>Returns·the·module·version·or·versions.·A·version·is·defined·by·module·attribute | 1844 | <p>Returns·the·module·version·or·versions.·A·version·is·defined·by·module·attribute |
| 1845 | <code·class="inline">-vsn(Vsn)</code>.</p><p>If·this·attribute·is·not·specified,·the·version·defaults·to·the | 1845 | <code·class="inline">-vsn(Vsn)</code>.</p><p>If·this·attribute·is·not·specified,·the·version·defaults·to·the |
| 1846 | checksum·of·the·module.·Notice·that·if·version·<code·class="inline">Vsn</code>·is·not·a·list,·it·is·made | 1846 | checksum·of·the·module.·Notice·that·if·version·<code·class="inline">Vsn</code>·is·not·a·list,·it·is·made |
| 1847 | into·one,·that·is·<code·class="inline">{ok,{Module,[Vsn]}}</code>·is·returned.·If·there·are·many·<code·class="inline">-vsn</code> | 1847 | into·one,·that·is·<code·class="inline">{ok,{Module,[Vsn]}}</code>·is·returned.·If·there·are·many·<code·class="inline">-vsn</code> |
| 1848 | module·attributes,·the·result·is·the·concatenated·list·of·versions.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9 | 1848 | module·attributes,·the·result·is·the·concatenated·list·of·versions.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9022825707-1">(</span><span·class="ss">a</span><span·class="p"·data-group-id="9022825707-1">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·-vsn(1).</span><span·class="w"> |
| 1849 | </span><span·class="p"·data-group-id="9 | 1849 | </span><span·class="p"·data-group-id="9022825707-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-4">[</span><span·class="mi">1</span><span[·...·truncated·by·diffoscope;·len:·142,·SHA:·6c0a66dadab182961de1d3fa3002c2fde8f59a5d49d1647ba2675758b05f58c9·...·]-2">}</span><span·class="gp·unselectable"> |
| 1850 | 2>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9 | 1850 | 2>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9022825707-5">(</span><span·class="ss">b</span><span·class="p"·data-group-id="9022825707-5">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·-vsn([1]).</span><span·class="w"> |
| 1851 | </span><span·class="p"·data-group-id="9 | 1851 | </span><span·class="p"·data-group-id="9022825707-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-7">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-8">[</span><span·class="mi">1</span><span[·...·truncated·by·diffoscope;·len:·142,·SHA:·efbb3488cf2428aa3b1f4cc0988f4c9c6a2f7ee1cbca5d4463f3069edf77525c·...·]-6">}</span><span·class="gp·unselectable"> |
| 1852 | 3>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9 | 1852 | 3>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9022825707-9">(</span><span·class="ss">c</span><span·class="p"·data-group-id="9022825707-9">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·-vsn([1]).·-vsn(2).</span><span·class="w"> |
| 1853 | </span><span·class="p"·data-group-id="9 | 1853 | </span><span·class="p"·data-group-id="9022825707-10">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-11">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-12">[</span><span·class="mi">1</span><s[·...·truncated·by·diffoscope;·len:·196,·SHA:·fb484af09de77c3bb24c9b30cfb8490bcb0e8bf4f4a56c958f444a9bcf8f6578·...·]-10">}</span><span·class="gp·unselectable"> |
| 1854 | 4>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9 | 1854 | 4>·</span><span·class="nc">beam_lib</span><span·class="p">:</span><span·class="nf">version</span><span·class="p"·data-group-id="9022825707-13">(</span><span·class="ss">d</span><span·class="p"·data-group-id="9022825707-13">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·no·-vsn·attribute</span><span·class="w"> |
| 1855 | </span><span·class="p"·data-group-id="9 | 1855 | </span><span·class="p"·data-group-id="9022825707-14">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-15">{</span><span·class="ss">d</span><span·class="p">,</span><span·class="p"·data-group-id="9022825707-16">[</span><span·class="mi">2756132081[·...·truncated·by·diffoscope;·len:·185,·SHA:·f1aa02ce1fb7e65877186d09b0ff1a52a0f3ce894ec903d884fc6c077501a142·...·]-14">}</span></code></pre> |
| 1856 | ··</section> | 1856 | ··</section> |
| 1857 | </section> | 1857 | </section> |
| 1858 | ····</div> | 1858 | ····</div> |
| 1859 | ··</section> | 1859 | ··</section> |
| 1860 | ····<footer·class="footer"> | 1860 | ····<footer·class="footer"> |
| Offset 1879, 15 lines modified | Offset 1879, 15 lines modified | ||
| 1879 | ······<p·class="built-using"> | 1879 | ······<p·class="built-using"> |
| 1880 | ········Built·using | 1880 | ········Built·using |
| 1881 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1881 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1882 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1882 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1883 | ······</p> | 1883 | ······</p> |
| 1884 | <p>Copyright·©·1996-202 | 1884 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1885 | ····</footer> | 1885 | ····</footer> |
| 1886 | ··</div> | 1886 | ··</div> |
| 1887 | </main> | 1887 | </main> |
| 1888 | </div> | 1888 | </div> |
| 1889 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1889 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1890 | ··<script> | 1890 | ··<script> |
| 1891 | ··let·initialized·=·false; | 1891 | ··let·initialized·=·false; |
| Offset 631, 15 lines modified | Offset 631, 15 lines modified | ||
| 631 | ······<div·class="specs"> | 631 | ······<div·class="specs"> |
| 632 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·bin_to_list(Subject)·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0">byte</a>()]·when·Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> | 632 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·bin_to_list(Subject)·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0">byte</a>()]·when·Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> |
| 633 | ······</div> | 633 | ······</div> |
| 634 | <p>Converts·<code·class="inline">Subject</code>·to·a·list·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a>s,·each·representing·the·value·of·one·byte.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">bin_to_list</span><span·class="p"·data-group-id="7 | 634 | <p>Converts·<code·class="inline">Subject</code>·to·a·list·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a>s,·each·representing·the·value·of·one·byte.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">bin_to_list</span><span·class="p"·data-group-id="0724512225-1">(</span><span·class="p"·data-group-id="0724512225-2"><<</span><span·class="s">"erlang"</span><span·class="p"·data-group-id="0724512225-2">>></span><span·class="p"·data-group-id="0724512225-1">)</span><span·class="p">.</span><span·class="w"> |
| 635 | </span><span·class="s">"erlang"</span><span·class="w"> | 635 | </span><span·class="s">"erlang"</span><span·class="w"> |
| 636 | </span><span·class="c1">%%·or·[101,114,108,97,110,103]·in·list·notation.</span></code></pre> | 636 | </span><span·class="c1">%%·or·[101,114,108,97,110,103]·in·list·notation.</span></code></pre> |
| 637 | ··</section> | 637 | ··</section> |
| 638 | </section> | 638 | </section> |
| 639 | <section·class="detail"·id="bin_to_list/2"> | 639 | <section·class="detail"·id="bin_to_list/2"> |
| 640 | ··<div·class="detail-header"> | 640 | ··<div·class="detail-header"> |
| Offset 693, 15 lines modified | Offset 693, 15 lines modified | ||
| 693 | ·····················when·Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·Pos·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Len·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>().</pre> | 693 | ·····················when·Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·Pos·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Len·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>().</pre> |
| 694 | ······</div> | 694 | ······</div> |
| 695 | <p>Converts·<code·class="inline">Subject</code>·to·a·list·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a>s,·each·representing·the·value·of·one | 695 | <p>Converts·<code·class="inline">Subject</code>·to·a·list·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:byte/0"><code·class="inline">byte/0</code></a>s,·each·representing·the·value·of·one |
| 696 | byte.·<code·class="inline">PosLen</code>·or·alternatively·<code·class="inline">Pos</code>·and·<code·class="inline">Len</code>·denote·which·part·of·the | 696 | byte.·<code·class="inline">PosLen</code>·or·alternatively·<code·class="inline">Pos</code>·and·<code·class="inline">Len</code>·denote·which·part·of·the |
| 697 | <code·class="inline">Subject</code>·binary·to·convert.·By·default,·the·entire·<code·class="inline">Subject</code>·binary·is | 697 | <code·class="inline">Subject</code>·binary·to·convert.·By·default,·the·entire·<code·class="inline">Subject</code>·binary·is |
| 698 | converted.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">bin_to_list</span><span·class="p"·data-group-id=" | 698 | converted.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">bin_to_list</span><span·class="p"·data-group-id="6729876585-1">(</span><span·class="p"·data-group-id="6729876585-2"><<</span><span·class="s">"erlang"</span><span·class="p"·data-group-id="6729876585-2">>></span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·196,·SHA:·032298e661872b8343bea9969eb83d59300626e829acf5a03a24717ad5798a6b·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 699 | </span><span·class="s">"rla"</span><span·class="w"> | 699 | </span><span·class="s">"rla"</span><span·class="w"> |
| 700 | </span><span·class="c1">%%·or·[114,108,97]·in·list·notation.</span></code></pre><p>If·<code·class="inline">PosLen</code>·or·alternatively·<code·class="inline">Pos</code>·and·<code·class="inline">Len</code>·in·any·way·reference·outside·the | 700 | </span><span·class="c1">%%·or·[114,108,97]·in·list·notation.</span></code></pre><p>If·<code·class="inline">PosLen</code>·or·alternatively·<code·class="inline">Pos</code>·and·<code·class="inline">Len</code>·in·any·way·reference·outside·the |
| 701 | binary,·a·<code·class="inline">badarg</code>·exception·is·raised.</p> | 701 | binary,·a·<code·class="inline">badarg</code>·exception·is·raised.</p> |
| 702 | ··</section> | 702 | ··</section> |
| 703 | </section> | 703 | </section> |
| 704 | <section·class="detail"·id="compile_pattern/1"> | 704 | <section·class="detail"·id="compile_pattern/1"> |
| Offset 827, 16 lines modified | Offset 827, 16 lines modified | ||
| 827 | ······<div·class="specs"> | 827 | ······<div·class="specs"> |
| 828 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·decode_hex(Bin)·->·Bin2·when·Bin·::·<<_:_*16>>,·Bin2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> | 828 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·decode_hex(Bin)·->·Bin2·when·Bin·::·<<_:_*16>>,·Bin2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>().</pre> |
| 829 | ······</div> | 829 | ······</div> |
| 830 | <p>Decodes·a·hex·encoded·binary·into·a·binary.</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_hex</span><span·class="p"·data-group-id=" | 830 | <p>Decodes·a·hex·encoded·binary·into·a·binary.</p><p><em>Example</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_hex</span><span·class="p"·data-group-id="6649724534-1">(</span><span·class="p"·data-group-id="6649724534-2"><<</span><span·class="s">"66"</span><span·class="p"·data-group-id="6649724534-2">>></span><span·class="p"·data-group-id="6649724534-1">)</span><span·class="p">.</span><span·class="w"> |
| 831 | </span><span·class="p"·data-group-id=" | 831 | </span><span·class="p"·data-group-id="6649724534-3"><<</span><span·class="s">"f"</span><span·class="p"·data-group-id="6649724534-3">>></span></code></pre> |
| 832 | ··</section> | 832 | ··</section> |
| 833 | </section> | 833 | </section> |
| 834 | <section·class="detail"·id="decode_unsigned/1"> | 834 | <section·class="detail"·id="decode_unsigned/1"> |
| 835 | ··<div·class="detail-header"> | 835 | ··<div·class="detail-header"> |
| 836 | ····<a·href="#decode_unsigned/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 836 | ····<a·href="#decode_unsigned/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 837 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 837 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 889, 19 lines modified | Offset 889, 19 lines modified | ||
| 889 | ·····························Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(), | 889 | ·····························Subject·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(), |
| 890 | ·····························Endianness·::·big·|·little, | 890 | ·····························Endianness·::·big·|·little, |
| 891 | ·····························Unsigned·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> | 891 | ·····························Unsigned·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> |
| 892 | ······</div> | 892 | ······</div> |
| 893 | <p>Converts·the·binary·digit·representation,·in·big·endian·or·little·endian,·of·a | 893 | <p>Converts·the·binary·digit·representation,·in·big·endian·or·little·endian,·of·a |
| 894 | positive·integer·in·<code·class="inline">Subject</code>·to·an·Erlang·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id=" | 894 | positive·integer·in·<code·class="inline">Subject</code>·to·an·Erlang·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0"><code·class="inline">integer/0</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id="9705163158-1">(</span><span·class="p"·data-group-id="9705163158-2"><<</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">199</span><span·class="p"·data-group-id="9705163158-2">[·...·truncated·by·diffoscope;·len:·56,·SHA:·3392a442c9bb78f3685fc5a7183f5561f04580f3d20057bb43f136337f5d721e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 895 | </span><span·class="mi">11111111</span><span·class="gp·unselectable"> | 895 | </span><span·class="mi">11111111</span><span·class="gp·unselectable"> |
| 896 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id=" | 896 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id="9705163158-3">(</span><span·class="p"·data-group-id="9705163158-4"><<</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">199</span><span·class="p"·data-group-id="9705163158-4">[·...·truncated·by·diffoscope;·len:·131,·SHA:·2fc7cf7b3e927b9a2b1c6d901d62039ca6fcb081d9082d7d3c9446365425b02e·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 897 | </span><span·class="mi">11111111</span><span·class="gp·unselectable"> | 897 | </span><span·class="mi">11111111</span><span·class="gp·unselectable"> |
| 898 | 3>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id=" | 898 | 3>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">decode_unsigned</span><span·class="p"·data-group-id="9705163158-5">(</span><span·class="p"·data-group-id="9705163158-6"><<</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">199</span><span·class="p"·data-group-id="9705163158-6">[·...·truncated·by·diffoscope;·len:·134,·SHA:·7d34da9998905a4a07a0ea9ff715ac60e2536b2c6fbdad395fbe8962720e9d5a·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 899 | </span><span·class="mi">13077161</span></code></pre> | 899 | </span><span·class="mi">13077161</span></code></pre> |
| 900 | ··</section> | 900 | ··</section> |
| 901 | </section> | 901 | </section> |
| 902 | <section·class="detail"·id="encode_hex/1"> | 902 | <section·class="detail"·id="encode_hex/1"> |
| 903 | ··<div·class="detail-header"> | 903 | ··<div·class="detail-header"> |
| 904 | ····<a·href="#encode_hex/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 904 | ····<a·href="#encode_hex/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 952, 22 lines modified | Offset 952, 22 lines modified | ||
| 952 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·encode_hex(Bin,·Case)·->·Bin2 | 952 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·encode_hex(Bin,·Case)·->·Bin2 |
| 953 | ····················when·Bin·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·Case·::·lowercase·|·uppercase,·Bin2·::·<<_:_*16>>.</pre> | 953 | ····················when·Bin·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·Case·::·lowercase·|·uppercase,·Bin2·::·<<_:_*16>>.</pre> |
| 954 | ······</div> | 954 | ······</div> |
| 955 | <p>Encodes·a·binary·into·a·hex·encoded·binary·using·the·specified·case·for·the | 955 | <p>Encodes·a·binary·into·a·hex·encoded·binary·using·the·specified·case·for·the |
| 956 | hexadecimal·digits·"a"·to·"f".</p><p>The·default·case·is·<code·class="inline">uppercase</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id=" | 956 | hexadecimal·digits·"a"·to·"f".</p><p>The·default·case·is·<code·class="inline">uppercase</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id="3298631816-1">(</span><span·class="p"·data-group-id="3298631816-2"><<</span><span·class="s">"f"</span><span·class="p"·data-group-id="3298631816-2">>></span><span·class="p"·data-group-id="3298631816-1">)</span><span·class="p">.</span><span·class="w"> |
| 957 | </span><span·class="p"·data-group-id=" | 957 | </span><span·class="p"·data-group-id="3298631816-3"><<</span><span·class="s">"66"</span><span·class="p"·data-group-id="3298631816-3">>></span><span·class="gp·unselectable"> |
| 958 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id=" | 958 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id="3298631816-4">(</span><span·class="p"·data-group-id="3298631816-5"><<</span><span·class="s">"/"</span><span·class="p"·data-group-id="3298631816-5">>></span><span·class="p"·data-group-id="3298631816-4">)</span><span·class="p">.</span><span·class="w"> |
| 959 | </span><span·class="p"·data-group-id=" | 959 | </span><span·class="p"·data-group-id="3298631816-6"><<</span><span·class="s">"2F"</span><span·class="p"·data-group-id="3298631816-6">>></span><span·class="gp·unselectable"> |
| 960 | 3>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id=" | 960 | 3>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id="3298631816-7">(</span><span·class="p"·data-group-id="3298631816-8"><<</span><span·class="s">"/"</span><span·class="p"·data-group-id="3298631816-8">>></span><span·class="p">,</span><span·class="w">·</span><span·class="ss">lowercase</sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·b16fdeff66f499edcf881bdcb309bdb641e128474a5aece3e9ad0e17d9de1f62·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 961 | </span><span·class="p"·data-group-id=" | 961 | </span><span·class="p"·data-group-id="3298631816-9"><<</span><span·class="s">"2f"</span><span·class="p"·data-group-id="3298631816-9">>></span><span·class="gp·unselectable"> |
| 962 | 4>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id=" | 962 | 4>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_hex</span><span·class="p"·data-group-id="3298631816-10">(</span><span·class="p"·data-group-id="3298631816-11"><<</span><span·class="s">"/"</span><span·class="p"·data-group-id="3298631816-11">>></span><span·class="p">,</span><span·class="w">·</span><span·class="ss">uppercase<[·...·truncated·by·diffoscope;·len:·47,·SHA:·8118a5776160f2488ca7adde2a3c7ffe0ea0804dd684554f36101b62dbf58486·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 963 | </span><span·class="p"·data-group-id=" | 963 | </span><span·class="p"·data-group-id="3298631816-12"><<</span><span·class="s">"2F"</span><span·class="p"·data-group-id="3298631816-12">>></span></code></pre> |
| 964 | ··</section> | 964 | ··</section> |
| 965 | </section> | 965 | </section> |
| 966 | <section·class="detail"·id="encode_unsigned/1"> | 966 | <section·class="detail"·id="encode_unsigned/1"> |
| 967 | ··<div·class="detail-header"> | 967 | ··<div·class="detail-header"> |
| 968 | ····<a·href="#encode_unsigned/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 968 | ····<a·href="#encode_unsigned/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 969 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 969 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1017, 20 lines modified | Offset 1017, 20 lines modified | ||
| 1017 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·encode_unsigned(Unsigned,·Endianness)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>() | 1017 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·encode_unsigned(Unsigned,·Endianness)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>() |
| 1018 | ·························when·Unsigned·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Endianness·::·big·|·little.</pre> | 1018 | ·························when·Unsigned·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Endianness·::·big·|·little.</pre> |
| 1019 | ······</div> | 1019 | ······</div> |
| 1020 | <p>Converts·a·positive·integer·to·the·smallest·possible·representation·in·a·binary | 1020 | <p>Converts·a·positive·integer·to·the·smallest·possible·representation·in·a·binary |
| 1021 | digit·representation,·either·big·endian·or·little·endian.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id=" | 1021 | digit·representation,·either·big·endian·or·little·endian.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id="3884029864-1">(</span><span·class="mi">11111111</span><span·class="p"·data-group-id="3884029864-1">)</span><span·class="p">.</span><span·class="w"> |
| 1022 | </span><span·class="p"·data-group-id=" | 1022 | </span><span·class="p"·data-group-id="3884029864-2"><<</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">199</span><span·class="p"·data-group-id="3884029864-2">>></span><span·class="gp·unselectable"> |
| 1023 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id=" | 1023 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id="3884029864-3">(</span><span·class="mi">11111111</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">big</span><span·class="p"·data-group-id="3884029864-3">)</span><span·class="p">.</span><span·class="w"> |
| 1024 | </span><span·class="p"·data-group-id=" | 1024 | </span><span·class="p"·data-group-id="3884029864-4"><<</span><span·class="mi">169</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">199</span><span·class="p"·data-group-id="3884029864-4">>></span><span·class="gp·unselectable"> |
| 1025 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id=" | 1025 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">encode_unsigned</span><span·class="p"·data-group-id="3884029864-5">(</span><span·class="mi">11111111</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">little</span><span·class="p"·data-group-id="3884029864-5">)</span><span·class="p">.</span><span·class="w"> |
| 1026 | </span><span·class="p"·data-group-id=" | 1026 | </span><span·class="p"·data-group-id="3884029864-6"><<</span><span·class="mi">199</span><span·class="p">,</span><span·class="mi">138</span><span·class="p">,</span><span·class="mi">169</span><span·class="p"·data-group-id="3884029864-6">>></span></code></pre> |
| 1027 | ··</section> | 1027 | ··</section> |
| 1028 | </section> | 1028 | </section> |
| 1029 | <section·class="detail"·id="first/1"> | 1029 | <section·class="detail"·id="first/1"> |
| 1030 | ··<div·class="detail-header"> | 1030 | ··<div·class="detail-header"> |
| 1031 | ····<a·href="#first/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1031 | ····<a·href="#first/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1032 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1032 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1137, 17 lines modified | Offset 1137, 17 lines modified | ||
| 1137 | ······<div·class="specs"> | 1137 | ······<div·class="specs"> |
| 1138 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·longest_common_prefix(Binaries)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>()·when·Binaries·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·...].</pre> | 1138 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·longest_common_prefix(Binaries)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>()·when·Binaries·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>(),·...].</pre> |
| 1139 | ······</div> | 1139 | ······</div> |
| 1140 | <p>Returns·the·length·of·the·longest·common·prefix·of·the·binaries·in·list | 1140 | <p>Returns·the·length·of·the·longest·common·prefix·of·the·binaries·in·list |
| 1141 | <code·class="inline">Binaries</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">longest_common_prefix</span><span·class="p"·data-group-id=" | 1141 | <code·class="inline">Binaries</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">longest_common_prefix</span><span·class="p"·data-group-id="6356568350-1">(</span><span·class="p"·data-group-id="6356568350-2">[</span><span·class="p"·data-group-id="6356568350-3"><<</span><span·class="s">"erlang"</span><span·class="p"·data-group-id="6356568350-3">>></span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·285,·SHA:·3b42ca36eb65da36fb38bd1ff6f2d47f42a0b5ff250920f25af7af24eea529c4·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1142 | </span><span·class="mi">2</span><span·class="gp·unselectable"> | 1142 | </span><span·class="mi">2</span><span·class="gp·unselectable"> |
| 1143 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">longest_common_prefix</span><span·class="p"·data-group-id=" | 1143 | 2>·</span><span·class="nc">binary</span><span·class="p">:</span><span·class="nf">longest_common_prefix</span><span·class="p"·data-group-id="6356568350-5">(</span><span·class="p"·data-group-id="6356568350-6">[</span><span·class="p"·data-group-id="6356568350-7"><<</span><span·class="s">"erlang"</span><span·class="p"·data-group-id="6356568350-7">>></span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·281,·SHA:·aa5770c3a343b0ebcc33656469d1508cb56fec1d123bc5c2443b01eaa525526b·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 1144 | </span><span·class="mi">0</span></code></pre><p>If·<code·class="inline">Binaries</code>·is·not·a·flat·non-empty·list·of·binaries,·a·<code·class="inline">badarg</code>·exception·is | 1144 | </span><span·class="mi">0</span></code></pre><p>If·<code·class="inline">Binaries</code>·is·not·a·flat·non-empty·list·of·binaries,·a·<code·class="inline">badarg</code>·exception·is |
| 1145 | raised.</p> | 1145 | raised.</p> |
| 1146 | ··</section> | 1146 | ··</section> |
| 1147 | </section> | 1147 | </section> |
| Max diff block lines reached; 85540/112160 bytes (76.27%) of diff not shown. | |||
| Offset 1682, 15 lines modified | Offset 1682, 15 lines modified | ||
| 1682 | ················Options·::·[Option]·|·Option, | 1682 | ················Options·::·[Option]·|·Option, |
| 1683 | ················Option·::·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#t:option/0">compile:option</a>(), | 1683 | ················Option·::·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#t:option/0">compile:option</a>(), |
| 1684 | ················Module·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>().</pre> | 1684 | ················Module·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>().</pre> |
| 1685 | ······</div> | 1685 | ······</div> |
| 1686 | <p>Compiles·and·then·loads·the·code·for·a·file·on·all·nodes.·<code·class="inline">Options</code>·defaults·to | 1686 | <p>Compiles·and·then·loads·the·code·for·a·file·on·all·nodes.·<code·class="inline">Options</code>·defaults·to |
| 1687 | <code·class="inline">[]</code>.·Compilation·is·equivalent·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="0 | 1687 | <code·class="inline">[]</code>.·Compilation·is·equivalent·to:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">compile</span><span·class="p">:</span><span·class="nf">file</span><span·class="p"·data-group-id="0604523768-1">(</span><span·class="n">File</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Options</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="p"·data-group-id="0604523768-2">[</span><spa[·...·truncated·by·diffoscope;·len:·213,·SHA:·7c69fec85f44a2b2b2fe541642078325a8d46ff96e4107609491b963c1baa618·...·]8-1">)</span></code></pre> |
| 1688 | ··</section> | 1688 | ··</section> |
| 1689 | </section> | 1689 | </section> |
| 1690 | <section·class="detail"·id="ni/0"> | 1690 | <section·class="detail"·id="ni/0"> |
| 1691 | ··<div·class="detail-header"> | 1691 | ··<div·class="detail-header"> |
| 1692 | ····<a·href="#ni/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1692 | ····<a·href="#ni/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1693 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1693 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2007, 15 lines modified | Offset 2007, 15 lines modified | ||
| 2007 | ······<p·class="built-using"> | 2007 | ······<p·class="built-using"> |
| 2008 | ········Built·using | 2008 | ········Built·using |
| 2009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2009 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2010 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2011 | ······</p> | 2011 | ······</p> |
| 2012 | <p>Copyright·©·1996-202 | 2012 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2013 | ····</footer> | 2013 | ····</footer> |
| 2014 | ··</div> | 2014 | ··</div> |
| 2015 | </main> | 2015 | </main> |
| 2016 | </div> | 2016 | </div> |
| 2017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2017 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2018 | ··<script> | 2018 | ··<script> |
| 2019 | ··let·initialized·=·false; | 2019 | ··let·initialized·=·false; |
| Offset 1765, 18 lines modified | Offset 1765, 18 lines modified | ||
| 1765 | ····································Option·::·{unit,·<a·href="#t:rfc3339_time_unit/0">rfc3339_time_unit</a>()}.</pre> | 1765 | ····································Option·::·{unit,·<a·href="#t:rfc3339_time_unit/0">rfc3339_time_unit</a>()}.</pre> |
| 1766 | ······</div> | 1766 | ······</div> |
| 1767 | <p>Converts·an·RFC·3339·timestamp·into·system·time.·The·data·format·of·RFC·3339 | 1767 | <p>Converts·an·RFC·3339·timestamp·into·system·time.·The·data·format·of·RFC·3339 |
| 1768 | timestamps·is·described·by·<a·href="https://www.ietf.org/rfc/rfc3339.txt">RFC·3339</a>. | 1768 | timestamps·is·described·by·<a·href="https://www.ietf.org/rfc/rfc3339.txt">RFC·3339</a>. |
| 1769 | Starting·from·OTP·25.1,·the·minutes·part·of·the·time·zone·is·optional.</p><p>Valid·option:</p><ul><li><strong><code·class="inline">{unit,·Unit}</code></strong>·-·The·time·unit·of·the·return·value.·The·default·is | 1769 | Starting·from·OTP·25.1,·the·minutes·part·of·the·time·zone·is·optional.</p><p>Valid·option:</p><ul><li><strong><code·class="inline">{unit,·Unit}</code></strong>·-·The·time·unit·of·the·return·value.·The·default·is |
| 1770 | <code·class="inline">second</code>.</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">rfc3339_to_system_time</span><span·class="p"·data-group-id=" | 1770 | <code·class="inline">second</code>.</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">rfc3339_to_system_time</span><span·class="p"·data-group-id="1125195418-1">(</span><span·class="s">"2018-02-01T16:17:58+01:00"</span><span·class="p"·data-group-id="1125195418-1">)</span><span·class="p">.</span><span·class="w"> |
| 1771 | </span><span·class="mi">1517498278</span><span·class="gp·unselectable"> | 1771 | </span><span·class="mi">1517498278</span><span·class="gp·unselectable"> |
| 1772 | 2>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">rfc3339_to_system_time</span><span·class="p"·data-group-id=" | 1772 | 2>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">rfc3339_to_system_time</span><span·class="p"·data-group-id="1125195418-2">(</span><span·class="s">"2018-02-01·15:18:02.088Z"</span><span·class="p">,</span><span·class="w"> |
| 1773 | ···</span><span·class="p"·data-group-id=" | 1773 | ···</span><span·class="p"·data-group-id="1125195418-3">[</span><span·class="p"·data-group-id="1125195418-4">{</span><span·class="ss">unit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">nanosecond</span><span·class="p"·data-group-id="1125195418-4">}</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·76,·SHA:·af4c037066071acc315a0a4b0ae6f66ea5becf3e8e09e9eef36447ea943b1e8b·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 1774 | </span><span·class="mi">1517498282088000000</span></code></pre> | 1774 | </span><span·class="mi">1517498282088000000</span></code></pre> |
| 1775 | ··</section> | 1775 | ··</section> |
| 1776 | </section> | 1776 | </section> |
| 1777 | <section·class="detail"·id="seconds_to_daystime/1"> | 1777 | <section·class="detail"·id="seconds_to_daystime/1"> |
| 1778 | ··<div·class="detail-header"> | 1778 | ··<div·class="detail-header"> |
| 1779 | ····<a·href="#seconds_to_daystime/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1779 | ····<a·href="#seconds_to_daystime/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1928, 24 lines modified | Offset 1928, 24 lines modified | ||
| 1928 | interpreted·as·local·time.·A·non-empty·string·is·included·as·is.·The·time·unit | 1928 | interpreted·as·local·time.·A·non-empty·string·is·included·as·is.·The·time·unit |
| 1929 | of·the·integer·is·the·same·as·the·one·of·<code·class="inline">Time</code>.</p></li><li><p><strong><code·class="inline">{time_designator,·Character}</code></strong>·-·The·character·used·as·time·designator, | 1929 | of·the·integer·is·the·same·as·the·one·of·<code·class="inline">Time</code>.</p></li><li><p><strong><code·class="inline">{time_designator,·Character}</code></strong>·-·The·character·used·as·time·designator, |
| 1930 | that·is,·the·date·and·time·separator.·The·default·is·<code·class="inline">$T</code>.</p></li><li><p><strong><code·class="inline">{unit,·Unit}</code></strong>·-·The·time·unit·of·<code·class="inline">Time</code>.·The·default·is·<code·class="inline">second</code>.·If·some | 1930 | that·is,·the·date·and·time·separator.·The·default·is·<code·class="inline">$T</code>.</p></li><li><p><strong><code·class="inline">{unit,·Unit}</code></strong>·-·The·time·unit·of·<code·class="inline">Time</code>.·The·default·is·<code·class="inline">second</code>.·If·some |
| 1931 | other·unit·is·given·(<code·class="inline">millisecond</code>,·<code·class="inline">microsecond</code>,·<code·class="inline">nanosecond</code>,·or·<code·class="inline">native</code>), | 1931 | other·unit·is·given·(<code·class="inline">millisecond</code>,·<code·class="inline">microsecond</code>,·<code·class="inline">nanosecond</code>,·or·<code·class="inline">native</code>), |
| 1932 | the·formatted·string·includes·a·fraction·of·a·second.·The·number·of·fractional | 1932 | the·formatted·string·includes·a·fraction·of·a·second.·The·number·of·fractional |
| 1933 | second·digits·is·three,·six,·or·nine·depending·on·what·time·unit·is·chosen. | 1933 | second·digits·is·three,·six,·or·nine·depending·on·what·time·unit·is·chosen. |
| 1934 | For·<code·class="inline">native</code>·three·fractional·digits·are·included.·Notice·that·trailing·zeros | 1934 | For·<code·class="inline">native</code>·three·fractional·digits·are·included.·Notice·that·trailing·zeros |
| 1935 | are·not·removed·from·the·fraction.</p></li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id=" | 1935 | are·not·removed·from·the·fraction.</p></li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id="1438724728-1">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_time</span><span·class="p"·data-group-id="1438724728-2">(</span><span·class="ss">second</span><span·class="p"·data-group-id="1438724728-2">)</span><span·cla[·...·truncated·by·diffoscope;·len:·32,·SHA:·64157fcd529be2822428efeb825dfad437e3dd98218004ac3dd1b11c61ab206f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1936 | </span><span·class="s">"2018-04-23T14:56:28+02:00"</span><span·class="gp·unselectable"> | 1936 | </span><span·class="s">"2018-04-23T14:56:28+02:00"</span><span·class="gp·unselectable"> |
| 1937 | 2>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id=" | 1937 | 2>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id="1438724728-3">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_time</span><span·class="p"·data-group-id="1438724728-4">(</span><span·class="ss">second</span><span·class="p"·data-group-id="1438724728-4">)</span><span·class="p">,</span><span·class="w"> |
| 1938 | ···</span><span·class="p"·data-group-id=" | 1938 | ···</span><span·class="p"·data-group-id="1438724728-5">[</span><span·class="p"·data-group-id="1438724728-6">{</span><span·class="ss">offset</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"-02:00"</span><span·class="p"·data-group-id="1438724728-6">}</span><span·cla[·...·truncated·by·diffoscope;·len:·85,·SHA:·3b4c86f96e725506aa723d20dfe895cd00810044de2c85d30a0eb981cd8500c4·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 1939 | </span><span·class="s">"2018-04-23T10:56:52-02:00"</span><span·class="gp·unselectable"> | 1939 | </span><span·class="s">"2018-04-23T10:56:52-02:00"</span><span·class="gp·unselectable"> |
| 1940 | 3>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id=" | 1940 | 3>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id="1438724728-7">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_time</span><span·class="p"·data-group-id="1438724728-8">(</span><span·class="ss">second</span><span·class="p"·data-group-id="1438724728-8">)</span><span·class="p">,</span><span·class="w"> |
| 1941 | ···</span><span·class="p"·data-group-id=" | 1941 | ···</span><span·class="p"·data-group-id="1438724728-9">[</span><span·class="p"·data-group-id="1438724728-10">{</span><span·class="ss">offset</span><span·class="p">,</span><span·class="w">·</span><span·class="o">-</span><span·class="mi">7200</span><span·class="p"·data-group-id="1438724728-10">}</s[·...·truncated·by·diffoscope;·len:·98,·SHA:·c5ec9b7067ef907f9ecae113f8c4b847edf7760505a21bb610e9810dca7ba281·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 1942 | </span><span·class="s">"2018-04-23T10:57:05-02:00"</span><span·class="gp·unselectable"> | 1942 | </span><span·class="s">"2018-04-23T10:57:05-02:00"</span><span·class="gp·unselectable"> |
| 1943 | 4>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id=" | 1943 | 4>·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id="1438724728-11">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_time</span><span·class="p"·data-group-id="1438724728-12">(</span><span·class="ss">millisecond</span><span·class="p"·data-group-id="1438724728-12">)</span><span·class="p">,</span><span·class="w"> |
| 1944 | ···</span><span·class="p"·data-group-id=" | 1944 | ···</span><span·class="p"·data-group-id="1438724728-13">[</span><span·class="p"·data-group-id="1438724728-14">{</span><span·class="ss">unit</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">millisecond</span><span·class="p"·data-group-id="1438724728-14">}</span><span·class="p[·...·truncated·by·diffoscope;·len:·621,·SHA:·cd9531ec1461b727003fc6d5be9fa12fa7650002691ac295217a6f74563f4724·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 1945 | </span><span·class="s">"2018-04-23·12:57:20.482Z"</span></code></pre> | 1945 | </span><span·class="s">"2018-04-23·12:57:20.482Z"</span></code></pre> |
| 1946 | ··</section> | 1946 | ··</section> |
| 1947 | </section> | 1947 | </section> |
| 1948 | <section·class="detail"·id="system_time_to_universal_time/2"> | 1948 | <section·class="detail"·id="system_time_to_universal_time/2"> |
| 1949 | ··<div·class="detail-header"> | 1949 | ··<div·class="detail-header"> |
| 1950 | ····<a·href="#system_time_to_universal_time/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1950 | ····<a·href="#system_time_to_universal_time/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2158, 15 lines modified | Offset 2158, 15 lines modified | ||
| 2158 | ······<p·class="built-using"> | 2158 | ······<p·class="built-using"> |
| 2159 | ········Built·using | 2159 | ········Built·using |
| 2160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2160 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2161 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2162 | ······</p> | 2162 | ······</p> |
| 2163 | <p>Copyright·©·1996-202 | 2163 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2164 | ····</footer> | 2164 | ····</footer> |
| 2165 | ··</div> | 2165 | ··</div> |
| 2166 | </main> | 2166 | </main> |
| 2167 | </div> | 2167 | </div> |
| 2168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2168 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2169 | ··<script> | 2169 | ··<script> |
| 2170 | ··let·initialized·=·false; | 2170 | ··let·initialized·=·false; |
| Offset 1846, 22 lines modified | Offset 1846, 22 lines modified | ||
| 1846 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·lookup(Name,·Key)·->·Objects·|·{error,·Reason} | 1846 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·lookup(Name,·Key)·->·Objects·|·{error,·Reason} |
| 1847 | ················when·Name·::·<a·href="#t:tab_name/0">tab_name</a>(),·Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·Objects·::·[<a·href="#t:object/0">object</a>()],·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1847 | ················when·Name·::·<a·href="#t:tab_name/0">tab_name</a>(),·Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·Objects·::·[<a·href="#t:object/0">object</a>()],·Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1848 | ······</div> | 1848 | ······</div> |
| 1849 | <p>Returns·a·list·of·all·objects·with·key·<code·class="inline">Key</code>·stored·in·table·<code·class="inline">Name</code>,·for | 1849 | <p>Returns·a·list·of·all·objects·with·key·<code·class="inline">Key</code>·stored·in·table·<code·class="inline">Name</code>,·for |
| 1850 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">open_file</span><span·class="p"·data-group-id=" | 1850 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">open_file</span><span·class="p"·data-group-id="5203303294-1">(</span><span·class="ss">abc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5203303294-2">[</span><span·class="p"·data-group-id="5203303294-3">{</span><span·class="ss">type</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·197,·SHA:·722128d2686094b62386383e2a872db73fce54ae73379a380f97994f314847e5·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1851 | </span><span·class="p"·data-group-id=" | 1851 | </span><span·class="p"·data-group-id="5203303294-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">abc</span><span·class="p"·data-group-id="5203303294-4">}</span><span·class="gp·unselectable"> |
| 1852 | 3>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 1852 | 3>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="5203303294-5">(</span><span·class="ss">abc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5203303294-6">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·111,·SHA:·3aed5db58534291f03947c2ba0a91eeacd258842e3e9065728297770a3cc66cc·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 1853 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 1853 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 1854 | 4>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 1854 | 4>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="5203303294-7">(</span><span·class="ss">abc</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5203303294-8">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·111,·SHA:·66ba3ea9fa84e338a6c6a044ddeb9cd562c0bd8c062f12c35f059dda2e6757f1·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 1855 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 1855 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 1856 | 5>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id=" | 1856 | 5>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">lookup</span><span·class="p"·data-group-id="5203303294-9">(</span><span·class="ss">abc</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="5203303294-9">)</span><span·class="p">.</span><span·class="w"> |
| 1857 | </span><span·class="p"·data-group-id=" | 1857 | </span><span·class="p"·data-group-id="5203303294-10">[</span><span·class="p"·data-group-id="5203303294-11">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="5203303294-11">}</span><s[·...·truncated·by·diffoscope;·len:·294,·SHA:·c7c4b493690944f27a6b2d4325d2942c7056c546b933d6b08e18594ee29a7c7c·...·]-10">]</span></code></pre><p>If·the·table·type·is·<code·class="inline">set</code>,·the·function·returns·either·the·empty·list·or·a·list |
| 1858 | with·one·object,·as·there·cannot·be·more·than·one·object·with·a·given·key.·If | 1858 | with·one·object,·as·there·cannot·be·more·than·one·object·with·a·given·key.·If |
| 1859 | the·table·type·is·<code·class="inline">bag</code>·or·<code·class="inline">duplicate_bag</code>,·the·function·returns·a·list·of | 1859 | the·table·type·is·<code·class="inline">bag</code>·or·<code·class="inline">duplicate_bag</code>,·the·function·returns·a·list·of |
| 1860 | arbitrary·length.</p><p>Notice·that·the·order·of·objects·returned·is·unspecified.·In·particular,·the | 1860 | arbitrary·length.</p><p>Notice·that·the·order·of·objects·returned·is·unspecified.·In·particular,·the |
| 1861 | order·in·which·objects·were·inserted·is·not·reflected.</p> | 1861 | order·in·which·objects·were·inserted·is·not·reflected.</p> |
| 1862 | ··</section> | 1862 | ··</section> |
| 1863 | </section> | 1863 | </section> |
| 1864 | <section·class="detail"·id="match/1"> | 1864 | <section·class="detail"·id="match/1"> |
| Offset 2666, 19 lines modified | Offset 2666, 19 lines modified | ||
| 2666 | by·<code·class="inline">qlc</code>:</p><ul><li>Simple·filters·are·translated·into·equivalent·match·specifications.</li><li>More·complicated·filters·must·be·applied·to·all·objects·returned·by | 2666 | by·<code·class="inline">qlc</code>:</p><ul><li>Simple·filters·are·translated·into·equivalent·match·specifications.</li><li>More·complicated·filters·must·be·applied·to·all·objects·returned·by |
| 2667 | <a·href="#select/3"><code·class="inline">select/3</code></a>·given·a·match·specification·that·matches·all | 2667 | <a·href="#select/3"><code·class="inline">select/3</code></a>·given·a·match·specification·that·matches·all |
| 2668 | objects.</li></ul></li><li><p><code·class="inline">{select,</code>·<a·href="#t:match_spec/0"><code·class="inline">match_spec/0</code></a>·<code·class="inline">}</code>·-·As·for·<code·class="inline">select</code>,·the·table·is·traversed·by | 2668 | objects.</li></ul></li><li><p><code·class="inline">{select,</code>·<a·href="#t:match_spec/0"><code·class="inline">match_spec/0</code></a>·<code·class="inline">}</code>·-·As·for·<code·class="inline">select</code>,·the·table·is·traversed·by |
| 2669 | calling·<a·href="#select/3"><code·class="inline">dets:select/3</code></a>·and·<a·href="#select/1"><code·class="inline">dets:select/1</code></a>.·The·difference·is·that·the·match | 2669 | calling·<a·href="#select/3"><code·class="inline">dets:select/3</code></a>·and·<a·href="#select/1"><code·class="inline">dets:select/1</code></a>.·The·difference·is·that·the·match |
| 2670 | specification·is·specified·explicitly.·This·is·how·to·state·match | 2670 | specification·is·specified·explicitly.·This·is·how·to·state·match |
| 2671 | specifications·that·cannot·easily·be·expressed·within·the·syntax·provided·by | 2671 | specifications·that·cannot·easily·be·expressed·within·the·syntax·provided·by |
| 2672 | <code·class="inline">qlc</code>.</p></li></ul><p>The·following·example·uses·an·explicit·match·specification·to·traverse·the | 2672 | <code·class="inline">qlc</code>.</p></li></ul><p>The·following·example·uses·an·explicit·match·specification·to·traverse·the |
| 2673 | table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">open_file</span><span·class="p"·data-group-id=" | 2673 | table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">open_file</span><span·class="p"·data-group-id="9352964387-1">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9352964387-2">[</span><span·class="p"·data-group-id="9352964387-2">]</span><span·class="p"·data-group-id="9352964387-1">)</span><span·class="p">,</span><span·class="w"> |
| 2674 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 2674 | </span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="9352964387-3">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9352964387-4">[</span><span·class="p"·data-group-id="9352964387-5">{</span><span·class="mi">1</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·778,·SHA:·af3f43717a66a3ca76847d5c765ff8bf79bac0bfea921264067f528ad284e73b·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 2675 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 2675 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="9352964387-9">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9352964387-10">(</span><span·class="p"·data-group-id="9352964387-11">{</span><span·class="n">X</span><span·class="p">,</span><span·class="n">Y</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·994,·SHA:·2984a1afd1bf4c663d1ed79f48e6d68b0874142d26b43077af381ec447b32572·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 2676 | </span><span·class="n">QH1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">table</span><span·class="p"·data-group-id=" | 2676 | </span><span·class="n">QH1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dets</span><span·class="p">:</span><span·class="nf">table</span><span·class="p"·data-group-id="9352964387-15">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9352964387-16">[</span><span·class="p"·data-group-id="9352964387-17">{</span><span·class="ss">traverse</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·2206,·SHA:·345c6324cbbb779d2f656edd9c98b7ee311f8a9db832f72576c0479d16d0eb08·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·latter·example·is·equivalent·to·the·former,·which·can·be·verified·using |
| 2677 | function·<a·href="qlc.html#info/1"><code·class="inline">qlc:info/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">qlc</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id=" | 2677 | function·<a·href="qlc.html#info/1"><code·class="inline">qlc:info/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">qlc</span><span·class="p">:</span><span·class="nf">info</span><span·class="p"·data-group-id="3535428088-1">(</span><span·class="n">QH1</span><span·class="p"·data-group-id="3535428088-1">)</span><span·class="w">·</span><span·class="o">=:=</span><span·class="w">·</span><span·class="nc">qlc</span><span·class="p">:</span><span·class="nf">info</span><s[·...·truncated·by·diffoscope;·len:·117,·SHA:·e4e9683f51d2b314e08afc17766e9f297844a73088be628fca82bc56dc64ff38·...·]8-2">)</span><span·class="p">.</span><span·class="w"> |
| 2678 | </span><span·class="ss">true</span></code></pre><p><a·href="qlc.html#info/1"><code·class="inline">qlc:info/1</code></a>·returns·information·about·a·query·handle.·In·this·case·identical | 2678 | </span><span·class="ss">true</span></code></pre><p><a·href="qlc.html#info/1"><code·class="inline">qlc:info/1</code></a>·returns·information·about·a·query·handle.·In·this·case·identical |
| 2679 | information·is·returned·for·the·two·query·handles.</p> | 2679 | information·is·returned·for·the·two·query·handles.</p> |
| 2680 | ··</section> | 2680 | ··</section> |
| 2681 | </section> | 2681 | </section> |
| 2682 | <section·class="detail"·id="to_ets/2"> | 2682 | <section·class="detail"·id="to_ets/2"> |
| 2683 | ··<div·class="detail-header"> | 2683 | ··<div·class="detail-header"> |
| Offset 2740, 15 lines modified | Offset 2740, 15 lines modified | ||
| 2740 | ······················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 2740 | ······················Reason·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 2741 | ······</div> | 2741 | ······</div> |
| 2742 | <p>Applies·<code·class="inline">Fun</code>·to·each·object·stored·in·table·<code·class="inline">Name</code>·in·some·unspecified·order. | 2742 | <p>Applies·<code·class="inline">Fun</code>·to·each·object·stored·in·table·<code·class="inline">Name</code>·in·some·unspecified·order. |
| 2743 | Different·actions·are·taken·depending·on·the·return·value·of·<code·class="inline">Fun</code>.·The | 2743 | Different·actions·are·taken·depending·on·the·return·value·of·<code·class="inline">Fun</code>.·The |
| 2744 | following·<code·class="inline">Fun</code>·return·values·are·allowed:</p><ul><li><p><strong><code·class="inline">continue</code></strong>·-·Continue·to·perform·the·traversal.·For·example,·the·following | 2744 | following·<code·class="inline">Fun</code>·return·values·are·allowed:</p><ul><li><p><strong><code·class="inline">continue</code></strong>·-·Continue·to·perform·the·traversal.·For·example,·the·following |
| 2745 | function·can·be·used·to·print·the·contents·of·a·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="6 | 2745 | function·can·be·used·to·print·the·contents·of·a·table:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="6991535617-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="6991535617-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><s[·...·truncated·by·diffoscope;·len:·380,·SHA:·85324b23836e425eb458005f5c1dbd94b4f9837de2e86b08f1da0c1265b4a859·...·]-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">continue</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span></code></pre></li><li><p><strong><code·class="inline">{continue,·Val}</code></strong>·-·Continue·the·traversal·and·accumulate·<code·class="inline">Val</code>.·The |
| 2746 | following·function·is·supplied·to·collect·all·objects·of·a·table·in·a·list:</p><pre><code·class="text">fun(X)·->·{continue,·X}·end.</code></pre></li><li><p><strong><code·class="inline">{done,·Value}</code></strong>·-·Terminate·the·traversal·and·return·<code·class="inline">[Value·|·Acc]</code>.</p></li></ul><p>Any·other·value·<code·class="inline">OtherValue</code>·returned·by·<code·class="inline">Fun</code>·terminates·the·traversal·and·is | 2746 | following·function·is·supplied·to·collect·all·objects·of·a·table·in·a·list:</p><pre><code·class="text">fun(X)·->·{continue,·X}·end.</code></pre></li><li><p><strong><code·class="inline">{done,·Value}</code></strong>·-·Terminate·the·traversal·and·return·<code·class="inline">[Value·|·Acc]</code>.</p></li></ul><p>Any·other·value·<code·class="inline">OtherValue</code>·returned·by·<code·class="inline">Fun</code>·terminates·the·traversal·and·is |
| 2747 | returned·immediately.</p> | 2747 | returned·immediately.</p> |
| 2748 | ··</section> | 2748 | ··</section> |
| 2749 | </section> | 2749 | </section> |
| 2750 | <section·class="detail"·id="update_counter/3"> | 2750 | <section·class="detail"·id="update_counter/3"> |
| 2751 | ··<div·class="detail-header"> | 2751 | ··<div·class="detail-header"> |
| Offset 2809, 15 lines modified | Offset 2809, 15 lines modified | ||
| 2809 | ······<p·class="built-using"> | 2809 | ······<p·class="built-using"> |
| 2810 | ········Built·using | 2810 | ········Built·using |
| 2811 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2811 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2812 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2812 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2813 | ······</p> | 2813 | ······</p> |
| 2814 | <p>Copyright·©·1996-202 | 2814 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2815 | ····</footer> | 2815 | ····</footer> |
| 2816 | ··</div> | 2816 | ··</div> |
| 2817 | </main> | 2817 | </main> |
| 2818 | </div> | 2818 | </div> |
| 2819 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2819 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2820 | ··<script> | 2820 | ··<script> |
| 2821 | ··let·initialized·=·false; | 2821 | ··let·initialized·=·false; |
| Offset 134, 21 lines modified | Offset 134, 21 lines modified | ||
| 134 | do·not·compare·equal·(<code·class="inline">==</code>).</p><h2·id="module-notes"·class="section-heading"> | 134 | do·not·compare·equal·(<code·class="inline">==</code>).</p><h2·id="module-notes"·class="section-heading"> |
| 135 | ··<a·href="#module-notes"·class="hover-link"> | 135 | ··<a·href="#module-notes"·class="hover-link"> |
| 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 137 | ··</a> | 137 | ··</a> |
| 138 | ··<span·class="text">Notes</span> | 138 | ··<span·class="text">Notes</span> |
| 139 | </h2> | 139 | </h2> |
| 140 | <p><a·href=""·id="notes"></a></p><p>Functions·<code·class="inline">append</code>·and·<code·class="inline">append_list</code>·are·included·so·that·keyed·values·can·be | 140 | <p><a·href=""·id="notes"></a></p><p>Functions·<code·class="inline">append</code>·and·<code·class="inline">append_list</code>·are·included·so·that·keyed·values·can·be |
| 141 | stored·in·a·list·<em>accumulator</em>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">D0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 141 | stored·in·a·list·<em>accumulator</em>,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">D0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="0457791117-1">(</span><span·class="p"·data-group-id="0457791117-1">)</span><span·class="p">,</span><span·class="w"> |
| 142 | ··</span><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">store</span><span·class="p"·data-group-id=" | 142 | ··</span><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">store</span><span·class="p"·data-group-id="0457791117-2">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0457791117-3">[</span><span·class="p"·data-group-id="0457791117-3">]</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·62,·SHA:·e4c739494e852168baaed5f0f9840c4b83f41948c926db9abc83ac22c8eab85f·...·]7-2">)</span><span·class="p">,</span><span·class="w"> |
| 143 | ··</span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 143 | ··</span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="0457791117-4">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D1</span><span·class="p"·data-group-id="0457791117-4">)</span><span·class="p">,</span><span·class="w"> |
| 144 | ··</span><span·class="n">D3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 144 | ··</span><span·class="n">D3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="0457791117-5">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D2</span><span·class="p"·data-group-id="0457791117-5">)</span><span·class="p">,</span><span·class="w"> |
| 145 | ··</span><span·class="n">D4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 145 | ··</span><span·class="n">D4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="0457791117-6">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D3</span><span·class="p"·data-group-id="0457791117-6">)</span><span·class="p">,</span><span·class="w"> |
| 146 | ··</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id=" | 146 | ··</span><span·class="nc">dict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="0457791117-7">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D4</span><span·class="p"·data-group-id="0457791117-7">)</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="p"·data-group-id=" | 147 | </span><span·class="p"·data-group-id="0457791117-8">[</span><span·class="ss">f1</span><span·class="p">,</span><span·class="ss">f2</span><span·class="p">,</span><span·class="ss">f3</span><span·class="p"·data-group-id="0457791117-8">]</span></code></pre><p>This·saves·the·trouble·of·first·fetching·a·keyed·value,·appending·a·new·value·to |
| 148 | the·list·of·stored·values,·and·storing·the·result.</p><p>Function·<code·class="inline">fetch</code>·is·to·be·used·if·the·key·is·known·to·be·in·the·dictionary, | 148 | the·list·of·stored·values,·and·storing·the·result.</p><p>Function·<code·class="inline">fetch</code>·is·to·be·used·if·the·key·is·known·to·be·in·the·dictionary, |
| 149 | otherwise·function·<code·class="inline">find</code>.</p><h2·id="module-see-also"·class="section-heading"> | 149 | otherwise·function·<code·class="inline">find</code>.</p><h2·id="module-see-also"·class="section-heading"> |
| 150 | ··<a·href="#module-see-also"·class="hover-link"> | 150 | ··<a·href="#module-see-also"·class="hover-link"> |
| 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 151 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 152 | ··</a> | 152 | ··</a> |
| 153 | ··<span·class="text">See·Also</span> | 153 | ··<span·class="text">See·Also</span> |
| 154 | </h2> | 154 | </h2> |
| Offset 871, 18 lines modified | Offset 871, 18 lines modified | ||
| 871 | ······</div> | 871 | ······</div> |
| 872 | <p>Merges·two·dictionaries,·<code·class="inline">Dict1</code>·and·<code·class="inline">Dict2</code>,·to·create·a·new·dictionary.·All | 872 | <p>Merges·two·dictionaries,·<code·class="inline">Dict1</code>·and·<code·class="inline">Dict2</code>,·to·create·a·new·dictionary.·All |
| 873 | the·<code·class="inline">Key</code>-<code·class="inline">Value</code>·pairs·from·both·dictionaries·are·included·in·the·new | 873 | the·<code·class="inline">Key</code>-<code·class="inline">Value</code>·pairs·from·both·dictionaries·are·included·in·the·new |
| 874 | dictionary.·If·a·key·occurs·in·both·dictionaries,·<code·class="inline">Fun</code>·is·called·with·the·key | 874 | dictionary.·If·a·key·occurs·in·both·dictionaries,·<code·class="inline">Fun</code>·is·called·with·the·key |
| 875 | and·both·values·to·return·a·new·value.·<code·class="inline">merge</code>·can·be·defined·as·follows,·but·is | 875 | and·both·values·to·return·a·new·value.·<code·class="inline">merge</code>·can·be·defined·as·follows,·but·is |
| 876 | faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">merge</span><span·class="p"·data-group-id=" | 876 | faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">merge</span><span·class="p"·data-group-id="9254345568-1">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D2</span><span·class="p"·data-group-id="9254345568-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 877 | ····</span><span·class="nf">fold</span><span·class="p"·data-group-id=" | 877 | ····</span><span·class="nf">fold</span><span·class="p"·data-group-id="9254345568-2">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="9254345568-3">(</span><span·class="n">K</span><span·class="p">,</span><span·class="w">·</span><span·class="n">V1</span><span·class="p">,</span><span·cla[·...·truncated·by·diffoscope;·len:·80,·SHA:·f1f28956b79f63f69219d88e1998098f7ac1441d0c028e7dbac6d82d27ed2caf·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 878 | ·················</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 878 | ·················</span><span·class="nf">update</span><span·class="p"·data-group-id="9254345568-4">(</span><span·class="n">K</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="9254345568-5">(</span><span·class="n">V2</span><span·class="p"·data-group-id="92[·...·truncated·by·diffoscope;·len:·634,·SHA:·e3e60a1d75c720d3225bafeb09306a02e11a2ece7c9b54716d451156d2df1996·...·]-4">)</span><span·class="w"> |
| 879 | ·········</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D1</span><span·class="p"·data-group-id=" | 879 | ·········</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D1</span><span·class="p"·data-group-id="9254345568-2">)</span><span·class="p">.</span></code></pre> |
| 880 | ··</section> | 880 | ··</section> |
| 881 | </section> | 881 | </section> |
| 882 | <section·class="detail"·id="new/0"> | 882 | <section·class="detail"·id="new/0"> |
| 883 | ··<div·class="detail-header"> | 883 | ··<div·class="detail-header"> |
| 884 | ····<a·href="#new/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 884 | ····<a·href="#new/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 885 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 885 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1073, 16 lines modified | Offset 1073, 16 lines modified | ||
| 1073 | ····················Fun·::·fun((Value1·::·Value)·->·Value2·::·Value), | 1073 | ····················Fun·::·fun((Value1·::·Value)·->·Value2·::·Value), |
| 1074 | ····················Initial·::·Value.</pre> | 1074 | ····················Initial·::·Value.</pre> |
| 1075 | ······</div> | 1075 | ······</div> |
| 1076 | <p>Updates·a·value·in·a·dictionary·by·calling·<code·class="inline">Fun</code>·on·the·value·to·get·a·new | 1076 | <p>Updates·a·value·in·a·dictionary·by·calling·<code·class="inline">Fun</code>·on·the·value·to·get·a·new |
| 1077 | value.·If·<code·class="inline">Key</code>·is·not·present·in·the·dictionary,·<code·class="inline">Initial</code>·is·stored·as·the | 1077 | value.·If·<code·class="inline">Key</code>·is·not·present·in·the·dictionary,·<code·class="inline">Initial</code>·is·stored·as·the |
| 1078 | first·value.·For·example,·<a·href="#append/3"><code·class="inline">append/3</code></a>·can·be·defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id=" | 1078 | first·value.·For·example,·<a·href="#append/3"><code·class="inline">append/3</code></a>·can·be·defined·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append</span><span·class="p"·data-group-id="5968921960-1">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Val</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D</span><span·class="p"·data-group-id="5968921960-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1079 | ····</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 1079 | ····</span><span·class="nf">update</span><span·class="p"·data-group-id="5968921960-2">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="5968921960-3">(</span><span·class="n">Old</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·673,·SHA:·7e625e84799d92d4e8eb128b12403e10e085216088f1565b840405a0ace3cad8·...·]-2">)</span><span·class="p">.</span></code></pre> |
| 1080 | ··</section> | 1080 | ··</section> |
| 1081 | </section> | 1081 | </section> |
| 1082 | <section·class="detail"·id="update_counter/3"> | 1082 | <section·class="detail"·id="update_counter/3"> |
| 1083 | ··<div·class="detail-header"> | 1083 | ··<div·class="detail-header"> |
| 1084 | ····<a·href="#update_counter/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1084 | ····<a·href="#update_counter/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1085 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1085 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1103, 16 lines modified | Offset 1103, 16 lines modified | ||
| 1103 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·update_counter(Key,·Increment,·Dict1)·->·Dict2 | 1103 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·update_counter(Key,·Increment,·Dict1)·->·Dict2 |
| 1104 | ························when·Dict1·::·<a·href="#t:dict/2">dict</a>(Key,·Value),·Dict2·::·<a·href="#t:dict/2">dict</a>(Key,·Value),·Increment·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:number/0">number</a>().</pre> | 1104 | ························when·Dict1·::·<a·href="#t:dict/2">dict</a>(Key,·Value),·Dict2·::·<a·href="#t:dict/2">dict</a>(Key,·Value),·Increment·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:number/0">number</a>().</pre> |
| 1105 | ······</div> | 1105 | ······</div> |
| 1106 | <p>Adds·<code·class="inline">Increment</code>·to·the·value·associated·with·<code·class="inline">Key</code>·and·stores·this·value.·If | 1106 | <p>Adds·<code·class="inline">Increment</code>·to·the·value·associated·with·<code·class="inline">Key</code>·and·stores·this·value.·If |
| 1107 | <code·class="inline">Key</code>·is·not·present·in·the·dictionary,·<code·class="inline">Increment</code>·is·stored·as·the·first | 1107 | <code·class="inline">Key</code>·is·not·present·in·the·dictionary,·<code·class="inline">Increment</code>·is·stored·as·the·first |
| 1108 | value.</p><p>This·can·be·defined·as·follows,·but·is·faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">update_counter</span><span·class="p"·data-group-id=" | 1108 | value.</p><p>This·can·be·defined·as·follows,·but·is·faster:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">update_counter</span><span·class="p"·data-group-id="2066153408-1">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Incr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D</span><span·class="p"·data-group-id="2066153408-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1109 | ····</span><span·class="nf">update</span><span·class="p"·data-group-id=" | 1109 | ····</span><span·class="nf">update</span><span·class="p"·data-group-id="2066153408-2">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="2066153408-3">(</span><span·class="n">Old</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·462,·SHA:·97a289381a3775cf8be5b68c2a4f7298dcb4818b6ce33ffa15b31db868ff5430·...·]-2">)</span><span·class="p">.</span></code></pre> |
| 1110 | ··</section> | 1110 | ··</section> |
| 1111 | </section> | 1111 | </section> |
| 1112 | ····</div> | 1112 | ····</div> |
| 1113 | ··</section> | 1113 | ··</section> |
| 1114 | ····<footer·class="footer"> | 1114 | ····<footer·class="footer"> |
| Offset 1133, 15 lines modified | Offset 1133, 15 lines modified | ||
| 1133 | ······<p·class="built-using"> | 1133 | ······<p·class="built-using"> |
| 1134 | ········Built·using | 1134 | ········Built·using |
| 1135 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1135 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1136 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1136 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1137 | ······</p> | 1137 | ······</p> |
| 1138 | <p>Copyright·©·1996-202 | 1138 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1139 | ····</footer> | 1139 | ····</footer> |
| 1140 | ··</div> | 1140 | ··</div> |
| 1141 | </main> | 1141 | </main> |
| 1142 | </div> | 1142 | </div> |
| 1143 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1143 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1144 | ··<script> | 1144 | ··<script> |
| 1145 | ··let·initialized·=·false; | 1145 | ··let·initialized·=·false; |
| Offset 1758, 15 lines modified | Offset 1758, 15 lines modified | ||
| 1758 | ······<p·class="built-using"> | 1758 | ······<p·class="built-using"> |
| 1759 | ········Built·using | 1759 | ········Built·using |
| 1760 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1760 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1761 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1761 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1762 | ······</p> | 1762 | ······</p> |
| 1763 | <p>Copyright·©·1996-202 | 1763 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1764 | ····</footer> | 1764 | ····</footer> |
| 1765 | ··</div> | 1765 | ··</div> |
| 1766 | </main> | 1766 | </main> |
| 1767 | </div> | 1767 | </div> |
| 1768 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1768 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1769 | ··<script> | 1769 | ··<script> |
| 1770 | ··let·initialized·=·false; | 1770 | ··let·initialized·=·false; |
| Offset 1004, 15 lines modified | Offset 1004, 15 lines modified | ||
| 1004 | ······<p·class="built-using"> | 1004 | ······<p·class="built-using"> |
| 1005 | ········Built·using | 1005 | ········Built·using |
| 1006 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1006 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1007 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1007 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1008 | ······</p> | 1008 | ······</p> |
| 1009 | <p>Copyright·©·1996-202 | 1009 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1010 | ····</footer> | 1010 | ····</footer> |
| 1011 | ··</div> | 1011 | ··</div> |
| 1012 | </main> | 1012 | </main> |
| 1013 | </div> | 1013 | </div> |
| 1014 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1014 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1015 | ··<script> | 1015 | ··<script> |
| 1016 | ··let·initialized·=·false; | 1016 | ··let·initialized·=·false; |
| Offset 336, 15 lines modified | Offset 336, 15 lines modified | ||
| 336 | ······<p·class="built-using"> | 336 | ······<p·class="built-using"> |
| 337 | ········Built·using | 337 | ········Built·using |
| 338 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 338 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 339 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 339 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 340 | ······</p> | 340 | ······</p> |
| 341 | <p>Copyright·©·1996-202 | 341 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 342 | ····</footer> | 342 | ····</footer> |
| 343 | ··</div> | 343 | ··</div> |
| 344 | </main> | 344 | </main> |
| 345 | </div> | 345 | </div> |
| 346 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 346 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 347 | ··<script> | 347 | ··<script> |
| 348 | ··let·initialized·=·false; | 348 | ··let·initialized·=·false; |
| Offset 328, 15 lines modified | Offset 328, 15 lines modified | ||
| 328 | ······<p·class="built-using"> | 328 | ······<p·class="built-using"> |
| 329 | ········Built·using | 329 | ········Built·using |
| 330 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 330 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 331 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 331 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 332 | ······</p> | 332 | ······</p> |
| 333 | <p>Copyright·©·1996-202 | 333 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 334 | ····</footer> | 334 | ····</footer> |
| 335 | ··</div> | 335 | ··</div> |
| 336 | </main> | 336 | </main> |
| 337 | </div> | 337 | </div> |
| 338 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 338 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 339 | ··<script> | 339 | ··<script> |
| 340 | ··let·initialized·=·false; | 340 | ··let·initialized·=·false; |
| Offset 136, 15 lines modified | Offset 136, 15 lines modified | ||
| 136 | <code·class="inline">Latin-1</code>·and·<code·class="inline">UTF-8</code>,·where·the·case·of·the·characters·can·be·chosen·freely.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·coding:·utf-8</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·For·this·file·we·have·chosen·encoding·=·Latin-1</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·-*-·coding:·latin-1·-*-</span></code></pre><h2·id="module-error-information"·class="section-heading"> | 136 | <code·class="inline">Latin-1</code>·and·<code·class="inline">UTF-8</code>,·where·the·case·of·the·characters·can·be·chosen·freely.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·coding:·utf-8</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·For·this·file·we·have·chosen·encoding·=·Latin-1</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·-*-·coding:·latin-1·-*-</span></code></pre><h2·id="module-error-information"·class="section-heading"> |
| 137 | ··<a·href="#module-error-information"·class="hover-link"> | 137 | ··<a·href="#module-error-information"·class="hover-link"> |
| 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 138 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 139 | ··</a> | 139 | ··</a> |
| 140 | ··<span·class="text">Error·Information</span> | 140 | ··<span·class="text">Error·Information</span> |
| 141 | </h2> | 141 | </h2> |
| 142 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O | 142 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O |
| 143 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 143 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4304153994-1">{</span><span·class="n">ErrorLine</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErrorDescriptor</span><span·class="p"·data-group-id="43041539[·...·truncated·by·diffoscope;·len:·369,·SHA:·b7b556ca0e50ee1d96b38dfa3023f50e3a4b18b398234eb806483a3e79eaa123·...·]-1">)</span></code></pre><h2·id="module-see-also"·class="section-heading"> |
| 144 | ··<a·href="#module-see-also"·class="hover-link"> | 144 | ··<a·href="#module-see-also"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">See·Also</span> | 147 | ··<span·class="text">See·Also</span> |
| 148 | </h2> | 148 | </h2> |
| 149 | <p><a·href="erl_parse.html"><code·class="inline">erl_parse</code></a></p> | 149 | <p><a·href="erl_parse.html"><code·class="inline">erl_parse</code></a></p> |
| 150 | ····</section> | 150 | ····</section> |
| Offset 1185, 15 lines modified | Offset 1185, 15 lines modified | ||
| 1185 | ······<p·class="built-using"> | 1185 | ······<p·class="built-using"> |
| 1186 | ········Built·using | 1186 | ········Built·using |
| 1187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1189 | ······</p> | 1189 | ······</p> |
| 1190 | <p>Copyright·©·1996-202 | 1190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1191 | ····</footer> | 1191 | ····</footer> |
| 1192 | ··</div> | 1192 | ··</div> |
| 1193 | </main> | 1193 | </main> |
| 1194 | </div> | 1194 | </div> |
| 1195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1196 | ··<script> | 1196 | ··<script> |
| 1197 | ··let·initialized·=·false; | 1197 | ··let·initialized·=·false; |
| Offset 1211, 15 lines modified | Offset 1211, 15 lines modified | ||
| 1211 | ······<p·class="built-using"> | 1211 | ······<p·class="built-using"> |
| 1212 | ········Built·using | 1212 | ········Built·using |
| 1213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1213 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1214 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1215 | ······</p> | 1215 | ······</p> |
| 1216 | <p>Copyright·©·1996-202 | 1216 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1217 | ····</footer> | 1217 | ····</footer> |
| 1218 | ··</div> | 1218 | ··</div> |
| 1219 | </main> | 1219 | </main> |
| 1220 | </div> | 1220 | </div> |
| 1221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1221 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1222 | ··<script> | 1222 | ··<script> |
| 1223 | ··let·initialized·=·false; | 1223 | ··let·initialized·=·false; |
| Offset 309, 15 lines modified | Offset 309, 15 lines modified | ||
| 309 | ······<div·class="specs"> | 309 | ······<div·class="specs"> |
| 310 | ··········<pre·translate="no"><span·class="attribute">-type</span>·format_fun()·::·fun((<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·<a·href="#t:column/0">column</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iolist/0">iolist</a>()).</pre> | 310 | ··········<pre·translate="no"><span·class="attribute">-type</span>·format_fun()·::·fun((<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·<a·href="#t:column/0">column</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iolist/0">iolist</a>()).</pre> |
| 311 | ······</div> | 311 | ······</div> |
| 312 | <p>A·fun·used·to·format·function·arguments·for·BIF·and·function·calls.·By·default | 312 | <p>A·fun·used·to·format·function·arguments·for·BIF·and·function·calls.·By·default |
| 313 | the·following·fun·will·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 313 | the·following·fun·will·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="6610342514-1">(</span><span·class="n">Term</span><span·class="p">,</span><span·class="w">·</span><span·class="n">I</span><span·class="p"·data-group-id="6610342514-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·418,·SHA:·1e04b898ee95f9abde57dc7a9a1dc9ec1159036d69a631ebcc1e0fdd5eb41331·...·]-2">)</span><span·class="w">·</span><span·class="k">end</span></code></pre> |
| 314 | ··</section> | 314 | ··</section> |
| 315 | </section> | 315 | </section> |
| 316 | <section·class="detail"·id="t:format_options/0"> | 316 | <section·class="detail"·id="t:format_options/0"> |
| 317 | ··<div·class="detail-header"> | 317 | ··<div·class="detail-header"> |
| 318 | ····<a·href="#t:format_options/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> | 318 | ····<a·href="#t:format_options/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·type"> |
| 319 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 319 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 424, 31 lines modified | Offset 424, 31 lines modified | ||
| 424 | <p>This·callback·is·called·when·<a·href="#format_exception/4"><code·class="inline">format_exception/4</code></a>·or·similar·functionality·wants | 424 | <p>This·callback·is·called·when·<a·href="#format_exception/4"><code·class="inline">format_exception/4</code></a>·or·similar·functionality·wants |
| 425 | to·provide·extra·information·about·an·error.·The·<code·class="inline">Module</code>:<code·class="inline">Function</code>·called·is | 425 | to·provide·extra·information·about·an·error.·The·<code·class="inline">Module</code>:<code·class="inline">Function</code>·called·is |
| 426 | the·one·specificed·by·the·<code·class="inline">error_info</code>·map.</p><p>The·function·should·return·a·map·with·additional·information·about·what·have | 426 | the·one·specificed·by·the·<code·class="inline">error_info</code>·map.</p><p>The·function·should·return·a·map·with·additional·information·about·what·have |
| 427 | caused·the·exception.·The·possible·keys·of·the·map·are:</p><ul><li><p><strong><code·class="inline">ArgumentPosition·=·pos_integer()</code></strong>·-·The·position·of·the·argument·that | 427 | caused·the·exception.·The·possible·keys·of·the·map·are:</p><ul><li><p><strong><code·class="inline">ArgumentPosition·=·pos_integer()</code></strong>·-·The·position·of·the·argument·that |
| 428 | caused·the·error·starting·at·1.</p></li><li><p><strong><code·class="inline">general</code></strong>·-·An·error·that·is·not·associated·with·any·argument·caused·the | 428 | caused·the·error·starting·at·1.</p></li><li><p><strong><code·class="inline">general</code></strong>·-·An·error·that·is·not·associated·with·any·argument·caused·the |
| 429 | error.</p></li><li><p><strong><code·class="inline">reason</code></strong>·-·If·the·<code·class="inline">Reason</code>·should·be·printed·differently·than·the·default | 429 | error.</p></li><li><p><strong><code·class="inline">reason</code></strong>·-·If·the·<code·class="inline">Reason</code>·should·be·printed·differently·than·the·default |
| 430 | way.</p></li></ul><p>If·the·text·returned·includes·new-lines,·<a·href="#format_exception/4"><code·class="inline">format_exception/4</code></a>·will·indent·the | 430 | way.</p></li></ul><p>If·the·text·returned·includes·new-lines,·<a·href="#format_exception/4"><code·class="inline">format_exception/4</code></a>·will·indent·the |
| 431 | text·correctly.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 431 | text·correctly.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9134537374-1">(</span><span·class="ss">my_error_module</span><span·class="p"·data-group-id="9134537374-1">)</span><span·class="p">.</span><span·class="w"> |
| 432 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 432 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9134537374-2">(</span><span·class="p"·data-group-id="9134537374-3">[</span><span·class="ss">atom_to_string</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">format_error</span><span·clas[·...·truncated·by·diffoscope;·len:·133,·SHA:·fcb9efa03a0e8e5c659da26fcdcc34d534778bc250a0080fd2d5f8b06b3a0678·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 433 | </span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id=" | 433 | </span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id="9134537374-4">(</span><span·class="n">Arg</span><span·class="p"·data-group-id="9134537374-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_atom</span><span·class="p"·data-group-id="9134537374-5">(</s[·...·truncated·by·diffoscope;·len:·71,·SHA:·e9b63b30b65f504588d791ae59af72b7fca2fef44128dffaf42c17bb3cb9711b·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 434 | ··</span><span·class="nf">atom_to_list</span><span·class="p"·data-group-id=" | 434 | ··</span><span·class="nf">atom_to_list</span><span·class="p"·data-group-id="9134537374-6">(</span><span·class="n">Arg</span><span·class="p"·data-group-id="9134537374-6">)</span><span·class="p">;</span><span·class="w"> |
| 435 | </span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id=" | 435 | </span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id="9134537374-7">(</span><span·class="n">Arg</span><span·class="p"·data-group-id="9134537374-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 436 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id=" | 436 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">error</span><span·class="p"·data-group-id="9134537374-8">(</span><span·class="ss">badarg</span><span·class="p">,</span><span·class="p"·data-group-id="9134537374-9">[</span><span·class="n">Arg</span><span·class="p"·data-group-id="9134537374-9">]</span><span·class="p">,</span><span·class="w"> |
| 437 | ···············</span><span·class="p"·data-group-id=" | 437 | ···············</span><span·class="p"·data-group-id="9134537374-10">[</span><span·class="p"·data-group-id="9134537374-11">{</span><span·class="ss">error_info</span><span·class="p">,</span><span·class="p"·data-group-id="9134537374-12">#{</span><span·class="w">·</span><span·class="ss">module</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w"> |
| 438 | ·······························</span><span·class="ss">cause</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id=" | 438 | ·······························</span><span·class="ss">cause</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="9134537374-13">#{</span><span·class="w">·</span><span·class="mi">1</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"should·be·an·atom"</span><span·class="w">·</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·226,·SHA:·eee51821ef2b04adfc14a4ca5e377e444ee8c50f15695ea73a8f265bbe460595·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 439 | </span><span·class="nf">format_error</span><span·class="p"·data-group-id=" | 439 | </span><span·class="nf">format_error</span><span·class="p"·data-group-id="9134537374-14">(</span><span·class="n">Reason</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9134537374-15">[</span><span·class="p"·data-group-id="9134537374-16">{</span><span·class="p">_</span><span·class="n">M</span>[·...·truncated·by·diffoscope;·len:·393,·SHA:·debca51062bc0ae98932f8a99361dc84c14ad8af0def538fe5248b7aedfe1c4e·...·]-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 440 | ··</span><span·class="n">ErrorInfo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id=" | 440 | ··</span><span·class="n">ErrorInfo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="9134537374-17">(</span><span·class="ss">error_info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9134537374-18">#{</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·74,·SHA:·2aa8d9648c5576c27baadeb00eb4a50857fd1e9938a48b911f54280e13a618cd·...·]-17">)</span><span·class="p">,</span><span·class="w"> |
| 441 | ··</span><span·class="n">ErrorMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 441 | ··</span><span·class="n">ErrorMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">get</span><span·class="p"·data-group-id="9134537374-19">(</span><span·class="ss">cause</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErrorInfo</span><span·class="p"·data-group-id="9134537374-19">)</span><span·class="p">,</span><span·class="w"> |
| 442 | ··</span><span·class="n">ErrorMap</span><span·class="p"·data-group-id=" | 442 | ··</span><span·class="n">ErrorMap</span><span·class="p"·data-group-id="9134537374-20">#{</span><span·class="w">·</span><span·class="ss">general</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"optional·general·information"</span><span·class="p">,</span><span·class="w"> |
| 443 | ·············</span><span·class="ss">reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 443 | ·············</span><span·class="ss">reason</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9134537374-21">(</span><span·class="s">"</span><span·class="si">~p</span><span·class="s">:·</span><span·class="si">~p</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="9134537374-22">[</span><span·class="o">?</s[·...·truncated·by·diffoscope;·len:·582,·SHA:·96c4e4dbd467fe857f50aa875b297e02522b672b3684d6757705a855f7142eb7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 444 | </span><span·class="p"·data-group-id=" | 444 | </span><span·class="p"·data-group-id="2010836521-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">my_error_module</span><span·class="p"·data-group-id="2010836521-2">}</span><span·class="gp·unselectable"> |
| 445 | 2>·</span><span·class="nc">my_error_module</span><span·class="p">:</span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id=" | 445 | 2>·</span><span·class="nc">my_error_module</span><span·class="p">:</span><span·class="nf">atom_to_string</span><span·class="p"·data-group-id="2010836521-3">(</span><span·class="mi">1</span><span·class="p"·data-group-id="2010836521-3">)</span><span·class="p">.</span><span·class="w"> |
| 446 | </span><span·class="gt">**·exception·error:·my_error_module:·badarg | 446 | </span><span·class="gt">**·exception·error:·my_error_module:·badarg |
| 447 | ·····in·function··my_error_module:atom_to_string/1 | 447 | ·····in·function··my_error_module:atom_to_string/1 |
| 448 | ········called·as·my_error_module:atom_to_string(1) | 448 | ········called·as·my_error_module:atom_to_string(1) |
| 449 | ········***·argument·1:·should·be·an·atom | 449 | ········***·argument·1:·should·be·an·atom |
| 450 | ········***·optional·general·information</span></code></pre> | 450 | ········***·optional·general·information</span></code></pre> |
| 451 | ··</section> | 451 | ··</section> |
| 452 | </section> | 452 | </section> |
| Offset 524, 26 lines modified | Offset 524, 26 lines modified | ||
| 524 | ······························StackTrace·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:stacktrace/0">erlang:stacktrace</a>(), | 524 | ······························StackTrace·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:stacktrace/0">erlang:stacktrace</a>(), |
| 525 | ······························Options·::·<a·href="#t:format_options/0">format_options</a>().</pre> | 525 | ······························Options·::·<a·href="#t:format_options/0">format_options</a>().</pre> |
| 526 | ······</div> | 526 | ······</div> |
| 527 | <p>Format·the·error·reason·and·stack·back-trace·caught·using·<code·class="inline">try</code>·...·<code·class="inline">catch</code>·in | 527 | <p>Format·the·error·reason·and·stack·back-trace·caught·using·<code·class="inline">try</code>·...·<code·class="inline">catch</code>·in |
| 528 | the·same·style·as·the·shell·formats·them.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">try</span><span·class="w"> | 528 | the·same·style·as·the·shell·formats·them.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">try</span><span·class="w"> |
| 529 | ····</span><span·class="nf">do_something</span><span·class="p"·data-group-id=" | 529 | ····</span><span·class="nf">do_something</span><span·class="p"·data-group-id="0576990689-1">(</span><span·class="p"·data-group-id="0576990689-1">)</span><span·class="w"> |
| 530 | </span><span·class="k">catch</span><span·class="w"> | 530 | </span><span·class="k">catch</span><span·class="w"> |
| 531 | ····</span><span·class="n">C</span><span·class="p">:</span><span·class="n">R</span><span·class="p">:</span><span·class="n">Stk</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 531 | ····</span><span·class="n">C</span><span·class="p">:</span><span·class="n">R</span><span·class="p">:</span><span·class="n">Stk</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 532 | ········</span><span·class="n">Message</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_error</span><span·class="p">:</span><span·class="nf">format_exception</span><span·class="p"·data-group-id=" | 532 | ········</span><span·class="n">Message</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_error</span><span·class="p">:</span><span·class="nf">format_exception</span><span·class="p"·data-group-id="0576990689-2">(</span><span·class="n">C</span><span·class="p">,</span><span·class="w">·</span><span·class="n">R</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Stk</span><span·class="p"·data-group-id="0576990689-2">)</span><span·class="p">,</span><span·class="w"> |
| 533 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 533 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0576990689-3">(</span><span·class="n">LogFile</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"~ts\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0576990689-4">[</span><span·class="n"[·...·truncated·by·diffoscope;·len:·109,·SHA:·74532251731726c1a7d91df0f0dbac35087737fa462a29fe9fb999c4b5153824·...·]-3">)</span><span·class="w"> |
| 534 | </span><span·class="k">end</span></code></pre><p>If·<code·class="inline">error_info</code>·is·provided·with·the·exception,·<code·class="inline">format_exception</code>·will·use·that | 534 | </span><span·class="k">end</span></code></pre><p>If·<code·class="inline">error_info</code>·is·provided·with·the·exception,·<code·class="inline">format_exception</code>·will·use·that |
| 535 | information·to·provide·additional·information·about·the·exception.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">try</span><span·class="w"> | 535 | information·to·provide·additional·information·about·the·exception.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">try</span><span·class="w"> |
| 536 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">raise</span><span·class="p"·data-group-id="5 | 536 | ··</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">raise</span><span·class="p"·data-group-id="0568073400-1">(</span><span·class="ss">badarg</span><span·class="p">,</span><span·class="p"·data-group-id="0568073400-2">[</span><span·class="p"·data-group-id="0568073400-2">]</span><span·class="p">,</span><span·class="p"·data-group-id="0568073400-3">[</sp[·...·truncated·by·diffoscope;·len:·368,·SHA:·c0cc753698e811c6d66019e90835eea5daf4e46902b650cad7d4a73b56bd6051·...·]-1">)</span><span·class="w"> |
| 537 | </span><span·class="k">catch</span><span·class="w"> | 537 | </span><span·class="k">catch</span><span·class="w"> |
| 538 | ····</span><span·class="n">C</span><span·class="p">:</span><span·class="n">R</span><span·class="p">:</span><span·class="n">Stk</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 538 | ····</span><span·class="n">C</span><span·class="p">:</span><span·class="n">R</span><span·class="p">:</span><span·class="n">Stk</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 539 | ········</span><span·class="n">Message</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_error</span><span·class="p">:</span><span·class="nf">format_exception</span><span·class="p"·data-group-id="5 | 539 | ········</span><span·class="n">Message</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_error</span><span·class="p">:</span><span·class="nf">format_exception</span><span·class="p"·data-group-id="0568073400-6">(</span><span·class="n">C</span><span·class="p">,</span><span·class="w">·</span><span·class="n">R</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Stk</span><span·class="p"·data-group-id="0568073400-6">)</span><span·class="p">,</span><span·class="w"> |
| 540 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="5 | 540 | ········</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0568073400-7">(</span><span·class="n">LogFile</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"~ts\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0568073400-8">[</span><span·class="n"[·...·truncated·by·diffoscope;·len:·109,·SHA:·f5bf2b16bfd89e64784f5326d5895bc0978ba7b639b7206043b3fa5a6405658b·...·]-7">)</span><span·class="w"> |
| 541 | </span><span·class="k">end</span></code></pre><p>See·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#error/3"><code·class="inline">erlang:error/3</code></a>·for·details·on·how·to·raise·an·exception·with·<code·class="inline">error_info</code> | 541 | </span><span·class="k">end</span></code></pre><p>See·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#error/3"><code·class="inline">erlang:error/3</code></a>·for·details·on·how·to·raise·an·exception·with·<code·class="inline">error_info</code> |
| 542 | included.</p> | 542 | included.</p> |
| 543 | ··</section> | 543 | ··</section> |
| 544 | </section> | 544 | </section> |
| 545 | ····</div> | 545 | ····</div> |
| 546 | ··</section> | 546 | ··</section> |
| Offset 566, 15 lines modified | Offset 566, 15 lines modified | ||
| 566 | ······<p·class="built-using"> | 566 | ······<p·class="built-using"> |
| 567 | ········Built·using | 567 | ········Built·using |
| 568 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 568 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 569 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 569 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 570 | ······</p> | 570 | ······</p> |
| 571 | <p>Copyright·©·1996-202 | 571 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 572 | ····</footer> | 572 | ····</footer> |
| 573 | ··</div> | 573 | ··</div> |
| 574 | </main> | 574 | </main> |
| 575 | </div> | 575 | </div> |
| 576 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 576 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 577 | ··<script> | 577 | ··<script> |
| 578 | ··let·initialized·=·false; | 578 | ··let·initialized·=·false; |
| Offset 137, 35 lines modified | Offset 137, 35 lines modified | ||
| 137 | ··<span·class="text">Local·Function·Handler</span> | 137 | ··<span·class="text">Local·Function·Handler</span> |
| 138 | </h2> | 138 | </h2> |
| 139 | <p>During·evaluation·of·a·function,·no·calls·can·be·made·to·local·functions.·An | 139 | <p>During·evaluation·of·a·function,·no·calls·can·be·made·to·local·functions.·An |
| 140 | undefined·function·error·would·be·generated.·However,·the·optional·argument | 140 | undefined·function·error·would·be·generated.·However,·the·optional·argument |
| 141 | <code·class="inline">LocalFunctionHandler</code>·can·be·used·to·define·a·function·that·is·called·when | 141 | <code·class="inline">LocalFunctionHandler</code>·can·be·used·to·define·a·function·that·is·called·when |
| 142 | there·is·a·call·to·a·local·function.·The·argument·can·have·the·following | 142 | there·is·a·call·to·a·local·function.·The·argument·can·have·the·following |
| 143 | formats:</p><ul><li><p><strong><code·class="inline">{value,Func}</code></strong>·-·This·defines·a·local·function·handler·that·is·called | 143 | formats:</p><ul><li><p><strong><code·class="inline">{value,Func}</code></strong>·-·This·defines·a·local·function·handler·that·is·called |
| 144 | with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id=" | 144 | with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id="0747922863-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Arguments</span><span·class="p"·data-group-id="0747922863-1">)</span></code></pre><p><code·class="inline">Name</code>·is·the·name·of·the·local·function·(an·atom)·and·<code·class="inline">Arguments</code>·is·a·list |
| 145 | of·the·<em>evaluated</em>·arguments.·The·function·handler·returns·the·value·of·the | 145 | of·the·<em>evaluated</em>·arguments.·The·function·handler·returns·the·value·of·the |
| 146 | local·function.·In·this·case,·the·current·bindings·cannot·be·accessed.·To | 146 | local·function.·In·this·case,·the·current·bindings·cannot·be·accessed.·To |
| 147 | signal·an·error,·the·function·handler·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a | 147 | signal·an·error,·the·function·handler·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a |
| 148 | suitable·exit·value.</p></li><li><p><strong><code·class="inline">{eval,Func}</code></strong>·-·This·defines·a·local·function·handler·that·is·called·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id="4 | 148 | suitable·exit·value.</p></li><li><p><strong><code·class="inline">{eval,Func}</code></strong>·-·This·defines·a·local·function·handler·that·is·called·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id="4907262094-1">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Arguments</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bindings</span><span·class="p"·data-group-id="4907262094-1">)</span></code></pre><p><code·class="inline">Name</code>·is·the·name·of·the·local·function·(an·atom),·<code·class="inline">Arguments</code>·is·a·list·of |
| 149 | the·<em>unevaluated</em>·arguments,·and·<code·class="inline">Bindings</code>·are·the·current·variable·bindings. | 149 | the·<em>unevaluated</em>·arguments,·and·<code·class="inline">Bindings</code>·are·the·current·variable·bindings. |
| 150 | The·function·handler·returns:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 150 | The·function·handler·returns:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8711304092-1">{</span><span·class="ss">value</span><span·class="p">,</span><span·class="n">Value</span><span·class="p">,</span><span·class="n">NewBindings</span><span·class="p"·data-group-id="8711304092-1">}</span></code></pre><p><code·class="inline">Value</code>·is·the·value·of·the·local·function·and·<code·class="inline">NewBindings</code>·are·the·updated |
| 151 | variable·bindings.·In·this·case,·the·function·handler·must·itself·evaluate·all | 151 | variable·bindings.·In·this·case,·the·function·handler·must·itself·evaluate·all |
| 152 | the·function·arguments·and·manage·the·bindings.·To·signal·an·error,·the | 152 | the·function·arguments·and·manage·the·bindings.·To·signal·an·error,·the |
| 153 | function·handler·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a·suitable·exit·value.</p></li><li><p><strong><code·class="inline">none</code></strong>·-·There·is·no·local·function·handler.</p></li></ul><h2·id="module-non-local-function-handler"·class="section-heading"> | 153 | function·handler·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a·suitable·exit·value.</p></li><li><p><strong><code·class="inline">none</code></strong>·-·There·is·no·local·function·handler.</p></li></ul><h2·id="module-non-local-function-handler"·class="section-heading"> |
| 154 | ··<a·href="#module-non-local-function-handler"·class="hover-link"> | 154 | ··<a·href="#module-non-local-function-handler"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Non-Local·Function·Handler</span> | 157 | ··<span·class="text">Non-Local·Function·Handler</span> |
| 158 | </h2> | 158 | </h2> |
| 159 | <p>The·optional·argument·<code·class="inline">NonLocalFunctionHandler</code>·can·be·used·to·define·a·function | 159 | <p>The·optional·argument·<code·class="inline">NonLocalFunctionHandler</code>·can·be·used·to·define·a·function |
| 160 | that·is·called·in·the·following·cases:</p><ul><li>A·functional·object·(fun)·is·called.</li><li>A·built-in·function·is·called.</li><li>A·function·is·called·using·the·<code·class="inline">M:F</code>·syntax,·where·<code·class="inline">M</code>·and·<code·class="inline">F</code>·are·atoms·or | 160 | that·is·called·in·the·following·cases:</p><ul><li>A·functional·object·(fun)·is·called.</li><li>A·built-in·function·is·called.</li><li>A·function·is·called·using·the·<code·class="inline">M:F</code>·syntax,·where·<code·class="inline">M</code>·and·<code·class="inline">F</code>·are·atoms·or |
| 161 | expressions.</li><li>An·operator·<code·class="inline">Op/A</code>·is·called·(this·is·handled·as·a·call·to·function | 161 | expressions.</li><li>An·operator·<code·class="inline">Op/A</code>·is·called·(this·is·handled·as·a·call·to·function |
| 162 | <code·class="inline">erlang:Op/A</code>).</li></ul><p>Exceptions·are·calls·to·<code·class="inline">erlang:apply/2,3</code>;·neither·of·the·function·handlers·are | 162 | <code·class="inline">erlang:Op/A</code>).</li></ul><p>Exceptions·are·calls·to·<code·class="inline">erlang:apply/2,3</code>;·neither·of·the·function·handlers·are |
| 163 | called·for·such·calls.·The·argument·can·have·the·following·formats:</p><ul><li><p><strong><code·class="inline">{value,Func}</code></strong>·-·This·defines·a·non-local·function·handler.·The·function | 163 | called·for·such·calls.·The·argument·can·have·the·following·formats:</p><ul><li><p><strong><code·class="inline">{value,Func}</code></strong>·-·This·defines·a·non-local·function·handler.·The·function |
| 164 | may·be·called·with·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id=" | 164 | may·be·called·with·two·arguments:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Func</span><span·class="p"·data-group-id="8840013136-1">(</span><span·class="n">FuncSpec</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Arguments</span><span·class="p"·data-group-id="8840013136-1">)</span></code></pre><p>or·three·arguments:</p><pre><code·class="makeup·erlang[·...·truncated·by·diffoscope;·len:·324,·SHA:·0c7b9e94654ff67b0969ee48e9caa4c253e6c7445be0b813a050ca55d3dc0815·...·]-1">)</span></code></pre><p><code·class="inline">Anno</code>·is·the·<a·href="erl_anno.html#t:anno/0"><code·class="inline">erl_anno:anno()</code></a>·of·the·node,·<code·class="inline">FuncSpec</code> |
| 165 | is·the·name·of·the·function·on·the·form·<code·class="inline">{Module,Function}</code>·or·a·fun,·and | 165 | is·the·name·of·the·function·on·the·form·<code·class="inline">{Module,Function}</code>·or·a·fun,·and |
| 166 | <code·class="inline">Arguments</code>·is·a·list·of·the·<em>evaluated</em>·arguments.·The·function·handler | 166 | <code·class="inline">Arguments</code>·is·a·list·of·the·<em>evaluated</em>·arguments.·The·function·handler |
| 167 | returns·the·value·of·the·function.·To·signal·an·error,·the·function·handler | 167 | returns·the·value·of·the·function.·To·signal·an·error,·the·function·handler |
| 168 | calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a·suitable·exit·value.</p></li><li><p><strong><code·class="inline">none</code></strong>·-·There·is·no·non-local·function·handler.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>For·calls·such·as·<code·class="inline">erlang:apply(Fun,·Args)</code>·or | 168 | calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#exit/1"><code·class="inline">exit/1</code></a>·with·a·suitable·exit·value.</p></li><li><p><strong><code·class="inline">none</code></strong>·-·There·is·no·non-local·function·handler.</p></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>For·calls·such·as·<code·class="inline">erlang:apply(Fun,·Args)</code>·or |
| 169 | <code·class="inline">erlang:apply(Module,·Function,·Args)</code>,·the·call·of·the·non-local·function | 169 | <code·class="inline">erlang:apply(Module,·Function,·Args)</code>,·the·call·of·the·non-local·function |
| 170 | handler·corresponding·to·the·call·to·<code·class="inline">erlang:apply/2,3</code>·itself | 170 | handler·corresponding·to·the·call·to·<code·class="inline">erlang:apply/2,3</code>·itself |
| 171 | (<code·class="inline">Func({erlang,·apply},·[Fun,·Args])</code>·or | 171 | (<code·class="inline">Func({erlang,·apply},·[Fun,·Args])</code>·or |
| Offset 1365, 15 lines modified | Offset 1365, 15 lines modified | ||
| 1365 | ······<p·class="built-using"> | 1365 | ······<p·class="built-using"> |
| 1366 | ········Built·using | 1366 | ········Built·using |
| 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1369 | ······</p> | 1369 | ······</p> |
| 1370 | <p>Copyright·©·1996-202 | 1370 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1371 | ····</footer> | 1371 | ····</footer> |
| 1372 | ··</div> | 1372 | ··</div> |
| 1373 | </main> | 1373 | </main> |
| 1374 | </div> | 1374 | </div> |
| 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1376 | ··<script> | 1376 | ··<script> |
| 1377 | ··let·initialized·=·false; | 1377 | ··let·initialized·=·false; |
| Offset 230, 15 lines modified | Offset 230, 15 lines modified | ||
| 230 | ······<p·class="built-using"> | 230 | ······<p·class="built-using"> |
| 231 | ········Built·using | 231 | ········Built·using |
| 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 232 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 233 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 234 | ······</p> | 234 | ······</p> |
| 235 | <p>Copyright·©·1996-202 | 235 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 236 | ····</footer> | 236 | ····</footer> |
| 237 | ··</div> | 237 | ··</div> |
| 238 | </main> | 238 | </main> |
| 239 | </div> | 239 | </div> |
| 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 240 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 241 | ··<script> | 241 | ··<script> |
| 242 | ··let·initialized·=·false; | 242 | ··let·initialized·=·false; |
| Offset 570, 15 lines modified | Offset 570, 15 lines modified | ||
| 570 | ······<p·class="built-using"> | 570 | ······<p·class="built-using"> |
| 571 | ········Built·using | 571 | ········Built·using |
| 572 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 572 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 573 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 573 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 574 | ······</p> | 574 | ······</p> |
| 575 | <p>Copyright·©·1996-202 | 575 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 576 | ····</footer> | 576 | ····</footer> |
| 577 | ··</div> | 577 | ··</div> |
| 578 | </main> | 578 | </main> |
| 579 | </div> | 579 | </div> |
| 580 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 580 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 581 | ··<script> | 581 | ··<script> |
| 582 | ··let·initialized·=·false; | 582 | ··let·initialized·=·false; |
| Offset 283, 15 lines modified | Offset 283, 15 lines modified | ||
| 283 | ······<p·class="built-using"> | 283 | ······<p·class="built-using"> |
| 284 | ········Built·using | 284 | ········Built·using |
| 285 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 285 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 286 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 286 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 287 | ······</p> | 287 | ······</p> |
| 288 | <p>Copyright·©·1996-202 | 288 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 289 | ····</footer> | 289 | ····</footer> |
| 290 | ··</div> | 290 | ··</div> |
| 291 | </main> | 291 | </main> |
| 292 | </div> | 292 | </div> |
| 293 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 293 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 294 | ··<script> | 294 | ··<script> |
| 295 | ··let·initialized·=·false; | 295 | ··let·initialized·=·false; |
| Offset 556, 15 lines modified | Offset 556, 15 lines modified | ||
| 556 | ······<p·class="built-using"> | 556 | ······<p·class="built-using"> |
| 557 | ········Built·using | 557 | ········Built·using |
| 558 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 558 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 559 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 559 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 560 | ······</p> | 560 | ······</p> |
| 561 | <p>Copyright·©·1996-202 | 561 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 562 | ····</footer> | 562 | ····</footer> |
| 563 | ··</div> | 563 | ··</div> |
| 564 | </main> | 564 | </main> |
| 565 | </div> | 565 | </div> |
| 566 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 566 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 567 | ··<script> | 567 | ··<script> |
| 568 | ··let·initialized·=·false; | 568 | ··let·initialized·=·false; |
| Offset 135, 15 lines modified | Offset 135, 15 lines modified | ||
| 135 | your·own·Erlang·compiler.</p><h2·id="module-error-information"·class="section-heading"> | 135 | your·own·Erlang·compiler.</p><h2·id="module-error-information"·class="section-heading"> |
| 136 | ··<a·href="#module-error-information"·class="hover-link"> | 136 | ··<a·href="#module-error-information"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Error·Information</span> | 139 | ··<span·class="text">Error·Information</span> |
| 140 | </h2> | 140 | </h2> |
| 141 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O | 141 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O |
| 142 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 142 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7360086823-1">{</span><span·class="n">ErrorLine</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErrorDescriptor</span><span·class="p"·data-group-id="73600868[·...·truncated·by·diffoscope;·len:·369,·SHA:·81ac316b5633f5fd9026c2d86acad3fc4bf46d0d540c4cd47fa8cf355757018b·...·]-1">)</span></code></pre><h2·id="module-see-also"·class="section-heading"> |
| 143 | ··<a·href="#module-see-also"·class="hover-link"> | 143 | ··<a·href="#module-see-also"·class="hover-link"> |
| 144 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 144 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 145 | ··</a> | 145 | ··</a> |
| 146 | ··<span·class="text">See·Also</span> | 146 | ··<span·class="text">See·Also</span> |
| 147 | </h2> | 147 | </h2> |
| 148 | <p><a·href="epp.html"><code·class="inline">epp</code></a>,·<a·href="erl_parse.html"><code·class="inline">erl_parse</code></a></p> | 148 | <p><a·href="epp.html"><code·class="inline">epp</code></a>,·<a·href="erl_parse.html"><code·class="inline">erl_parse</code></a></p> |
| 149 | ····</section> | 149 | ····</section> |
| Offset 573, 15 lines modified | Offset 573, 15 lines modified | ||
| 573 | ······<p·class="built-using"> | 573 | ······<p·class="built-using"> |
| 574 | ········Built·using | 574 | ········Built·using |
| 575 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 575 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 576 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 576 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 577 | ······</p> | 577 | ······</p> |
| 578 | <p>Copyright·©·1996-202 | 578 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 579 | ····</footer> | 579 | ····</footer> |
| 580 | ··</div> | 580 | ··</div> |
| 581 | </main> | 581 | </main> |
| 582 | </div> | 582 | </div> |
| 583 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 583 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 584 | ··<script> | 584 | ··<script> |
| 585 | ··let·initialized·=·false; | 585 | ··let·initialized·=·false; |
| Offset 134, 15 lines modified | Offset 134, 15 lines modified | ||
| 134 | (see·the·<a·href="erl_scan.html"><code·class="inline">erl_scan</code></a>)·module.</p><h2·id="module-error-information"·class="section-heading"> | 134 | (see·the·<a·href="erl_scan.html"><code·class="inline">erl_scan</code></a>)·module.</p><h2·id="module-error-information"·class="section-heading"> |
| 135 | ··<a·href="#module-error-information"·class="hover-link"> | 135 | ··<a·href="#module-error-information"·class="hover-link"> |
| 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 137 | ··</a> | 137 | ··</a> |
| 138 | ··<span·class="text">Error·Information</span> | 138 | ··<span·class="text">Error·Information</span> |
| 139 | </h2> | 139 | </h2> |
| 140 | <p>ErrorInfo·is·the·standard·ErrorInfo·structure·that·is·returned·from·all·I/O·modules. | 140 | <p>ErrorInfo·is·the·standard·ErrorInfo·structure·that·is·returned·from·all·I/O·modules. |
| 141 | The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 141 | The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1019098966-1">{</span><span·class="n">ErrorLine</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErrorDescriptor</span><span·class="p"·data-group-id="10190989[·...·truncated·by·diffoscope;·len:·369,·SHA:·ea5d249ac9484c47086954d5d66d62d39ef55c166fcdb9879156417114f04c5e·...·]-1">)</span></code></pre><h2·id="module-see-also"·class="section-heading"> |
| 142 | ··<a·href="#module-see-also"·class="hover-link"> | 142 | ··<a·href="#module-see-also"·class="hover-link"> |
| 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 143 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 144 | ··</a> | 144 | ··</a> |
| 145 | ··<span·class="text">See·Also</span> | 145 | ··<span·class="text">See·Also</span> |
| 146 | </h2> | 146 | </h2> |
| 147 | <p><a·href="erl_anno.html"><code·class="inline">erl_anno</code></a>,·<a·href="erl_scan.html"><code·class="inline">erl_scan</code></a>,·<a·href="io.html"><code·class="inline">io</code></a>,·section·<a·href="../../../../erts-15.2.7/doc/html/absform.html">The·Abstract·Format</a> | 147 | <p><a·href="erl_anno.html"><code·class="inline">erl_anno</code></a>,·<a·href="erl_scan.html"><code·class="inline">erl_scan</code></a>,·<a·href="io.html"><code·class="inline">io</code></a>,·section·<a·href="../../../../erts-15.2.7/doc/html/absform.html">The·Abstract·Format</a> |
| 148 | in·the·ERTS·User's·Guide.</p> | 148 | in·the·ERTS·User's·Guide.</p> |
| Offset 5628, 15 lines modified | Offset 5628, 15 lines modified | ||
| 5628 | ······<p·class="built-using"> | 5628 | ······<p·class="built-using"> |
| 5629 | ········Built·using | 5629 | ········Built·using |
| 5630 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 5630 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 5631 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 5631 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 5632 | ······</p> | 5632 | ······</p> |
| 5633 | <p>Copyright·©·1996-202 | 5633 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 5634 | ····</footer> | 5634 | ····</footer> |
| 5635 | ··</div> | 5635 | ··</div> |
| 5636 | </main> | 5636 | </main> |
| 5637 | </div> | 5637 | </div> |
| 5638 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 5638 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 5639 | ··<script> | 5639 | ··<script> |
| 5640 | ··let·initialized·=·false; | 5640 | ··let·initialized·=·false; |
| Offset 963, 15 lines modified | Offset 963, 15 lines modified | ||
| 963 | ······<p·class="built-using"> | 963 | ······<p·class="built-using"> |
| 964 | ········Built·using | 964 | ········Built·using |
| 965 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 965 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 966 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 966 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 967 | ······</p> | 967 | ······</p> |
| 968 | <p>Copyright·©·1996-202 | 968 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 969 | ····</footer> | 969 | ····</footer> |
| 970 | ··</div> | 970 | ··</div> |
| 971 | </main> | 971 | </main> |
| 972 | </div> | 972 | </div> |
| 973 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 973 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 974 | ··<script> | 974 | ··<script> |
| 975 | ··let·initialized·=·false; | 975 | ··let·initialized·=·false; |
| Offset 132, 15 lines modified | Offset 132, 15 lines modified | ||
| 132 | tokens.</p><h2·id="module-error-information"·class="section-heading"> | 132 | tokens.</p><h2·id="module-error-information"·class="section-heading"> |
| 133 | ··<a·href="#module-error-information"·class="hover-link"> | 133 | ··<a·href="#module-error-information"·class="hover-link"> |
| 134 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 134 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 135 | ··</a> | 135 | ··</a> |
| 136 | ··<span·class="text">Error·Information</span> | 136 | ··<span·class="text">Error·Information</span> |
| 137 | </h2> | 137 | </h2> |
| 138 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O | 138 | <p><code·class="inline">ErrorInfo</code>·is·the·standard·<code·class="inline">ErrorInfo</code>·structure·that·is·returned·from·all·I/O |
| 139 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 139 | modules.·The·format·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="8021521131-1">{</span><span·class="n">ErrorLocation</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ErrorDescriptor</span><span·class="p"·data-group-id="8021[·...·truncated·by·diffoscope;·len:·373,·SHA:·12ae10c6df611dfd16ab792de5092788ec79207340bb979f62bde7c2412d1f58·...·]-1">)</span></code></pre><h2·id="module-notes"·class="section-heading"> |
| 140 | ··<a·href="#module-notes"·class="hover-link"> | 140 | ··<a·href="#module-notes"·class="hover-link"> |
| 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 141 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 142 | ··</a> | 142 | ··</a> |
| 143 | ··<span·class="text">Notes</span> | 143 | ··<span·class="text">Notes</span> |
| 144 | </h2> | 144 | </h2> |
| 145 | <p>The·continuation·of·the·first·call·to·the·re-entrant·input·functions·must·be | 145 | <p>The·continuation·of·the·first·call·to·the·re-entrant·input·functions·must·be |
| 146 | <code·class="inline">[]</code>.·For·a·complete·description·of·how·the·re-entrant·input·scheme·works,·see | 146 | <code·class="inline">[]</code>.·For·a·complete·description·of·how·the·re-entrant·input·scheme·works,·see |
| Offset 1287, 15 lines modified | Offset 1287, 15 lines modified | ||
| 1287 | ······<p·class="built-using"> | 1287 | ······<p·class="built-using"> |
| 1288 | ········Built·using | 1288 | ········Built·using |
| 1289 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1289 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1290 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1290 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1291 | ······</p> | 1291 | ······</p> |
| 1292 | <p>Copyright·©·1996-202 | 1292 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1293 | ····</footer> | 1293 | ····</footer> |
| 1294 | ··</div> | 1294 | ··</div> |
| 1295 | </main> | 1295 | </main> |
| 1296 | </div> | 1296 | </div> |
| 1297 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1297 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1298 | ··<script> | 1298 | ··<script> |
| 1299 | ··let·initialized·=·false; | 1299 | ··let·initialized·=·false; |
| Offset 1239, 22 lines modified | Offset 1239, 22 lines modified | ||
| 1239 | storage·handling·function.</p><p>Parameter·<code·class="inline">UserData</code>·is·typically·the·result·of·opening·a·low-level·structure | 1239 | storage·handling·function.</p><p>Parameter·<code·class="inline">UserData</code>·is·typically·the·result·of·opening·a·low-level·structure |
| 1240 | like·a·file·descriptor·or·an·SFTP·channel·id.·The·different·<code·class="inline">Fun</code>·clauses | 1240 | like·a·file·descriptor·or·an·SFTP·channel·id.·The·different·<code·class="inline">Fun</code>·clauses |
| 1241 | operate·on·that·very·term.</p><p>The·following·are·the·fun·clauses·parameter·lists:</p><ul><li><p><strong><code·class="inline">(write,·{UserData,DataToWrite})</code></strong>·-·Writes·term·<code·class="inline">DataToWrite</code>·using | 1241 | operate·on·that·very·term.</p><p>The·following·are·the·fun·clauses·parameter·lists:</p><ul><li><p><strong><code·class="inline">(write,·{UserData,DataToWrite})</code></strong>·-·Writes·term·<code·class="inline">DataToWrite</code>·using |
| 1242 | <code·class="inline">UserData</code>.</p></li><li><p><strong><code·class="inline">(close,·UserData)</code></strong>·-·Closes·the·access.</p></li><li><p><strong><code·class="inline">(read2,·{UserData,Size})</code></strong>·-·Reads·using·<code·class="inline">UserData</code>·but·only·<code·class="inline">Size</code>·bytes. | 1242 | <code·class="inline">UserData</code>.</p></li><li><p><strong><code·class="inline">(close,·UserData)</code></strong>·-·Closes·the·access.</p></li><li><p><strong><code·class="inline">(read2,·{UserData,Size})</code></strong>·-·Reads·using·<code·class="inline">UserData</code>·but·only·<code·class="inline">Size</code>·bytes. |
| 1243 | Notice·that·there·is·only·an·arity-2·read·function,·not·an·arity-1·function.</p></li><li><p><strong><code·class="inline">(position,{UserData,Position})</code></strong>·-·Sets·the·position·of·<code·class="inline">UserData</code>·as | 1243 | Notice·that·there·is·only·an·arity-2·read·function,·not·an·arity-1·function.</p></li><li><p><strong><code·class="inline">(position,{UserData,Position})</code></strong>·-·Sets·the·position·of·<code·class="inline">UserData</code>·as |
| 1244 | defined·for·files·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#position/2"><code·class="inline">file:position/2</code></a></p></li></ul><p><em>Example:</em></p><p>The·following·is·a·complete·<code·class="inline">Fun</code>·parameter·for·reading·and·writing·on·files | 1244 | defined·for·files·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#position/2"><code·class="inline">file:position/2</code></a></p></li></ul><p><em>Example:</em></p><p>The·following·is·a·complete·<code·class="inline">Fun</code>·parameter·for·reading·and·writing·on·files |
| 1245 | using·the·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ExampleFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 1245 | using·the·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ExampleFun</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 1246 | ···</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 1246 | ···</span><span·class="nf">fun</span><span·class="p"·data-group-id="5768737681-1">(</span><span·class="ss">write</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5768737681-2">{</span><span·class="n">Fd</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·430,·SHA:·75c3640418d63466bdb6c5cd933f146b366b8cc2b1de6a4fd2092b4846f4dbb7·...·]-3">)</span><span·class="p">;</span><span·class="w"> |
| 1247 | ······</span><span·class="p"·data-group-id=" | 1247 | ······</span><span·class="p"·data-group-id="5768737681-4">(</span><span·class="ss">position</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5768737681-5">{</span><span·class="n">Fd</span><span·class="p">,</span><span·class="n">Pos</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·433,·SHA:·fc5638f225deca3f9eed303b5e6fa3f7c2dde520d5962d7eb2e82f7e07d51255·...·]-6">)</span><span·class="p">;</span><span·class="w"> |
| 1248 | ······</span><span·class="p"·data-group-id=" | 1248 | ······</span><span·class="p"·data-group-id="5768737681-7">(</span><span·class="ss">read2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5768737681-8">{</span><span·class="n">Fd</span><span·class="p">,</span><span·class="n">Size</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·428,·SHA:·1bedcbb7286eb44085b55e2d2bd6af29f07bdccd78f49c3637b0e2b4f62b1fca·...·]-9">)</span><span·class="p">;</span><span·class="w"> |
| 1249 | ······</span><span·class="p"·data-group-id=" | 1249 | ······</span><span·class="p"·data-group-id="5768737681-10">(</span><span·class="ss">close</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Fd</span><span·class="p"·data-group-id="5768737681-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·200,·SHA:·a9220d7b399989dd9085a5842a74ace85554ec6bbf76eb2fceac8b5ced9dbfaa·...·]-11">)</span><span·class="w"> |
| 1250 | ···</span><span·class="k">end</span></code></pre><p>Here·<code·class="inline">Fd</code>·was·specified·to·function·<a·href="#init/3"><code·class="inline">init/3</code></a>·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3891065338-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Fd</span><span·class="p"·data-group-id="3891065338-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="3891065338-2">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="3891065338-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 1251 | </span><span·class=" | 1250 | ···</span><span·class="k">end</span></code></pre><p>Here·<code·class="inline">Fd</code>·was·specified·to·function·<a·href="#init/3"><code·class="inline">init/3</code></a>·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·573,·SHA:·93fce95fce3688702fc07646c310c12bfa9cbc961f6d5db9ab6f94e18533f516·...·]</span><span·class="w"> |
| 1251 | </span><span·class="p"·data-group-id="6725413044-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">TarDesc</span><span·class="p"·data-group-id="6725413044-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_tar</span><span·class="p">:</span><span·class="nf">init</span><span·class="p"·data-group-id="6725413044-4">(</span><span·class="n">Fd</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6725413044-5">[</span><span·class="ss">write</span><span·class="p"·data-group-id="6725413044-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ExampleFun</span><span·class="p"·data-group-id="6725413044-4">)</span><span·class="p">,</span></code></pre><p><code·class="inline">TarDesc</code>·is·then·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">erl_tar</span><span·class="p">:</span><span·class="nf">add</span><span·class="p"·data-group-id="6107632626-1">(</span><span·class="n">TarDesc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SomeValueIwantToAdd</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FileNameInTarFile</span><span·class="p"·data-group-id="6107632626-1">)</span><span·class="p">,</span><span·class="w"> | ||
| 1252 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> | 1252 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">,</span><span·class="w"> |
| 1253 | </span><span·class="nc">erl_tar</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 1253 | </span><span·class="nc">erl_tar</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="6107632626-2">(</span><span·class="n">TarDesc</span><span·class="p"·data-group-id="6107632626-2">)</span></code></pre><p>When·the·<code·class="inline">erl_tar</code>·core·wants·to,·for·example,·write·a·piece·of·<code·class="inline">Data</code>,·it·would |
| 1254 | call·<code·class="inline">ExampleFun(write,·{UserData,Data})</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·example·with·the·<code·class="inline">file</code>·module·operations·is·not·necessary·to·use | 1254 | call·<code·class="inline">ExampleFun(write,·{UserData,Data})</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·example·with·the·<code·class="inline">file</code>·module·operations·is·not·necessary·to·use |
| 1255 | directly,·as·that·is·what·function·<a·href="#open/2"><code·class="inline">open/2</code></a>·in·principle·does.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>The·<code·class="inline">TarDescriptor</code>·term·is·not·a·file·descriptor.·You·are·advised·not·to·rely | 1255 | directly,·as·that·is·what·function·<a·href="#open/2"><code·class="inline">open/2</code></a>·in·principle·does.</p></section><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>The·<code·class="inline">TarDescriptor</code>·term·is·not·a·file·descriptor.·You·are·advised·not·to·rely |
| 1256 | on·the·specific·contents·of·this·term,·as·it·can·change·in·future·Erlang/OTP | 1256 | on·the·specific·contents·of·this·term,·as·it·can·change·in·future·Erlang/OTP |
| 1257 | releases·when·more·features·are·added·to·this·module.</p></section> | 1257 | releases·when·more·features·are·added·to·this·module.</p></section> |
| 1258 | ··</section> | 1258 | ··</section> |
| 1259 | </section> | 1259 | </section> |
| 1260 | <section·class="detail"·id="open/2"> | 1260 | <section·class="detail"·id="open/2"> |
| Offset 1425, 15 lines modified | Offset 1425, 15 lines modified | ||
| 1425 | ······<p·class="built-using"> | 1425 | ······<p·class="built-using"> |
| 1426 | ········Built·using | 1426 | ········Built·using |
| 1427 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1427 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1428 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1428 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1429 | ······</p> | 1429 | ······</p> |
| 1430 | <p>Copyright·©·1996-202 | 1430 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1431 | ····</footer> | 1431 | ····</footer> |
| 1432 | ··</div> | 1432 | ··</div> |
| 1433 | </main> | 1433 | </main> |
| 1434 | </div> | 1434 | </div> |
| 1435 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1435 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1436 | ··<script> | 1436 | ··<script> |
| 1437 | ··let·initialized·=·false; | 1437 | ··let·initialized·=·false; |
| Offset 502, 75 lines modified | Offset 502, 75 lines modified | ||
| 502 | <code·class="inline">shebang</code>·defaults·to·<code·class="inline">"/usr/bin/env·escript"</code>.·The·<code·class="inline">comment</code>·defaults·to | 502 | <code·class="inline">shebang</code>·defaults·to·<code·class="inline">"/usr/bin/env·escript"</code>.·The·<code·class="inline">comment</code>·defaults·to |
| 503 | <code·class="inline">"This·is·an·-*-·erlang·-*-·file"</code>.·The·created·escript·can·either·be·returned | 503 | <code·class="inline">"This·is·an·-*-·erlang·-*-·file"</code>.·The·created·escript·can·either·be·returned |
| 504 | as·a·binary·or·written·to·file.</p><p>As·an·example·of·how·the·function·can·be·used,·we·create·an·interpreted·escript | 504 | as·a·binary·or·written·to·file.</p><p>As·an·example·of·how·the·function·can·be·used,·we·create·an·interpreted·escript |
| 505 | that·uses·<code·class="inline">emu_args</code>·to·set·some·emulator·flag.·In·this·case,·it·happens·to·set | 505 | that·uses·<code·class="inline">emu_args</code>·to·set·some·emulator·flag.·In·this·case,·it·happens·to·set |
| 506 | number·of·schedulers·with·<code·class="inline">+S3</code>.·We·also·extract·the·different·sections·from·the | 506 | number·of·schedulers·with·<code·class="inline">+S3</code>.·We·also·extract·the·different·sections·from·the |
| 507 | newly·created·script:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Source</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"%%·Demo\nmain(_Args)·->\n····io:format(\"</span><span·class="si">~p</span><span·class="s">\",[erlang:system_info(schedulers)]).\n"</span><span·class="p">.</span><span·class="w"> | 507 | newly·created·script:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Source</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"%%·Demo\nmain(_Args)·->\n····io:format(\"</span><span·class="si">~p</span><span·class="s">\",[erlang:system_info(schedulers)]).\n"</span><span·class="p">.</span><span·class="w"> |
| 508 | </span><span·class="s">"%%·Demo\nmain(_Args)·->\n····io:format(erlang:system_info(schedulers)).\n"</span><span·class="gp·unselectable"> | 508 | </span><span·class="s">"%%·Demo\nmain(_Args)·->\n····io:format(erlang:system_info(schedulers)).\n"</span><span·class="gp·unselectable"> |
| 509 | >·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 509 | >·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8500660983-1">(</span><span·class="s">"</span><span·class="si">~s</span><span·class="s">\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8500660983-2">[</span><span·class="n">Source</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·76,·SHA:·74680985c60b3405d6560d132d0f437aad98bdb615d7b0bc07d5fd19a9dd71a5·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 510 | </span><span·class="c1">%%·Demo</span><span·class="w"> | 510 | </span><span·class="c1">%%·Demo</span><span·class="w"> |
| 511 | </span><span·class="nf">main</span><span·class="p"·data-group-id=" | 511 | </span><span·class="nf">main</span><span·class="p"·data-group-id="8500660983-3">(</span><span·class="p">_</span><span·class="n">Args</span><span·class="p"·data-group-id="8500660983-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 512 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 512 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="8500660983-4">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="8500660983-5">(</span><span·class="ss">schedulers</span><span·class="p"·data-group-id="8500660983-5">)</span><span[·...·truncated·by·diffoscope;·len:·36,·SHA:·536a80dec09f9c6e8aaf402468283c94d47bacb7eb1b232bb3e22afa374d9427·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 513 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 513 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 514 | >·</span><span·class="p"·data-group-id=" | 514 | >·</span><span·class="p"·data-group-id="8500660983-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p"·data-group-id="8500660983-6">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·630,·SHA:·63f45e8343d02cb5372ce10c9ecbb45d522c3d3bfe1b801c9e688ad0dde1c4b0·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 515 | ······································</span><span·class="p"·data-group-id=" | 515 | ······································</span><span·class="p"·data-group-id="8500660983-10">{</span><span·class="ss">source</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id="8500660983-11">(</span><span·class="n">Source</span><span·class="p"·data-group-id="850[·...·truncated·by·diffoscope;·len:·168,·SHA:·ccefe6bb9a0b3730aa130826baaff934a1fcf4d108948f5fbc743182298d1dc8·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 516 | </span><span·class="p"·data-group-id=" | 516 | </span><span·class="p"·data-group-id="8500660983-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="8500660983-13"><<</span><span·class="s">"#!/usr/bin/env·escript\n%%·This·is·an·-*-·erlang·-*-·file\n%%!+S3"</span><span·class="p">.</spa[·...·truncated·by·diffoscope;·len:·152,·SHA:·248d13e0dbd1777163870cc0d3d2577ffe0b05993ad79bc40e1aa6a5b0b30ef0·...·]-12">}</span><span·class="gp·unselectable"> |
| 517 | >·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id=" | 517 | >·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="8500660983-14">(</span><span·class="s">"demo.escript"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·class="p"·data-group-id="8500660983-14">)</span><span·class="p">.</span><span·class="w"> |
| 518 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 518 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 519 | >·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id=" | 519 | >·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="8500660983-15">(</span><span·class="s">"escript·demo.escript"</span><span·class="p"·data-group-id="8500660983-15">)</span><span·class="p">.</span><span·class="w"> |
| 520 | </span><span·class="s">"3"</span><span·class="gp·unselectable"> | 520 | </span><span·class="s">"3"</span><span·class="gp·unselectable"> |
| 521 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id=" | 521 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id="8500660983-16">(</span><span·class="s">"demo.escript"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8500660983-17">[</span><span·class="p"·data-group-id="8500660983-17">]</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·ffad5d85cd5acfd8483b7784540587d7952f44d083c73a57085417f037fb5fcc·...·]-16">)</span><span·class="p">.</span><span·class="w"> |
| 522 | </span><span·class="p"·data-group-id=" | 522 | </span><span·class="p"·data-group-id="8500660983-18">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="8500660983-19">[</span><span·class="p"·data-group-id="8500660983-20">{</span><span·class="ss">shebang</span><span·class="p">,</span><span·class="ss">def[·...·truncated·by·diffoscope;·len:·544,·SHA:·2870a7b66cc03ac1260afb95b5ba74fac215740b1e0b4c247ccaff0e916e4bbd·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 523 | ·····</span><span·class="p"·data-group-id=" | 523 | ·····</span><span·class="p"·data-group-id="8500660983-23">{</span><span·class="ss">source</span><span·class="p">,</span><span·class="p"·data-group-id="8500660983-24"><<</span><span·class="s">"%%·Demo\nmain(_Args)·->\n····io:format(erlang:system_info(schedu"</span><span·class="p">[·...·truncated·by·diffoscope;·len:·568,·SHA:·e02e066f260491f8456428b1d39a8915f1298ef6efb87926cba0d0f7d8674115·...·]-1">(</span><span·class="s">"demo.erl"</span><span·class="p">,</span><span·class="w"> |
| 524 | ··················</span><span·class="p"·data-group-id=" | 524 | ··················</span><span·class="p"·data-group-id="2078230670-2">[</span><span·class="s">"%%·demo.erl\n-module(demo).\n-export([main/1]).\n\n"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Source</span><span·class="p"·data-group-id="2078230670-2">]</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·23,·SHA:·ff26b1154422e95dd0f7736b14090b6604b6cf73a6f6165a24d8b3c35423f65c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 525 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 525 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 526 | >·</span><span·class="p"·data-group-id=" | 526 | >·</span><span·class="p"·data-group-id="2078230670-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BeamCode</span><span·class="p"·data-group-id="2078230670-3">}</span><spa[·...·truncated·by·diffoscope;·len:·554,·SHA:·951556d412d55663747ef0338da451615b6f9da89822937d818c99a9fb3570a2·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 527 | </span><span·class="p"·data-group-id=" | 527 | </span><span·class="p"·data-group-id="2078230670-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">demo</span><span·class="p">,</span><span·class="w"> |
| 528 | ····</span><span·class="p"·data-group-id=" | 528 | ····</span><span·class="p"·data-group-id="2078230670-7"><<</span><span·class="mi">70</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">49</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">66</span><span·class="p">,</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">116</span><span·class="p">,</span><span·class="mi">111</span><span·class="p">,</span><span·class="mi">109</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 529 | ······</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">100</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 529 | ······</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">100</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2078230670-7">>></span><span·class="p"·data-group-id="2078230670-6">}</span><span·class="gp·unselectable"> |
| 530 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id=" | 530 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id="2078230670-8">(</span><span·class="s">"demo.beam"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2078230670-9">[</span><span·class="p"·data-group-id="2078230670-10">{</span><span·class="ss">beam</span><span·c[·...·truncated·by·diffoscope;·len:·220,·SHA:·62b5dd0f12294431dadf956208c42e9a1ff60c87be68f3e9db031b771befdb0f·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 531 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 531 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 532 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id=" | 532 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id="2078230670-11">(</span><span·class="s">"demo.beam"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2078230670-12">[</span><span·class="p"·data-group-id="2078230670-12">]</span><span·class="p"·data-group-id="20[·...·truncated·by·diffoscope;·len:·8,·SHA:·d39a01acf37e5b69cb52648f15cf9105383a7ae4ab75c144b5d9213bdc04e001·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 533 | </span><span·class="p"·data-group-id=" | 533 | </span><span·class="p"·data-group-id="2078230670-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="2078230670-14">[</span><span·class="p"·data-group-id="2078230670-15">{</span><span·class="ss">shebang</span><span·class="p">,</span><span·class="ss">und[·...·truncated·by·diffoscope;·len:·543,·SHA:·5ac35193ca4e4d6c5fd87494b4705660fa37c59b62bc9644e111961049d9c6f7·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 534 | ·····</span><span·class="p"·data-group-id=" | 534 | ·····</span><span·class="p"·data-group-id="2078230670-18">{</span><span·class="ss">beam</span><span·class="p">,</span><span·class="p"·data-group-id="2078230670-19"><<</span><span·class="mi">70</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">49</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">68</span><span·class="p">,</span><span·class="mi">66</span><span·class="p">,</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">116</span><span·class="p">,</span><span·class="w"> |
| 535 | ·············</span><span·class="mi">111</span><span·class="p">,</span><span·class="mi">109</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">83</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 535 | ·············</span><span·class="mi">111</span><span·class="p">,</span><span·class="mi">109</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">83</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2078230670-19">>></span><span·class="p"·data-group-id="2078230670-18">}</span><span·class="p"·data-group-id="2078230670-14">]</span><span·class="p"·data-group-id="2078230670-13">}</span><span·class="gp·unselectable"> |
| 536 | >·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id=" | 536 | >·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">cmd</span><span·class="p"·data-group-id="2078230670-20">(</span><span·class="s">"escript·demo.beam"</span><span·class="p"·data-group-id="2078230670-20">)</span><span·class="p">.</span><span·class="w"> |
| 537 | </span><span·class="s">"true"</span></code></pre><p>Here·we·create·an·archive·script·containing·both·Erlang·code·and·Beam·code,·then | 537 | </span><span·class="s">"true"</span></code></pre><p>Here·we·create·an·archive·script·containing·both·Erlang·code·and·Beam·code,·then |
| 538 | we·iterate·over·all·files·in·the·archive·and·collect·their·contents·and·some | 538 | we·iterate·over·all·files·in·the·archive·and·collect·their·contents·and·some |
| 539 | information·about·them:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id=" | 539 | information·about·them:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="9960327656-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SourceCode</span><span·class="p"·data-group-id="9960327656-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·220,·SHA:·3f4e1034d1e23e6a8c95143fcd1a1c5bf7d55ae885312ffcd92cc49b959669e2·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 540 | </span><span·class="p"·data-group-id=" | 540 | </span><span·class="p"·data-group-id="9960327656-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9960327656-4"><<</span><span·class="s">"%%·demo.erl\n-module(demo).\n-export([main/1]).\n\n%%·Demo\nmain(_Arg"</span><span·class="p">.</s[·...·truncated·by·diffoscope;·len:·153,·SHA:·2a9f6cb1ed818601ac513831f1c8cb6d6b417fd31aa4dce99d7b437a8a529424·...·]-3">}</span><span·class="gp·unselectable"> |
| 541 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id=" | 541 | >·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id="9960327656-5">(</span><span·class="s">"demo.escript"</span><span·class="p">,</span><span·class="w"> |
| 542 | ·················</span><span·class="p"·data-group-id=" | 542 | ·················</span><span·class="p"·data-group-id="9960327656-6">[</span><span·class="ss">shebang</span><span·class="p">,</span><span·class="w"> |
| 543 | ··················</span><span·class="p"·data-group-id=" | 543 | ··················</span><span·class="p"·data-group-id="9960327656-7">{</span><span·class="ss">archive</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9960327656-8">[</span><span·class="p"·data-group-id="9960327656-9">{</span><span·class="s">"demo.erl"</span><span·[·...·truncated·by·diffoscope;·len:·116,·SHA:·8629a884e9ea7287f7bb61d870027e100695995038d655e35c034269870c478a·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 544 | ·····························</span><span·class="p"·data-group-id=" | 544 | ·····························</span><span·class="p"·data-group-id="9960327656-10">{</span><span·class="s">"demo.beam"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BeamCode</span><span·class="p"·data-group-id="9960327656-10">}</span><span·class="p"·data-group-id="9960327656-8">]</span><sp[·...·truncated·by·diffoscope;·len:·300,·SHA:·a31ed82d40e60c333ba3fbe211bf35670b1ad59e1ca5c278e3de9ea3cd7ff0e8·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 545 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 545 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 546 | >·</span><span·class="p"·data-group-id=" | 546 | >·</span><span·class="p"·data-group-id="9960327656-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9960327656-13">[</span><span·class="p"·data-group-id="9960327656-14">{</span><span·class="ss">shebang</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·565,·SHA:·70e3b87a217c13f22bb5fd225cc7ee3003538f76710d5933eb56c7285c937ca8·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 547 | ·····</span><span·class="p"·data-group-id=" | 547 | ·····</span><span·class="p"·data-group-id="9960327656-17">{</span><span·class="ss">archive</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArchiveBin</span><span·class="p"·data-group-id="9960327656-17">}</span><span·class="p"·data-group-id="9960327656-13">]</span><span·class="[·...·truncated·by·diffoscope;·len:·497,·SHA:·9e5a53a2e0a4126d039f392b414affb6a8e773baec9e7651fb62565fa0f8c283·...·]-18">)</span><span·class="p">.</span><span·class="w"> |
| 548 | </span><span·class="p"·data-group-id=" | 548 | </span><span·class="p"·data-group-id="9960327656-20">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9960327656-21">[</span><span·class="p"·data-group-id="9960327656-22">{</span><span·class="ss">shebang</span><span·class="p">,</span><span·class="ss">def[·...·truncated·by·diffoscope;·len:·541,·SHA:·449c23c78ac7586f7149def9eb3bb1f8f149f04d9f7bea7025e75384f5b3fe7b·...·]-24">}</span><span·class="p">,</span><span·class="w"> |
| 549 | ·····</span><span·class="p"·data-group-id=" | 549 | ·····</span><span·class="p"·data-group-id="9960327656-25">{</span><span·class="p"·data-group-id="9960327656-26">{</span><span·class="ss">archive</span><span·class="p">,</span><span·class="p"·data-group-id="9960327656-27"><<</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">75</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">20</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">60</span><span·class="p">,</span><span·class="mi">105</span><span·class="p">,</span><span·class="w"> |
| 550 | ················</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">61</span><span·class="p">,</span><span·class="mi">93</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 550 | ················</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">61</span><span·class="p">,</span><span·class="mi">93</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="9960327656-27">>></span><span·class="p"·data-group-id="9960327656-26">}</span><span·class="p">]</span><span·class="p"·data-group-id="9960327656-25">}</span><span·class="gp·unselectable"> |
| 551 | >·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id=" | 551 | >·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="9960327656-28">(</span><span·class="s">"demo.zip"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArchiveBin</span><span·class="p"·data-group-id="9960327656-28">)</span><span·class="p">.</span><span·class="w"> |
| 552 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 552 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 553 | >·</span><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 553 | >·</span><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="9960327656-29">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9960327656-30">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">I</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·1252,·SHA:·dbed15dca73ec1b1687e9e79aeaf638f5247c6607123d2bb8fe276d1f0e8a911·...·]-29">)</span><span·class="p">.</span><span·class="w"> |
| 554 | </span><span·class="p"·data-group-id=" | 554 | </span><span·class="p"·data-group-id="9960327656-36">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="9960327656-37">[</span><span·class="p"·data-group-id="9960327656-38">{</span><span·class="s">"demo.beam"</span><span·class="p">,</span><span·class="w"> |
| 555 | ······</span><span·class="p"·data-group-id=" | 555 | ······</span><span·class="p"·data-group-id="9960327656-39">{</span><span·class="ss">file_info</span><span·class="p">,</span><span·class="mi">748</span><span·class="p">,</span><span·class="ss">regular</span><span·class="p">,</span><span·class="ss">read_write</span><span·class="p">,</span><span·class="w"> |
| 556 | ·················</span><span·class="p"·data-group-id=" | 556 | ·················</span><span·class="p"·data-group-id="9960327656-40">{</span><span·class="p"·data-group-id="9960327656-41">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-41">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·b86165610ecf04027de81720749caf3f689024344296b8b7ea0a9d1ef6ce2b98·...·]-40">}</span><span·class="p">,</span><span·class="w"> |
| 557 | ·················</span><span·class="p"·data-group-id=" | 557 | ·················</span><span·class="p"·data-group-id="9960327656-43">{</span><span·class="p"·data-group-id="9960327656-44">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-44">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·dc4f6a9473c949c7696b88d42b800db913cf67ce87875a0b511c08b36b0607d3·...·]-43">}</span><span·class="p">,</span><span·class="w"> |
| 558 | ·················</span><span·class="p"·data-group-id=" | 558 | ·················</span><span·class="p"·data-group-id="9960327656-46">{</span><span·class="p"·data-group-id="9960327656-47">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-47">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·48a78be5ab80e26bcb9be27cd55707a4fc1c2ceabfa9bcedc85e9cccfa96b469·...·]-46">}</span><span·class="p">,</span><span·class="w"> |
| 559 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id=" | 559 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="9960327656-39">}</span><span·class="p">,</span><span·class="w"> |
| 560 | ······</span><span·class="p"·data-group-id=" | 560 | ······</span><span·class="p"·data-group-id="9960327656-49"><<</span><span·class="mi">70</span><span·class="p">,</span><span·class="mi">79</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">49</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">228</span><span·class="p">,</span><span·class="mi">66</span><span·class="p">,</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">77</span><span·class="p">,</span><span·class="mi">65</span><span·class="p">,</span><span·class="mi">116</span><span·class="p">,</span><span·class="mi">111</span><span·class="p">,</span><span·class="mi">109</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 561 | ········</span><span·class="mi">83</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 561 | ········</span><span·class="mi">83</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="9960327656-49">>></span><span·class="p"·data-group-id="9960327656-38">}</span><span·class="p">,</span><span·class="w"> |
| 562 | ·····</span><span·class="p"·data-group-id=" | 562 | ·····</span><span·class="p"·data-group-id="9960327656-50">{</span><span·class="s">"demo.erl"</span><span·class="p">,</span><span·class="w"> |
| 563 | ······</span><span·class="p"·data-group-id=" | 563 | ······</span><span·class="p"·data-group-id="9960327656-51">{</span><span·class="ss">file_info</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="ss">regular</span><span·class="p">,</span><span·class="ss">read_write</span><span·class="p">,</span><span·class="w"> |
| 564 | ·················</span><span·class="p"·data-group-id=" | 564 | ·················</span><span·class="p"·data-group-id="9960327656-52">{</span><span·class="p"·data-group-id="9960327656-53">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-53">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·3ee2fe3888e465bc5d7a0bed18f4be58a9f5a2f1b371a787d0f06dfe196aab65·...·]-52">}</span><span·class="p">,</span><span·class="w"> |
| 565 | ·················</span><span·class="p"·data-group-id=" | 565 | ·················</span><span·class="p"·data-group-id="9960327656-55">{</span><span·class="p"·data-group-id="9960327656-56">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-56">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·b635c5834d35dc8f6035bfe56c1fe57ee96a198f1f1f61680e620900ee35c53f·...·]-55">}</span><span·class="p">,</span><span·class="w"> |
| 566 | ·················</span><span·class="p"·data-group-id=" | 566 | ·················</span><span·class="p"·data-group-id="9960327656-58">{</span><span·class="p"·data-group-id="9960327656-59">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="9960327656-59">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·70c8865a8f42a62a9f7da5bf308593219318c71c36a7d82d81fc2018ec659bbf·...·]-58">}</span><span·class="p">,</span><span·class="w"> |
| 567 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id=" | 567 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="9960327656-51">}</span><span·class="p">,</span><span·class="w"> |
| 568 | ······</span><span·class="p"·data-group-id=" | 568 | ······</span><span·class="p"·data-group-id="9960327656-61"><<</span><span·class="s">"%%·demo.erl\n-module(demo).\n-export([main/1]).\n\n%%·Demo\nmain(_Arg"</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="9960327656-61">>[·...·truncated·by·diffoscope;·len:·160,·SHA:·0b32f17581598f4ccfe3704330b48582d3dacdbfd1b1e3f08823022462dbb40f·...·]-36">}</span></code></pre> |
| 569 | ··</section> | 569 | ··</section> |
| 570 | </section> | 570 | </section> |
| 571 | <section·class="detail"·id="extract/2"> | 571 | <section·class="detail"·id="extract/2"> |
| 572 | ··<div·class="detail-header"> | 572 | ··<div·class="detail-header"> |
| 573 | ····<a·href="#extract/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 573 | ····<a·href="#extract/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 574 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 574 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 593, 24 lines modified | Offset 593, 24 lines modified | ||
| 593 | ······</div> | 593 | ······</div> |
| 594 | <p>Parses·an·escript·and·extracts·its·sections.·This·is·the·reverse·of·<a·href="#create/2"><code·class="inline">create/2</code></a>.</p><p>All·sections·are·returned·even·if·they·do·not·exist·in·the·escript.·If·a | 594 | <p>Parses·an·escript·and·extracts·its·sections.·This·is·the·reverse·of·<a·href="#create/2"><code·class="inline">create/2</code></a>.</p><p>All·sections·are·returned·even·if·they·do·not·exist·in·the·escript.·If·a |
| 595 | particular·section·happens·to·have·the·same·value·as·the·default·value,·the | 595 | particular·section·happens·to·have·the·same·value·as·the·default·value,·the |
| 596 | extracted·value·is·set·to·the·atom·<code·class="inline">default</code>.·If·a·section·is·missing,·the | 596 | extracted·value·is·set·to·the·atom·<code·class="inline">default</code>.·If·a·section·is·missing,·the |
| 597 | extracted·value·is·set·to·the·atom·<code·class="inline">undefined</code>.</p><p>Option·<code·class="inline">compile_source</code>·only·affects·the·result·if·the·escript·contains·<code·class="inline">source</code> | 597 | extracted·value·is·set·to·the·atom·<code·class="inline">undefined</code>.</p><p>Option·<code·class="inline">compile_source</code>·only·affects·the·result·if·the·escript·contains·<code·class="inline">source</code> |
| 598 | code.·In·this·case·the·Erlang·code·is·automatically·compiled·and | 598 | code.·In·this·case·the·Erlang·code·is·automatically·compiled·and |
| 599 | <code·class="inline">{source,·BeamCode}</code>·is·returned·instead·of·<code·class="inline">{source,·SourceCode}</code>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id=" | 599 | <code·class="inline">{source,·BeamCode}</code>·is·returned·instead·of·<code·class="inline">{source,·SourceCode}</code>.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">create</span><span·class="p"·data-group-id="0978185155-1">(</span><span·class="s">"demo.escript"</span><span·class="p">,</span><span·class="w"> |
| 600 | ·················</span><span·class="p"·data-group-id=" | 600 | ·················</span><span·class="p"·data-group-id="0978185155-2">[</span><span·class="ss">shebang</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0978185155-3">{</span><span·class="ss">archive</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·248,·SHA:·67a4583bf7b0d6c170f4b5c283c92e2a67eee7d286ffee263a4bdd0f8423be61·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 601 | ······································</span><span·class="p"·data-group-id=" | 601 | ······································</span><span·class="p"·data-group-id="0978185155-6">{</span><span·class="s">"demo.beam"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">BeamCode</span><span·class="p"·data-group-id="0978185155-6">}</span><span·class="p"·data-group-id="0978185155-4">]</span><span[·...·truncated·by·diffoscope;·len:·296,·SHA:·4821e8f0fe3051378ae67f884c644876f92b976fef208312dc9324e9d8dc4da5·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 602 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 602 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 603 | >·</span><span·class="p"·data-group-id=" | 603 | >·</span><span·class="p"·data-group-id="0978185155-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0978185155-9">[</span><span·class="p"·data-group-id="0978185155-10">{</span><span·class="ss">shebang</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·563,·SHA:·f6dfb9ebf69710e58eae8efbcfae1c9d1b66cfb8549a94e4c89dda0b5715dff8·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 604 | ·····</span><span·class="p"·data-group-id=" | 604 | ·····</span><span·class="p"·data-group-id="0978185155-13">{</span><span·class="ss">archive</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ArchiveBin</span><span·class="p"·data-group-id="0978185155-13">}</span><span·class="p"·data-group-id="0978185155-9">]</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·4a9f288b1132bf6c0f251cc55094b6abbe0ee8faa217f2261c64012e7a5fdcee·...·]-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 605 | ··············</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id=" | 605 | ··············</span><span·class="nc">escript</span><span·class="p">:</span><span·class="nf">extract</span><span·class="p"·data-group-id="0978185155-14">(</span><span·class="s">"demo.escript"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0978185155-15">[</span><span·class="p"·data-group-id="0978185155-15">]</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·08612c81591a022aca027a204a71e07c44b146d0a2847f0c469afb6b6d9ee06b·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 606 | </span><span·class="p"·data-group-id=" | 606 | </span><span·class="p"·data-group-id="0978185155-16">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0978185155-17">[</span><span·class="p"·data-group-id="0978185155-18">{</span><span·class="p"·data-group-id="0978185155-19">{</span><span·class="ss">arch[·...·truncated·by·diffoscope;·len:·75,·SHA:·27610969d673c9ff8efd93e8b483a3e00e3f989f4e6768877ce252e9af706b38·...·]-20"><<</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">75</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">20</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">7</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">60</span><span·class="p">,</span><span·class="mi">105</span><span·class="p">,</span><span·class="w"> |
| 607 | ················</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">61</span><span·class="p">,</span><span·class="mi">93</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 607 | ················</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">61</span><span·class="p">,</span><span·class="mi">93</span><span·class="p">,</span><span·class="mi">107</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">118</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="0978185155-20">>></span><span·class="p"·data-group-id="0978185155-19">}</span><span·class="w"> |
| 608 | ·····</span><span·class="p"·data-group-id=" | 608 | ·····</span><span·class="p"·data-group-id="0978185155-21">{</span><span·class="ss">emu_args</span><span·class="p">,</span><span·class="ss">undefined</span><span·class="p"·data-group-id="0978185155-21">}</span><span·class="p">]</span><span·class="p"·data-group-id="0978185155-18">}</span></code></pre> |
| 609 | ··</section> | 609 | ··</section> |
| 610 | </section> | 610 | </section> |
| 611 | <section·class="detail"·id="script_name/0"> | 611 | <section·class="detail"·id="script_name/0"> |
| 612 | ··<div·class="detail-header"> | 612 | ··<div·class="detail-header"> |
| 613 | ····<a·href="#script_name/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 613 | ····<a·href="#script_name/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 614 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 614 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 658, 15 lines modified | Offset 658, 15 lines modified | ||
| 658 | ······<p·class="built-using"> | 658 | ······<p·class="built-using"> |
| 659 | ········Built·using | 659 | ········Built·using |
| 660 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 660 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 661 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 661 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 662 | ······</p> | 662 | ······</p> |
| 663 | <p>Copyright·©·1996-202 | 663 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 664 | ····</footer> | 664 | ····</footer> |
| 665 | ··</div> | 665 | ··</div> |
| 666 | </main> | 666 | </main> |
| 667 | </div> | 667 | </div> |
| 668 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 668 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 669 | ··<script> | 669 | ··<script> |
| 670 | ··let·initialized·=·false; | 670 | ··let·initialized·=·false; |
| Offset 216, 35 lines modified | Offset 216, 35 lines modified | ||
| 216 | disallow·concurrent·updates·during·the·entire·traversal.</p><p>Moreover,·traversals·not·done·in·a·<em>safe</em>·way,·on·tables·where·keys·are·inserted | 216 | disallow·concurrent·updates·during·the·entire·traversal.</p><p>Moreover,·traversals·not·done·in·a·<em>safe</em>·way,·on·tables·where·keys·are·inserted |
| 217 | or·deleted·during·the·traversal,·may·yield·the·following·undesired·effects:</p><ul><li>Any·key·may·be·missed.</li><li>Any·key·may·be·found·more·than·once.</li><li>The·traversal·may·fail·with·<code·class="inline">badarg</code>·exception·if·keys·are·deleted.</li></ul><p>A·table·traversal·is·<em>safe</em>·if·either</p><ul><li>the·table·is·of·type·<code·class="inline">ordered_set</code>.</li><li>the·entire·table·traversal·is·done·within·one·ETS·function·call.</li><li>function·<a·href="#safe_fixtable/2"><code·class="inline">safe_fixtable/2</code></a>·is·used·to·keep·the·table·fixated·during·the·entire | 217 | or·deleted·during·the·traversal,·may·yield·the·following·undesired·effects:</p><ul><li>Any·key·may·be·missed.</li><li>Any·key·may·be·found·more·than·once.</li><li>The·traversal·may·fail·with·<code·class="inline">badarg</code>·exception·if·keys·are·deleted.</li></ul><p>A·table·traversal·is·<em>safe</em>·if·either</p><ul><li>the·table·is·of·type·<code·class="inline">ordered_set</code>.</li><li>the·entire·table·traversal·is·done·within·one·ETS·function·call.</li><li>function·<a·href="#safe_fixtable/2"><code·class="inline">safe_fixtable/2</code></a>·is·used·to·keep·the·table·fixated·during·the·entire |
| 218 | traversal.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Even·though·the·access·of·a·single·object·is·always·guaranteed·to·be | 218 | traversal.</li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Even·though·the·access·of·a·single·object·is·always·guaranteed·to·be |
| 219 | <a·href="ets.html#module-concurrency">atomic·and·isolated</a>,·each·traversal·through·a·table·to | 219 | <a·href="ets.html#module-concurrency">atomic·and·isolated</a>,·each·traversal·through·a·table·to |
| 220 | find·the·next·key·is·not·done·with·such·guarantees.·This·is·often·not·a | 220 | find·the·next·key·is·not·done·with·such·guarantees.·This·is·often·not·a |
| 221 | problem,·but·may·cause·rare·subtle·"unexpected"·effects·if·a·concurrent | 221 | problem,·but·may·cause·rare·subtle·"unexpected"·effects·if·a·concurrent |
| 222 | process·inserts·objects·during·a·traversal.·For·example,·consider·one·process | 222 | process·inserts·objects·during·a·traversal.·For·example,·consider·one·process |
| 223 | doing</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 223 | doing</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="0931012692-1">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0931012692-2">[</span><span·class="ss">ordered_set</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">named_ta[·...·truncated·by·diffoscope;·len:·104,·SHA:·b990a0f93c8bb29790291d92a8d551ebf0053b5042cf0b4f57cd0ced368a23ea·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 224 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 224 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="0931012692-3">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0931012692-4">{</span><span·class="mi">1</span><span·class="p"·data-group-id="0931012692-4">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·587fef03ccd3d2a60bd733b8b0dbaff4c388ef412ad4c93e245484174c21be1f·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 225 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 225 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="0931012692-5">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0931012692-6">{</span><span·class="mi">2</span><span·class="p"·data-group-id="0931012692-6">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·587fef03ccd3d2a60bd733b8b0dbaff4c388ef412ad4c93e245484174c21be1f·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 226 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id=" | 226 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">insert</span><span·class="p"·data-group-id="0931012692-7">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0931012692-8">{</span><span·class="mi">3</span><span·class="p"·data-group-id="0931012692-8">}</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·587fef03ccd3d2a60bd733b8b0dbaff4c388ef412ad4c93e245484174c21be1f·...·]-7">)</span><span·class="p">,</span></code></pre><p>A·concurrent·call·to·<code·class="inline">ets:first(t)</code>,·done·by·another·process,·may·then·in·rare |
| 227 | cases·return·<code·class="inline">2</code>·even·though·<code·class="inline">2</code>·has·never·existed·in·the·table·ordered·as·the | 227 | cases·return·<code·class="inline">2</code>·even·though·<code·class="inline">2</code>·has·never·existed·in·the·table·ordered·as·the |
| 228 | first·key.·In·the·same·way,·a·concurrent·call·to·<code·class="inline">ets:next(t,·1)</code>·may·return | 228 | first·key.·In·the·same·way,·a·concurrent·call·to·<code·class="inline">ets:next(t,·1)</code>·may·return |
| 229 | <code·class="inline">3</code>·even·though·<code·class="inline">3</code>·never·existed·in·the·table·ordered·directly·after·<code·class="inline">1</code>.</p><p>Effects·like·this·are·improbable·but·possible.·The·probability·will·further·be | 229 | <code·class="inline">3</code>·even·though·<code·class="inline">3</code>·never·existed·in·the·table·ordered·directly·after·<code·class="inline">1</code>.</p><p>Effects·like·this·are·improbable·but·possible.·The·probability·will·further·be |
| 230 | reduced·(if·not·vanish)·if·table·option | 230 | reduced·(if·not·vanish)·if·table·option |
| 231 | <a·href="ets.html#new_2_write_concurrency"><code·class="inline">write_concurrency</code></a>·is·not·enabled.·This | 231 | <a·href="ets.html#new_2_write_concurrency"><code·class="inline">write_concurrency</code></a>·is·not·enabled.·This |
| 232 | can·also·only·be·a·potential·concern·for·<code·class="inline">ordered_set</code>·where·the·traversal | 232 | can·also·only·be·a·potential·concern·for·<code·class="inline">ordered_set</code>·where·the·traversal |
| 233 | order·is·defined.</p></section><p>Traversals·using·<code·class="inline">match</code>·and·<code·class="inline">select</code>·functions·may·not·need·to·scan·the·entire | 233 | order·is·defined.</p></section><p>Traversals·using·<code·class="inline">match</code>·and·<code·class="inline">select</code>·functions·may·not·need·to·scan·the·entire |
| 234 | table·depending·on·how·the·key·is·specified.·A·match·pattern·with·a·<em>fully·bound | 234 | table·depending·on·how·the·key·is·specified.·A·match·pattern·with·a·<em>fully·bound |
| 235 | key</em>·(without·any·match·variables)·will·optimize·the·operation·to·a·single·key | 235 | key</em>·(without·any·match·variables)·will·optimize·the·operation·to·a·single·key |
| 236 | lookup·without·any·table·traversal·at·all.·For·<code·class="inline">ordered_set</code>·a·<em>partially·bound | 236 | lookup·without·any·table·traversal·at·all.·For·<code·class="inline">ordered_set</code>·a·<em>partially·bound |
| 237 | key</em>·will·limit·the·traversal·to·only·scan·a·subset·of·the·table·based·on·term | 237 | key</em>·will·limit·the·traversal·to·only·scan·a·subset·of·the·table·based·on·term |
| 238 | order.·A·partially·bound·key·is·either·a·list·or·a·tuple·with·a·prefix·that·is | 238 | order.·A·partially·bound·key·is·either·a·list·or·a·tuple·with·a·prefix·that·is |
| 239 | fully·bound.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">T</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 239 | fully·bound.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">T</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="2084506195-1">(</span><span·class="ss">t</span><span·class="p">,</span><span·class="p"·data-group-id="2084506195-2">[</span><span·class="ss">ordered_set</span><span·class="p"·data-group-id="2084506195-2">]</span><span·class="p"·data-group-id="2084506195-1"[·...·truncated·by·diffoscope;·len:·546,·SHA:·048e9513b91c88acded2d42b98e46445639fd93d6aab1dd25f400c8396dcd4ed·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 240 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 241 | 2>·</span><span·class="c1">%%·Efficient·search·of·all·with·area·code·555</span><span·class="gp·unselectable"> | 241 | 2>·</span><span·class="c1">%%·Efficient·search·of·all·with·area·code·555</span><span·class="gp·unselectable"> |
| 242 | 2>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id=" | 242 | 2>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id="2084506195-5">(</span><span·class="n">T</span><span·class="p">,</span><span·class="p"·data-group-id="2084506195-6">{</span><span·class="p"·data-group-id="2084506195-7">[</span><span·class="sc">$5</span><span·class="p">,</span><span·class="sc">$5</span><spa[·...·truncated·by·diffoscope;·len:·387,·SHA:·b3c1700638eff7dda9705ce66a6c73999bee2105a6bd76d25277781d4adc39dc·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="p"·data-group-id=" | 243 | </span><span·class="p"·data-group-id="2084506195-8">[</span><span·class="p"·data-group-id="2084506195-9">[</span><span·class="s">"1234"</span><span·class="p">,</span><span·class="s">"John·Smith"</span><span·class="p"·data-group-id="2084506195-9">]</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·21,·SHA:·595fb66ef0198b8c6308a87e27bc66f0d260fa4236c5ae1d11ae5d1c4e329480·...·]-8">]</span></code></pre><p><a·href=""·id="match_spec"></a></p><h2·id="module-match-specifications"·class="section-heading"> |
| 244 | ··<a·href="#module-match-specifications"·class="hover-link"> | 244 | ··<a·href="#module-match-specifications"·class="hover-link"> |
| 245 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 245 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 246 | ··</a> | 246 | ··</a> |
| 247 | ··<span·class="text">Match·Specifications</span> | 247 | ··<span·class="text">Match·Specifications</span> |
| 248 | </h2> | 248 | </h2> |
| 249 | <p>Some·of·the·functions·use·a·<em>match·specification</em>,·<code·class="inline">match_spec</code>.·For·a·brief | 249 | <p>Some·of·the·functions·use·a·<em>match·specification</em>,·<code·class="inline">match_spec</code>.·For·a·brief |
| 250 | explanation,·see·<a·href="#select/2"><code·class="inline">select/2</code></a>.·For·a·detailed·description,·see·section | 250 | explanation,·see·<a·href="#select/2"><code·class="inline">select/2</code></a>.·For·a·detailed·description,·see·section |
| Offset 1886, 27 lines modified | Offset 1886, 27 lines modified | ||
| 1886 | function.</p><p>The·parse·transform·is·provided·in·the·<code·class="inline">ms_transform</code>·module·and·the·source | 1886 | function.</p><p>The·parse·transform·is·provided·in·the·<code·class="inline">ms_transform</code>·module·and·the·source |
| 1887 | <em>must</em>·include·file·<code·class="inline">ms_transform.hrl</code>·in·STDLIB·for·this·pseudo·function·to | 1887 | <em>must</em>·include·file·<code·class="inline">ms_transform.hrl</code>·in·STDLIB·for·this·pseudo·function·to |
| 1888 | work.·Failing·to·include·the·hrl·file·in·the·source·results·in·a·runtime·error, | 1888 | work.·Failing·to·include·the·hrl·file·in·the·source·results·in·a·runtime·error, |
| 1889 | not·a·compile·time·error.·The·include·file·is·easiest·included·by·adding·line | 1889 | not·a·compile·time·error.·The·include·file·is·easiest·included·by·adding·line |
| 1890 | <code·class="inline">-include_lib("stdlib/include/ms_transform.hrl").</code>·to·the·source·file.</p><p>The·fun·is·very·restricted,·it·can·take·only·a·single·parameter·(the·object·to | 1890 | <code·class="inline">-include_lib("stdlib/include/ms_transform.hrl").</code>·to·the·source·file.</p><p>The·fun·is·very·restricted,·it·can·take·only·a·single·parameter·(the·object·to |
| 1891 | match):·a·sole·variable·or·a·tuple.·It·must·use·the·<code·class="inline">is_</code>·guard·tests.·Language | 1891 | match):·a·sole·variable·or·a·tuple.·It·must·use·the·<code·class="inline">is_</code>·guard·tests.·Language |
| 1892 | constructs·that·have·no·representation·in·a·match·specification·(<code·class="inline">if</code>,·<code·class="inline">case</code>, | 1892 | constructs·that·have·no·representation·in·a·match·specification·(<code·class="inline">if</code>,·<code·class="inline">case</code>, |
| 1893 | <code·class="inline">receive</code>,·and·so·on)·are·not·allowed.</p><p>The·return·value·is·the·resulting·match·specification.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 1893 | <code·class="inline">receive</code>,·and·so·on)·are·not·allowed.</p><p>The·return·value·is·the·resulting·match·specification.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="9410589342-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9410589342-2">(</span><span·class="p"·data-group-id="9410589342-3">{</span><span·class="n">M</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·467,·SHA:·d162ce04fc7c65f4320572b089666a7c213f80939d5784e89461eac3b9e4f053·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1894 | </span><span·class="p"·data-group-id=" | 1894 | </span><span·class="p"·data-group-id="9410589342-4">[</span><span·class="p"·data-group-id="9410589342-5">{</span><span·class="p"·data-group-id="9410589342-6">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="9[·...·truncated·by·diffoscope;·len:·664,·SHA:·f29904ba491fa73622ee207a27e315dd86f70e8be47dc7d296ad5cd2fb16e6f8·...·]-4">]</span></code></pre><p>Variables·from·the·environment·can·be·imported,·so·that·the·following·works:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="n">X</span><span·class="o">=</span><span·class="mi">3</span><span·class="p">.</span><span·class="w"> |
| 1895 | </span><span·class="mi">3</span><span·class="gp·unselectable"> | 1895 | </span><span·class="mi">3</span><span·class="gp·unselectable"> |
| 1896 | 3>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 1896 | 3>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="0625711219-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="0625711219-2">(</span><span·class="p"·data-group-id="0625711219-3">{</span><span·class="n">M</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·466,·SHA:·4ca455e9d12981c288f5211639667fe6321bfc6407d7a05dcf43eef873ea076a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1897 | </span><span·class="p"·data-group-id=" | 1897 | </span><span·class="p"·data-group-id="0625711219-4">[</span><span·class="p"·data-group-id="0625711219-5">{</span><span·class="p"·data-group-id="0625711219-6">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="ss">'$2'</span><span·class="p"·data-group-id="0[·...·truncated·by·diffoscope;·len:·825,·SHA:·3e76c2589d11e226c31dd55bc4bc09ded803b12b52f5067c19a3aa2642f84f74·...·]-4">]</span></code></pre><p>The·imported·variables·are·replaced·by·match·specification·<code·class="inline">const</code>·expressions, |
| 1898 | which·is·consistent·with·the·static·scoping·for·Erlang·funs.·However,·local·or | 1898 | which·is·consistent·with·the·static·scoping·for·Erlang·funs.·However,·local·or |
| 1899 | global·function·calls·cannot·be·in·the·guard·or·body·of·the·fun.·Calls·to | 1899 | global·function·calls·cannot·be·in·the·guard·or·body·of·the·fun.·Calls·to |
| 1900 | built-in·match·specification·functions·is·of·course·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 1900 | built-in·match·specification·functions·is·of·course·allowed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="0280720903-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="0280720903-2">(</span><span·class="p"·data-group-id="0280720903-3">{</span><span·class="n">M</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·673,·SHA:·a7d52a4b7be47342c670e939b9821c3a98c2e73786d8243d05c3e03f077b06cf·...·]3-1">)</span><span·class="p">.</span><span·class="w"> |
| 1901 | </span><span·class="n">Error</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">containing</span><span·class="w">·</span><span·class="ss">local</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nf">calls</span><span·class="w"> | 1901 | </span><span·class="n">Error</span><span·class="p">:</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">containing</span><span·class="w">·</span><span·class="ss">local</span><span·class="w">·</span><span·class="n">Erlang</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="nf">calls</span><span·class="w"> |
| 1902 | </span><span·class="p"·data-group-id=" | 1902 | </span><span·class="p"·data-group-id="0280720903-5">(</span><span·class="ss">'my_fun'</span><span·class="w">·</span><span·class="ss">called</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">guard</span><span·class="p"·data-group-id="028072[·...·truncated·by·diffoscope;·len:·3,·SHA:·81aac7f5ae2e7fdd7ef4b078d9a5eb3fa5007f36da07fc2add11d4d0607bdef3·...·]3-5">)</span><span·class="w">·</span><span·class="ss">cannot</span><span·class="w">·</span><span·class="ss">be</span><span·class="w">·</span><span·class="ss">translated</span><span·class="w">·</span><span·class="ss">into</span><span·class="w">·</span><span·class="ss">match_spec</span><span·class="w"> |
| 1903 | </span><span·class="p"·data-group-id=" | 1903 | </span><span·class="p"·data-group-id="0280720903-6">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="ss">transform_error</span><span·class="p"·data-group-id="0280720903-6">}</span><span·class="gp·unselectable"> |
| 1904 | 5>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 1904 | 5>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="0280720903-7">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="0280720903-8">(</span><span·class="p"·data-group-id="0280720903-9">{</span><span·class="n">M</span><span·class="p">,</span><span·class="n">N</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·676,·SHA:·d1d8a0fd3ddf0f212ed17f6487ffeea99001efbc78970a3bc615bec60bff7c27·...·]3-7">)</span><span·class="p">.</span><span·class="w"> |
| 1905 | </span><span·class="p"·data-group-id=" | 1905 | </span><span·class="p"·data-group-id="0280720903-11">[</span><span·class="p"·data-group-id="0280720903-12">{</span><span·class="p"·data-group-id="0280720903-13">{</span><span·class="ss">'$1'</span><span·class="p">,</span><span·class="ss">'$2'</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·1058,·SHA:·ac105f1e3d07cb18be18fbc70895108aa6216dc689a52f662cf115f4422a2892·...·]3-11">]</span></code></pre><p>As·shown·by·the·example,·the·function·can·be·called·from·the·shell·also.·The·fun |
| 1906 | must·be·literally·in·the·call·when·used·from·the·shell·as·well.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>If·the·<code·class="inline">parse_transform</code>·is·not·applied·to·a·module·that·calls·this·pseudo | 1906 | must·be·literally·in·the·call·when·used·from·the·shell·as·well.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>If·the·<code·class="inline">parse_transform</code>·is·not·applied·to·a·module·that·calls·this·pseudo |
| 1907 | function,·the·call·fails·in·runtime·(with·a·<code·class="inline">badarg</code>).·The·<code·class="inline">ets</code>·module | 1907 | function,·the·call·fails·in·runtime·(with·a·<code·class="inline">badarg</code>).·The·<code·class="inline">ets</code>·module |
| 1908 | exports·a·function·with·this·name,·but·it·is·never·to·be·called·except·when | 1908 | exports·a·function·with·this·name,·but·it·is·never·to·be·called·except·when |
| 1909 | using·the·function·in·the·shell.·If·the·<code·class="inline">parse_transform</code>·is·properly·applied | 1909 | using·the·function·in·the·shell.·If·the·<code·class="inline">parse_transform</code>·is·properly·applied |
| 1910 | by·including·header·file·<code·class="inline">ms_transform.hrl</code>,·compiled·code·never·calls·the | 1910 | by·including·header·file·<code·class="inline">ms_transform.hrl</code>,·compiled·code·never·calls·the |
| 1911 | function,·but·the·function·call·is·replaced·by·a·literal·match·specification.</p></section><p>For·more·information,·see·<a·href="ms_transform.html"><code·class="inline">ms_transform</code></a>.</p> | 1911 | function,·but·the·function·call·is·replaced·by·a·literal·match·specification.</p></section><p>For·more·information,·see·<a·href="ms_transform.html"><code·class="inline">ms_transform</code></a>.</p> |
| 1912 | ··</section> | 1912 | ··</section> |
| Offset 2491, 20 lines modified | Offset 2491, 20 lines modified | ||
| 2491 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·match(Table,·Pattern)·->·[Match] | 2491 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·match(Table,·Pattern)·->·[Match] |
| 2492 | ···············when·Table·::·<a·href="#t:table/0">table</a>(),·Pattern·::·<a·href="#t:match_pattern/0">match_pattern</a>(),·Match·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> | 2492 | ···············when·Table·::·<a·href="#t:table/0">table</a>(),·Pattern·::·<a·href="#t:match_pattern/0">match_pattern</a>(),·Match·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> |
| 2493 | ······</div> | 2493 | ······</div> |
| 2494 | <p>Matches·the·objects·in·table·<code·class="inline">Table</code>·against·pattern·<code·class="inline">Pattern</code>.</p><p>A·pattern·is·a·term·that·can·contain:</p><ul><li>Bound·parts·(Erlang·terms)</li><li><code·class="inline">'_'</code>·that·matches·any·Erlang·term</li><li>Pattern·variables·<code·class="inline">'$N'</code>,·where·<code·class="inline">N</code>=0,1,...</li></ul><p>The·function·returns·a·list·with·one·element·for·each·matching·object,·where | 2494 | <p>Matches·the·objects·in·table·<code·class="inline">Table</code>·against·pattern·<code·class="inline">Pattern</code>.</p><p>A·pattern·is·a·term·that·can·contain:</p><ul><li>Bound·parts·(Erlang·terms)</li><li><code·class="inline">'_'</code>·that·matches·any·Erlang·term</li><li>Pattern·variables·<code·class="inline">'$N'</code>,·where·<code·class="inline">N</code>=0,1,...</li></ul><p>The·function·returns·a·list·with·one·element·for·each·matching·object,·where |
| 2495 | each·element·is·an·ordered·list·of·pattern·variable·bindings,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id=" | 2495 | each·element·is·an·ordered·list·of·pattern·variable·bindings,·for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id="5047499352-1">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="5047499352-1">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·Matches·every·object·in·table</span><span·class="w"> |
| 2496 | </span><span·class="p"·data-group-id=" | 2496 | </span><span·class="p"·data-group-id="5047499352-2">[</span><span·class="p"·data-group-id="5047499352-3">[</span><span·class="p"·data-group-id="5047499352-4">{</span><span·class="ss">rufsen</span><span·class="p">,</span><span·class="ss">dog</span><span·class="p">,</span><span·class="mi">7</spa[·...·truncated·by·diffoscope;·len:·882,·SHA:·41e0fab0a85c286f1a1346120a5d2350014d9cbac0a183e3a155a4ebada709c4·...·]-2">]</span><span·class="gp·unselectable"> |
| 2497 | 7>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id=" | 2497 | 7>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id="5047499352-9">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5047499352-10">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="ss">dog</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·133,·SHA:·241c33ec2c5755edc961ec2461e24c85e64eea28af979fd1fce11f45396b7dc3·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 2498 | </span><span·class="p"·data-group-id=" | 2498 | </span><span·class="p"·data-group-id="5047499352-11">[</span><span·class="p"·data-group-id="5047499352-12">[</span><span·class="mi">7</span><span·class="p"·data-group-id="5047499352-12">]</span><span·class="p">,</span><span·class="p"·data-group-id="5047499352-13">[</span><span·class="mi">5</sp[·...·truncated·by·diffoscope;·len:·98,·SHA:·ab953cb7bb2d69490c8d4dc89977943f2168f3c94ca9d20be2445790293f346c·...·]-11">]</span><span·class="gp·unselectable"> |
| 2499 | 8>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id=" | 2499 | 8>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id="5047499352-14">(</span><span·class="n">T</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5047499352-15">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="ss">cow</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·134,·SHA:·29f9fd4ebf35f3fd3a5c02ee6636780f3c2f35de1b08fc8a2d4261be0db5c93f·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 2500 | </span><span·class="p"·data-group-id=" | 2500 | </span><span·class="p"·data-group-id="5047499352-16">[</span><span·class="p"·data-group-id="5047499352-16">]</span></code></pre><p>If·the·key·is·specified·in·the·pattern,·the·match·is·very·efficient.·If·the·key |
| 2501 | is·not·specified,·that·is,·if·it·is·a·variable·or·an·underscore,·the·entire | 2501 | is·not·specified,·that·is,·if·it·is·a·variable·or·an·underscore,·the·entire |
| 2502 | table·must·be·searched.·The·search·time·can·be·substantial·if·the·table·is·very | 2502 | table·must·be·searched.·The·search·time·can·be·substantial·if·the·table·is·very |
| 2503 | large.</p><p>For·tables·of·type·<code·class="inline">ordered_set</code>,·the·result·is·in·the·same·order·as·in·a | 2503 | large.</p><p>For·tables·of·type·<code·class="inline">ordered_set</code>,·the·result·is·in·the·same·order·as·in·a |
| 2504 | <code·class="inline">first</code>/<code·class="inline">next</code>·traversal.</p> | 2504 | <code·class="inline">first</code>/<code·class="inline">next</code>·traversal.</p> |
| 2505 | ··</section> | 2505 | ··</section> |
| 2506 | </section> | 2506 | </section> |
| 2507 | <section·class="detail"·id="match/3"> | 2507 | <section·class="detail"·id="match/3"> |
| Offset 2734, 18 lines modified | Offset 2734, 18 lines modified | ||
| 2734 | use.</p><p>The·matching·is·executed·on·each·element·in·<code·class="inline">List</code>·and·the·function·returns·a | 2734 | use.</p><p>The·matching·is·executed·on·each·element·in·<code·class="inline">List</code>·and·the·function·returns·a |
| 2735 | list·containing·all·results.·If·an·element·in·<code·class="inline">List</code>·does·not·match,·nothing·is | 2735 | list·containing·all·results.·If·an·element·in·<code·class="inline">List</code>·does·not·match,·nothing·is |
| 2736 | returned·for·that·element.·The·length·of·the·result·list·is·therefore·equal·or | 2736 | returned·for·that·element.·The·length·of·the·result·list·is·therefore·equal·or |
| 2737 | less·than·the·length·of·parameter·<code·class="inline">List</code>.</p><p><em>Example:</em></p><p>The·following·two·calls·give·the·same·result·(but·certainly·not·the·same | 2737 | less·than·the·length·of·parameter·<code·class="inline">List</code>.</p><p><em>Example:</em></p><p>The·following·two·calls·give·the·same·result·(but·certainly·not·the·same |
| 2738 | execution·time):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Table</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="ss">new</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 2738 | execution·time):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Table</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="ss">new</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 2739 | </span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 2739 | </span><span·class="n">MatchSpec</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 2740 | </span><span·class="c1">%·The·following·call...</span><span·class="w"> | 2740 | </span><span·class="c1">%·The·following·call...</span><span·class="w"> |
| 2741 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec_run</span><span·class="p"·data-group-id=" | 2741 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec_run</span><span·class="p"·data-group-id="5619123129-1">(</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">tab2list</span><span·class="p"·data-group-id="5619123129-2">(</span><span·class="n">Table</span><span·class="p"·data-group-id="5619123129-2">)</span><span·class="p">,</span><span·class="w"> |
| 2742 | ···················</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec_compile</span><span·class="p"·data-group-id=" | 2742 | ···················</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match_spec_compile</span><span·class="p"·data-group-id="5619123129-3">(</span><span·class="n">MatchSpec</span><span·class="p"·data-group-id="5619123129-3">)</span><span·class="p"·data-group-id="5619123129-1">)</span><span·class="p">,</span><span·class="w"> |
| 2743 | </span><span·class="c1">%·...gives·the·same·result·as·the·more·common·(and·more·efficient)</span><span·class="w"> | 2743 | </span><span·class="c1">%·...gives·the·same·result·as·the·more·common·(and·more·efficient)</span><span·class="w"> |
| 2744 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 2744 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="5619123129-4">(</span><span·class="n">Table</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MatchSpec</span><span·class="p"·data-group-id="5619123129-4">)</span><span·class="p">,</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·function·has·limited·use·in·normal·code.·It·is·used·by·the·<a·href="dets.html"><code·class="inline">dets</code></a> |
| 2745 | module·to·perform·the·<a·href="dets.html#select/1"><code·class="inline">dets:select/1</code></a>·operations·and·by·Mnesia·during | 2745 | module·to·perform·the·<a·href="dets.html#select/1"><code·class="inline">dets:select/1</code></a>·operations·and·by·Mnesia·during |
| 2746 | transactions.</p></section> | 2746 | transactions.</p></section> |
| 2747 | ··</section> | 2747 | ··</section> |
| 2748 | </section> | 2748 | </section> |
| 2749 | <section·class="detail"·id="member/2"> | 2749 | <section·class="detail"·id="member/2"> |
| 2750 | ··<div·class="detail-header"> | 2750 | ··<div·class="detail-header"> |
| Offset 3084, 27 lines modified | Offset 3084, 27 lines modified | ||
| 3084 | <p>Restores·an·opaque·continuation·returned·by·<a·href="#select/3"><code·class="inline">select/3</code></a>·or·<a·href="#select/1"><code·class="inline">select/1</code></a>·if·the | 3084 | <p>Restores·an·opaque·continuation·returned·by·<a·href="#select/3"><code·class="inline">select/3</code></a>·or·<a·href="#select/1"><code·class="inline">select/1</code></a>·if·the |
| 3085 | continuation·has·passed·through·external·term·format·(been·sent·between·nodes·or | 3085 | continuation·has·passed·through·external·term·format·(been·sent·between·nodes·or |
| 3086 | stored·on·disk).</p><p>The·reason·for·this·function·is·that·continuation·terms·contain·compiled·match | 3086 | stored·on·disk).</p><p>The·reason·for·this·function·is·that·continuation·terms·contain·compiled·match |
| 3087 | specifications·and·may·therefore·be·invalidated·if·converted·to·external·term | 3087 | specifications·and·may·therefore·be·invalidated·if·converted·to·external·term |
| 3088 | format.·Given·that·the·original·match·specification·is·kept·intact,·the | 3088 | format.·Given·that·the·original·match·specification·is·kept·intact,·the |
| 3089 | continuation·can·be·restored,·meaning·it·can·once·again·be·used·in·subsequent | 3089 | continuation·can·be·restored,·meaning·it·can·once·again·be·used·in·subsequent |
| 3090 | <a·href="#select/1"><code·class="inline">select/1</code></a>·calls·even·though·it·has·been·stored·on·disk·or·on | 3090 | <a·href="#select/1"><code·class="inline">select/1</code></a>·calls·even·though·it·has·been·stored·on·disk·or·on |
| 3091 | another·node.</p><p><em>Examples:</em></p><p>The·following·sequence·of·calls·may·fail:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">T</span><span·class="o">=</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 3091 | another·node.</p><p><em>Examples:</em></p><p>The·following·sequence·of·calls·may·fail:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">T</span><span·class="o">=</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="5457997403-1">(</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="5457997403-2">[</span><span·class="p"·data-group-id="5457997403-2">]</span><span·class="p"·data-group-id="5457997403-1">)</span><span·class="p">,</span><span·class="w"> |
| 3092 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 3092 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 3093 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 3093 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="5457997403-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="5457997403-4">(</span><span·class="p"·data-group-id="5457997403-5">{</span><span·class="n">N</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·722,·SHA:·b2ba14e00deb2af013a56f287ad269f1c5a458b936feda1a71c8be4f58093f6b·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 3094 | </span><span·class="p"·data-group-id=" | 3094 | </span><span·class="p"·data-group-id="5457997403-7">{</span><span·class="p">_</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="5457997403-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·clas[·...·truncated·by·diffoscope;·len:·309,·SHA:·b890631ca6fb31d4f38ffff65de589e954bc78d24f08041055fb873e8b5ad6e4·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 3095 | </span><span·class="n">MaybeBroken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id=" | 3095 | </span><span·class="n">MaybeBroken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="5457997403-9">(</span><span·class="nf">term_to_binary</span><span·class="p"·data-group-id="5457997403-10">(</span><span·class="n">C</span><span·class="p"·data-group-id="5457997403-10">)</span><span·class="p"·data-group-id="5457997403-9">)</span><span·class="p">,</span><span·class="w"> |
| 3096 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 3096 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="5457997403-11">(</span><span·class="n">MaybeBroken</span><span·class="p"·data-group-id="5457997403-11">)</span><span·class="p">.</span></code></pre><p>The·following·sequence·works,·as·the·call·to |
| 3097 | <a·href="#repair_continuation/2"><code·class="inline">repair_continuation/2</code></a>·reestablishes·the | 3097 | <a·href="#repair_continuation/2"><code·class="inline">repair_continuation/2</code></a>·reestablishes·the |
| 3098 | <code·class="inline">MaybeBroken</code>·continuation.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">T</span><span·class="o">=</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 3098 | <code·class="inline">MaybeBroken</code>·continuation.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">T</span><span·class="o">=</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="2186512930-1">(</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="2186512930-2">[</span><span·class="p"·data-group-id="2186512930-2">]</span><span·class="p"·data-group-id="2186512930-1">)</span><span·class="p">,</span><span·class="w"> |
| 3099 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 3099 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 3100 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id=" | 3100 | </span><span·class="n">MS</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="2186512930-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2186512930-4">(</span><span·class="p"·data-group-id="2186512930-5">{</span><span·class="n">N</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·722,·SHA:·085faa0178138cddc1af029e8ec7f95104cbc21a4a5093722c1a975b1bc590e7·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 3101 | </span><span·class="p"·data-group-id=" | 3101 | </span><span·class="p"·data-group-id="2186512930-7">{</span><span·class="p">_</span><span·class="p">,</span><span·class="n">C</span><span·class="p"·data-group-id="2186512930-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">ets</span><span·clas[·...·truncated·by·diffoscope;·len:·261,·SHA:·59182e8ed813949ddbb356c464e8bbba90e9b89c7096131a3b300d22c0bb8357·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 3102 | </span><span·class="n">MaybeBroken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="4196605052-9">(</span><span·class="nf">term_to_binary</span><span·class="p"·data-group-id="4196605052-10">(</span><span·class="n">C</span><span·class="p"·data-group-id="4196605052-10">)</span><span·class="p"·data-group-id="4196605052-9">)</span><span·class="p">,</span><span·class="w"> | ||
| 3103 | </span><span·class="n | 3102 | </span><span·class="n">MaybeBroken</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary_to_term</span><span·class="p"·data-group-id="2186512930-9">(</span><span·class="nf">term_to_binary</span><span·class="p"·data-group-id="2186[·...·truncated·by·diffoscope;·len:·190,·SHA:·685248fbac32158cd6878d6a3d2bfb6805c5c7fdbb5dded2578128402828ad44·...·] |
| 3103 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="2186512930-11">(</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">repair_continuation</span><span·class="p"·data-group-id="2186512930-12">(</span><span·class="n">MaybeBroken</span><span·class="p">,</span><span·class="n">MS</span><span·class="p"·data-group-id="2186512930-12">)</span><span·class="p"·data-group-id="2186512930-11">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·function·is·rarely·needed·in·application·code.·It·is·used·by·Mnesia·to | ||
| 3104 | provide·distributed·<a·href="#select/3"><code·class="inline">select/3</code></a>·and·<a·href="#select/1"><code·class="inline">select/1</code></a> | 3104 | provide·distributed·<a·href="#select/3"><code·class="inline">select/3</code></a>·and·<a·href="#select/1"><code·class="inline">select/1</code></a> |
| 3105 | sequences.·A·normal·application·would·either·use·Mnesia·or·keep·the | 3105 | sequences.·A·normal·application·would·either·use·Mnesia·or·keep·the |
| Max diff block lines reached; 62816/123253 bytes (50.97%) of diff not shown. | |||
| Offset 191, 43 lines modified | Offset 191, 43 lines modified | ||
| 191 | function·has·been·applied·to·all·of·the·results·or·an·error·occurs,·the·last | 191 | function·has·been·applied·to·all·of·the·results·or·an·error·occurs,·the·last |
| 192 | function·is·called·with·argument·<code·class="inline">close</code>,·and·the·reply·is·returned·as·value·of | 192 | function·is·called·with·argument·<code·class="inline">close</code>,·and·the·reply·is·returned·as·value·of |
| 193 | the·current·call·to·the·sort·or·merge·function.</p><p>If·a·function·is·specified·as·input·and·the·last·input·function·returns | 193 | the·current·call·to·the·sort·or·merge·function.</p><p>If·a·function·is·specified·as·input·and·the·last·input·function·returns |
| 194 | <code·class="inline">{end_of_input,·Value}</code>,·the·function·specified·as·output·is·called·with | 194 | <code·class="inline">{end_of_input,·Value}</code>,·the·function·specified·as·output·is·called·with |
| 195 | argument·<code·class="inline">{value,·Value}</code>.·This·makes·it·easy·to·initiate·the·sequence·of·output | 195 | argument·<code·class="inline">{value,·Value}</code>.·This·makes·it·easy·to·initiate·the·sequence·of·output |
| 196 | functions·with·a·value·calculated·by·the·input·functions.</p><p>As·an·example,·consider·sorting·the·terms·on·a·disk·log·file.·A·function·that | 196 | functions·with·a·value·calculated·by·the·input·functions.</p><p>As·an·example,·consider·sorting·the·terms·on·a·disk·log·file.·A·function·that |
| 197 | reads·chunks·from·the·disk·log·and·returns·a·list·of·binaries·is·used·as·input. | 197 | reads·chunks·from·the·disk·log·and·returns·a·list·of·binaries·is·used·as·input. |
| 198 | The·results·are·collected·in·a·list·of·terms.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sort</span><span·class="p"·data-group-id=" | 198 | The·results·are·collected·in·a·list·of·terms.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sort</span><span·class="p"·data-group-id="5657344867-1">(</span><span·class="n">Log</span><span·class="p"·data-group-id="5657344867-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 199 | ····</span><span·class="p"·data-group-id=" | 199 | ····</span><span·class="p"·data-group-id="5657344867-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="5657344867-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·696,·SHA:·f2897f35bab47284f6e5ab24aaafb44724141bba337ca35f27df15bcc70a4c29·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ····</span><span·class="n">Input</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">input</span><span·class="p"·data-group-id=" | 200 | ····</span><span·class="n">Input</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">input</span><span·class="p"·data-group-id="5657344867-7">(</span><span·class="n">Log</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">start</span><span·class="p"·data-group-id="5657344867-7">)</span><span·class="p">,</span><span·class="w"> |
| 201 | ····</span><span·class="n">Output</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">output</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="n">Output</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">output</span><span·class="p"·data-group-id="5657344867-8">(</span><span·class="p"·data-group-id="5657344867-9">[</span><span·class="p"·data-group-id="5657344867-9">]</span><span·class="p"·data-group-id="5657344867-8">)</span><span·class="p">,</span><span·class="w"> |
| 202 | ····</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file_sorter</span><span·class="p">:</span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 202 | ····</span><span·class="n">Reply</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file_sorter</span><span·class="p">:</span><span·class="nf">sort</span><span·class="p"·data-group-id="5657344867-10">(</span><span·class="n">Input</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Output</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5657344867-11">{</span><span·class="ss">format</s[·...·truncated·by·diffoscope;·len:·151,·SHA:·ea7082fded00989d5539912ee1bc8369e6c30d6c9b0d49ce9de8b5f16fedcae7·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 203 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 203 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="5657344867-12">(</span><span·class="n">Log</span><span·class="p"·data-group-id="5657344867-12">)</span><span·class="p">,</span><span·class="w"> |
| 204 | ····</span><span·class="n">Reply</span><span·class="p">.</span><span·class="w"> | 204 | ····</span><span·class="n">Reply</span><span·class="p">.</span><span·class="w"> |
| 205 | </span><span·class="nf">input</span><span·class="p"·data-group-id=" | 205 | </span><span·class="nf">input</span><span·class="p"·data-group-id="5657344867-13">(</span><span·class="n">Log</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cont</span><span·class="p"·data-group-id="5657344867-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 206 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="5657344867-14">(</span><span·class="ss">close</span><span·class="p"·data-group-id="5657344867-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ············</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 207 | ············</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 208 | ·······</span><span·class="p"·data-group-id=" | 208 | ·······</span><span·class="p"·data-group-id="5657344867-15">(</span><span·class="ss">read</span><span·class="p"·data-group-id="5657344867-15">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">chunk</span><span·class="p"·data-group-id=" | 209 | ············</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">disk_log</span><span·class="p">:</span><span·class="nf">chunk</span><span·class="p"·data-group-id="5657344867-16">(</span><span·class="n">Log</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cont</span><span·class="p"·data-group-id="5657344867-16">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 210 | ················</span><span·class="p"·data-group-id=" | 210 | ················</span><span·class="p"·data-group-id="5657344867-17">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="5657344867-17">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····················</span><span·class="p"·data-group-id=" | 211 | ····················</span><span·class="p"·data-group-id="5657344867-18">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="5657344867-18">}</span><span·class="p">;</span><span·class="w"> |
| 212 | ················</span><span·class="p"·data-group-id=" | 212 | ················</span><span·class="p"·data-group-id="5657344867-19">{</span><span·class="n">Cont2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Terms</span><span·class="p"·data-group-id="5657344867-19">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | ····················</span><span·class="p"·data-group-id=" | 213 | ····················</span><span·class="p"·data-group-id="5657344867-20">{</span><span·class="n">Terms</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">input</span><span·class="p"·data-group-id="5657344867-21">(</span><span·class="n">Log</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·123,·SHA:·c723565bf62fa27ed3c97fd0fe78b711bf12f819112112ba4494169bec2e3d5a·...·]-20">}</span><span·class="p">;</span><span·class="w"> |
| 214 | ················</span><span·class="p"·data-group-id=" | 214 | ················</span><span·class="p"·data-group-id="5657344867-22">{</span><span·class="n">Cont2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Terms</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Badbytes</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·fb6de056e1984affd0bcaefd5b244c45e6fc6941732648edadf7ce6e2b28acd5·...·]-22">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ····················</span><span·class="p"·data-group-id=" | 215 | ····················</span><span·class="p"·data-group-id="5657344867-23">{</span><span·class="n">Terms</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">input</span><span·class="p"·data-group-id="5657344867-24">(</span><span·class="n">Log</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·123,·SHA:·98609325b5346e7ba8372614bbda18f61e07bb679395842b31b2e5cc4839d534·...·]-23">}</span><span·class="p">;</span><span·class="w"> |
| 216 | ················</span><span·class="ss">eof</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 216 | ················</span><span·class="ss">eof</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 217 | ····················</span><span·class="ss">end_of_input</span><span·class="w"> | 217 | ····················</span><span·class="ss">end_of_input</span><span·class="w"> |
| 218 | ············</span><span·class="k">end</span><span·class="w"> | 218 | ············</span><span·class="k">end</span><span·class="w"> |
| 219 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 219 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 220 | </span><span·class="nf">output</span><span·class="p"·data-group-id=" | 220 | </span><span·class="nf">output</span><span·class="p"·data-group-id="5657344867-25">(</span><span·class="n">L</span><span·class="p"·data-group-id="5657344867-25">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 221 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 221 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="5657344867-26">(</span><span·class="ss">close</span><span·class="p"·data-group-id="5657344867-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 222 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 222 | ············</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="5657344867-27">(</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="5657344867-28">(</span><span·class="n">L</span><span·class="p"·data-group-id="5657344867-28">)</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·02d227546d92ff5476692abd20c019f4ea9ae886d0ab2f9e671f5c337c826983·...·]-27">)</span><span·class="p">;</span><span·class="w"> |
| 223 | ·······</span><span·class="p"·data-group-id=" | 223 | ·······</span><span·class="p"·data-group-id="5657344867-29">(</span><span·class="n">Terms</span><span·class="p"·data-group-id="5657344867-29">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 224 | ············</span><span·class="nf">output</span><span·class="p"·data-group-id=" | 224 | ············</span><span·class="nf">output</span><span·class="p"·data-group-id="5657344867-30">(</span><span·class="p"·data-group-id="5657344867-31">[</span><span·class="n">Terms</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="5657344867-31">]</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·068c414c3ac2533a5474213902b73eac2d6869bfdfff94e48fea101f05a3c443·...·]-30">)</span><span·class="w"> |
| 225 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>For·more·examples·of·functions·as·input·and·output,·see·the·end·of·the | 225 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>For·more·examples·of·functions·as·input·and·output,·see·the·end·of·the |
| 226 | <code·class="inline">file_sorter</code>·module;·the·<code·class="inline">term</code>·format·is·implemented·with·functions.</p><p>The·possible·values·of·<code·class="inline">Reason</code>·returned·when·an·error·occurs·are:</p><ul><li><code·class="inline">bad_object</code>,·<code·class="inline">{bad_object,·FileName}</code>·-·Applying·the·format·function·failed | 226 | <code·class="inline">file_sorter</code>·module;·the·<code·class="inline">term</code>·format·is·implemented·with·functions.</p><p>The·possible·values·of·<code·class="inline">Reason</code>·returned·when·an·error·occurs·are:</p><ul><li><code·class="inline">bad_object</code>,·<code·class="inline">{bad_object,·FileName}</code>·-·Applying·the·format·function·failed |
| 227 | for·some·binary,·or·the·key(s)·could·not·be·extracted·from·some·term.</li><li><code·class="inline">{bad_term,·FileName}</code>·-·<a·href="io.html#read/2"><code·class="inline">io:read/2</code></a>·failed·to·read·some·term.</li><li><code·class="inline">{file_error,·FileName,·file:posix()}</code>·-·For·an·explanation·of | 227 | for·some·binary,·or·the·key(s)·could·not·be·extracted·from·some·term.</li><li><code·class="inline">{bad_term,·FileName}</code>·-·<a·href="io.html#read/2"><code·class="inline">io:read/2</code></a>·failed·to·read·some·term.</li><li><code·class="inline">{file_error,·FileName,·file:posix()}</code>·-·For·an·explanation·of |
| 228 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:posix/0"><code·class="inline">file:posix()</code></a>,·see·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>.</li><li><code·class="inline">{premature_eof,·FileName}</code>·-·End-of-file·was·encountered·inside·some·binary | 228 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:posix/0"><code·class="inline">file:posix()</code></a>,·see·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>.</li><li><code·class="inline">{premature_eof,·FileName}</code>·-·End-of-file·was·encountered·inside·some·binary |
| 229 | term.</li></ul> | 229 | term.</li></ul> |
| 230 | ····</section> | 230 | ····</section> |
| Offset 1830, 15 lines modified | Offset 1830, 15 lines modified | ||
| 1830 | ······<p·class="built-using"> | 1830 | ······<p·class="built-using"> |
| 1831 | ········Built·using | 1831 | ········Built·using |
| 1832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1832 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1833 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1834 | ······</p> | 1834 | ······</p> |
| 1835 | <p>Copyright·©·1996-202 | 1835 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1836 | ····</footer> | 1836 | ····</footer> |
| 1837 | ··</div> | 1837 | ··</div> |
| 1838 | </main> | 1838 | </main> |
| 1839 | </div> | 1839 | </div> |
| 1840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1840 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1841 | ··<script> | 1841 | ··<script> |
| 1842 | ··let·initialized·=·false; | 1842 | ··let·initialized·=·false; |
| Offset 986, 23 lines modified | Offset 986, 23 lines modified | ||
| 986 | ································Cwd·::·<a·href="#t:filename_all/0">filename_all</a>(), | 986 | ································Cwd·::·<a·href="#t:filename_all/0">filename_all</a>(), |
| 987 | ································SafeFilename·::·<a·href="#t:filename_all/0">filename_all</a>().</pre> | 987 | ································SafeFilename·::·<a·href="#t:filename_all/0">filename_all</a>().</pre> |
| 988 | ······</div> | 988 | ······</div> |
| 989 | <p>Sanitizes·the·relative·path·by·eliminating·".."·and·"."·components·to·protect | 989 | <p>Sanitizes·the·relative·path·by·eliminating·".."·and·"."·components·to·protect |
| 990 | against·directory·traversal·attacks.</p><p>Either·returns·the·sanitized·path·name,·or·the·atom·<code·class="inline">unsafe</code>·if·the·path·is·unsafe. | 990 | against·directory·traversal·attacks.</p><p>Either·returns·the·sanitized·path·name,·or·the·atom·<code·class="inline">unsafe</code>·if·the·path·is·unsafe. |
| 991 | The·path·is·considered·unsafe·in·the·following·circumstances:</p><ul><li>The·path·is·not·relative.</li><li>A·".."·component·would·climb·up·above·the·root·of·the·relative·path.</li><li>A·symbolic·link·in·the·path·points·above·the·root·of·the·relative·path.</li></ul><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 991 | The·path·is·considered·unsafe·in·the·following·circumstances:</p><ul><li>The·path·is·not·relative.</li><li>A·".."·component·would·climb·up·above·the·root·of·the·relative·path.</li><li>A·symbolic·link·in·the·path·points·above·the·root·of·the·relative·path.</li></ul><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="8353505902-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cwd</span><span·class="p"·data-group-id="8353505902-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·168,·SHA:·3a59355fa1432acb470a7daaf4e10055b32e810a41adf62a6c78573d3740d0b9·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 992 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> | 992 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 993 | 2>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id=" | 993 | 2>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id="8353505902-3">(</span><span·class="s">"dir/sub_dir/.."</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cwd</span><span·class="p"·data-group-id="8353505902-3">)</span><span·class="p">.</span><span·class="w"> |
| 994 | </span><span·class="s">"dir"</span><span·class="gp·unselectable"> | 994 | </span><span·class="s">"dir"</span><span·class="gp·unselectable"> |
| 995 | 3>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id=" | 995 | 3>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id="8353505902-4">(</span><span·class="s">"dir/.."</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cwd</span><span·class="p"·data-group-id="8353505902-4">)</span><span·class="p">.</span><span·class="w"> |
| 996 | </span><span·class="p"·data-group-id=" | 996 | </span><span·class="p"·data-group-id="8353505902-5">[</span><span·class="p"·data-group-id="8353505902-5">]</span><span·class="gp·unselectable"> |
| 997 | 4>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id=" | 997 | 4>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id="8353505902-6">(</span><span·class="s">"dir/../.."</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cwd</span><span·class="p"·data-group-id="8353505902-6">)</span><span·class="p">.</span><span·class="w"> |
| 998 | </span><span·class="ss">unsafe</span><span·class="gp·unselectable"> | 998 | </span><span·class="ss">unsafe</span><span·class="gp·unselectable"> |
| 999 | 5>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id=" | 999 | 5>·</span><span·class="nc">filelib</span><span·class="p">:</span><span·class="nf">safe_relative_path</span><span·class="p"·data-group-id="8353505902-7">(</span><span·class="s">"/abs/path"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Cwd</span><span·class="p"·data-group-id="8353505902-7">)</span><span·class="p">.</span><span·class="w"> |
| 1000 | </span><span·class="ss">unsafe</span></code></pre> | 1000 | </span><span·class="ss">unsafe</span></code></pre> |
| 1001 | ··</section> | 1001 | ··</section> |
| 1002 | </section> | 1002 | </section> |
| 1003 | <section·class="detail"·id="wildcard/1"> | 1003 | <section·class="detail"·id="wildcard/1"> |
| 1004 | ··<div·class="detail-header"> | 1004 | ··<div·class="detail-header"> |
| 1005 | ····<a·href="#wildcard/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1005 | ····<a·href="#wildcard/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1090, 15 lines modified | Offset 1090, 15 lines modified | ||
| 1090 | ······<p·class="built-using"> | 1090 | ······<p·class="built-using"> |
| 1091 | ········Built·using | 1091 | ········Built·using |
| 1092 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1092 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1093 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1093 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1094 | ······</p> | 1094 | ······</p> |
| 1095 | <p>Copyright·©·1996-202 | 1095 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1096 | ····</footer> | 1096 | ····</footer> |
| 1097 | ··</div> | 1097 | ··</div> |
| 1098 | </main> | 1098 | </main> |
| 1099 | </div> | 1099 | </div> |
| 1100 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1100 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1101 | ··<script> | 1101 | ··<script> |
| 1102 | ··let·initialized·=·false; | 1102 | ··let·initialized·=·false; |
| Offset 514, 28 lines modified | Offset 514, 28 lines modified | ||
| 514 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·absname(Filename)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>()·when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> | 514 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·absname(Filename)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>()·when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> |
| 515 | ······</div> | 515 | ······</div> |
| 516 | <p>Converts·a·relative·<code·class="inline">Filename</code>·and·returns·an·absolute·name.·No·attempt·is·made | 516 | <p>Converts·a·relative·<code·class="inline">Filename</code>·and·returns·an·absolute·name.·No·attempt·is·made |
| 517 | to·create·the·shortest·absolute·name,·as·this·can·give·incorrect·results·on·file | 517 | to·create·the·shortest·absolute·name,·as·this·can·give·incorrect·results·on·file |
| 518 | systems·that·allow·links.</p><p><em>Unix·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">pwd</span><span·class="p"·data-group-id="7 | 518 | systems·that·allow·links.</p><p><em>Unix·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">pwd</span><span·class="p"·data-group-id="7381006996-1">(</span><span·class="p"·data-group-id="7381006996-1">)</span><span·class="p">.</span><span·class="w"> |
| 519 | </span><span·class="s">"/usr/local"</span><span·class="gp·unselectable"> | 519 | </span><span·class="s">"/usr/local"</span><span·class="gp·unselectable"> |
| 520 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7 | 520 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7381006996-2">(</span><span·class="s">"foo"</span><span·class="p"·data-group-id="7381006996-2">)</span><span·class="p">.</span><span·class="w"> |
| 521 | </span><span·class="s">"/usr/local/foo"</span><span·class="gp·unselectable"> | 521 | </span><span·class="s">"/usr/local/foo"</span><span·class="gp·unselectable"> |
| 522 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7 | 522 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7381006996-3">(</span><span·class="s">"../x"</span><span·class="p"·data-group-id="7381006996-3">)</span><span·class="p">.</span><span·class="w"> |
| 523 | </span><span·class="s">"/usr/local/../x"</span><span·class="gp·unselectable"> | 523 | </span><span·class="s">"/usr/local/../x"</span><span·class="gp·unselectable"> |
| 524 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7 | 524 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="7381006996-4">(</span><span·class="s">"/"</span><span·class="p"·data-group-id="7381006996-4">)</span><span·class="p">.</span><span·class="w"> |
| 525 | </span><span·class="s">"/"</span></code></pre><p><em>Windows·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">pwd</span><span·class="p"·data-group-id="3 | 525 | </span><span·class="s">"/"</span></code></pre><p><em>Windows·examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">pwd</span><span·class="p"·data-group-id="3889472565-1">(</span><span·class="p"·data-group-id="3889472565-1">)</span><span·class="p">.</span><span·class="w"> |
| 526 | </span><span·class="s">"D:/usr/local"</span><span·class="gp·unselectable"> | 526 | </span><span·class="s">"D:/usr/local"</span><span·class="gp·unselectable"> |
| 527 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3 | 527 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3889472565-2">(</span><span·class="s">"foo"</span><span·class="p"·data-group-id="3889472565-2">)</span><span·class="p">.</span><span·class="w"> |
| 528 | </span><span·class="s">"D:/usr/local/foo"</span><span·class="gp·unselectable"> | 528 | </span><span·class="s">"D:/usr/local/foo"</span><span·class="gp·unselectable"> |
| 529 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3 | 529 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3889472565-3">(</span><span·class="s">"../x"</span><span·class="p"·data-group-id="3889472565-3">)</span><span·class="p">.</span><span·class="w"> |
| 530 | </span><span·class="s">"D:/usr/local/../x"</span><span·class="gp·unselectable"> | 530 | </span><span·class="s">"D:/usr/local/../x"</span><span·class="gp·unselectable"> |
| 531 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3 | 531 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">absname</span><span·class="p"·data-group-id="3889472565-4">(</span><span·class="s">"/"</span><span·class="p"·data-group-id="3889472565-4">)</span><span·class="p">.</span><span·class="w"> |
| 532 | </span><span·class="s">"D:/"</span></code></pre> | 532 | </span><span·class="s">"D:/"</span></code></pre> |
| 533 | ··</section> | 533 | ··</section> |
| 534 | </section> | 534 | </section> |
| 535 | <section·class="detail"·id="absname/2"> | 535 | <section·class="detail"·id="absname/2"> |
| 536 | ··<div·class="detail-header"> | 536 | ··<div·class="detail-header"> |
| 537 | ····<a·href="#absname/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 537 | ····<a·href="#absname/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 659, 66 lines modified | Offset 659, 66 lines modified | ||
| 659 | ······</div> | 659 | ······</div> |
| 660 | <p><a·href=""·id="basedir_3_1"></a>·<a·href=""·id="basedir_3_2"></a></p><p>Returns·a·suitable·path,·or·paths,·for·a·given·type.·If·<code·class="inline">os</code>·is·not·set·in | 660 | <p><a·href=""·id="basedir_3_1"></a>·<a·href=""·id="basedir_3_2"></a></p><p>Returns·a·suitable·path,·or·paths,·for·a·given·type.·If·<code·class="inline">os</code>·is·not·set·in |
| 661 | <code·class="inline">Opts</code>·the·function·will·default·to·the·native·option,·that·is·<code·class="inline">'linux'</code>, | 661 | <code·class="inline">Opts</code>·the·function·will·default·to·the·native·option,·that·is·<code·class="inline">'linux'</code>, |
| 662 | <code·class="inline">'darwin'</code>·or·<code·class="inline">'windows'</code>,·as·understood·by·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/os.html#type/0"><code·class="inline">os:type/0</code></a>.·Anything·not·recognized | 662 | <code·class="inline">'darwin'</code>·or·<code·class="inline">'windows'</code>,·as·understood·by·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/os.html#type/0"><code·class="inline">os:type/0</code></a>.·Anything·not·recognized |
| 663 | as·<code·class="inline">'darwin'</code>·or·<code·class="inline">'windows'</code>·is·interpreted·as·<code·class="inline">'linux'</code>.</p><p>The·options·<code·class="inline">'author'</code>·and·<code·class="inline">'version'</code>·are·only·used·with·<code·class="inline">'windows'</code>·option | 663 | as·<code·class="inline">'darwin'</code>·or·<code·class="inline">'windows'</code>·is·interpreted·as·<code·class="inline">'linux'</code>.</p><p>The·options·<code·class="inline">'author'</code>·and·<code·class="inline">'version'</code>·are·only·used·with·<code·class="inline">'windows'</code>·option |
| 664 | mode.</p><ul><li><p><code·class="inline"·id="user_cache">user_cache</code></p><p>The·path·location·is·intended·for·transient·data·files·on·a·local·machine.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CACHE_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 664 | mode.</p><ul><li><p><code·class="inline"·id="user_cache">user_cache</code></p><p>The·path·location·is·intended·for·transient·data·files·on·a·local·machine.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CACHE_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7310483453-1">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7310483453-2">#{</span><[·...·truncated·by·diffoscope;·len:·176,·SHA:·bdf0d27aade89425f251f4723d7c4e3fb82b64aae1ef0359e9505786ee5b94ce·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 665 | </span><span·class="s">"/home/otptest/.cache/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 665 | </span><span·class="s">"/home/otptest/.cache/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5567458276-1">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5567458276-2">#{</span><[·...·truncated·by·diffoscope;·len:·176,·SHA:·49fb361d8107592b094071259bcda609d0b6c50d6a342772ad2ec0ad992284ce·...·]6-1">)</span><span·class="p">.</span><span·class="w"> |
| 666 | </span><span·class="s">"/home/otptest/Library/Caches/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0 | 666 | </span><span·class="s">"/home/otptest/Library/Caches/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5506281962-1">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p"·data-group-id="5506281962-1">)</span><span·class="p">.</span><span·class="w"> |
| 667 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Cache"</span><span·class="gp·unselectable"> | 667 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Cache"</span><span·class="gp·unselectable"> |
| 668 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0 | 668 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5506281962-2">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p"·data-group-id="5506281962-2">)</span><span·class="p">.</span><span·class="w"> |
| 669 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Cache"</span><span·class="gp·unselectable"> | 669 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Cache"</span><span·class="gp·unselectable"> |
| 670 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0 | 670 | 3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5506281962-3">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5506281962-4">#{</span><span·cla[·...·truncated·by·diffoscope;·len:·183,·SHA:·54d2996a26b2b18851e7522572d223921675b3bf16d91c705da1bb294265981d·...·]2-3">)</span><span·class="p">.</span><span·class="w"> |
| 671 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/Cache"</span><span·class="gp·unselectable"> | 671 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/Cache"</span><span·class="gp·unselectable"> |
| 672 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0 | 672 | 4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5506281962-5">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5506281962-6">#{</span><span·cla[·...·truncated·by·diffoscope;·len:·181,·SHA:·7bd8ac7cb762592b00aba2b1fd4b5db6a1641aa5a22ae59b3d5ad35f8fc06413·...·]2-5">)</span><span·class="p">.</span><span·class="w"> |
| 673 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/1.2/Cache"</span><span·class="gp·unselectable"> | 673 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/1.2/Cache"</span><span·class="gp·unselectable"> |
| 674 | 5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0 | 674 | 5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5506281962-7">(</span><span·class="ss">user_cache</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5506281962-8">#{</span><span·cla[·...·truncated·by·diffoscope;·len:·304,·SHA:·aece29528a5e274142844d3b871c20fee750c10e292e5b5e8174822116eab33d·...·]2-7">)</span><span·class="p">.</span><span·class="w"> |
| 675 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2/Cache"</span></code></pre></li><li><p><code·class="inline"·id="user_config">user_config</code></p><p>The·path·location·is·intended·for·persistent·configuration·files.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CONFIG_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 675 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2/Cache"</span></code></pre></li><li><p><code·class="inline"·id="user_config">user_config</code></p><p>The·path·location·is·intended·for·persistent·configuration·files.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CONFIG_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="1398168896-1">(</span><span·class="ss">user_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1398168896-2">#{</span>[·...·truncated·by·diffoscope;·len:·177,·SHA:·b93379df7e6666cf8cfd0220aaafdf3af16eaa809748d267e0263ea4ebfb910f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 676 | </span><span·class="s">"/home/otptest/.config/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 676 | </span><span·class="s">"/home/otptest/.config/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="5512553530-1">(</span><span·class="ss">user_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5512553530-2">#{</span>[·...·truncated·by·diffoscope;·len:·178,·SHA:·7bfc848a472b44eed1bd8025dee79439cdb22129c5060d1ff09b2e0ca4423a3e·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 677 | </span><span·class="s">"/home/otptest/Library/Application·Support/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="28 | 677 | </span><span·class="s">"/home/otptest/Library/Application·Support/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0289889187-1">(</span><span·class="ss">user_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p"·data-group-id="0289889187-1">)</span><span·class="p">.</span><span·class="w"> |
| 678 | </span><span·class="s">"c:/Users/otptest/AppData/Roaming/My·App"</span><span·class="gp·unselectable"> | 678 | </span><span·class="s">"c:/Users/otptest/AppData/Roaming/My·App"</span><span·class="gp·unselectable"> |
| 679 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="28 | 679 | 2>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0289889187-2">(</span><span·class="ss">user_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0289889187-3">#{</span><span·cl[·...·truncated·by·diffoscope;·len:·330,·SHA:·94615502a210c27f526431f0a4ad2cb233a8d091f99298317ffea159c38e8e34·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 680 | </span><span·class="s">"c:/Users/otptest/AppData/Roaming/Erlang/My·App/1.2"</span></code></pre></li><li><p><code·class="inline"·id="user_data">user_data</code></p><p>The·path·location·is·intended·for·persistent·data·files.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_DATA_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 680 | </span><span·class="s">"c:/Users/otptest/AppData/Roaming/Erlang/My·App/1.2"</span></code></pre></li><li><p><code·class="inline"·id="user_data">user_data</code></p><p>The·path·location·is·intended·for·persistent·data·files.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_DATA_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7455278980-1">(</span><span·class="ss">user_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7455278980-2">#{</span><s[·...·truncated·by·diffoscope;·len:·174,·SHA:·dd54ba9b8090f14345f699f2609209d1e3f6e95397a89628f2013d63ec6e7191·...·]0-1">)</span><span·class="p">.</span><span·class="w"> |
| 681 | </span><span·class="s">"/home/otptest/.local/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 681 | </span><span·class="s">"/home/otptest/.local/my_application"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7633405504-1">(</span><span·class="ss">user_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7633405504-2">#{</span><s[·...·truncated·by·diffoscope;·len:·176,·SHA:·3a9d88287fbf7022faa0f021e0160e8b702dc1841e554a3ae7beac14ec1df375·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 682 | </span><span·class="s">"/home/otptest/Library/Application·Support/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 682 | </span><span·class="s">"/home/otptest/Library/Application·Support/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0166599986-1">(</span><span·class="ss">user_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p"·data-group-id="0166599986-1">)</span><span·class="p">.</span><span·class="w"> |
| 683 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App"</span><span·class="gp·unselectable"> | 683 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App"</span><span·class="gp·unselectable"> |
| 684 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 684 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="0166599986-2">(</span><span·class="ss">user_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="p"·data-group-id="0166599986-3">#{</span><span·class="ss">author</span><spa[·...·truncated·by·diffoscope;·len:·280,·SHA:·3b6766b8f6e4750dc0c90581ec27af4aec71243be16529be826b9662d69b6232·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 685 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2"</span></code></pre></li><li><p><code·class="inline"·id="user_log">user_log</code></p><p>The·path·location·is·intended·for·transient·log·files·on·a·local·machine.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CACHE_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 685 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2"</span></code></pre></li><li><p><code·class="inline"·id="user_log">user_log</code></p><p>The·path·location·is·intended·for·transient·log·files·on·a·local·machine.</p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CACHE_HOME</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7705495287-1">(</span><span·class="ss">user_log</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7705495287-2">#{</span><sp[·...·truncated·by·diffoscope;·len:·174,·SHA:·724949e642013a857121fe533082b6cca8ea606d430ddecf32b3a43f252061f7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 686 | </span><span·class="s">"/home/otptest/.cache/my_application/log"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 686 | </span><span·class="s">"/home/otptest/.cache/my_application/log"</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="1103620305-1">(</span><span·class="ss">user_log</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1103620305-2">#{</span><sp[·...·truncated·by·diffoscope;·len:·175,·SHA:·fb59a81c7e571657d2f6e121d25c7823feb6245ea92ab87a571666ebdc4c9516·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 687 | </span><span·class="s">"/home/otptest/Library/Logs/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">12>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 687 | </span><span·class="s">"/home/otptest/Library/Logs/my_application"</span></code></pre><p>On·Windows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">12>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="2488287057-1">(</span><span·class="ss">user_log</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p"·data-group-id="2488287057-1">)</span><span·class="p">.</span><span·class="w"> |
| 688 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Logs"</span><span·class="gp·unselectable"> | 688 | </span><span·class="s">"c:/Users/otptest/AppData/Local/My·App/Logs"</span><span·class="gp·unselectable"> |
| 689 | 13>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 689 | 13>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="2488287057-2">(</span><span·class="ss">user_log</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"My·App"</span><span·class="p">,</span><span·class="p"·data-group-id="2488287057-3">#{</span><span·class="ss">author</span><span[·...·truncated·by·diffoscope;·len:·279,·SHA:·adc54f26f5ada77dfed255e98d5b9a8c386cb820749a614f63c944b6023ba8cf·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 690 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2/Logs"</span></code></pre></li><li><p><code·class="inline"·id="site_config">site_config</code></p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CONFIG_DIRS</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 690 | </span><span·class="s">"c:/Users/otptest/AppData/Local/Erlang/My·App/1.2/Logs"</span></code></pre></li><li><p><code·class="inline"·id="site_config">site_config</code></p><p>On·Linux:·Respects·the·os·environment·variable·<code·class="inline">XDG_CONFIG_DIRS</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="3099445508-1">(</span><span·class="ss">site_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3099445508-2">#{</span>[·...·truncated·by·diffoscope;·len:·177,·SHA:·abb5e6193d7493b0a1bb5cd2a8128c95f0c5b7b83a4b44f3322b5538f2eecb57·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 691 | </span><span·class="p"·data-group-id=" | 691 | </span><span·class="p"·data-group-id="3099445508-3">[</span><span·class="s">"/usr/local/share/my_application"</span><span·class="p">,</span><span·class="w"> |
| 692 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id=" | 692 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id="3099445508-3">]</span><span·class="gp·unselectable"> |
| 693 | 6>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">getenv</span><span·class="p"·data-group-id=" | 693 | 6>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">getenv</span><span·class="p"·data-group-id="3099445508-4">(</span><span·class="s">"XDG_CONFIG_DIRS"</span><span·class="p"·data-group-id="3099445508-4">)</span><span·class="p">.</span><span·class="w"> |
| 694 | </span><span·class="s">"/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg"</span><span·class="gp·unselectable"> | 694 | </span><span·class="s">"/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg"</span><span·class="gp·unselectable"> |
| 695 | 7>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 695 | 7>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="3099445508-5">(</span><span·class="ss">site_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3099445508-6">#{</span>[·...·truncated·by·diffoscope;·len:·177,·SHA:·0bea803a206acbc866885915cd8bf5f5511c1d9440977f8e6fbd5d91c7436699·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 696 | </span><span·class="p"·data-group-id=" | 696 | </span><span·class="p"·data-group-id="3099445508-7">[</span><span·class="s">"/etc/xdg/xdg-ubuntu/my_application"</span><span·class="p">,</span><span·class="w"> |
| 697 | ·</span><span·class="s">"/usr/share/upstart/xdg/my_application"</span><span·class="p">,</span><span·class="w"> | 697 | ·</span><span·class="s">"/usr/share/upstart/xdg/my_application"</span><span·class="p">,</span><span·class="w"> |
| 698 | ·</span><span·class="s">"/etc/xdg/my_application"</span><span·class="p"·data-group-id=" | 698 | ·</span><span·class="s">"/etc/xdg/my_application"</span><span·class="p"·data-group-id="3099445508-7">]</span><span·class="gp·unselectable"> |
| 699 | 8>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">unsetenv</span><span·class="p"·data-group-id=" | 699 | 8>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">unsetenv</span><span·class="p"·data-group-id="3099445508-8">(</span><span·class="s">"XDG_CONFIG_DIRS"</span><span·class="p"·data-group-id="3099445508-8">)</span><span·class="p">.</span><span·class="w"> |
| 700 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 700 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 701 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 701 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="3099445508-9">(</span><span·class="ss">site_config</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3099445508-10">#{</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·fe4bcf4b6447b139b13733826afb52f52fc575643e7ccfcc27615e174888128b·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 702 | </span><span·class="p"·data-group-id=" | 702 | </span><span·class="p"·data-group-id="3099445508-11">[</span><span·class="s">"/etc/xdg/my_application"</span><span·class="p"·data-group-id="3099445508-11">]</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span>[·...·truncated·by·diffoscope;·len:·552,·SHA:·91f70dd2854cfee1ce51d784528359127635a648cf71891f4045d84b2acb1592·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 703 | </span><span·class="p"·data-group-id=" | 703 | </span><span·class="p"·data-group-id="0270674103-3">[</span><span·class="s">"/Library/Application·Support/my_application"</span><span·class="p"·data-group-id="0270674103-3">]</span></code></pre></li><li><p><code·class="inline"·id="site_data">site_data</code></p><p>On·Linux:·Respects·[·...·truncated·by·diffoscope;·len:·388,·SHA:·20924821ea6d8831d4783baa8c53a1bed6d39257fd5b114d325de6afc393b3d7·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 704 | </span><span·class="s">"/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/"</span><span·class="gp·unselectable"> | 704 | </span><span·class="s">"/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/"</span><span·class="gp·unselectable"> |
| 705 | 11>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 705 | 11>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7423639363-2">(</span><span·class="ss">site_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7423639363-3">#{</span><s[·...·truncated·by·diffoscope;·len:·175,·SHA:·a1ef6a40bc55ee3e9c8c63d4d27efd2e972b8708c3ec91ae97f8230e677207f6·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 706 | </span><span·class="p"·data-group-id=" | 706 | </span><span·class="p"·data-group-id="7423639363-4">[</span><span·class="s">"/usr/share/ubuntu/my_application"</span><span·class="p">,</span><span·class="w"> |
| 707 | ·</span><span·class="s">"/usr/share/gnome/my_application"</span><span·class="p">,</span><span·class="w"> | 707 | ·</span><span·class="s">"/usr/share/gnome/my_application"</span><span·class="p">,</span><span·class="w"> |
| 708 | ·</span><span·class="s">"/usr/local/share/my_application"</span><span·class="p">,</span><span·class="w"> | 708 | ·</span><span·class="s">"/usr/local/share/my_application"</span><span·class="p">,</span><span·class="w"> |
| 709 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id=" | 709 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id="7423639363-4">]</span><span·class="gp·unselectable"> |
| 710 | 12>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">unsetenv</span><span·class="p"·data-group-id=" | 710 | 12>·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">unsetenv</span><span·class="p"·data-group-id="7423639363-5">(</span><span·class="s">"XDG_DATA_DIRS"</span><span·class="p"·data-group-id="7423639363-5">)</span><span·class="p">.</span><span·class="w"> |
| 711 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 711 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 712 | 13>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id=" | 712 | 13>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group-id="7423639363-6">(</span><span·class="ss">site_data</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"my_application"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7423639363-7">#{</span><s[·...·truncated·by·diffoscope;·len:·175,·SHA:·6a07e8bffa317fc7f34c3a19e371548ea44977f676776222367625ac7d108331·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 713 | </span><span·class="p"·data-group-id=" | 713 | </span><span·class="p"·data-group-id="7423639363-8">[</span><span·class="s">"/usr/local/share/my_application"</span><span·class="p">,</span><span·class="w"> |
| 714 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id=" | 714 | ·</span><span·class="s">"/usr/share/my_application"</span><span·class="p"·data-group-id="7423639363-8">]</span></code></pre><p>On·Darwin:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basedir</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·437,·SHA:·023b2780640ecb023365169fb3d30c7437054960cd377040f154dbf62dae575c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 715 | </span><span·class="p"·data-group-id=" | 715 | </span><span·class="p"·data-group-id="0115394680-3">[</span><span·class="s">"/Library/Application·Support/my_application"</span><span·class="p"·data-group-id="0115394680-3">]</span></code></pre></li></ul> |
| 716 | ··</section> | 716 | ··</section> |
| 717 | </section> | 717 | </section> |
| 718 | <section·class="detail"·id="basename/1"> | 718 | <section·class="detail"·id="basename/1"> |
| 719 | ··<div·class="detail-header"> | 719 | ··<div·class="detail-header"> |
| 720 | ····<a·href="#basename/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 720 | ····<a·href="#basename/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 721 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 721 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 737, 20 lines modified | Offset 737, 20 lines modified | ||
| 737 | ······<div·class="specs"> | 737 | ······<div·class="specs"> |
| 738 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·basename(Filename)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>()·when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> | 738 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·basename(Filename)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>()·when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> |
| 739 | ······</div> | 739 | ······</div> |
| 740 | <p>Returns·the·last·component·of·<code·class="inline">Filename</code>,·or·<code·class="inline">Filename</code>·itself·if·it·does·not | 740 | <p>Returns·the·last·component·of·<code·class="inline">Filename</code>,·or·<code·class="inline">Filename</code>·itself·if·it·does·not |
| 741 | contain·any·directory·separators.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id=" | 741 | contain·any·directory·separators.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id="7774087312-1">(</span><span·class="s">"foo"</span><span·class="p"·data-group-id="7774087312-1">)</span><span·class="p">.</span><span·class="w"> |
| 742 | </span><span·class="s">"foo"</span><span·class="gp·unselectable"> | 742 | </span><span·class="s">"foo"</span><span·class="gp·unselectable"> |
| 743 | 6>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id=" | 743 | 6>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id="7774087312-2">(</span><span·class="s">"/usr/foo"</span><span·class="p"·data-group-id="7774087312-2">)</span><span·class="p">.</span><span·class="w"> |
| 744 | </span><span·class="s">"foo"</span><span·class="gp·unselectable"> | 744 | </span><span·class="s">"foo"</span><span·class="gp·unselectable"> |
| 745 | 7>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id=" | 745 | 7>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id="7774087312-3">(</span><span·class="s">"/"</span><span·class="p"·data-group-id="7774087312-3">)</span><span·class="p">.</span><span·class="w"> |
| 746 | </span><span·class="p"·data-group-id=" | 746 | </span><span·class="p"·data-group-id="7774087312-4">[</span><span·class="p"·data-group-id="7774087312-4">]</span></code></pre> |
| 747 | ··</section> | 747 | ··</section> |
| 748 | </section> | 748 | </section> |
| 749 | <section·class="detail"·id="basename/2"> | 749 | <section·class="detail"·id="basename/2"> |
| 750 | ··<div·class="detail-header"> | 750 | ··<div·class="detail-header"> |
| 751 | ····<a·href="#basename/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 751 | ····<a·href="#basename/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 752 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 752 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 771, 23 lines modified | Offset 771, 23 lines modified | ||
| 771 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·basename(Filename,·Ext)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>() | 771 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·basename(Filename,·Ext)·->·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:filename_all/0">file:filename_all</a>() |
| 772 | ··················when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>(),·Ext·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> | 772 | ··················when·Filename·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>(),·Ext·::·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:name_all/0">file:name_all</a>().</pre> |
| 773 | ······</div> | 773 | ······</div> |
| 774 | <p>Returns·the·last·component·of·<code·class="inline">Filename</code>·with·extension·<code·class="inline">Ext</code>·stripped.</p><p>This·function·is·to·be·used·to·remove·a·(possible)·specific·extension. | 774 | <p>Returns·the·last·component·of·<code·class="inline">Filename</code>·with·extension·<code·class="inline">Ext</code>·stripped.</p><p>This·function·is·to·be·used·to·remove·a·(possible)·specific·extension. |
| 775 | To·remove·an·existing·extension·when·you·are·unsure·which·one·it·is,·use | 775 | To·remove·an·existing·extension·when·you·are·unsure·which·one·it·is,·use |
| 776 | <a·href="#rootname/1"><code·class="inline">rootname(basename(Filename))</code></a>.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id=" | 776 | <a·href="#rootname/1"><code·class="inline">rootname(basename(Filename))</code></a>.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id="1508462803-1">(</span><span·class="s">"~/src/kalle.erl"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">".erl"</span><span·class="p"·data-group-id="1508462803-1">)</span><span·class="p">.</span><span·class="w"> |
| 777 | </span><span·class="s">"kalle"</span><span·class="gp·unselectable"> | 777 | </span><span·class="s">"kalle"</span><span·class="gp·unselectable"> |
| 778 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id=" | 778 | 9>·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">basename</span><span·class="p"·data-group-id="1508462803-2">(</span><span·class="s">"~/src/kalle.beam"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">".erl"</span><span·class="p"·data-group-id="1508462803-2">)</span><span·class="p">.</span><span·class="w"> |
| Max diff block lines reached; 26764/86186 bytes (31.05%) of diff not shown. | |||
| Offset 1980, 15 lines modified | Offset 1980, 15 lines modified | ||
| 1980 | ······<p·class="built-using"> | 1980 | ······<p·class="built-using"> |
| 1981 | ········Built·using | 1981 | ········Built·using |
| 1982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1984 | ······</p> | 1984 | ······</p> |
| 1985 | <p>Copyright·©·1996-202 | 1985 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1986 | ····</footer> | 1986 | ····</footer> |
| 1987 | ··</div> | 1987 | ··</div> |
| 1988 | </main> | 1988 | </main> |
| 1989 | </div> | 1989 | </div> |
| 1990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1991 | ··<script> | 1991 | ··<script> |
| 1992 | ··let·initialized·=·false; | 1992 | ··let·initialized·=·false; |
| Offset 1537, 15 lines modified | Offset 1537, 15 lines modified | ||
| 1537 | ······<p·class="built-using"> | 1537 | ······<p·class="built-using"> |
| 1538 | ········Built·using | 1538 | ········Built·using |
| 1539 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1539 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1540 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1540 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1541 | ······</p> | 1541 | ······</p> |
| 1542 | <p>Copyright·©·1996-202 | 1542 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1543 | ····</footer> | 1543 | ····</footer> |
| 1544 | ··</div> | 1544 | ··</div> |
| 1545 | </main> | 1545 | </main> |
| 1546 | </div> | 1546 | </div> |
| 1547 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1547 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1548 | ··<script> | 1548 | ··<script> |
| 1549 | ··let·initialized·=·false; | 1549 | ··let·initialized·=·false; |
| Offset 1267, 23 lines modified | Offset 1267, 23 lines modified | ||
| 1267 | format/limit·the·server·state·for·debugging·and·logging·purposes.</p><p>It·is·called·in·the·following·situations:</p><ul><li><p>One·of·<a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·is·invoked | 1267 | format/limit·the·server·state·for·debugging·and·logging·purposes.</p><p>It·is·called·in·the·following·situations:</p><ul><li><p>One·of·<a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·is·invoked |
| 1268 | to·get·the·<code·class="inline">gen_event</code>·status.</p></li><li><p>The·event·handler·terminates·abnormally·and·<code·class="inline">gen_event</code>·logs·an·error.</p></li></ul><p>This·callback·is·used·to·limit·the·status·of·the·event·handler·returned·by | 1268 | to·get·the·<code·class="inline">gen_event</code>·status.</p></li><li><p>The·event·handler·terminates·abnormally·and·<code·class="inline">gen_event</code>·logs·an·error.</p></li></ul><p>This·callback·is·used·to·limit·the·status·of·the·event·handler·returned·by |
| 1269 | <a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·or·sent·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/logger.html"><code·class="inline">logger</code></a>.</p><p>The·callback·gets·a·map·<code·class="inline">Status</code>·describing·the·current·status | 1269 | <a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·or·sent·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/logger.html"><code·class="inline">logger</code></a>.</p><p>The·callback·gets·a·map·<code·class="inline">Status</code>·describing·the·current·status |
| 1270 | and·shall·return·a·map·<code·class="inline">NewStatus</code>·with·the·same·keys, | 1270 | and·shall·return·a·map·<code·class="inline">NewStatus</code>·with·the·same·keys, |
| 1271 | but·it·may·transform·some·values.</p><p>Two·possible·use·cases·for·this·callback·is·to·remove | 1271 | but·it·may·transform·some·values.</p><p>Two·possible·use·cases·for·this·callback·is·to·remove |
| 1272 | sensitive·information·from·the·state·to·prevent·it·from·being·printed | 1272 | sensitive·information·from·the·state·to·prevent·it·from·being·printed |
| 1273 | in·log·files,·or·to·compact·large·irrelevant·status·items | 1273 | in·log·files,·or·to·compact·large·irrelevant·status·items |
| 1274 | that·would·only·clutter·the·logs.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">format_status</span><span·class="p"·data-group-id="49 | 1274 | that·would·only·clutter·the·logs.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">format_status</span><span·class="p"·data-group-id="8491329397-1">(</span><span·class="n">Status</span><span·class="p"·data-group-id="8491329397-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1275 | ··</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="49 | 1275 | ··</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="8491329397-2">(</span><span·class="w"> |
| 1276 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="49 | 1276 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="8491329397-3">(</span><span·class="ss">state</span><span·class="p">,</span><span·class="n">State</span><span·class="p"·data-group-id="8491329397-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1277 | ············</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">remove</span><span·class="p"·data-group-id="49 | 1277 | ············</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">remove</span><span·class="p"·data-group-id="8491329397-4">(</span><span·class="ss">private_key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="8491329397-4">)</span><span·class="p">;</span><span·class="w"> |
| 1278 | ·······</span><span·class="p"·data-group-id="49 | 1278 | ·······</span><span·class="p"·data-group-id="8491329397-5">(</span><span·class="ss">message</span><span·class="p">,</span><span·class="p"·data-group-id="8491329397-6">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Pass</[·...·truncated·by·diffoscope;·len:·99,·SHA:·31762b372917b644526a0dc88a27df8984ac04b4ea9bb23d987337e5d6427660·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1279 | ············</span><span·class="p"·data-group-id="49 | 1279 | ············</span><span·class="p"·data-group-id="8491329397-7">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">removed</span><span·class="p"·data-group-id="8491329397-7">}</span><span·class="p">;</span><span·class="w"> |
| 1280 | ·······</span><span·class="p"·data-group-id="49 | 1280 | ·······</span><span·class="p"·data-group-id="8491329397-8">(</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Value</span><span·class="p"·data-group-id="8491329397-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1281 | ············</span><span·class="n">Value</span><span·class="w"> | 1281 | ············</span><span·class="n">Value</span><span·class="w"> |
| 1282 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Status</span><span·class="p"·data-group-id="49 | 1282 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Status</span><span·class="p"·data-group-id="8491329397-2">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·callback·is·optional,·so·event·handler·modules·need·not·export·it. |
| 1283 | If·a·handler·does·not·export·this·function,·the·<code·class="inline">gen_event</code>·module | 1283 | If·a·handler·does·not·export·this·function,·the·<code·class="inline">gen_event</code>·module |
| 1284 | uses·the·handler·state·directly·for·the·purposes·described·below.</p><p>If·this·callback·is·exported·but·fails,·to·hide·possibly·sensitive·data, | 1284 | uses·the·handler·state·directly·for·the·purposes·described·below.</p><p>If·this·callback·is·exported·but·fails,·to·hide·possibly·sensitive·data, |
| 1285 | the·default·function·will·instead·return·the·fact·that | 1285 | the·default·function·will·instead·return·the·fact·that |
| 1286 | <a·href="#c:format_status/1"><code·class="inline">format_status/1</code></a>·has·crashed.</p></section> | 1286 | <a·href="#c:format_status/1"><code·class="inline">format_status/1</code></a>·has·crashed.</p></section> |
| 1287 | ··</section> | 1287 | ··</section> |
| 1288 | </section> | 1288 | </section> |
| 1289 | <section·class="detail"·id="c:format_status/2"> | 1289 | <section·class="detail"·id="c:format_status/2"> |
| Offset 2878, 15 lines modified | Offset 2878, 15 lines modified | ||
| 2878 | ······<p·class="built-using"> | 2878 | ······<p·class="built-using"> |
| 2879 | ········Built·using | 2879 | ········Built·using |
| 2880 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2880 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2881 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2881 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2882 | ······</p> | 2882 | ······</p> |
| 2883 | <p>Copyright·©·1996-202 | 2883 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2884 | ····</footer> | 2884 | ····</footer> |
| 2885 | ··</div> | 2885 | ··</div> |
| 2886 | </main> | 2886 | </main> |
| 2887 | </div> | 2887 | </div> |
| 2888 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2888 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2889 | ··<script> | 2889 | ··<script> |
| 2890 | ··let·initialized·=·false; | 2890 | ··let·initialized·=·false; |
| Offset 131, 171 lines modified | Offset 131, 171 lines modified | ||
| 131 | <p>Deprecated·and·replaced·by·<a·href="gen_statem.html"><code·class="inline">gen_statem</code></a>·in·OTP·20.</p><h2·id="module-migration-to-gen_statem"·class="section-heading"> | 131 | <p>Deprecated·and·replaced·by·<a·href="gen_statem.html"><code·class="inline">gen_statem</code></a>·in·OTP·20.</p><h2·id="module-migration-to-gen_statem"·class="section-heading"> |
| 132 | ··<a·href="#module-migration-to-gen_statem"·class="hover-link"> | 132 | ··<a·href="#module-migration-to-gen_statem"·class="hover-link"> |
| 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 134 | ··</a> | 134 | ··</a> |
| 135 | ··<span·class="text">Migration·to·gen_statem</span> | 135 | ··<span·class="text">Migration·to·gen_statem</span> |
| 136 | </h2> | 136 | </h2> |
| 137 | <p>Here·follows·a·simple·example·of·turning·a·gen_fsm·into·a·<a·href="gen_statem.html"><code·class="inline">gen_statem</code></a>. | 137 | <p>Here·follows·a·simple·example·of·turning·a·gen_fsm·into·a·<a·href="gen_statem.html"><code·class="inline">gen_statem</code></a>. |
| 138 | The·example·comes·from·the·previous·User's·Guide·for·<code·class="inline">gen_fsm</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5 | 138 | The·example·comes·from·the·previous·User's·Guide·for·<code·class="inline">gen_fsm</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5600232609-1">(</span><span·class="ss">code_lock</span><span·class="p"·data-group-id="5600232609-1">)</span><span·class="p">.</span><span·class="w"> |
| 139 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5 | 139 | </span><span·class="p">-</span><span·class="na">define</span><span·class="p"·data-group-id="5600232609-2">(</span><span·class="n">NAME</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_lock</span><span·class="p"·data-group-id="5600232609-2">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="c1">%-define(BEFORE_REWRITE,·true).</span><span·class="w"> | 140 | </span><span·class="c1">%-define(BEFORE_REWRITE,·true).</span><span·class="w"> |
| 141 | </span><span·class="w"> | 141 | </span><span·class="w"> |
| 142 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 142 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-3">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-3">)</span><span·class="p">.</span><span·class="w"> |
| 143 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5 | 143 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5600232609-4">(</span><span·class="ss">gen_fsm</span><span·class="p"·data-group-id="5600232609-4">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 144 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 145 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5 | 145 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5600232609-5">(</span><span·class="ss">gen_statem</span><span·class="p"·data-group-id="5600232609-5">)</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 146 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 147 | </span><span·class="w"> | 147 | </span><span·class="w"> |
| 148 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 148 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5600232609-6">(</span><span·class="p"·data-group-id="5600232609-7">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">button</span><span·class="p">/</sp[·...·truncated·by·diffoscope;·len:·246,·SHA:·0ba6e92289172e5e60df400589da21b0b138492a52278a59d329c0912118a018·...·]9-6">)</span><span·class="p">.</span><span·class="w"> |
| 149 | </span><span·class="w"> | 149 | </span><span·class="w"> |
| 150 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 150 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-8">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-8">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 151 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5600232609-9">(</span><span·class="p"·data-group-id="5600232609-10">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">open</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_sync_event</span><span·class="p">/</span><span·class="mi">4</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_event</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> |
| 152 | ·····</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="5 | 152 | ·····</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="5600232609-10">]</span><span·class="p"·data-group-id="5600232609-9">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 153 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5600232609-11">(</span><span·class="p"·data-group-id="5600232609-12">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">callback_mode</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">open</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w"> |
| 155 | ·····</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="5 | 155 | ·····</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span><span·class="p"·data-group-id="5600232609-12">]</span><span·class="p"·data-group-id="5600232609-11">)</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="c1">%%·Add·callback__mode/0</span><span·class="w"> | 156 | </span><span·class="c1">%%·Add·callback__mode/0</span><span·class="w"> |
| 157 | </span><span·class="c1">%%·Change·arity·of·the·state·functions</span><span·class="w"> | 157 | </span><span·class="c1">%%·Change·arity·of·the·state·functions</span><span·class="w"> |
| 158 | </span><span·class="c1">%%·Remove·handle_info/3</span><span·class="w"> | 158 | </span><span·class="c1">%%·Remove·handle_info/3</span><span·class="w"> |
| 159 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 159 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="w"> | 160 | </span><span·class="w"> |
| 161 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 161 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-13">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-13">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 162 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="5600232609-14">(</span><span·class="n">Code</span><span·class="p"·data-group-id="5600232609-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 163 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 163 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="5600232609-15">(</span><span·class="p"·data-group-id="5600232609-16">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="w">·</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p"·data-group-id="5600232609-16">}</spa[·...·truncated·by·diffoscope;·len:·374,·SHA:·96264366be852e30f818c1957bba870a4f4aa41f5c4c9c945bf4a54d4ef90a03·...·]9-15">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 164 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 165 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="5600232609-18">(</span><span·class="n">Code</span><span·class="p"·data-group-id="5600232609-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 166 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 166 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="5600232609-19">(</span><span·class="p"·data-group-id="5600232609-20">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p"·data-group-id="5600232609-20">}</span><span·class="p">,</spa[·...·truncated·by·diffoscope;·len:·350,·SHA:·13111e7ce362ed7de4651fb0b38f6a7e6b0b5c3bfa29d1b1d8976a9361fe25e9·...·]9-19">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 167 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="w"> | 168 | </span><span·class="w"> |
| 169 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 169 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-22">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-22">)</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="nf">button</span><span·class="p"·data-group-id="5 | 170 | </span><span·class="nf">button</span><span·class="p"·data-group-id="5600232609-23">(</span><span·class="n">Digit</span><span·class="p"·data-group-id="5600232609-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 171 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">send_event</span><span·class="p"·data-group-id="5 | 171 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">send_event</span><span·class="p"·data-group-id="5600232609-24">(</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-25">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·119,·SHA:·82c1b9b4141abc8b087077e86615c1b3cb4ddcaed2dcb99d1de76c371eb83b94·...·]9-24">)</span><span·class="p">.</span><span·class="w"> |
| 172 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 172 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">button</span><span·class="p"·data-group-id="5 | 173 | </span><span·class="nf">button</span><span·class="p"·data-group-id="5600232609-26">(</span><span·class="n">Digit</span><span·class="p"·data-group-id="5600232609-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="5 | 174 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">cast</span><span·class="p"·data-group-id="5600232609-27">(</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-28">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="n">Digit</span[·...·truncated·by·diffoscope;·len:·95,·SHA:·2b023005d6fd68ffdee767b75a648c1198fb4705b30d189414ebd6259e6deebf·...·]9-27">)</span><span·class="p">.</span><span·class="w"> |
| 175 | ····</span><span·class="c1">%%·send_event·is·asynchronous·and·becomes·a·cast</span><span·class="w"> | 175 | ····</span><span·class="c1">%%·send_event·is·asynchronous·and·becomes·a·cast</span><span·class="w"> |
| 176 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 176 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="w"> | 177 | </span><span·class="w"> |
| 178 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 178 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-29">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-29">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5 | 179 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5600232609-30">(</span><span·class="p"·data-group-id="5600232609-30">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 180 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">sync_send_all_state_event</span><span·class="p"·data-group-id="5 | 180 | ····</span><span·class="nc">gen_fsm</span><span·class="p">:</span><span·class="nf">sync_send_all_state_event</span><span·class="p"·data-group-id="5600232609-31">(</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p"·data-group-id="5600232609-31">)</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 181 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5 | 182 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5600232609-32">(</span><span·class="p"·data-group-id="5600232609-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5 | 183 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5600232609-33">(</span><span·class="o">?</span><span·class="n">NAME</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p"·data-group-id="5600232609-33">)</span><span·class="p">.</span><span·class="w"> |
| 184 | ····</span><span·class="c1">%%·sync_send·is·synchronous·and·becomes·call</span><span·class="w"> | 184 | ····</span><span·class="c1">%%·sync_send·is·synchronous·and·becomes·call</span><span·class="w"> |
| 185 | ····</span><span·class="c1">%%·all_state·is·handled·by·callback·code·in·gen_statem</span><span·class="w"> | 185 | ····</span><span·class="c1">%%·all_state·is·handled·by·callback·code·in·gen_statem</span><span·class="w"> |
| 186 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 186 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5 | 187 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5600232609-34">(</span><span·class="n">Code</span><span·class="p"·data-group-id="5600232609-34">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 188 | ····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5 | 188 | ····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5600232609-35">(</span><span·class="p"·data-group-id="5600232609-35">)</span><span·class="p">,</span><span·class="w"> |
| 189 | ····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5 | 189 | ····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-36">#{</span><span·class="ss">code</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Code</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">remaining</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·122,·SHA:·4d0be3e87ed35e5d5db43ea4535b92f0f78643e1a4e1319fd465fcf8c7d80a74·...·]9-36">}</span><span·class="p">,</span><span·class="w"> |
| 190 | ····</span><span·class="p"·data-group-id="5 | 190 | ····</span><span·class="p"·data-group-id="5600232609-37">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-37">}</span><span·class="p">.</span><span·class="w"> |
| 191 | </span><span·class="w"> | 191 | </span><span·class="w"> |
| 192 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 192 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-38">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-38">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 193 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 194 | </span><span·class="nf">callback_mode</span><span·class="p"·data-group-id="5 | 194 | </span><span·class="nf">callback_mode</span><span·class="p"·data-group-id="5600232609-39">(</span><span·class="p"·data-group-id="5600232609-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ····</span><span·class="ss">state_functions</span><span·class="p">.</span><span·class="w"> | 195 | ····</span><span·class="ss">state_functions</span><span·class="p">.</span><span·class="w"> |
| 196 | </span><span·class="c1">%%·state_functions·mode·is·the·mode·most·similar·to</span><span·class="w"> | 196 | </span><span·class="c1">%%·state_functions·mode·is·the·mode·most·similar·to</span><span·class="w"> |
| 197 | </span><span·class="c1">%%·gen_fsm.·There·is·also·handle_event·mode·which·is</span><span·class="w"> | 197 | </span><span·class="c1">%%·gen_fsm.·There·is·also·handle_event·mode·which·is</span><span·class="w"> |
| 198 | </span><span·class="c1">%%·a·fairly·different·concept.</span><span·class="w"> | 198 | </span><span·class="c1">%%·a·fairly·different·concept.</span><span·class="w"> |
| 199 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 199 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="w"> | 200 | </span><span·class="w"> |
| 201 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 201 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-40">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-40">)</span><span·class="p">.</span><span·class="w"> |
| 202 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5 | 202 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5600232609-41">(</span><span·class="p"·data-group-id="5600232609-42">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Digit</span><span·class="p"·data-group-id="5600232609-42">}</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·96,·SHA:·0e41200eecba7d1aded357dbdd01184bdb82d77bea89e71d7e538c25d340cff8·...·]9-41">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 203 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">analyze_lock</span><span·class="p"·data-group-id="5 | 203 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">analyze_lock</span><span·class="p"·data-group-id="5600232609-43">(</span><span·class="n">Digit</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data0</span><span·class="p"·data-group-id="5600232609-43">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 204 | ····</span><span·class="p"·data-group-id="5 | 204 | ····</span><span·class="p"·data-group-id="5600232609-44">{</span><span·class="ss">open</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·13,·SHA:·c74e2ad47929e191115cc404ed2381cc8b097a42452eb80b4fb14ca0ece1e895·...·]9-44">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 205 | ········</span><span·class="p"·data-group-id="5 | 205 | ········</span><span·class="p"·data-group-id="5600232609-45">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p">,</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·72,·SHA:·7502d819449226394fdec2c62b2cda7f673e0a76fc382e52491487288989c26b·...·]9-45">}</span><span·class="p">;</span><span·class="w"> |
| 206 | ····</span><span·class="p"·data-group-id="5 | 206 | ····</span><span·class="p"·data-group-id="5600232609-46">{</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-46">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 207 | ········</span><span·class="p"·data-group-id="5 | 207 | ········</span><span·class="p"·data-group-id="5600232609-47">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-47">}</span><span·class="w"> |
| 208 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 208 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 209 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5 | 210 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5600232609-48">(</span><span·class="ss">cast</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-49">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="n">Digit</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·148,·SHA:·2f8fdd72fdd220718c8eec8433bc0137557bc646ae5ee0e442597aa7e1b3d756·...·]9-48">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">analyze_lock</span><span·class="p"·data-group-id="5 | 211 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">analyze_lock</span><span·class="p"·data-group-id="5600232609-50">(</span><span·class="n">Digit</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data0</span><span·class="p"·data-group-id="5600232609-50">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 212 | ····</span><span·class="p"·data-group-id="5 | 212 | ····</span><span·class="p"·data-group-id="5600232609-51">{</span><span·class="ss">open</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·13,·SHA:·c74e2ad47929e191115cc404ed2381cc8b097a42452eb80b4fb14ca0ece1e895·...·]9-51">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 213 | ········</span><span·class="p"·data-group-id="5 | 213 | ········</span><span·class="p"·data-group-id="5600232609-52">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p">,</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·72,·SHA:·7502d819449226394fdec2c62b2cda7f673e0a76fc382e52491487288989c26b·...·]9-52">}</span><span·class="p">;</span><span·class="w"> |
| 214 | ····</span><span·class="p"·data-group-id="5 | 214 | ····</span><span·class="p"·data-group-id="5600232609-53">{</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-53">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ········</span><span·class="p"·data-group-id="5 | 215 | ········</span><span·class="p"·data-group-id="5600232609-54">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-54">}</span><span·class="w"> |
| 216 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 216 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 217 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5 | 217 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5600232609-55">(</span><span·class="p"·data-group-id="5600232609-56">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p"·data-group-id="5600232609-56">}</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·166,·SHA:·a4d4f29046ce4bb5619291195f99a867b54cc24d8d63252ac5b23fc452ee67d4·...·]9-55">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 218 | ····</span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5 | 218 | ····</span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5600232609-57">(</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-57">)</span><span·class="p">;</span><span·class="w"> |
| 219 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5 | 219 | </span><span·class="nf">locked</span><span·class="p"·data-group-id="5600232609-58">(</span><span·class="p"·data-group-id="5600232609-59">{</span><span·class="ss">info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="5600232609-59">}</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·171,·SHA:·2e167ce8c3f251bb63dc431d57aad707f1685af39bfb3467c354e6153c345122·...·]9-58">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 220 | ····</span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5 | 220 | ····</span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5600232609-60">(</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-60">)</span><span·class="p">.</span><span·class="w"> |
| 221 | </span><span·class="c1">%%·Arity·differs</span><span·class="w"> | 221 | </span><span·class="c1">%%·Arity·differs</span><span·class="w"> |
| 222 | </span><span·class="c1">%%·All·state·events·are·dispatched·to·handle_call·and·handle_info·help</span><span·class="w"> | 222 | </span><span·class="c1">%%·All·state·events·are·dispatched·to·handle_call·and·handle_info·help</span><span·class="w"> |
| 223 | </span><span·class="c1">%%·functions.·If·you·want·to·handle·a·call·or·cast·event·specifically</span><span·class="w"> | 223 | </span><span·class="c1">%%·functions.·If·you·want·to·handle·a·call·or·cast·event·specifically</span><span·class="w"> |
| 224 | </span><span·class="c1">%%·for·this·state·you·would·add·a·special·clause·for·it·above.</span><span·class="w"> | 224 | </span><span·class="c1">%%·for·this·state·you·would·add·a·special·clause·for·it·above.</span><span·class="w"> |
| 225 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 225 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="w"> | 226 | </span><span·class="w"> |
| 227 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 227 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-61">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-61">)</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 228 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-62">(</span><span·class="ss">timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="5600232609-62">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 229 | ·····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5 | 229 | ·····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5600232609-63">(</span><span·class="p"·data-group-id="5600232609-63">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ····</span><span·class="p"·data-group-id="5 | 230 | ····</span><span·class="p"·data-group-id="5600232609-64">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="5600232609-64">}</span><span·class="p">;</span><span·class="w"> |
| 231 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 231 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-65">(</span><span·class="p"·data-group-id="5600232609-66">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="5600232609-66">}</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·67,·SHA:·f8dba7258ee0054f0cd920bc0f40b4f79e9a2b176fdb296c7606e4963a72a026·...·]9-65">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="p"·data-group-id="5 | 232 | ····</span><span·class="p"·data-group-id="5600232609-67">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-67">}</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> | 233 | </span><span·class="p">-</span><span·class="na">else</span><span·class="p">.</span><span·class="w"> |
| 234 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 234 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-68">(</span><span·class="ss">timeout</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-68">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 235 | ····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5 | 235 | ····</span><span·class="nf">do_lock</span><span·class="p"·data-group-id="5600232609-69">(</span><span·class="p"·data-group-id="5600232609-69">)</span><span·class="p">,</span><span·class="w"> |
| 236 | ····</span><span·class="p"·data-group-id="5 | 236 | ····</span><span·class="p"·data-group-id="5600232609-70">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-70">}</span><span·class="p">;</span><span·class="w"> |
| 237 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 237 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-71">(</span><span·class="ss">cast</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-72">{</span><span·class="ss">button</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·143,·SHA:·bcbcc3cbea81e554e348f35964e221339c41f7952823ca08251ca227cfad174b·...·]9-71">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 238 | ····</span><span·class="p"·data-group-id="5 | 238 | ····</span><span·class="p"·data-group-id="5600232609-73">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">locked</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-73">}</span><span·class="p">;</span><span·class="w"> |
| 239 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 239 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-74">(</span><span·class="p"·data-group-id="5600232609-75">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p"·data-group-id="5600232609-75">}</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·166,·SHA:·a4d4f29046ce4bb5619291195f99a867b54cc24d8d63252ac5b23fc452ee67d4·...·]9-74">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 240 | ····</span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5 | 240 | ····</span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5600232609-76">(</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-76">)</span><span·class="p">;</span><span·class="w"> |
| 241 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5 | 241 | </span><span·class="nf">open</span><span·class="p"·data-group-id="5600232609-77">(</span><span·class="ss">info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-77">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 242 | ····</span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5 | 242 | ····</span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5600232609-78">(</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">open</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-78">)</span><span·class="p">.</span><span·class="w"> |
| 243 | </span><span·class="c1">%%·Arity·differs</span><span·class="w"> | 243 | </span><span·class="c1">%%·Arity·differs</span><span·class="w"> |
| 244 | </span><span·class="c1">%%·All·state·events·are·dispatched·to·handle_call·and·handle_info·help</span><span·class="w"> | 244 | </span><span·class="c1">%%·All·state·events·are·dispatched·to·handle_call·and·handle_info·help</span><span·class="w"> |
| 245 | </span><span·class="c1">%%·functions.·If·you·want·to·handle·a·call·or·cast·event·specifically</span><span·class="w"> | 245 | </span><span·class="c1">%%·functions.·If·you·want·to·handle·a·call·or·cast·event·specifically</span><span·class="w"> |
| 246 | </span><span·class="c1">%%·for·this·state·you·would·add·a·special·clause·for·it·above.</span><span·class="w"> | 246 | </span><span·class="c1">%%·for·this·state·you·would·add·a·special·clause·for·it·above.</span><span·class="w"> |
| 247 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> | 247 | </span><span·class="p">-</span><span·class="na">endif</span><span·class="p">.</span><span·class="w"> |
| 248 | </span><span·class="w"> | 248 | </span><span·class="w"> |
| 249 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5 | 249 | </span><span·class="p">-</span><span·class="na">ifdef</span><span·class="p"·data-group-id="5600232609-79">(</span><span·class="n">BEFORE_REWRITE</span><span·class="p"·data-group-id="5600232609-79">)</span><span·class="p">.</span><span·class="w"> |
| 250 | </span><span·class="nf">handle_sync_event</span><span·class="p"·data-group-id="5 | 250 | </span><span·class="nf">handle_sync_event</span><span·class="p"·data-group-id="5600232609-80">(</span><span·class="ss">stop</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">StateName</span><sp[·...·truncated·by·diffoscope;·len:·112,·SHA:·c0e5803f22ab2509c73cc1b2aba0189c9419f3781fcda2c2a7fad10460f3f653·...·]9-80">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 251 | ····</span><span·class="p"·data-group-id="5 | 251 | ····</span><span·class="p"·data-group-id="5600232609-81">{</span><span·class="ss">stop</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">normal</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·61,·SHA:·bc4af2212eb77f23986b912c839e7aeee95901d5178db55f5d08d53e771e586b·...·]9-81">}</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5 | 252 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5600232609-82">(</span><span·class="n">Event</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-82">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 253 | ····</span><span·class="p"·data-group-id="5 | 253 | ····</span><span·class="p"·data-group-id="5600232609-83">{</span><span·class="ss">stop</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5600232609-84">{</span><span·class="ss">shutdown</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·443,·SHA:·6352c8d4e252e2045381a324d0f878aa683a43501adc9e8c6af696a38ebbff94·...·]9-83">}</span><span·class="p">.</span><span·class="w"> |
| 254 | </span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5 | 254 | </span><span·class="nf">handle_info</span><span·class="p"·data-group-id="5600232609-86">(</span><span·class="n">Info</span><span·class="p">,</span><span·class="w">·</span><span·class="n">StateName</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5600232609-86">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 19856/80621 bytes (24.63%) of diff not shown. | |||
| Offset 1247, 23 lines modified | Offset 1247, 23 lines modified | ||
| 1247 | format/limit·the·server·state·for·debugging·and·logging·purposes.</p><p>It·is·called·in·the·following·situations:</p><ul><li><a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·is·invoked | 1247 | format/limit·the·server·state·for·debugging·and·logging·purposes.</p><p>It·is·called·in·the·following·situations:</p><ul><li><a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·is·invoked |
| 1248 | to·get·the·<code·class="inline">gen_server</code>·status.</li><li>The·<code·class="inline">gen_server</code>·process·terminates·abnormally·and·logs·an·error.</li></ul><p>This·callback·is·used·to·limit·the·status·of·the·process·returned·by | 1248 | to·get·the·<code·class="inline">gen_server</code>·status.</li><li>The·<code·class="inline">gen_server</code>·process·terminates·abnormally·and·logs·an·error.</li></ul><p>This·callback·is·used·to·limit·the·status·of·the·process·returned·by |
| 1249 | <a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·or·sent·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/logger.html"><code·class="inline">logger</code></a>.</p><p>The·callback·gets·a·map·<code·class="inline">Status</code>·describing·the·current·status | 1249 | <a·href="sys.html#get_status/1"><code·class="inline">sys:get_status/1,2</code></a>·or·sent·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/logger.html"><code·class="inline">logger</code></a>.</p><p>The·callback·gets·a·map·<code·class="inline">Status</code>·describing·the·current·status |
| 1250 | and·shall·return·a·map·<code·class="inline">NewStatus</code>·with·the·same·keys, | 1250 | and·shall·return·a·map·<code·class="inline">NewStatus</code>·with·the·same·keys, |
| 1251 | but·it·may·transform·some·values.</p><p>Two·possible·use·cases·for·this·callback·is·to·remove | 1251 | but·it·may·transform·some·values.</p><p>Two·possible·use·cases·for·this·callback·is·to·remove |
| 1252 | sensitive·information·from·the·state·to·prevent·it·from·being·printed | 1252 | sensitive·information·from·the·state·to·prevent·it·from·being·printed |
| 1253 | in·log·files,·or·to·compact·large·irrelevant·status·items | 1253 | in·log·files,·or·to·compact·large·irrelevant·status·items |
| 1254 | that·would·only·clutter·the·logs.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">format_status</span><span·class="p"·data-group-id=" | 1254 | that·would·only·clutter·the·logs.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">format_status</span><span·class="p"·data-group-id="1561582856-1">(</span><span·class="n">Status</span><span·class="p"·data-group-id="1561582856-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1255 | ··</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id=" | 1255 | ··</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="1561582856-2">(</span><span·class="w"> |
| 1256 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 1256 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="1561582856-3">(</span><span·class="ss">state</span><span·class="p">,</span><span·class="n">State</span><span·class="p"·data-group-id="1561582856-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1257 | ············</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">remove</span><span·class="p"·data-group-id=" | 1257 | ············</span><span·class="nc">maps</span><span·class="p">:</span><span·class="nf">remove</span><span·class="p"·data-group-id="1561582856-4">(</span><span·class="ss">private_key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="1561582856-4">)</span><span·class="p">;</span><span·class="w"> |
| 1258 | ·······</span><span·class="p"·data-group-id=" | 1258 | ·······</span><span·class="p"·data-group-id="1561582856-5">(</span><span·class="ss">message</span><span·class="p">,</span><span·class="p"·data-group-id="1561582856-6">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Pass</[·...·truncated·by·diffoscope;·len:·98,·SHA:·a6fc513e070607856e6c6ae64d51f99f05c1efdcfb5111046ef9b05dccf5dafb·...·]6-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1259 | ············</span><span·class="p"·data-group-id=" | 1259 | ············</span><span·class="p"·data-group-id="1561582856-7">{</span><span·class="ss">password</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">removed</span><span·class="p"·data-group-id="1561582856-7">}</span><span·class="p">;</span><span·class="w"> |
| 1260 | ·······</span><span·class="p"·data-group-id=" | 1260 | ·······</span><span·class="p"·data-group-id="1561582856-8">(</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Value</span><span·class="p"·data-group-id="1561582856-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1261 | ············</span><span·class="n">Value</span><span·class="w"> | 1261 | ············</span><span·class="n">Value</span><span·class="w"> |
| 1262 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Status</span><span·class="p"·data-group-id=" | 1262 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Status</span><span·class="p"·data-group-id="1561582856-2">)</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>This·callback·is·optional,·so·callback·modules·need·not·export·it.·The |
| 1263 | <code·class="inline">gen_server</code>·module·provides·a·default·implementation | 1263 | <code·class="inline">gen_server</code>·module·provides·a·default·implementation |
| 1264 | of·this·function·that·returns·the·callback·module·state.</p><p>If·this·callback·is·exported·but·fails, | 1264 | of·this·function·that·returns·the·callback·module·state.</p><p>If·this·callback·is·exported·but·fails, |
| 1265 | to·hide·possibly·sensitive·data, | 1265 | to·hide·possibly·sensitive·data, |
| 1266 | the·default·function·will·instead·return·the·fact·that | 1266 | the·default·function·will·instead·return·the·fact·that |
| 1267 | <a·href="#c:format_status/1"><code·class="inline">Module:format_status/1</code></a>·has·crashed.</p></section> | 1267 | <a·href="#c:format_status/1"><code·class="inline">Module:format_status/1</code></a>·has·crashed.</p></section> |
| 1268 | ··</section> | 1268 | ··</section> |
| 1269 | </section> | 1269 | </section> |
| Offset 2898, 15 lines modified | Offset 2898, 15 lines modified | ||
| 2898 | ······<p·class="built-using"> | 2898 | ······<p·class="built-using"> |
| 2899 | ········Built·using | 2899 | ········Built·using |
| 2900 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2900 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2901 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2901 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2902 | ······</p> | 2902 | ······</p> |
| 2903 | <p>Copyright·©·1996-202 | 2903 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2904 | ····</footer> | 2904 | ····</footer> |
| 2905 | ··</div> | 2905 | ··</div> |
| 2906 | </main> | 2906 | </main> |
| 2907 | </div> | 2907 | </div> |
| 2908 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2908 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2909 | ··<script> | 2909 | ··<script> |
| 2910 | ··let·initialized·=·false; | 2910 | ··let·initialized·=·false; |
| Offset 172, 15 lines modified | Offset 172, 15 lines modified | ||
| 172 | </span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="ss">send_request</span><span·class="w"> | 172 | </span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="ss">send_request</span><span·class="w"> |
| 173 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">send</span><span·class="w"> | 173 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">send</span><span·class="w"> |
| 174 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="ss">'!'</span><span·class="w">············</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="n">StateName</span><span·class="o">/</span><span·class="mi">3</span><span·class="w"> | 174 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="ss">'!'</span><span·class="w">············</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="n">StateName</span><span·class="o">/</span><span·class="mi">3</span><span·class="w"> |
| 175 | ···················</span><span·class="ow">or</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="ss">handle_event</span><span·class="p">/</span><span·class="mi">4</span><span·class="w"> | 175 | ···················</span><span·class="ow">or</span><span·class="w">·</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="ss">handle_event</span><span·class="p">/</span><span·class="mi">4</span><span·class="w"> |
| 176 | ···················</span><span·class="ss">depending</span><span·class="w">·</span><span·class="ss">on</span><span·class="w">·</span><span·class="ss">callback</span><span·class="w">·</span><span·class="ss">mode</span><span·class="w"> | 176 | ···················</span><span·class="ss">depending</span><span·class="w">·</span><span·class="ss">on</span><span·class="w">·</span><span·class="ss">callback</span><span·class="w">·</span><span·class="ss">mode</span><span·class="w"> |
| 177 | </span><span·class="n">Release</span><span·class="w">·</span><span·class="ss">upgrade</span><span·class="o">/</span><span·class="nf">downgrade</span><span·class="w"> | 177 | </span><span·class="n">Release</span><span·class="w">·</span><span·class="ss">upgrade</span><span·class="o">/</span><span·class="nf">downgrade</span><span·class="w"> |
| 178 | </span><span·class="p"·data-group-id=" | 178 | </span><span·class="p"·data-group-id="9509020929-1">(</span><span·class="ss">code</span><span·class="w">·</span><span·class="ss">change</span><span·class="p"·data-group-id="9509020929-1">)</span><span·class="w"> |
| 179 | ······················</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span></code></pre><h4·id="state-callback">State·callback</h4><p>The·<em>state·callback</em>·for·a·specific·<a·href="#t:state/0">state</a>·in·a·<code·class="inline">gen_statem</code> | 179 | ······················</span><span·class="o">--</span><span·class="o">--</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Module</span><span·class="p">:</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">4</span></code></pre><h4·id="state-callback">State·callback</h4><p>The·<em>state·callback</em>·for·a·specific·<a·href="#t:state/0">state</a>·in·a·<code·class="inline">gen_statem</code> |
| 180 | is·the·callback·function·that·is·called·for·all·events·in·this·state. | 180 | is·the·callback·function·that·is·called·for·all·events·in·this·state. |
| 181 | It·is·selected·depending·on·which·<a·href="#t:callback_mode/0"><em>callback·mode</em></a> | 181 | It·is·selected·depending·on·which·<a·href="#t:callback_mode/0"><em>callback·mode</em></a> |
| 182 | that·the·callback·module·defines·with·the·callback·function | 182 | that·the·callback·module·defines·with·the·callback·function |
| 183 | <a·href="#c:callback_mode/0"><code·class="inline">Module:callback_mode/0</code></a>.</p><p><a·href=""·id="state_functions"></a> | 183 | <a·href="#c:callback_mode/0"><code·class="inline">Module:callback_mode/0</code></a>.</p><p><a·href=""·id="state_functions"></a> |
| 184 | When·the·<a·href="#t:callback_mode/0"><em>callback·mode</em></a>·is·<code·class="inline">state_functions</code>, | 184 | When·the·<a·href="#t:callback_mode/0"><em>callback·mode</em></a>·is·<code·class="inline">state_functions</code>, |
| 185 | the·state·must·be·an·atom·and·is·used·as·the·<em>state·callback</em>·name; | 185 | the·state·must·be·an·atom·and·is·used·as·the·<em>state·callback</em>·name; |
| Offset 298, 105 lines modified | Offset 298, 105 lines modified | ||
| 298 | the·current·count·value.</li><li>Unknown·events·are·ignored·and·discarded.</li><li>There·is·boilerplate·code·for·start,·stop,·terminate,·code·change, | 298 | the·current·count·value.</li><li>Unknown·events·are·ignored·and·discarded.</li><li>There·is·boilerplate·code·for·start,·stop,·terminate,·code·change, |
| 299 | init,·to·set·the·callback·mode·to·<code·class="inline">state_functions</code>,·etc...</li></ul><h3·id="module-pushbutton-code"·class="section-heading"> | 299 | init,·to·set·the·callback·mode·to·<code·class="inline">state_functions</code>,·etc...</li></ul><h3·id="module-pushbutton-code"·class="section-heading"> |
| 300 | ··<a·href="#module-pushbutton-code"·class="hover-link"> | 300 | ··<a·href="#module-pushbutton-code"·class="hover-link"> |
| 301 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 301 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 302 | ··</a> | 302 | ··</a> |
| 303 | ··<span·class="text">Pushbutton·Code</span> | 303 | ··<span·class="text">Pushbutton·Code</span> |
| 304 | </h3> | 304 | </h3> |
| 305 | <p>The·following·is·the·complete·callback·module·file·<code·class="inline">pushbutton.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 305 | <p>The·following·is·the·complete·callback·module·file·<code·class="inline">pushbutton.erl</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5535104617-1">(</span><span·class="ss">pushbutton</span><span·class="p"·data-group-id="5535104617-1">)</span><span·class="p">.</span><span·class="w"> |
| 306 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 306 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5535104617-2">(</span><span·class="ss">gen_statem</span><span·class="p"·data-group-id="5535104617-2">)</span><span·class="p">.</span><span·class="w"> |
| 307 | </span><span·class="w"> | 307 | </span><span·class="w"> |
| 308 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 308 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5535104617-3">(</span><span·class="p"·data-group-id="5535104617-4">[</span><span·class="ss">start</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="ss">push</span><span·class="p">/</span><span·class="mi">0</span><s[·...·truncated·by·diffoscope;·len:·299,·SHA:·60933ca3b19c6870a0e89b055d0df38494217507058a3e1dedac44378c138996·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 309 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 309 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5535104617-5">(</span><span·class="p"·data-group-id="5535104617-6">[</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·314,·SHA:·56b5adbd9fa5973639a014fe6309d9a14476ecc122c51fe0137f9884cab7c5cb·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 310 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 310 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5535104617-7">(</span><span·class="p"·data-group-id="5535104617-8">[</span><span·class="ss">on</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">off</span><span·class="p">/</span><span·class="mi">3</span><span·[·...·truncated·by·diffoscope;·len:·88,·SHA:·9153b1b05484ee36ca4b5a4e95e7fde055c4eb5ae0b8ca7a53faabad6b6e77b8·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 311 | </span><span·class="nf">name</span><span·class="p"·data-group-id=" | 311 | </span><span·class="nf">name</span><span·class="p"·data-group-id="5535104617-9">(</span><span·class="p"·data-group-id="5535104617-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">pushbutton_statem</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·The·registered·server·name</span><span·class="w"> |
| 312 | </span><span·class="c1">%%·API.··This·example·uses·a·registered·name·name()</span><span·class="w"> | 312 | </span><span·class="c1">%%·API.··This·example·uses·a·registered·name·name()</span><span·class="w"> |
| 313 | </span><span·class="c1">%%·and·does·not·link·to·the·caller.</span><span·class="w"> | 313 | </span><span·class="c1">%%·and·does·not·link·to·the·caller.</span><span·class="w"> |
| 314 | </span><span·class="nf">start</span><span·class="p"·data-group-id=" | 314 | </span><span·class="nf">start</span><span·class="p"·data-group-id="5535104617-10">(</span><span·class="p"·data-group-id="5535104617-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 315 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 315 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5535104617-11">(</span><span·class="p"·data-group-id="5535104617-12">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="nf">name</span><span·class="p"·data-group-id="5535104617-13">(</span><span·class="p"·data-group-id="5535104617-13[·...·truncated·by·diffoscope;·len:·518,·SHA:·cea59ea514deb7eabdf652241339b5611f935290a91e9cd0bf98f6dbc9d0a432·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 316 | </span><span·class="nf">push</span><span·class="p"·data-group-id=" | 316 | </span><span·class="nf">push</span><span·class="p"·data-group-id="5535104617-16">(</span><span·class="p"·data-group-id="5535104617-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 317 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 317 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5535104617-17">(</span><span·class="nf">name</span><span·class="p"·data-group-id="5535104617-18">(</span><span·class="p"·data-group-id="5535104617-18">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">push</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·2a31fbbd3311a757c992e0b07e9e8fc1aca12e1336a177ce7eba1a19bdd18995·...·]-17">)</span><span·class="p">.</span><span·class="w"> |
| 318 | </span><span·class="nf">get_count</span><span·class="p"·data-group-id=" | 318 | </span><span·class="nf">get_count</span><span·class="p"·data-group-id="5535104617-19">(</span><span·class="p"·data-group-id="5535104617-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 319 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 319 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5535104617-20">(</span><span·class="nf">name</span><span·class="p"·data-group-id="5535104617-21">(</span><span·class="p"·data-group-id="5535104617-21">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">get_count</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·25,·SHA:·6fc95b01215c9f127744d1d59ccd888c4afab01bbc2e574ba3068950563b843b·...·]-20">)</span><span·class="p">.</span><span·class="w"> |
| 320 | </span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 320 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5535104617-22">(</span><span·class="p"·data-group-id="5535104617-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 321 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 321 | ····</span><span·class="nc">gen_statem</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="5535104617-23">(</span><span·class="nf">name</span><span·class="p"·data-group-id="5535104617-24">(</span><span·class="p"·data-group-id="5535104617-24">)</span><span·class="p"·data-group-id="5535104617-23">)</span><span·class="p">.</span><span·class="w"> |
| 322 | </span><span·class="c1">%%·Mandatory·callback·functions</span><span·class="w"> | 322 | </span><span·class="c1">%%·Mandatory·callback·functions</span><span·class="w"> |
| 323 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id=" | 323 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="5535104617-25">(</span><span·class="p">_</span><span·class="n">Reason</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·cl[·...·truncated·by·diffoscope;·len:·60,·SHA:·ce989aa0c42fd8110b48e7a49608f3d0d45395e640e4d8de31269341c4304935·...·]-25">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 324 | ····</span><span·class="ss">void</span><span·class="p">.</span><span·class="w"> | 324 | ····</span><span·class="ss">void</span><span·class="p">.</span><span·class="w"> |
| 325 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id=" | 325 | </span><span·class="nf">code_change</span><span·class="p"·data-group-id="5535104617-26">(</span><span·class="p">_</span><span·class="n">Vsn</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p">,</span><span·cl[·...·truncated·by·diffoscope;·len:·109,·SHA:·207e493626ac1d30ad9f92258663e38c846807e680b09d06e1a3387e52357f52·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 326 | ····</span><span·class="p"·data-group-id=" | 326 | ····</span><span·class="p"·data-group-id="5535104617-27">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">State</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-27">}</span><span·class="p">.</span><span·class="w"> |
| 327 | </span><span·class="nf">init</span><span·class="p"·data-group-id=" | 327 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5535104617-28">(</span><span·class="p"·data-group-id="5535104617-29">[</span><span·class="p"·data-group-id="5535104617-29">]</span><span·class="p"·data-group-id="5535104617-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 328 | ····</span><span·class="c1">%%·Set·the·initial·state·+·data.··Data·is·used·only·as·a·counter.</span><span·class="w"> | 328 | ····</span><span·class="c1">%%·Set·the·initial·state·+·data.··Data·is·used·only·as·a·counter.</span><span·class="w"> |
| 329 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">off</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> | 329 | ····</span><span·class="n">State</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">off</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 330 | ····</span><span·class="p"·data-group-id=" | 330 | ····</span><span·class="p"·data-group-id="5535104617-30">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">State</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-30">}</span><span·class="p">.</span><span·class="w"> |
| 331 | </span><span·class="nf">callback_mode</span><span·class="p"·data-group-id=" | 331 | </span><span·class="nf">callback_mode</span><span·class="p"·data-group-id="5535104617-31">(</span><span·class="p"·data-group-id="5535104617-31">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">state_functions</span><span·class="p">.</span><span·class="w"> |
| 332 | </span><span·class="c1">%%%·state·callback(s)</span><span·class="w"> | 332 | </span><span·class="c1">%%%·state·callback(s)</span><span·class="w"> |
| 333 | </span><span·class="nf">off</span><span·class="p"·data-group-id=" | 333 | </span><span·class="nf">off</span><span·class="p"·data-group-id="5535104617-32">(</span><span·class="p"·data-group-id="5535104617-33">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="5535104617-33">}</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·146,·SHA:·00b297b65875cc914fdb66dbe8e0f6de64ef6586355a43dfc46f92c008b18b0a·...·]-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 334 | ····</span><span·class="c1">%%·Go·to·'on',·increment·count·and·reply</span><span·class="w"> | 334 | ····</span><span·class="c1">%%·Go·to·'on',·increment·count·and·reply</span><span·class="w"> |
| 335 | ····</span><span·class="c1">%%·that·the·resulting·status·is·'on'</span><span·class="w"> | 335 | ····</span><span·class="c1">%%·that·the·resulting·status·is·'on'</span><span·class="w"> |
| 336 | ····</span><span·class="p"·data-group-id=" | 336 | ····</span><span·class="p"·data-group-id="5535104617-34">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="ss">on</span><span·class="p">,</span><span·class="n">Data</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·362,·SHA:·61f8134bec956e13fad207d7370e456a9bc3b715756470687f488f28340155ad·...·]-34">}</span><span·class="p">;</span><span·class="w"> |
| 337 | </span><span·class="nf">off</span><span·class="p"·data-group-id=" | 337 | </span><span·class="nf">off</span><span·class="p"·data-group-id="5535104617-37">(</span><span·class="n">EventType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EventContent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-37">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 338 | ····</span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 338 | ····</span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5535104617-38">(</span><span·class="n">EventType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EventContent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-38">)</span><span·class="p">.</span><span·class="w"> |
| 339 | </span><span·class="nf">on</span><span·class="p"·data-group-id=" | 339 | </span><span·class="nf">on</span><span·class="p"·data-group-id="5535104617-39">(</span><span·class="p"·data-group-id="5535104617-40">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="5535104617-40">}</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·146,·SHA:·00b297b65875cc914fdb66dbe8e0f6de64ef6586355a43dfc46f92c008b18b0a·...·]-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 340 | ····</span><span·class="c1">%%·Go·to·'off'·and·reply·that·the·resulting·status·is·'off'</span><span·class="w"> | 340 | ····</span><span·class="c1">%%·Go·to·'off'·and·reply·that·the·resulting·status·is·'off'</span><span·class="w"> |
| 341 | ····</span><span·class="p"·data-group-id=" | 341 | ····</span><span·class="p"·data-group-id="5535104617-41">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="ss">off</span><span·class="p">,</span><span·class="n">Data</span><span·class="p">,</span><span·class="p"·data-group-id="5535104617-42">[</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·315,·SHA:·018f9ebdec7a02b23f1ac4644481957f29f1e3b6813a7c7f1d7dedee04aeca7b·...·]-41">}</span><span·class="p">;</span><span·class="w"> |
| 342 | </span><span·class="nf">on</span><span·class="p"·data-group-id=" | 342 | </span><span·class="nf">on</span><span·class="p"·data-group-id="5535104617-44">(</span><span·class="n">EventType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EventContent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-44">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 343 | ····</span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 343 | ····</span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5535104617-45">(</span><span·class="n">EventType</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EventContent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-45">)</span><span·class="p">.</span><span·class="w"> |
| 344 | </span><span·class="c1">%%·Handle·events·common·to·all·states</span><span·class="w"> | 344 | </span><span·class="c1">%%·Handle·events·common·to·all·states</span><span·class="w"> |
| 345 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 345 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5535104617-46">(</span><span·class="p"·data-group-id="5535104617-47">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="5535104617-47">}</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·151,·SHA:·b502bd2be4dd189cdc7ceb90c8d96838df93b7c1d888268808196d866c874895·...·]-46">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 346 | ····</span><span·class="c1">%%·Reply·with·the·current·count</span><span·class="w"> | 346 | ····</span><span·class="c1">%%·Reply·with·the·current·count</span><span·class="w"> |
| 347 | ····</span><span·class="p"·data-group-id=" | 347 | ····</span><span·class="p"·data-group-id="5535104617-48">{</span><span·class="ss">keep_state</span><span·class="p">,</span><span·class="n">Data</span><span·class="p">,</span><span·class="p"·data-group-id="5535104617-49">[</span><span·class="p"·data-group-id="5535104617-50">{</span><span·class="ss"[·...·truncated·by·diffoscope;·len:·264,·SHA:·07d12473279b0e9bb50c96c0faed8e14cd53a84e14253b15edd722acd2a20f5f·...·]-48">}</span><span·class="p">;</span><span·class="w"> |
| 348 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 348 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="5535104617-51">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-51">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 349 | ····</span><span·class="c1">%%·Ignore·all·other·events</span><span·class="w"> | 349 | ····</span><span·class="c1">%%·Ignore·all·other·events</span><span·class="w"> |
| 350 | ····</span><span·class="p"·data-group-id=" | 350 | ····</span><span·class="p"·data-group-id="5535104617-52">{</span><span·class="ss">keep_state</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="5535104617-52">}</span><span·class="p">.</span></code></pre><p>The·following·is·a·shell·session·when·running·it:</p><[·...·truncated·by·diffoscope;·len:·270,·SHA:·35502bf45fb20525b8d00ed5f01987062c4de0cc6365f1e722cedf35f989d5d0·...·]2-1">)</span><span·class="p">.</span><span·class="w"> |
| 351 | </span><span·class="p"·data-group-id=" | 351 | </span><span·class="p"·data-group-id="3739099002-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.36</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="3739099002-2">}</span><span·class="gp·unselectable"> |
| 352 | 2>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id=" | 352 | 2>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id="3739099002-3">(</span><span·class="p"·data-group-id="3739099002-3">)</span><span·class="p">.</span><span·class="w"> |
| 353 | </span><span·class="mi">0</span><span·class="gp·unselectable"> | 353 | </span><span·class="mi">0</span><span·class="gp·unselectable"> |
| 354 | 3>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id=" | 354 | 3>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id="3739099002-4">(</span><span·class="p"·data-group-id="3739099002-4">)</span><span·class="p">.</span><span·class="w"> |
| 355 | </span><span·class="ss">on</span><span·class="gp·unselectable"> | 355 | </span><span·class="ss">on</span><span·class="gp·unselectable"> |
| 356 | 4>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id=" | 356 | 4>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id="3739099002-5">(</span><span·class="p"·data-group-id="3739099002-5">)</span><span·class="p">.</span><span·class="w"> |
| 357 | </span><span·class="mi">1</span><span·class="gp·unselectable"> | 357 | </span><span·class="mi">1</span><span·class="gp·unselectable"> |
| 358 | 5>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id=" | 358 | 5>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id="3739099002-6">(</span><span·class="p"·data-group-id="3739099002-6">)</span><span·class="p">.</span><span·class="w"> |
| 359 | </span><span·class="ss">off</span><span·class="gp·unselectable"> | 359 | </span><span·class="ss">off</span><span·class="gp·unselectable"> |
| 360 | 6>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id=" | 360 | 6>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">get_count</span><span·class="p"·data-group-id="3739099002-7">(</span><span·class="p"·data-group-id="3739099002-7">)</span><span·class="p">.</span><span·class="w"> |
| 361 | </span><span·class="mi">1</span><span·class="gp·unselectable"> | 361 | </span><span·class="mi">1</span><span·class="gp·unselectable"> |
| 362 | 7>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 362 | 7>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3739099002-8">(</span><span·class="p"·data-group-id="3739099002-8">)</span><span·class="p">.</span><span·class="w"> |
| 363 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 363 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 364 | 8>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id=" | 364 | 8>·</span><span·class="nc">pushbutton</span><span·class="p">:</span><span·class="nf">push</span><span·class="p"·data-group-id="3739099002-9">(</span><span·class="p"·data-group-id="3739099002-9">)</span><span·class="p">.</span><span·class="w"> |
| 365 | </span><span·class="gt">**·exception·exit:·{noproc,{gen_statem,call,[pushbutton_statem,push,infinity]}} | 365 | </span><span·class="gt">**·exception·exit:·{noproc,{gen_statem,call,[pushbutton_statem,push,infinity]}} |
| 366 | ·····in·function··gen:do_for_proc/2·(gen.erl,·line·261) | 366 | ·····in·function··gen:do_for_proc/2·(gen.erl,·line·261) |
| 367 | ·····in·call·from·gen_statem:call/3·(gen_statem.erl,·line·386)</span></code></pre><p>To·compare·styles,·here·follows·the·same·example·using | 367 | ·····in·call·from·gen_statem:call/3·(gen_statem.erl,·line·386)</span></code></pre><p>To·compare·styles,·here·follows·the·same·example·using |
| 368 | <a·href="#t:callback_mode/0"><em>callback·mode</em></a>·<code·class="inline">handle_event_function</code>, | 368 | <a·href="#t:callback_mode/0"><em>callback·mode</em></a>·<code·class="inline">handle_event_function</code>, |
| 369 | or·rather,·the·code·to·replace·after·function·<a·href="#c:init/1"><code·class="inline">init/1</code></a> | 369 | or·rather,·the·code·to·replace·after·function·<a·href="#c:init/1"><code·class="inline">init/1</code></a> |
| 370 | of·the·<code·class="inline">pushbutton.erl</code>·example·file·above:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">callback_mode</span><span·class="p"·data-group-id=" | 370 | of·the·<code·class="inline">pushbutton.erl</code>·example·file·above:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">callback_mode</span><span·class="p"·data-group-id="6844871125-1">(</span><span·class="p"·data-group-id="6844871125-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">handle_event_function</span><span·class="p">.</span><span·class="w"> |
| 371 | </span><span·class="c1">%%%·state·callback(s)</span><span·class="w"> | 371 | </span><span·class="c1">%%%·state·callback(s)</span><span·class="w"> |
| 372 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 372 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="6844871125-2">(</span><span·class="p"·data-group-id="6844871125-3">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="6844871125-3">}</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·218,·SHA:·4982aebd136e666bd20894c3d391bad90d97e82a005d8bdc994a18aaf611fcc9·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 373 | ····</span><span·class="c1">%%·Go·to·'on',·increment·count·and·reply</span><span·class="w"> | 373 | ····</span><span·class="c1">%%·Go·to·'on',·increment·count·and·reply</span><span·class="w"> |
| 374 | ····</span><span·class="c1">%%·that·the·resulting·status·is·'on'</span><span·class="w"> | 374 | ····</span><span·class="c1">%%·that·the·resulting·status·is·'on'</span><span·class="w"> |
| 375 | ····</span><span·class="p"·data-group-id=" | 375 | ····</span><span·class="p"·data-group-id="6844871125-4">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="ss">on</span><span·class="p">,</span><span·class="n">Data</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·357,·SHA:·4edc2f8d74b81e0b63dbcebd577f79056ede7c6a2a1c467fc8186545dbbba6cb·...·]-4">}</span><span·class="p">;</span><span·class="w"> |
| 376 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 376 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="6844871125-7">(</span><span·class="p"·data-group-id="6844871125-8">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="6844871125-8">}</span><span·class="p">,</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·217,·SHA:·71782c931f7b3400f1909166a40647f71881f8cb8ec9b6ed58004ab4a095d0dc·...·]-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 377 | ····</span><span·class="c1">%%·Go·to·'off'·and·reply·that·the·resulting·status·is·'off'</span><span·class="w"> | 377 | ····</span><span·class="c1">%%·Go·to·'off'·and·reply·that·the·resulting·status·is·'off'</span><span·class="w"> |
| 378 | ····</span><span·class="p"·data-group-id=" | 378 | ····</span><span·class="p"·data-group-id="6844871125-9">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="ss">off</span><span·class="p">,</span><span·class="n">Data</span><span·class="p">,</span><span·class="p"·data-group-id="6844871125-10">[</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·314,·SHA:·2dbe6041578df8811f16980174a7acd92c1f6a2669b8f53cc578598067959ffc·...·]-9">}</span><span·class="p">;</span><span·class="w"> |
| 379 | </span><span·class="c1">%%</span><span·class="w"> | 379 | </span><span·class="c1">%%</span><span·class="w"> |
| 380 | </span><span·class="c1">%%·Event·handling·common·to·all·states</span><span·class="w"> | 380 | </span><span·class="c1">%%·Event·handling·common·to·all·states</span><span·class="w"> |
| 381 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 381 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="6844871125-12">(</span><span·class="p"·data-group-id="6844871125-13">{</span><span·class="ss">call</span><span·class="p">,</span><span·class="n">From</span><span·class="p"·data-group-id="6844871125-13">}</span><span·class="p">,</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·227,·SHA:·ef8a45859006dcfca6011038707ab3cc9cdc07f50ecd55b8e840bf7561170cf6·...·]-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 382 | ····</span><span·class="c1">%%·Reply·with·the·current·count</span><span·class="w"> | 382 | ····</span><span·class="c1">%%·Reply·with·the·current·count</span><span·class="w"> |
| 383 | ····</span><span·class="p"·data-group-id=" | 383 | ····</span><span·class="p"·data-group-id="6844871125-14">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="n">State</span><span·class="p">,</span><span·class="n">Data</span><span·class="p">,</span><span·class="p"·data-group-id="6844871125-15">[</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·316,·SHA:·2ed8913dfb4dea7706ca1ffc4c51e9ef63b5cb9efa6b5e2bc19d7011b0174a67·...·]-14">}</span><span·class="p">;</span><span·class="w"> |
| 384 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 384 | </span><span·class="nf">handle_event</span><span·class="p"·data-group-id="6844871125-17">(</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p">,</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·55,·SHA:·41b9019e215a206a9426be9a6a37c7bccb7c8f9f180399e97273abe869835bd0·...·]-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 385 | ····</span><span·class="c1">%%·Ignore·all·other·events</span><span·class="w"> | 385 | ····</span><span·class="c1">%%·Ignore·all·other·events</span><span·class="w"> |
| 386 | ····</span><span·class="p"·data-group-id=" | 386 | ····</span><span·class="p"·data-group-id="6844871125-18">{</span><span·class="ss">next_state</span><span·class="p">,</span><span·class="n">State</span><span·class="p">,</span><span·class="n">Data</span><span·class="p"·data-group-id="6844871125-18">}</span><span·class="p">.</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><h2·id="module-api-changes"·class="section-heading"> |
| 387 | ··<a·href="#module-api-changes"·class="hover-link"> | 387 | ··<a·href="#module-api-changes"·class="hover-link"> |
| 388 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 388 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 389 | ··</a> | 389 | ··</a> |
| 390 | ··<span·class="text">API·changes</span> | 390 | ··<span·class="text">API·changes</span> |
| 391 | </h2> | 391 | </h2> |
| 392 | <ul><li>This·behavior·appeared·in·Erlang/OTP·19.0·as·experimental.</li><li>In·OTP·19.1·a·backwards·incompatible·change·of·the·return·tuple·from | 392 | <ul><li>This·behavior·appeared·in·Erlang/OTP·19.0·as·experimental.</li><li>In·OTP·19.1·a·backwards·incompatible·change·of·the·return·tuple·from |
| 393 | <a·href="#c:init/1"><code·class="inline">Module:init/1</code></a>·was·made, | 393 | <a·href="#c:init/1"><code·class="inline">Module:init/1</code></a>·was·made, |
| Offset 3083, 23 lines modified | Offset 3083, 23 lines modified | ||
| 3083 | return·value·and·how·its·status·appears·in·termination·error·logs, | 3083 | return·value·and·how·its·status·appears·in·termination·error·logs, |
| 3084 | exports·an·instance·of·<a·href="#c:format_status/1"><code·class="inline">Module:format_status/1</code></a>, | 3084 | exports·an·instance·of·<a·href="#c:format_status/1"><code·class="inline">Module:format_status/1</code></a>, |
| 3085 | which·will·get·a·map·<code·class="inline">Status</code>·that·describes·the·current·state | 3085 | which·will·get·a·map·<code·class="inline">Status</code>·that·describes·the·current·state |
| 3086 | of·the·<code·class="inline">gen_statem</code>,·and·shall·return·a·map·<code·class="inline">NewStatus</code> | 3086 | of·the·<code·class="inline">gen_statem</code>,·and·shall·return·a·map·<code·class="inline">NewStatus</code> |
| 3087 | containing·the·same·keys·as·the·input·map, | 3087 | containing·the·same·keys·as·the·input·map, |
| Max diff block lines reached; 10321/61312 bytes (16.83%) of diff not shown. | |||
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 998, 16 lines modified | Offset 998, 16 lines modified | ||
| 998 | <p>Tries·to·read·<code·class="inline">String</code>·in·accordance·with·the·control·sequences·in·<code·class="inline">Format</code>.</p><p>For·a·detailed·description·of·the·available·formatting·options,·see·<a·href="io.html#fread/3"><code·class="inline">io:fread/3</code></a>. | 998 | <p>Tries·to·read·<code·class="inline">String</code>·in·accordance·with·the·control·sequences·in·<code·class="inline">Format</code>.</p><p>For·a·detailed·description·of·the·available·formatting·options,·see·<a·href="io.html#fread/3"><code·class="inline">io:fread/3</code></a>. |
| 999 | It·is·assumed·that·<code·class="inline">String</code>·contains·whole·lines.</p><p>The·function·returns:</p><ul><li><p><strong><code·class="inline">{ok,·InputList,·LeftOverChars}</code></strong>·-·The·string·was·read.·<code·class="inline">InputList</code>·is·the | 999 | It·is·assumed·that·<code·class="inline">String</code>·contains·whole·lines.</p><p>The·function·returns:</p><ul><li><p><strong><code·class="inline">{ok,·InputList,·LeftOverChars}</code></strong>·-·The·string·was·read.·<code·class="inline">InputList</code>·is·the |
| 1000 | list·of·successfully·matched·and·read·items,·and·<code·class="inline">LeftOverChars</code>·are·the·input | 1000 | list·of·successfully·matched·and·read·items,·and·<code·class="inline">LeftOverChars</code>·are·the·input |
| 1001 | characters·not·used.</p></li><li><p><strong><code·class="inline">{more,·RestFormat,·Nchars,·InputStack}</code></strong>·-·The·string·was·read,·but·more | 1001 | characters·not·used.</p></li><li><p><strong><code·class="inline">{more,·RestFormat,·Nchars,·InputStack}</code></strong>·-·The·string·was·read,·but·more |
| 1002 | input·is·needed·to·complete·the·original·format·string.·<code·class="inline">RestFormat</code>·is·the | 1002 | input·is·needed·to·complete·the·original·format·string.·<code·class="inline">RestFormat</code>·is·the |
| 1003 | remaining·format·string,·<code·class="inline">Nchars</code>·is·the·number·of·characters·scanned,·and | 1003 | remaining·format·string,·<code·class="inline">Nchars</code>·is·the·number·of·characters·scanned,·and |
| 1004 | <code·class="inline">InputStack</code>·is·the·reversed·list·of·inputs·matched·up·to·that·point.</p></li><li><p><strong><code·class="inline">{error,·What}</code></strong>·-·The·read·operation·failed·and·parameter·<code·class="inline">What</code>·gives·a | 1004 | <code·class="inline">InputStack</code>·is·the·reversed·list·of·inputs·matched·up·to·that·point.</p></li><li><p><strong><code·class="inline">{error,·What}</code></strong>·-·The·read·operation·failed·and·parameter·<code·class="inline">What</code>·gives·a |
| 1005 | hint·about·the·error.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">fread</span><span·class="p"·data-group-id=" | 1005 | hint·about·the·error.</p></li></ul><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">fread</span><span·class="p"·data-group-id="2979273334-1">(</span><span·class="s">"~f~f~f"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"15.6·17.3e-6·24.5"</span><span·class="p"·data-group-id="2979273334-1">)</span><span·class="p">.</span><span·class="w"> |
| 1006 | </span><span·class="p"·data-group-id=" | 1006 | </span><span·class="p"·data-group-id="2979273334-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="2979273334-3">[</span><span·class="mf">15.6</span><span·class="p">,</span><span·class="mf">1.73e-5</span><span·class="p">,</span><span·class="mf">24.5</s[·...·truncated·by·diffoscope;·len:·228,·SHA:·77148afb8cac11d6a565c39e689be26e22b75aca2126d9df30233d673f873fbb·...·]-2">}</span></code></pre> |
| 1007 | ··</section> | 1007 | ··</section> |
| 1008 | </section> | 1008 | </section> |
| 1009 | <section·class="detail"·id="fread/3"> | 1009 | <section·class="detail"·id="fread/3"> |
| 1010 | ··<div·class="detail-header"> | 1010 | ··<div·class="detail-header"> |
| 1011 | ····<a·href="#fread/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1011 | ····<a·href="#fread/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1012 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1012 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1474, 19 lines modified | Offset 1474, 19 lines modified | ||
| 1474 | ······</div> | 1474 | ······</div> |
| 1475 | <p>Returns·a·character·list·that·represents·<code·class="inline">Term</code>.·Option·<code·class="inline">Depth</code>·controls·the | 1475 | <p>Returns·a·character·list·that·represents·<code·class="inline">Term</code>.·Option·<code·class="inline">Depth</code>·controls·the |
| 1476 | depth·of·the·structures·written.</p><p>When·the·specified·depth·is·reached,·everything·below·this·level·is·replaced·by | 1476 | depth·of·the·structures·written.</p><p>When·the·specified·depth·is·reached,·everything·below·this·level·is·replaced·by |
| 1477 | "<code·class="inline">...</code>".</p><p><code·class="inline">Depth</code>·defaults·to·-1,·which·means·no·limitation.·Option·<code·class="inline">CharsLimit</code>·puts·a | 1477 | "<code·class="inline">...</code>".</p><p><code·class="inline">Depth</code>·defaults·to·-1,·which·means·no·limitation.·Option·<code·class="inline">CharsLimit</code>·puts·a |
| 1478 | soft·limit·on·the·number·of·characters·returned.·When·the·number·of·characters·is | 1478 | soft·limit·on·the·number·of·characters·returned.·When·the·number·of·characters·is |
| 1479 | reached,·remaining·structures·are·replaced·by·"<code·class="inline">...</code>".·<code·class="inline">CharsLimit</code>·defaults·to·-1, | 1479 | reached,·remaining·structures·are·replaced·by·"<code·class="inline">...</code>".·<code·class="inline">CharsLimit</code>·defaults·to·-1, |
| 1480 | which·means·no·limit·on·the·number·of·characters·returned.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id=" | 1480 | which·means·no·limit·on·the·number·of·characters·returned.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="9713950048-1">(</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="9713950048-2">(</span><span·class="p"·data-group-id="9713950048-3">{</span><span·class="mi">1</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·836,·SHA:·6074979a8269beca00a685bdcf890addeeaeaa79d5c813bd196b9264cf203408·...·]8-1">)</span><span·class="p">.</span><span·class="w"> |
| 1481 | </span><span·class="s">"{1,[2],[3],[4,5],6,7,8,9}"</span><span·class="gp·unselectable"> | 1481 | </span><span·class="s">"{1,[2],[3],[4,5],6,7,8,9}"</span><span·class="gp·unselectable"> |
| 1482 | 2>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id=" | 1482 | 2>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="9713950048-7">(</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="9713950048-8">(</span><span·class="p"·data-group-id="9713950048-9">{</span><span·class="mi">1</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·915,·SHA:·224fd003cdb7cabdd074337df73d56567e3689a98afa5a67ba9cbb271103cceb·...·]8-7">)</span><span·class="p">.</span><span·class="w"> |
| 1483 | </span><span·class="s">"{1,[2],[3],[...],...}"</span><span·class="gp·unselectable"> | 1483 | </span><span·class="s">"{1,[2],[3],[...],...}"</span><span·class="gp·unselectable"> |
| 1484 | 3>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id=" | 1484 | 3>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="9713950048-13">(</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="9713950048-14">(</span><span·class="p"·data-group-id="9713950048-15">{</span><span·class="p"·data-group-id="9713950048-[·...·truncated·by·diffoscope;·len:·1088,·SHA:·fc75f99be1739dd1e5dbedb3e0666ecf6dc8e5ccc64550867ad0fed6907f01a8·...·]8-13">)</span><span·class="p">.</span><span·class="w"> |
| 1485 | </span><span·class="s">"{[1,2|...],[4|...],...}"</span></code></pre> | 1485 | </span><span·class="s">"{[1,2|...],[4|...],...}"</span></code></pre> |
| 1486 | ··</section> | 1486 | ··</section> |
| 1487 | </section> | 1487 | </section> |
| 1488 | <section·class="detail"·id="write_atom/1"> | 1488 | <section·class="detail"·id="write_atom/1"> |
| 1489 | ··<div·class="detail-header"> | 1489 | ··<div·class="detail-header"> |
| 1490 | ····<a·href="#write_atom/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1490 | ····<a·href="#write_atom/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1731, 15 lines modified | Offset 1731, 15 lines modified | ||
| 1731 | ······<p·class="built-using"> | 1731 | ······<p·class="built-using"> |
| 1732 | ········Built·using | 1732 | ········Built·using |
| 1733 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1733 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1734 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1734 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1735 | ······</p> | 1735 | ······</p> |
| 1736 | <p>Copyright·©·1996-202 | 1736 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1737 | ····</footer> | 1737 | ····</footer> |
| 1738 | ··</div> | 1738 | ··</div> |
| 1739 | </main> | 1739 | </main> |
| 1740 | </div> | 1740 | </div> |
| 1741 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1741 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1742 | ··<script> | 1742 | ··<script> |
| 1743 | ··let·initialized·=·false; | 1743 | ··let·initialized·=·false; |
| Offset 977, 16 lines modified | Offset 977, 16 lines modified | ||
| 977 | </h2> | 977 | </h2> |
| 978 | <ul><li><code·class="inline">error(unexpected_end)</code>·if·<code·class="inline">Binary</code>·contains·incomplete·JSON·value</li><li><code·class="inline">error({invalid_byte,·Byte})</code>·if·<code·class="inline">Binary</code>·contains·unexpected·byte·or·invalid·UTF-8·byte</li><li><code·class="inline">error({unexpected_sequence,·Bytes})</code>·if·<code·class="inline">Binary</code>·contains·invalid·UTF-8·escape</li></ul><h2·id="decode/1-example"·class="section-heading"> | 978 | <ul><li><code·class="inline">error(unexpected_end)</code>·if·<code·class="inline">Binary</code>·contains·incomplete·JSON·value</li><li><code·class="inline">error({invalid_byte,·Byte})</code>·if·<code·class="inline">Binary</code>·contains·unexpected·byte·or·invalid·UTF-8·byte</li><li><code·class="inline">error({unexpected_sequence,·Bytes})</code>·if·<code·class="inline">Binary</code>·contains·invalid·UTF-8·escape</li></ul><h2·id="decode/1-example"·class="section-heading"> |
| 979 | ··<a·href="#decode/1-example"·class="hover-link"> | 979 | ··<a·href="#decode/1-example"·class="hover-link"> |
| 980 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 980 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 981 | ··</a> | 981 | ··</a> |
| 982 | ··<span·class="text">Example</span> | 982 | ··<span·class="text">Example</span> |
| 983 | </h2> | 983 | </h2> |
| 984 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id=" | 984 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="7311827173-1">(</span><span·class="p"·data-group-id="7311827173-2"><<</span><span·class="s">"{\"foo\":·1}"</span><span·class="p"·data-group-id="7311827173-2">>></span><span·class="p"·data-group-id="7311827173-1">)</span><span·class="p">.</span><span·class="w"> |
| 985 | </span><span·class="p"·data-group-id=" | 985 | </span><span·class="p"·data-group-id="7311827173-3">#{</span><span·class="p"·data-group-id="7311827173-4"><<</span><span·class="s">"foo"</span><span·class="p"·data-group-id="7311827173-4">>></span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·67,·SHA:·bd67a11d0beea028c18d192538c146ecad5b127f72b448a83d902b927e3581bd·...·]-3">}</span></code></pre> |
| 986 | ··</section> | 986 | ··</section> |
| 987 | </section> | 987 | </section> |
| 988 | <section·class="detail"·id="decode/3"> | 988 | <section·class="detail"·id="decode/3"> |
| 989 | ··<div·class="detail-header"> | 989 | ··<div·class="detail-header"> |
| 990 | ····<a·href="#decode/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 990 | ····<a·href="#decode/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 991 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 991 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1028, 17 lines modified | Offset 1028, 17 lines modified | ||
| 1028 | </h2> | 1028 | </h2> |
| 1029 | <ul><li><code·class="inline">error({invalid_byte,·Byte})</code>·if·<code·class="inline">Binary</code>·contains·unexpected·byte·or·invalid·UTF-8·byte</li><li><code·class="inline">error({unexpected_sequence,·Bytes})</code>·if·<code·class="inline">Binary</code>·contains·invalid·UTF-8·escape</li><li><code·class="inline">error(unexpected_end)</code>·if·<code·class="inline">Binary</code>·contains·incomplete·JSON·value</li></ul><h2·id="decode/3-example"·class="section-heading"> | 1029 | <ul><li><code·class="inline">error({invalid_byte,·Byte})</code>·if·<code·class="inline">Binary</code>·contains·unexpected·byte·or·invalid·UTF-8·byte</li><li><code·class="inline">error({unexpected_sequence,·Bytes})</code>·if·<code·class="inline">Binary</code>·contains·invalid·UTF-8·escape</li><li><code·class="inline">error(unexpected_end)</code>·if·<code·class="inline">Binary</code>·contains·incomplete·JSON·value</li></ul><h2·id="decode/3-example"·class="section-heading"> |
| 1030 | ··<a·href="#decode/3-example"·class="hover-link"> | 1030 | ··<a·href="#decode/3-example"·class="hover-link"> |
| 1031 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 1031 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 1032 | ··</a> | 1032 | ··</a> |
| 1033 | ··<span·class="text">Example</span> | 1033 | ··<span·class="text">Example</span> |
| 1034 | </h2> | 1034 | </h2> |
| 1035 | <p>Decoding·object·keys·as·atoms:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Push</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2717276728-1">(</span><span·class="n">Key</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Value</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="2717276728-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="2717276728-2">[</span><span·class="p"·data-group-id="2717276728-3">{</span><span·class="nf">binary_to_existing_atom</span><span·class="p"·data-group-id="2717276728-4">(</span><span·class="n">Key</span><span·class="p"·data-group-id="2717276728-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Value</span><span·class="p"·data-group-id="2717276728-3">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="2717276728-2">]</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="gp·unselectable"> | ||
| 1036 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="2717276728-5">(</span><span·class="p"·data-group-id="2717276728-6"><<</span><span·class="s">"{\"foo\":·1}"</span><span·class="p"·data-group-id="2717276728-6">>></span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2717276728-7">#{</span><span·class="ss">object_push</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Push</span><span·class="p"·data-group-id="2717276728-7">}</span><span·class="p"·data-group-id="2717276728-5">)</span><span·class="p">.</span><span·class="w"> | ||
| 1037 | < | 1035 | <p>Decoding·object·keys·as·atoms:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Push</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><spa[·...·truncated·by·diffoscope;·len:·1022,·SHA:·773da83cdcf0c670fa133f2bc124c8647316f14f4418885b853bc51ca8102a6f·...·]> |
| 1036 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode</span><span·class="p"·data-group-id="8223613574-5">(</span><span·class="p"·data-group-id="8223613574-6"><<</span><span·class="s">"{\"foo\":·1}"</span><span·class="p"·data-group-id="8223613574-6">>></span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8223613574-7">#{</span><span·class="ss">object_push</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="n">Push</span><span·class="p"·data-group-id="8223613574-7">}</span><span·class="p"·data-group-id="8223613574-5">)</span><span·class="p">.</span><span·class="w"> | ||
| 1037 | </span><span·class="p"·data-group-id="8223613574-8">{</span><span·class="p"·data-group-id="8223613574-9">#{</span><span·class="ss">foo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="8223613574-9">}</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="8223613574-10"><<</span><span·class="p"·data-group-id="8223613574-10">>></span><span·class="p"·data-group-id="8223613574-8">}</span></code></pre> | ||
| 1038 | ··</section> | 1038 | ··</section> |
| 1039 | </section> | 1039 | </section> |
| 1040 | <section·class="detail"·id="decode_continue/2"> | 1040 | <section·class="detail"·id="decode_continue/2"> |
| 1041 | ··<div·class="detail-header"> | 1041 | ··<div·class="detail-header"> |
| 1042 | ····<a·href="#decode_continue/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1042 | ····<a·href="#decode_continue/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1043 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1043 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1061, 19 lines modified | Offset 1061, 19 lines modified | ||
| 1061 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·decode_continue(<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()·|·end_of_input,·Opaque·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·-> | 1061 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·decode_continue(<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()·|·end_of_input,·Opaque·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>())·-> |
| 1062 | ·························{Result·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·Acc·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()}·| | 1062 | ·························{Result·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·Acc·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()}·| |
| 1063 | ·························{continue,·<a·href="#t:continuation_state/0">continuation_state</a>()}.</pre> | 1063 | ·························{continue,·<a·href="#t:continuation_state/0">continuation_state</a>()}.</pre> |
| 1064 | ······</div> | 1064 | ······</div> |
| 1065 | <p>Continue·parsing·a·stream·of·bytes·of·a·JSON·value.</p><p>Similar·to·<a·href="#decode_start/3"><code·class="inline">decode_start/3</code></a>,·if·the·function·returns·<code·class="inline">{continue,·State}</code>·and | 1065 | <p>Continue·parsing·a·stream·of·bytes·of·a·JSON·value.</p><p>Similar·to·<a·href="#decode_start/3"><code·class="inline">decode_start/3</code></a>,·if·the·function·returns·<code·class="inline">{continue,·State}</code>·and |
| 1066 | there·is·no·more·data,·use·<code·class="inline">end_of_input</code>·instead·of·a·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id=" | 1066 | there·is·no·more·data,·use·<code·class="inline">end_of_input</code>·instead·of·a·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="p"·data-group-id="6434762690-1">{</span><span·class="ss">continue</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="6434762690-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·584,·SHA:·8275188f57fa974f1efe54596bcc748b310a5edb57b79737e73e04307ce50874·...·]-2">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 1067 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode_continue</span><span·class="p"·data-group-id=" | 1067 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode_continue</span><span·class="p"·data-group-id="6434762690-5">(</span><span·class="p"·data-group-id="6434762690-6"><<</span><span·class="s">"1}"</span><span·class="p"·data-group-id="6434762690-6">>></span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><[·...·truncated·by·diffoscope;·len:·40,·SHA:·3053abf78d9107208e62e1a65548d47a299bf27fc408a12f381d1c3c3293a446·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 1068 | </span><span·class="p"·data-group-id=" | 1068 | </span><span·class="p"·data-group-id="6434762690-7">{</span><span·class="p"·data-group-id="6434762690-8">#{</span><span·class="ss">foo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id="6434762690-8">}</span[·...·truncated·by·diffoscope;·len:·1206,·SHA:·bdb43ead71cad5351a4c69fb4dcc136fd38382cec2f208e86d0d00444c9f144b·...·]-2">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 1069 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode_continue</span><span·class="p"·data-group-id=" | 1069 | >·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">decode_continue</span><span·class="p"·data-group-id="7552444373-5">(</span><span·class="ss">end_of_input</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="7552444373-5">)</span><span·class="p">.</span><span·class="w"> |
| 1070 | </span><span·class="p"·data-group-id=" | 1070 | </span><span·class="p"·data-group-id="7552444373-6">{</span><span·class="mi">123</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7552444373-7"><<</span><span·class="p"·data-group-id="7552444373-7">>></span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·74e2bd748360724984cc7176d9e1e2638de48198708cc337986af3c211763b62·...·]-6">}</span></code></pre> |
| 1071 | ··</section> | 1071 | ··</section> |
| 1072 | </section> | 1072 | </section> |
| 1073 | <section·class="detail"·id="decode_start/3"> | 1073 | <section·class="detail"·id="decode_start/3"> |
| 1074 | ··<div·class="detail-header"> | 1074 | ··<div·class="detail-header"> |
| 1075 | ····<a·href="#decode_start/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1075 | ····<a·href="#decode_start/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1076 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1076 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1131, 16 lines modified | Offset 1131, 16 lines modified | ||
| 1131 | <p>Generates·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Supports·basic·data·mapping:</p><table><thead><tr><th·style="text-align:·left;"><strong>Erlang</strong></th><th·style="text-align:·left;"><strong>JSON</strong></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">integer()·|·float()</code></td><td·style="text-align:·left;">Number</td></tr><tr><td·style="text-align:·left;"><code·class="inline">true·|·false</code></td><td·style="text-align:·left;">Boolean</td></tr><tr><td·style="text-align:·left;"><code·class="inline">null</code></td><td·style="text-align:·left;">Null</td></tr><tr><td·style="text-align:·left;"><code·class="inline">binary()</code></td><td·style="text-align:·left;">String</td></tr><tr><td·style="text-align:·left;"><code·class="inline">atom()</code></td><td·style="text-align:·left;">String</td></tr><tr><td·style="text-align:·left;"><code·class="inline">list()</code></td><td·style="text-align:·left;">Array</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{binary()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{atom()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{integer()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr></tbody></table><p>This·is·equivalent·to·<code·class="inline">encode(Term,·fun·json:encode_value/2)</code>.</p><h2·id="encode/1-examples"·class="section-heading"> | 1131 | <p>Generates·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Supports·basic·data·mapping:</p><table><thead><tr><th·style="text-align:·left;"><strong>Erlang</strong></th><th·style="text-align:·left;"><strong>JSON</strong></th></tr></thead><tbody><tr><td·style="text-align:·left;"><code·class="inline">integer()·|·float()</code></td><td·style="text-align:·left;">Number</td></tr><tr><td·style="text-align:·left;"><code·class="inline">true·|·false</code></td><td·style="text-align:·left;">Boolean</td></tr><tr><td·style="text-align:·left;"><code·class="inline">null</code></td><td·style="text-align:·left;">Null</td></tr><tr><td·style="text-align:·left;"><code·class="inline">binary()</code></td><td·style="text-align:·left;">String</td></tr><tr><td·style="text-align:·left;"><code·class="inline">atom()</code></td><td·style="text-align:·left;">String</td></tr><tr><td·style="text-align:·left;"><code·class="inline">list()</code></td><td·style="text-align:·left;">Array</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{binary()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{atom()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr><tr><td·style="text-align:·left;"><code·class="inline">#{integer()·=>·_}</code></td><td·style="text-align:·left;">Object</td></tr></tbody></table><p>This·is·equivalent·to·<code·class="inline">encode(Term,·fun·json:encode_value/2)</code>.</p><h2·id="encode/1-examples"·class="section-heading"> |
| 1132 | ··<a·href="#encode/1-examples"·class="hover-link"> | 1132 | ··<a·href="#encode/1-examples"·class="hover-link"> |
| 1133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 1133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 1134 | ··</a> | 1134 | ··</a> |
| 1135 | ··<span·class="text">Examples</span> | 1135 | ··<span·class="text">Examples</span> |
| 1136 | </h2> | 1136 | </h2> |
| 1137 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">iolist_to_binary</span><span·class="p"·data-group-id="3431413624-1">(</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">encode</span><span·class="p"·data-group-id="3431413624-2">(</span><span·class="p"·data-group-id="3431413624-3">#{</span><span·class="ss">foo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="3431413624-4"><<</span><span·class="s">"bar"</span><span·class="p"·data-group-id="3431413624-4">>></span><span·class="p"·data-group-id="3431413624-3">}</span><span·class="p"·data-group-id="3431413624-2">)</span><span·class="p"·data-group-id="3431413624-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1138 | < | 1137 | <pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">iolist_to_binary</span><span·class="p"·data-group-id="7143471046-1">(</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">encod[·...·truncated·by·diffoscope;·len:·574,·SHA:·7f6cb38caa93f9110648411a1286e6dd4a354b02afd0d9b7731ca85197ac4a1f·...·]> |
| 1138 | </span><span·class="p"·data-group-id="7143471046-5"><<</span><span·class="s">"{\"foo\":\"bar\"}"</span><span·class="p"·data-group-id="7143471046-5">>></span></code></pre> | ||
| 1139 | ··</section> | 1139 | ··</section> |
| 1140 | </section> | 1140 | </section> |
| 1141 | <section·class="detail"·id="encode/2"> | 1141 | <section·class="detail"·id="encode/2"> |
| 1142 | ··<div·class="detail-header"> | 1142 | ··<div·class="detail-header"> |
| 1143 | ····<a·href="#encode/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1143 | ····<a·href="#encode/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1144 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1144 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1171, 19 lines modified | Offset 1171, 19 lines modified | ||
| 1171 | to·help·in·constructing·such·callbacks.</p><h2·id="encode/2-examples"·class="section-heading"> | 1171 | to·help·in·constructing·such·callbacks.</p><h2·id="encode/2-examples"·class="section-heading"> |
| 1172 | ··<a·href="#encode/2-examples"·class="hover-link"> | 1172 | ··<a·href="#encode/2-examples"·class="hover-link"> |
| 1173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 1173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 1174 | ··</a> | 1174 | ··</a> |
| 1175 | ··<span·class="text">Examples</span> | 1175 | ··<span·class="text">Examples</span> |
| 1176 | </h2> | 1176 | </h2> |
| 1177 | <p>An·encoder·that·uses·a·heuristic·to·differentiate·object-like | 1177 | <p>An·encoder·that·uses·a·heuristic·to·differentiate·object-like |
| 1178 | lists·of·key-value·pairs·from·plain·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">encoder</span><span·class="p"·data-group-id=" | 1178 | lists·of·key-value·pairs·from·plain·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">encoder</span><span·class="p"·data-group-id="1128491824-1">(</span><span·class="p"·data-group-id="1128491824-2">[</span><span·class="p"·data-group-id="1128491824-3">{</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="1[·...·truncated·by·diffoscope;·len:·772,·SHA:·168c50e479f08e721952ebbf01ded65cc641fd0781dd43d39de2ce0064a6489e·...·]-4">)</span><span·class="p">;</span><span·class="gp·unselectable"> |
| 1179 | >·</span><span·class="nf">encoder</span><span·class="p"·data-group-id=" | 1179 | >·</span><span·class="nf">encoder</span><span·class="p"·data-group-id="1128491824-5">(</span><span·class="n">Other</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Encode</span><span·class="p"·data-group-id="1128491824-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·287,·SHA:·c27813b48052390a74adeef4dc620538b70f3fb957e74e2664c4596ce1286122·...·]-6">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 1180 | >·</span><span·class="nf">custom_encode</span><span·class="p"·data-group-id=" | 1180 | >·</span><span·class="nf">custom_encode</span><span·class="p"·data-group-id="1128491824-7">(</span><span·class="n">Value</span><span·class="p"·data-group-id="1128491824-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">encode</[·...·truncated·by·diffoscope;·len:·783,·SHA:·32d4eafcff98104371afcb7c1aa49357268da61212ba33886b788c0a65923228·...·]-8">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 1181 | >·</span><span·class="nf">iolist_to_binary</span><span·class="p"·data-group-id=" | 1181 | >·</span><span·class="nf">iolist_to_binary</span><span·class="p"·data-group-id="1128491824-11">(</span><span·class="nf">custom_encode</span><span·class="p"·data-group-id="1128491824-12">(</span><span·class="p"·data-group-id="1128491824-13">[</span><span·class="p"·data-group-id="1128491824-14">{</span><span·class="ss">a</span><span·cla[·...·truncated·by·diffoscope;·len:·604,·SHA:·4dddc168d8b6cb17936226ec9ab51116a82d06d350ac25108e23ab6de15dff0a·...·]-11">)</span><span·class="p">.</span><span·class="w"> |
| 1182 | </span><span·class="p"·data-group-id=" | 1182 | </span><span·class="p"·data-group-id="1128491824-17"><<</span><span·class="s">"{\"a\":[],\"b\":1}"</span><span·class="p"·data-group-id="1128491824-17">>></span></code></pre> |
| 1183 | ··</section> | 1183 | ··</section> |
| 1184 | </section> | 1184 | </section> |
| 1185 | <section·class="detail"·id="encode_atom/2"> | 1185 | <section·class="detail"·id="encode_atom/2"> |
| 1186 | ··<div·class="detail-header"> | 1186 | ··<div·class="detail-header"> |
| 1187 | ····<a·href="#encode_atom/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1187 | ····<a·href="#encode_atom/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1188 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1188 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1542, 19 lines modified | Offset 1542, 19 lines modified | ||
| 1542 | ······<div·class="specs"> | 1542 | ······<div·class="specs"> |
| 1543 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·format(Term·::·<a·href="#t:encode_value/0">encode_value</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iodata/0">iodata</a>().</pre> | 1543 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·format(Term·::·<a·href="#t:encode_value/0">encode_value</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iodata/0">iodata</a>().</pre> |
| 1544 | ······</div> | 1544 | ······</div> |
| 1545 | <p>Generates·formatted·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Similiar·to·<a·href="#encode/1"><code·class="inline">encode/1</code></a>·but·with·added·whitespaces·for·formatting.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">put_chars</span><span·class="p"·data-group-id=" | 1545 | <p>Generates·formatted·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Similiar·to·<a·href="#encode/1"><code·class="inline">encode/1</code></a>·but·with·added·whitespaces·for·formatting.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">put_chars</span><span·class="p"·data-group-id="3499803034-1">(</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3499803034-2">(</span><span·class="p"·data-group-id="3499803034-3">#{</span><span·class="ss">foo</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·540,·SHA:·26b9dce12287f272843dfef14b10aee85477de303e12e5ac8ecb3c5ef7cc75e4·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1546 | </span><span·class="p"·data-group-id=" | 1546 | </span><span·class="p"·data-group-id="3499803034-5">{</span><span·class="w"> |
| 1547 | ··</span><span·class="s">"baz"</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">52</span><span·class="p">,</span><span·class="w"> | 1547 | ··</span><span·class="s">"baz"</span><span·class="p">:</span><span·class="w">·</span><span·class="mi">52</span><span·class="p">,</span><span·class="w"> |
| 1548 | ··</span><span·class="s">"foo"</span><span·class="p">:</span><span·class="w">·</span><span·class="s">"bar"</span><span·class="w"> | 1548 | ··</span><span·class="s">"foo"</span><span·class="p">:</span><span·class="w">·</span><span·class="s">"bar"</span><span·class="w"> |
| 1549 | </span><span·class="p"·data-group-id=" | 1549 | </span><span·class="p"·data-group-id="3499803034-5">}</span><span·class="w"> |
| 1550 | </span><span·class="ss">ok</span></code></pre> | 1550 | </span><span·class="ss">ok</span></code></pre> |
| 1551 | ··</section> | 1551 | ··</section> |
| 1552 | </section> | 1552 | </section> |
| 1553 | <section·class="detail"·id="format/2"> | 1553 | <section·class="detail"·id="format/2"> |
| 1554 | ··<div·class="detail-header"> | 1554 | ··<div·class="detail-header"> |
| 1555 | ····<a·href="#format/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1555 | ····<a·href="#format/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1607, 28 lines modified | Offset 1607, 28 lines modified | ||
| 1607 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·format(Term·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·Encoder·::·<a·href="#t:formatter/0">formatter</a>(),·Options·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:map/0">map</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iodata/0">iodata</a>().</pre> | 1607 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·format(Term·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:dynamic/0">dynamic</a>(),·Encoder·::·<a·href="#t:formatter/0">formatter</a>(),·Options·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:map/0">map</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:iodata/0">iodata</a>().</pre> |
| 1608 | ······</div> | 1608 | ······</div> |
| 1609 | <p>Generates·formatted·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Similar·to·<a·href="#encode/2"><code·class="inline">encode/2</code></a>,·can·be·customised·with·the·<code·class="inline">Encoder</code>·callback·and·<code·class="inline">Options</code>.</p><p><code·class="inline">Options</code>·can·include·'indent'·to·specify·number·of·spaces·per·level·and·'max'·which·loosely·limits | 1609 | <p>Generates·formatted·JSON·corresponding·to·<code·class="inline">Term</code>.</p><p>Similar·to·<a·href="#encode/2"><code·class="inline">encode/2</code></a>,·can·be·customised·with·the·<code·class="inline">Encoder</code>·callback·and·<code·class="inline">Options</code>.</p><p><code·class="inline">Options</code>·can·include·'indent'·to·specify·number·of·spaces·per·level·and·'max'·which·loosely·limits |
| 1610 | the·width·of·lists.</p><p>The·<code·class="inline">Encoder</code>·will·get·a·'State'·argument·which·contains·the·'Options'·maps·merged·with·other·data | 1610 | the·width·of·lists.</p><p>The·<code·class="inline">Encoder</code>·will·get·a·'State'·argument·which·contains·the·'Options'·maps·merged·with·other·data |
| 1611 | when·recursing·through·'Term'.</p><p><a·href="#format_value/3"><code·class="inline">format_value/3</code></a>·or·various·<code·class="inline">encode_*</code>·functions·in·this·module·can·be·used | 1611 | when·recursing·through·'Term'.</p><p><a·href="#format_value/3"><code·class="inline">format_value/3</code></a>·or·various·<code·class="inline">encode_*</code>·functions·in·this·module·can·be·used |
| 1612 | to·help·in·constructing·such·callbacks.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">formatter</span><span·class="p"·data-group-id=" | 1612 | to·help·in·constructing·such·callbacks.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">formatter</span><span·class="p"·data-group-id="7170607347-1">(</span><span·class="p"·data-group-id="7170607347-2">{</span><span·class="ss">posix_time</span><span·class="p">,</span><span·class="w">·</span><span·class="n">SysTimeSecs</span><span·class="p"·data-group-id="7170607347-2">}</span><span·class=[·...·truncated·by·diffoscope;·len:·182,·SHA:·572373eb80aa09a6aca08dec410f6b92b3987a23cd13d98ddccc394a8f88083e·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1613 | ····</span><span·class="n">TimeStr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id=" | 1613 | ····</span><span·class="n">TimeStr</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">system_time_to_rfc3339</span><span·class="p"·data-group-id="7170607347-3">(</span><span·class="n">SysTimeSecs</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7170607347-4">[</span><span·class="p"·data-group-id="7170607347-5">{</span><span·class="ss">offset</span><span·class="p">[·...·truncated·by·diffoscope;·len:·215,·SHA:·0902340cb008b5534d3e66442b6dcd9bc558f7910214a9903b608bd41d85e7fc·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 1614 | ····</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">format_value</span><span·class="p"·data-group-id=" | 1614 | ····</span><span·class="nc">json</span><span·class="p">:</span><span·class="nf">format_value</span><span·class="p"·data-group-id="7170607347-6">(</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_binary</span><span·class="p"·data-group-id="7170607347-7">(</span><span·class="n">TimeStr</span><span·class="p"·data-group-id="7170607347-7">)</span[·...·truncated·by·diffoscope;·len:·195,·SHA:·b4a02e9f1788e72f70532627f253cf8f8132b50b4bc14243e2b7dbd083f7fba9·...·]-6">)</span><span·class="p">;</span><span·class="gp·unselectable"> |
| 1615 | >·</span><span·class="nf">formatter</span><span·class="p"·data-group-id=" | 1615 | >·</span><span·class="nf">formatter</span><span·class="p"·data-group-id="7170607347-8">(</span><span·class="n">Other</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Encode</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="7170607347-8">)</span>[·...·truncated·by·diffoscope;·len:·439,·SHA:·e872d56397876dee91c0169f112200a224f183569c2921dc12dd04382e16289b·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 1616 | </span><span·class="o">></span><span·class="gp·unselectable"> | 1616 | </span><span·class="o">></span><span·class="gp·unselectable"> |
| Max diff block lines reached; 2853/49620 bytes (5.75%) of diff not shown. | |||
| Offset 1157, 16 lines modified | Offset 1157, 16 lines modified | ||
| 1157 | ······<div·class="specs"> | 1157 | ······<div·class="specs"> |
| 1158 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(ListOfLists)·->·List1·when·ListOfLists·::·[List],·List·::·[T],·List1·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1158 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(ListOfLists)·->·List1·when·ListOfLists·::·[List],·List·::·[T],·List1·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1159 | ······</div> | 1159 | ······</div> |
| 1160 | <p>Returns·a·list·in·which·all·the·sublists·of·<code·class="inline">ListOfLists</code>·have·been·appended.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 1160 | <p>Returns·a·list·in·which·all·the·sublists·of·<code·class="inline">ListOfLists</code>·have·been·appended.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="4685594633-1">(</span><span·class="p"·data-group-id="4685594633-2">[</span><span·class="p"·data-group-id="4685594633-3">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·767,·SHA:·0acb4f40f983cb46fdc32e2fa2a5c98258b79c79c78255c3b38335c2d04e578a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1161 | </span><span·class="p"·data-group-id=" | 1161 | </span><span·class="p"·data-group-id="4685594633-6">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="[·...·truncated·by·diffoscope;·len:·175,·SHA:·8a267aa542fa31ecc9ff0d540900b6decc14a4f5ef71f6f840ee2072a27927c8·...·]-6">]</span></code></pre> |
| 1162 | ··</section> | 1162 | ··</section> |
| 1163 | </section> | 1163 | </section> |
| 1164 | <section·class="detail"·id="append/2"> | 1164 | <section·class="detail"·id="append/2"> |
| 1165 | ··<div·class="detail-header"> | 1165 | ··<div·class="detail-header"> |
| 1166 | ····<a·href="#append/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1166 | ····<a·href="#append/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1167 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1167 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1185, 15 lines modified | Offset 1185, 15 lines modified | ||
| 1185 | ······<div·class="specs"> | 1185 | ······<div·class="specs"> |
| 1186 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(List1,·List2)·->·List3·when·List1·::·[T],·List2·::·[T],·List3·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1186 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(List1,·List2)·->·List3·when·List1·::·[T],·List2·::·[T],·List3·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1187 | ······</div> | 1187 | ······</div> |
| 1188 | <p>Returns·a·new·list·<code·class="inline">List3</code>,·which·is·made·from·the·elements·of·<code·class="inline">List1</code>·followed | 1188 | <p>Returns·a·new·list·<code·class="inline">List3</code>,·which·is·made·from·the·elements·of·<code·class="inline">List1</code>·followed |
| 1189 | by·the·elements·of·<code·class="inline">List2</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 1189 | by·the·elements·of·<code·class="inline">List2</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="5778467973-1">(</span><span·class="s">"abc"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"def"</span><span·class="p"·data-group-id="5778467973-1">)</span><span·class="p">.</span><span·class="w"> |
| 1190 | </span><span·class="s">"abcdef"</span></code></pre><p><code·class="inline">lists:append(A,·B)</code>·is·equivalent·to·<code·class="inline">A·++·B</code>.</p> | 1190 | </span><span·class="s">"abcdef"</span></code></pre><p><code·class="inline">lists:append(A,·B)</code>·is·equivalent·to·<code·class="inline">A·++·B</code>.</p> |
| 1191 | ··</section> | 1191 | ··</section> |
| 1192 | </section> | 1192 | </section> |
| 1193 | <section·class="detail"·id="concat/1"> | 1193 | <section·class="detail"·id="concat/1"> |
| 1194 | ··<div·class="detail-header"> | 1194 | ··<div·class="detail-header"> |
| 1195 | ····<a·href="#concat/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1195 | ····<a·href="#concat/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1214, 15 lines modified | Offset 1214, 15 lines modified | ||
| 1214 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·concat(Things)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>() | 1214 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·concat(Things)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>() |
| 1215 | ················when·Things·::·[Thing],·Thing·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0">float</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> | 1215 | ················when·Things·::·[Thing],·Thing·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:atom/0">atom</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0">float</a>()·|·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:string/0">string</a>().</pre> |
| 1216 | ······</div> | 1216 | ······</div> |
| 1217 | <p>Concatenates·the·text·representation·of·the·elements·of·<code·class="inline">Things</code>.·The·elements | 1217 | <p>Concatenates·the·text·representation·of·the·elements·of·<code·class="inline">Things</code>.·The·elements |
| 1218 | of·<code·class="inline">Things</code>·can·be·atoms,·integers,·floats,·or·strings.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">concat</span><span·class="p"·data-group-id=" | 1218 | of·<code·class="inline">Things</code>·can·be·atoms,·integers,·floats,·or·strings.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">concat</span><span·class="p"·data-group-id="9050111965-1">(</span><span·class="p"·data-group-id="9050111965-2">[</span><span·class="ss">doc</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'/'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">file</[·...·truncated·by·diffoscope;·len:·255,·SHA:·cc4cf0579a52593e36655a4773312d82fa6a5f1205d3ef0f5e2afb46c4efa8bd·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1219 | </span><span·class="s">"doc/file.3"</span></code></pre> | 1219 | </span><span·class="s">"doc/file.3"</span></code></pre> |
| 1220 | ··</section> | 1220 | ··</section> |
| 1221 | </section> | 1221 | </section> |
| 1222 | <section·class="detail"·id="delete/2"> | 1222 | <section·class="detail"·id="delete/2"> |
| 1223 | ··<div·class="detail-header"> | 1223 | ··<div·class="detail-header"> |
| 1224 | ····<a·href="#delete/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1224 | ····<a·href="#delete/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1325, 16 lines modified | Offset 1325, 16 lines modified | ||
| 1325 | ······<div·class="specs"> | 1325 | ······<div·class="specs"> |
| 1326 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·duplicate(N,·Elem)·->·List·when·N·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Elem·::·T,·List·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1326 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·duplicate(N,·Elem)·->·List·when·N·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>(),·Elem·::·T,·List·::·[T],·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1327 | ······</div> | 1327 | ······</div> |
| 1328 | <p>Returns·a·list·containing·<code·class="inline">N</code>·copies·of·term·<code·class="inline">Elem</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">duplicate</span><span·class="p"·data-group-id=" | 1328 | <p>Returns·a·list·containing·<code·class="inline">N</code>·copies·of·term·<code·class="inline">Elem</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">duplicate</span><span·class="p"·data-group-id="5464167861-1">(</span><span·class="mi">5</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">xx</span><span·class="p"·data-group-id="5464167861-1">)</span><span·class="p">.</span><span·class="w"> |
| 1329 | </span><span·class="p"·data-group-id=" | 1329 | </span><span·class="p"·data-group-id="5464167861-2">[</span><span·class="ss">xx</span><span·class="p">,</span><span·class="ss">xx</span><span·class="p">,</span><span·class="ss">xx</span><span·class="p">,</span><span·class="ss">xx</span><span·class="p">,</span><span·class="ss">xx</span><span·cl[·...·truncated·by·diffoscope;·len:·33,·SHA:·7f1ccbb12c3da9042457459145f83e6ff489f9d296cdb737b57cfbfaa2a7e59e·...·]-2">]</span></code></pre> |
| 1330 | ··</section> | 1330 | ··</section> |
| 1331 | </section> | 1331 | </section> |
| 1332 | <section·class="detail"·id="enumerate/1"> | 1332 | <section·class="detail"·id="enumerate/1"> |
| 1333 | ··<div·class="detail-header"> | 1333 | ··<div·class="detail-header"> |
| 1334 | ····<a·href="#enumerate/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1334 | ····<a·href="#enumerate/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1335 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1335 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1421, 20 lines modified | Offset 1421, 20 lines modified | ||
| 1421 | ·······················T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1421 | ·······················T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1422 | ······</div> | 1422 | ······</div> |
| 1423 | <p>Returns·<code·class="inline">List1</code>·with·each·element·<code·class="inline">H</code>·replaced·by·a·tuple·of·form·<code·class="inline">{I,·H}</code>·where | 1423 | <p>Returns·<code·class="inline">List1</code>·with·each·element·<code·class="inline">H</code>·replaced·by·a·tuple·of·form·<code·class="inline">{I,·H}</code>·where |
| 1424 | <code·class="inline">I</code>·is·the·position·of·<code·class="inline">H</code>·in·<code·class="inline">List1</code>.·The·enumeration·starts·with·<code·class="inline">Index</code>·and | 1424 | <code·class="inline">I</code>·is·the·position·of·<code·class="inline">H</code>·in·<code·class="inline">List1</code>.·The·enumeration·starts·with·<code·class="inline">Index</code>·and |
| 1425 | increases·by·<code·class="inline">Step</code>·in·each·step.</p><p>That·is,·<a·href="#enumerate/3"><code·class="inline">enumerate/3</code></a>·behaves·as·if·it·had·been·defined·as | 1425 | increases·by·<code·class="inline">Step</code>·in·each·step.</p><p>That·is,·<a·href="#enumerate/3"><code·class="inline">enumerate/3</code></a>·behaves·as·if·it·had·been·defined·as |
| 1426 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">enumerate</span><span·class="p"·data-group-id=" | 1426 | follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">enumerate</span><span·class="p"·data-group-id="1307818362-1">(</span><span·class="n">I</span><span·class="p">,</span><span·class="w">·</span><span·class="n">S</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List</span><span·class="p"·data-group-id="1307818362-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1427 | ··</span><span·class="p"·data-group-id=" | 1427 | ··</span><span·class="p"·data-group-id="1307818362-2">{</span><span·class="n">List1</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="w">·</span><span·class="p"·data-group-id="1307818362-2">}</span><span·class="w">·</span><span·class="o">=</span><span·cla[·...·truncated·by·diffoscope;·len:·1130,·SHA:·5ac2f74aab05928e13bf4b4c0db5264862ff20f302c0e1f592c84acc60980f34·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 1428 | ··</span><span·class="n">List1</span><span·class="p">.</span></code></pre><p>The·default·values·for·<code·class="inline">Index</code>·and·<code·class="inline">Step</code>·are·both·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">enumerate</span><span·class="p"·data-group-id="3866079985-1">(</span><span·class="p"·data-group-id="3866079985-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3866079985-2">]</span><span·class="p"·data-group-id="3866079985-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1429 | </span><span·class="p"·data-group-id="3866079985-3">[</span><span·class="p"·data-group-id="3866079985-4">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="3866079985-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="3866079985-5">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="3866079985-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="3866079985-6">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3866079985-6">}</span><span·class="p"·data-group-id="3866079985-3">]</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">enumerate</span><span·class="p"·data-group-id="0891683396-1">(</span><span·class="mi">10</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0891683396-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0891683396-2">]</span><span·class="p"·data-group-id="0891683396-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1430 | </span><span·class="p"·data-group-id="0891683396-3">[</span><span·class="p"·data-group-id="0891683396-4">{</span><span·class="mi">10</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="0891683396-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="0891683396-5">{</span><span·class="mi">11</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="0891683396-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="0891683396-6">{</span><span·class="mi">12</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="0891683396-6">}</span><span·class="p"·data-group-id="0891683396-3">]</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">enumerate</span><span·class="p"·data-group-id="4877523603-1">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="o">-</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4877523603-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="4877523603-2">]</span><span·class="p"·data-group-id="4877523603-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1431 | </span><span·class=" | 1428 | ··</span><span·class="n">List1</span><span·class="p">.</span></code></pre><p>The·default·values·for·<code·class="inline">Index</code>·and·<code·class="inline">Step</code>·are·both·<code·class="inline">1</code>.</p><p><em>Examples:</em></p><pre><code·class=[·...·truncated·by·diffoscope;·len:·533,·SHA:·c295ee3964e03bdf7289f66050e48baff016d44ed6bdee10306145d8ebf1f153·...·]> |
| 1429 | </span><span·class="p"·data-group-id="2900083540-3">[</span><span·class="p"·data-group-id="2900083540-4">{</span><span·class="mi">1</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="2900083540-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="2900083540-5">{</span><span·class="mi">2</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="2900083540-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="2900083540-6">{</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="2900083540-6">}</span><span·class="p"·data-group-id="2900083540-3">]</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">enumerate</span><span·class="p"·data-group-id="3863726828-1">(</span><span·class="mi">10</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3863726828-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3863726828-2">]</span><span·class="p"·data-group-id="3863726828-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1430 | </span><span·class="p"·data-group-id="3863726828-3">[</span><span·class="p"·data-group-id="3863726828-4">{</span><span·class="mi">10</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="3863726828-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="3863726828-5">{</span><span·class="mi">11</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="3863726828-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="3863726828-6">{</span><span·class="mi">12</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="3863726828-6">}</span><span·class="p"·data-group-id="3863726828-3">]</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">enumerate</span><span·class="p"·data-group-id="1547896147-1">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="o">-</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1547896147-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="1547896147-2">]</span><span·class="p"·data-group-id="1547896147-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1431 | </span><span·class="p"·data-group-id="1547896147-3">[</span><span·class="p"·data-group-id="1547896147-4">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="ss">a</span><span·class="p"·data-group-id="1547896147-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="1547896147-5">{</span><span·class="o">-</span><span·class="mi">2</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="1547896147-5">}</span><span·class="p">,</span><span·class="p"·data-group-id="1547896147-6">{</span><span·class="o">-</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">c</span><span·class="p"·data-group-id="1547896147-6">}</span><span·class="p"·data-group-id="1547896147-3">]</span></code></pre> | ||
| 1432 | ··</section> | 1432 | ··</section> |
| 1433 | </section> | 1433 | </section> |
| 1434 | <section·class="detail"·id="filter/2"> | 1434 | <section·class="detail"·id="filter/2"> |
| 1435 | ··<div·class="detail-header"> | 1435 | ··<div·class="detail-header"> |
| 1436 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1436 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1437 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1437 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1491, 23 lines modified | Offset 1491, 23 lines modified | ||
| 1491 | ·······················Value·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1491 | ·······················Value·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1492 | ······</div> | 1492 | ······</div> |
| 1493 | <p>Calls·<code·class="inline">Fun(Elem)</code>·on·successive·elements·<code·class="inline">Elem</code>·of·<code·class="inline">List1</code>·in·order·to·update·or | 1493 | <p>Calls·<code·class="inline">Fun(Elem)</code>·on·successive·elements·<code·class="inline">Elem</code>·of·<code·class="inline">List1</code>·in·order·to·update·or |
| 1494 | remove·elements·from·<code·class="inline">List1</code>.</p><p><code·class="inline">Fun/1</code>·must·return·either·a·Boolean·or·a·tuple·<code·class="inline">{true,·Value}</code>.·The·function | 1494 | remove·elements·from·<code·class="inline">List1</code>.</p><p><code·class="inline">Fun/1</code>·must·return·either·a·Boolean·or·a·tuple·<code·class="inline">{true,·Value}</code>.·The·function |
| 1495 | returns·the·list·of·elements·for·which·<code·class="inline">Fun</code>·returns·a·new·value,·where·a·value | 1495 | returns·the·list·of·elements·for·which·<code·class="inline">Fun</code>·returns·a·new·value,·where·a·value |
| 1496 | of·<code·class="inline">true</code>·is·synonymous·with·<code·class="inline">{true,·Elem}</code>.</p><p>That·is,·<code·class="inline">filtermap</code>·behaves·as·if·it·had·been·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">filtermap</span><span·class="p"·data-group-id=" | 1496 | of·<code·class="inline">true</code>·is·synonymous·with·<code·class="inline">{true,·Elem}</code>.</p><p>That·is,·<code·class="inline">filtermap</code>·behaves·as·if·it·had·been·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">filtermap</span><span·class="p"·data-group-id="3919209845-1">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List1</span><span·class="p"·data-group-id="3919209845-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1497 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id=" | 1497 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="3919209845-2">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="3919209845-3">(</span><span·class="n">Elem</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p"·data-group-id="3919209845-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1498 | ·······················</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p"·data-group-id=" | 1498 | ·······················</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Fun</span><span·class="p"·data-group-id="3919209845-4">(</span><span·class="n">Elem</span><span·class="p"·data-group-id="3919209845-4">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1499 | ···························</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">;</span><span·class="w"> | 1499 | ···························</span><span·class="ss">false</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">;</span><span·class="w"> |
| 1500 | ···························</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id=" | 1500 | ···························</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="3919209845-5">[</span><span·class="n">Elem</span><span·class="p">|</span><span·class="n">Acc</span><span·class="p"·data-group-id="3919209845-5">]</span><span·class="p">;</span><span·class="w"> |
| 1501 | ···························</span><span·class="p"·data-group-id=" | 1501 | ···························</span><span·class="p"·data-group-id="3919209845-6">{</span><span·class="ss">true</span><span·class="p">,</span><span·class="n">Value</span><span·class="p"·data-group-id="3919209845-6">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·147,·SHA:·d1302837830e1301860ab6e1ef199853de90d1513c68971125d4e5c2d114654e·...·]-7">]</span><span·class="w"> |
| 1502 | ·······················</span><span·class="k">end</span><span·class="w"> | 1502 | ·······················</span><span·class="k">end</span><span·class="w"> |
| 1503 | ················</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id=" | 1503 | ················</span><span·class="k">end</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3919209845-8">[</span><span·class="p"·data-group-id="3919209845-8">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List1</span><span·class="p"·data-group-id="3919209845-2">)</span><span·class="p">.</span></code></pre><p><em>Example:[·...·truncated·by·diffoscope;·len:·1819,·SHA:·abc55bad4882a5878ca57e41816722eca11dbea3e7cf96de2d2b65ba41172bd2·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1504 | </span><span·class="p"·data-group-id="05 | 1504 | </span><span·class="p"·data-group-id="0254286370-5">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0254286370-5">]</span></code></pre> |
| 1505 | ··</section> | 1505 | ··</section> |
| 1506 | </section> | 1506 | </section> |
| 1507 | <section·class="detail"·id="flatlength/1"> | 1507 | <section·class="detail"·id="flatlength/1"> |
| 1508 | ··<div·class="detail-header"> | 1508 | ··<div·class="detail-header"> |
| 1509 | ····<a·href="#flatlength/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1509 | ····<a·href="#flatlength/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1510 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1510 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1554, 17 lines modified | Offset 1554, 17 lines modified | ||
| 1554 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·flatmap(Fun,·List1)·->·List2 | 1554 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·flatmap(Fun,·List1)·->·List2 |
| 1555 | ·················when·Fun·::·fun((A)·->·[B]),·List1·::·[A],·List2·::·[B],·A·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·B·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 1555 | ·················when·Fun·::·fun((A)·->·[B]),·List1·::·[A],·List2·::·[B],·A·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·B·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 1556 | ······</div> | 1556 | ······</div> |
| 1557 | <p>Takes·a·function·from·<code·class="inline">A</code>s·to·lists·of·<code·class="inline">B</code>s,·and·a·list·of·<code·class="inline">A</code>s·(<code·class="inline">List1</code>)·and | 1557 | <p>Takes·a·function·from·<code·class="inline">A</code>s·to·lists·of·<code·class="inline">B</code>s,·and·a·list·of·<code·class="inline">A</code>s·(<code·class="inline">List1</code>)·and |
| 1558 | produces·a·list·of·<code·class="inline">B</code>s·by·applying·the·function·to·every·element·in·<code·class="inline">List1</code>·and | 1558 | produces·a·list·of·<code·class="inline">B</code>s·by·applying·the·function·to·every·element·in·<code·class="inline">List1</code>·and |
| 1559 | appending·the·resulting·lists.</p><p>That·is,·<code·class="inline">flatmap</code>·behaves·as·if·it·had·been·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">flatmap</span><span·class="p"·data-group-id=" | 1559 | appending·the·resulting·lists.</p><p>That·is,·<code·class="inline">flatmap</code>·behaves·as·if·it·had·been·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">flatmap</span><span·class="p"·data-group-id="7536931307-1">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List1</span><span·class="p"·data-group-id="7536931307-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1560 | ····</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 1560 | ····</span><span·class="nf">append</span><span·class="p"·data-group-id="7536931307-2">(</span><span·class="nf">map</span><span·class="p"·data-group-id="7536931307-3">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="n">List1</span><span·class="p"·data-group-id="7536931307-3">)</span[·...·truncated·by·diffoscope;·len:·1073,·SHA:·dbf9504b310ced62015e9e5320078917fdb93ab9f9f547033677c9113b78e73a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1561 | </span><span·class="p"·data-group-id="9 | 1561 | </span><span·class="p"·data-group-id="3944122800-5">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·class="ss">c</span><span·class="[·...·truncated·by·diffoscope;·len:·77,·SHA:·6ef94e0d574bca4296ecd693e43863c0957ec94b78d84ff99e4ab715180382a6·...·]-5">]</span></code></pre> |
| 1562 | ··</section> | 1562 | ··</section> |
| 1563 | </section> | 1563 | </section> |
| 1564 | <section·class="detail"·id="flatten/1"> | 1564 | <section·class="detail"·id="flatten/1"> |
| Max diff block lines reached; 128029/168766 bytes (75.86%) of diff not shown. | |||
| Offset 443, 15 lines modified | Offset 443, 15 lines modified | ||
| 443 | ······<p·class="built-using"> | 443 | ······<p·class="built-using"> |
| 444 | ········Built·using | 444 | ········Built·using |
| 445 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 445 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 446 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 446 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 447 | ······</p> | 447 | ······</p> |
| 448 | <p>Copyright·©·1996-202 | 448 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 449 | ····</footer> | 449 | ····</footer> |
| 450 | ··</div> | 450 | ··</div> |
| 451 | </main> | 451 | </main> |
| 452 | </div> | 452 | </div> |
| 453 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 453 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 454 | ··<script> | 454 | ··<script> |
| 455 | ··let·initialized·=·false; | 455 | ··let·initialized·=·false; |
| Offset 1138, 15 lines modified | Offset 1138, 15 lines modified | ||
| 1138 | ······<p·class="built-using"> | 1138 | ······<p·class="built-using"> |
| 1139 | ········Built·using | 1139 | ········Built·using |
| 1140 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1140 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1141 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1141 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1142 | ······</p> | 1142 | ······</p> |
| 1143 | <p>Copyright·©·1996-202 | 1143 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1144 | ····</footer> | 1144 | ····</footer> |
| 1145 | ··</div> | 1145 | ··</div> |
| 1146 | </main> | 1146 | </main> |
| 1147 | </div> | 1147 | </div> |
| 1148 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1148 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1149 | ··<script> | 1149 | ··<script> |
| 1150 | ··let·initialized·=·false; | 1150 | ··let·initialized·=·false; |
| Offset 150, 55 lines modified | Offset 150, 55 lines modified | ||
| 150 | ··</a> | 150 | ··</a> |
| 151 | ··<span·class="text">Example·1</span> | 151 | ··<span·class="text">Example·1</span> |
| 152 | </h2> | 152 | </h2> |
| 153 | <p>Using·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·and·a·match·specification,·one·can·filter·out·rows·of·a | 153 | <p>Using·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·and·a·match·specification,·one·can·filter·out·rows·of·a |
| 154 | table·and·construct·a·list·of·tuples·containing·relevant·parts·of·the·data·in | 154 | table·and·construct·a·list·of·tuples·containing·relevant·parts·of·the·data·in |
| 155 | these·rows.·One·can·use·<a·href="ets.html#foldl/3"><code·class="inline">ets:foldl/3</code></a>·instead,·but·the·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·call·is | 155 | these·rows.·One·can·use·<a·href="ets.html#foldl/3"><code·class="inline">ets:foldl/3</code></a>·instead,·but·the·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·call·is |
| 156 | far·more·efficient.·Without·the·translation·provided·by·<code·class="inline">ms_transform</code>,·one·must | 156 | far·more·efficient.·Without·the·translation·provided·by·<code·class="inline">ms_transform</code>,·one·must |
| 157 | struggle·with·writing·match·specifications·terms·to·accommodate·this.</p><p>Consider·a·simple·table·of·employees:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 157 | struggle·with·writing·match·specifications·terms·to·accommodate·this.</p><p>Consider·a·simple·table·of·employees:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="5518224078-1">(</span><span·class="ss">emp</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5518224078-2">{</span><span·class="ss">empno</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%Employee·number·as·a·string,·the·key</span><span·class="w"> |
| 158 | ··············</span><span·class="ss">surname</span><span·class="p">,</span><span·class="w">···</span><span·class="c1">%Surname·of·the·employee</span><span·class="w"> | 158 | ··············</span><span·class="ss">surname</span><span·class="p">,</span><span·class="w">···</span><span·class="c1">%Surname·of·the·employee</span><span·class="w"> |
| 159 | ··············</span><span·class="ss">givenname</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%Given·name·of·employee</span><span·class="w"> | 159 | ··············</span><span·class="ss">givenname</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%Given·name·of·employee</span><span·class="w"> |
| 160 | ··············</span><span·class="ss">dept</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%Department,·one·of·{dev,sales,prod,adm}</span><span·class="w"> | 160 | ··············</span><span·class="ss">dept</span><span·class="p">,</span><span·class="w">······</span><span·class="c1">%Department,·one·of·{dev,sales,prod,adm}</span><span·class="w"> |
| 161 | ··············</span><span·class="ss">empyear</span><span·class="p"·data-group-id=" | 161 | ··············</span><span·class="ss">empyear</span><span·class="p"·data-group-id="5518224078-2">}</span><span·class="p"·data-group-id="5518224078-1">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%Year·the·employee·was·employed</span></code></pre><p>We·create·the·table·using:</p><pre><code·class="text">ets:new([·...·truncated·by·diffoscope;·len:·640,·SHA:·ada2b47f9ca5a3be0f49643defbe445f8feaf68a6c5758cda42efef6e642e6e2·...·]2-2">}</span><span·class="p">,</span><span·class="w"> |
| 162 | ·</span><span·class="p"·data-group-id=" | 162 | ·</span><span·class="p"·data-group-id="3024882092-3">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"041231"</span><span·class="p">,</span><span·class="s">"Doe"</span><span·class="p">,</span><span·class="s">"John"</span><span·class="p">,[·...·truncated·by·diffoscope;·len:·127,·SHA:·afe8f40e3a983458ecc3e31208f4fe8ee55661405013c7d6272be0133a8f7408·...·]2-3">}</span><span·class="p">,</span><span·class="w"> |
| 163 | ·</span><span·class="p"·data-group-id=" | 163 | ·</span><span·class="p"·data-group-id="3024882092-4">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"052341"</span><span·class="p">,</span><span·class="s">"Smith"</span><span·class="p">,</span><span·class="s">"John"</span><span·class="p"[·...·truncated·by·diffoscope;·len:·128,·SHA:·c2e73b94b799f036cd1e93a6245a25066ad88214ea28208fed23788930a4f6d7·...·]2-4">}</span><span·class="p">,</span><span·class="w"> |
| 164 | ·</span><span·class="p"·data-group-id=" | 164 | ·</span><span·class="p"·data-group-id="3024882092-5">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"076324"</span><span·class="p">,</span><span·class="s">"Smith"</span><span·class="p">,</span><span·class="s">"Ella"</span><span·class="p"[·...·truncated·by·diffoscope;·len:·130,·SHA:·7839b9e05bb3a02902e9505b5939badf8ef21913be42909b98341e1112ea4669·...·]2-5">}</span><span·class="p">,</span><span·class="w"> |
| 165 | ·</span><span·class="p"·data-group-id=" | 165 | ·</span><span·class="p"·data-group-id="3024882092-6">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"122334"</span><span·class="p">,</span><span·class="s">"Weston"</span><span·class="p">,</span><span·class="s">"Anna"</span><span·class="p[·...·truncated·by·diffoscope;·len:·130,·SHA:·8d2a7d81f8276f326aafa22d25db3a0bb0c6d39a8ac181e741080c95484b5060·...·]2-6">}</span><span·class="p">,</span><span·class="w"> |
| 166 | ·</span><span·class="p"·data-group-id=" | 166 | ·</span><span·class="p"·data-group-id="3024882092-7">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"535216"</span><span·class="p">,</span><span·class="s">"Chalker"</span><span·class="p">,</span><span·class="s">"Samuel"</span><span·class[·...·truncated·by·diffoscope;·len:·132,·SHA:·52b22df47b08727ec589cb3bd2c0016b86580a4534c6183a3021698dfd333b61·...·]2-7">}</span><span·class="p">,</span><span·class="w"> |
| 167 | ·</span><span·class="p"·data-group-id=" | 167 | ·</span><span·class="p"·data-group-id="3024882092-8">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"789789"</span><span·class="p">,</span><span·class="s">"Harrysson"</span><span·class="p">,</span><span·class="s">"Joe"</span><span·class=[·...·truncated·by·diffoscope;·len:·131,·SHA:·a0f3e66cc61e4e5b77caf707744c7a8dffa24cbbb95d7fa4902032498147956e·...·]2-8">}</span><span·class="p">,</span><span·class="w"> |
| 168 | ·</span><span·class="p"·data-group-id=" | 168 | ·</span><span·class="p"·data-group-id="3024882092-9">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"963721"</span><span·class="p">,</span><span·class="s">"Scott"</span><span·class="p">,</span><span·class="s">"Juliana"</span><span·class=[·...·truncated·by·diffoscope;·len:·131,·SHA:·390146fca62cc3d1e7520d0a03f978d325de432b92476a0047cc3ff6e450a173·...·]2-9">}</span><span·class="p">,</span><span·class="w"> |
| 169 | ·</span><span·class="p"·data-group-id=" | 169 | ·</span><span·class="p"·data-group-id="3024882092-10">{</span><span·class="ss">emp</span><span·class="p">,</span><span·class="s">"989891"</span><span·class="p">,</span><span·class="s">"Brown"</span><span·class="p">,</span><span·class="s">"Gabriel"</span><span·class[·...·truncated·by·diffoscope;·len:·187,·SHA:·028d56d54c79408b86482fae7cf6e33748f03b2026f09e14e5ba2c6870212f18·...·]2-1">]</span></code></pre><p>Assuming·that·we·want·the·employee·numbers·of·everyone·in·the·sales·department, |
| 170 | there·are·several·ways.</p><p><a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id=" | 170 | there·are·several·ways.</p><p><a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">match</span><span·class="p"·data-group-id="6134704592-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6134704592-2">{</span><span·class="ss">'_'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">&#[·...·truncated·by·diffoscope;·len:·437,·SHA:·a2f0fd42a0058ac8fd0e0e3456b787e41d84e6e0665a72ac3993aac081360cd6·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="p"·data-group-id=" | 171 | </span><span·class="p"·data-group-id="6134704592-3">[</span><span·class="p"·data-group-id="6134704592-4">[</span><span·class="s">"011103"</span><span·class="p"·data-group-id="6134704592-4">]</span><span·class="p">,</span><span·class="p"·data-group-id="6134704592-5">[</span><span·clas[·...·truncated·by·diffoscope;·len:·125,·SHA:·5d383a0545a0c150287e0042776373808d0d181e27913c4b4659414323ea1b72·...·]-3">]</span></code></pre><p><a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·uses·a·simpler·type·of·match·specification,·but·it·is·still |
| 172 | unreadable,·and·one·has·little·control·over·the·returned·result.·It·is·always·a | 172 | unreadable,·and·one·has·little·control·over·the·returned·result.·It·is·always·a |
| 173 | list·of·lists.</p><p><a·href="ets.html#foldl/3"><code·class="inline">ets:foldl/3</code></a>·or·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·can·be·used·to·avoid·the·nested·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="3 | 173 | list·of·lists.</p><p><a·href="ets.html#foldl/3"><code·class="inline">ets:foldl/3</code></a>·or·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·can·be·used·to·avoid·the·nested·lists:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="3203043841-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="3203043841-2">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="3203043841-3">{</span><span·class="ss">empno</span><span·class="w">·</spa[·...·truncated·by·diffoscope;·len:·699,·SHA:·f9f021faccb4a8e0922396b68ef55a6e9fabe1e4ad9bedfa486c18559c955a2b·...·]-4">]</span><span·class="p">;</span><span·class="w"> |
| 174 | ·············</span><span·class="p"·data-group-id="3 | 174 | ·············</span><span·class="p"·data-group-id="3203043841-5">(</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Acc</span><span·class="p"·data-group-id="3203043841-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="w"> |
| 175 | ··········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 175 | ··········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 176 | ··········</span><span·class="p"·data-group-id="3 | 176 | ··········</span><span·class="p"·data-group-id="3203043841-6">[</span><span·class="p"·data-group-id="3203043841-6">]</span><span·class="p">,</span><span·class="w"> |
| 177 | ··········</span><span·class="ss">emp_tab</span><span·class="p"·data-group-id="3 | 177 | ··········</span><span·class="ss">emp_tab</span><span·class="p"·data-group-id="3203043841-1">)</span><span·class="p">.</span></code></pre><p>The·result·is·<code·class="inline">["011103","076324"]</code>.·The·fun·is·straightforward,·so·the·only |
| 178 | problem·is·that·all·the·data·from·the·table·must·be·transferred·from·the·table | 178 | problem·is·that·all·the·data·from·the·table·must·be·transferred·from·the·table |
| 179 | to·the·calling·process·for·filtering.·That·is·inefficient·compared·to·the | 179 | to·the·calling·process·for·filtering.·That·is·inefficient·compared·to·the |
| 180 | <a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·call·where·the·filtering·can·be·done·"inside"·the·emulator·and | 180 | <a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·call·where·the·filtering·can·be·done·"inside"·the·emulator·and |
| 181 | only·the·result·is·transferred·to·the·process.</p><p>Consider·a·"pure"·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·call·that·does·what·<code·class="inline">ets:foldr</code>·does:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 181 | only·the·result·is·transferred·to·the·process.</p><p>Consider·a·"pure"·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·call·that·does·what·<code·class="inline">ets:foldr</code>·does:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="6992577431-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6992577431-2">[</span><span·class="p"·data-group-id="6992577431-3">{</span><span·class="o">#</span><span·class="ss">emp</spa[·...·truncated·by·diffoscope;·len:·996,·SHA:·32c927935411d87c79d22939630662fec3a6d6f80deba9a56cf0a226a9f68028·...·]-1">)</span><span·class="p">.</span></code></pre><p>Although·the·record·syntax·is·used,·it·is·still·hard·to·read·and·even·harder·to |
| 182 | write.·The·first·element·of·the·tuple, | 182 | write.·The·first·element·of·the·tuple, |
| 183 | <code·class="inline">#emp{empno·=·'$1',·dept·=·sales,·_='_'}</code>,·tells·what·to·match.·Elements·not | 183 | <code·class="inline">#emp{empno·=·'$1',·dept·=·sales,·_='_'}</code>,·tells·what·to·match.·Elements·not |
| 184 | matching·this·are·not·returned,·as·in·the·<a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·example.·The·second | 184 | matching·this·are·not·returned,·as·in·the·<a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·example.·The·second |
| 185 | element,·the·empty·list,·is·a·list·of·guard·expressions,·which·we·do·not·need. | 185 | element,·the·empty·list,·is·a·list·of·guard·expressions,·which·we·do·not·need. |
| 186 | The·third·element·is·the·list·of·expressions·constructing·the·return·value·(in | 186 | The·third·element·is·the·list·of·expressions·constructing·the·return·value·(in |
| 187 | ETS·this·is·almost·always·a·list·containing·one·single·term).·In·our·case·<code·class="inline">'$1'</code> | 187 | ETS·this·is·almost·always·a·list·containing·one·single·term).·In·our·case·<code·class="inline">'$1'</code> |
| 188 | is·bound·to·the·employee·number·in·the·head·(first·element·of·the·tuple),·and | 188 | is·bound·to·the·employee·number·in·the·head·(first·element·of·the·tuple),·and |
| 189 | hence·the·employee·number·is·returned.·The·result·is·<code·class="inline">["011103","076324"]</code>,·as | 189 | hence·the·employee·number·is·returned.·The·result·is·<code·class="inline">["011103","076324"]</code>,·as |
| 190 | in·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example,·but·the·result·is·retrieved·much·more·efficiently | 190 | in·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example,·but·the·result·is·retrieved·much·more·efficiently |
| 191 | in·terms·of·execution·speed·and·memory·consumption.</p><p>Using·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>,·we·can·combine·the·ease·of·use·of·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·and | 191 | in·terms·of·execution·speed·and·memory·consumption.</p><p>Using·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>,·we·can·combine·the·ease·of·use·of·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·and |
| 192 | the·efficiency·of·the·pure·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 192 | the·efficiency·of·the·pure·<a·href="ets.html#select/2"><code·class="inline">ets:select/2</code></a>·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="0267021745-1">(</span><span·class="s">"stdlib/include/ms_transform.hrl"</span><span·class="p"·data-group-id="0267021745-1">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 193 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="0267021745-2">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="0267021745-3">(</span><span·class="w"> |
| 194 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 194 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id="0267021745-4">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="0267021745-5">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span[·...·truncated·by·diffoscope;·len:·265,·SHA:·96bcfb1887bd5435d39255c9584535646c50d4a5feee37f336959eebd6a89c23·...·]5-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ······························</span><span·class="n">E</span><span·class="w"> | 195 | ······························</span><span·class="n">E</span><span·class="w"> |
| 196 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id=" | 196 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id="0267021745-3">)</span><span·class="p"·data-group-id="0267021745-2">)</span><span·class="p">.</span></code></pre><p>This·example·requires·no·special·knowledge·of·match·specifications·to |
| 197 | understand.·The·head·of·the·fun·matches·what·you·want·to·filter·out·and·the·body | 197 | understand.·The·head·of·the·fun·matches·what·you·want·to·filter·out·and·the·body |
| 198 | returns·what·you·want·returned.·As·long·as·the·fun·can·be·kept·within·the·limits | 198 | returns·what·you·want·returned.·As·long·as·the·fun·can·be·kept·within·the·limits |
| 199 | of·the·match·specifications,·there·is·no·need·to·transfer·all·table·data·to·the | 199 | of·the·match·specifications,·there·is·no·need·to·transfer·all·table·data·to·the |
| 200 | process·for·filtering·as·in·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example.·It·is·easier·to·read·than | 200 | process·for·filtering·as·in·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example.·It·is·easier·to·read·than |
| 201 | the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example,·as·the·select·call·in·itself·discards·anything·that | 201 | the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·example,·as·the·select·call·in·itself·discards·anything·that |
| 202 | does·not·match,·while·the·fun·of·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·call·needs·to·handle·both·the | 202 | does·not·match,·while·the·fun·of·the·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·call·needs·to·handle·both·the |
| 203 | elements·matching·and·the·ones·not·matching.</p><p>In·the·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>·example·above,·it·is·needed·to·include·<code·class="inline">ms_transform.hrl</code> | 203 | elements·matching·and·the·ones·not·matching.</p><p>In·the·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>·example·above,·it·is·needed·to·include·<code·class="inline">ms_transform.hrl</code> |
| Offset 212, 90 lines modified | Offset 212, 90 lines modified | ||
| 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 212 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 213 | ··</a> | 213 | ··</a> |
| 214 | ··<span·class="text">Example·2</span> | 214 | ··<span·class="text">Example·2</span> |
| 215 | </h2> | 215 | </h2> |
| 216 | <p>Assume·that·we·want·to·get·all·the·employee·numbers·of·employees·hired·before | 216 | <p>Assume·that·we·want·to·get·all·the·employee·numbers·of·employees·hired·before |
| 217 | year·2000.·Using·<a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·is·not·an·alternative·here,·as·relational | 217 | year·2000.·Using·<a·href="ets.html#match/2"><code·class="inline">ets:match/2</code></a>·is·not·an·alternative·here,·as·relational |
| 218 | operators·cannot·be·expressed·there.·Once·again,·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·can·do·it | 218 | operators·cannot·be·expressed·there.·Once·again,·<a·href="ets.html#foldr/3"><code·class="inline">ets:foldr/3</code></a>·can·do·it |
| 219 | (slowly,·but·correct):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id=" | 219 | (slowly,·but·correct):</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">foldr</span><span·class="p"·data-group-id="1825284139-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="1825284139-2">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="1825284139-3">{</span><span·class="ss">empno</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·900,·SHA:·b47771dac6ce59aeebff9dce83807d05046d787d34a64d6f6528a8f73323fd48·...·]-4">]</span><span·class="p">;</span><span·class="w"> |
| 220 | ··················</span><span·class="p"·data-group-id=" | 220 | ··················</span><span·class="p"·data-group-id="1825284139-5">(</span><span·class="p">_</span><span·class="p">,</span><span·class="n">Acc</span><span·class="p"·data-group-id="1825284139-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="w"> |
| 221 | ··········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 221 | ··········</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 222 | ··········</span><span·class="p"·data-group-id=" | 222 | ··········</span><span·class="p"·data-group-id="1825284139-6">[</span><span·class="p"·data-group-id="1825284139-6">]</span><span·class="p">,</span><span·class="w"> |
| 223 | ··········</span><span·class="ss">emp_tab</span><span·class="p"·data-group-id=" | 223 | ··········</span><span·class="ss">emp_tab</span><span·class="p"·data-group-id="1825284139-1">)</span><span·class="p">.</span></code></pre><p>The·result·is·<code·class="inline">["052341","076324","535216","789789","989891"]</code>,·as·expected.·The |
| 224 | equivalent·expression·using·a·handwritten·match·specification·would·look·like | 224 | equivalent·expression·using·a·handwritten·match·specification·would·look·like |
| 225 | this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 225 | this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="5873491565-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5873491565-2">[</span><span·class="p"·data-group-id="5873491565-3">{</span><span·class="o">#</span><span·class="ss">emp</spa[·...·truncated·by·diffoscope;·len:·551,·SHA:·0b7ce165c4974bbece79ab139ebeaee35400d2f50f5752483deeb72e1182e03c·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 226 | ·····················</span><span·class="p"·data-group-id=" | 226 | ·····················</span><span·class="p"·data-group-id="5873491565-5">[</span><span·class="p"·data-group-id="5873491565-6">{</span><span·class="ss">'<'</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'$2'</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·111,·SHA:·819c4262582db7daf4ff23243539fbba96b58ffec320b3e5d721eec3c5bbdbae·...·]-5">]</span><span·class="p">,</span><span·class="w"> |
| 227 | ·····················</span><span·class="p"·data-group-id=" | 227 | ·····················</span><span·class="p"·data-group-id="5873491565-7">[</span><span·class="ss">'$1'</span><span·class="p"·data-group-id="5873491565-7">]</span><span·class="p"·data-group-id="5873491565-3">}</span><span·class="p"·data-group-id="5873491565-2">]</span><span·class="p"·data-group-id="58734915[·...·truncated·by·diffoscope;·len:·2,·SHA:·108c995b953c8a35561103e2014cf828eb654a99e310f87fab94c2f4b7d2a04f·...·]-1">)</span><span·class="p">.</span></code></pre><p>This·gives·the·same·result.·<code·class="inline">[{'<',·'$2',·2000}]</code>·is·in·the·guard·part·and |
| 228 | therefore·discards·anything·that·does·not·have·an·<code·class="inline">empyear</code>·(bound·to·<code·class="inline">'$2'</code>·in | 228 | therefore·discards·anything·that·does·not·have·an·<code·class="inline">empyear</code>·(bound·to·<code·class="inline">'$2'</code>·in |
| 229 | the·head)·less·than·2000,·as·the·guard·in·the·<code·class="inline">foldr/3</code>·example.</p><p>We·write·it·using·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 229 | the·head)·less·than·2000,·as·the·guard·in·the·<code·class="inline">foldr/3</code>·example.</p><p>We·write·it·using·<a·href="ets.html#fun2ms/1"><code·class="inline">ets:fun2ms/1</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="8358185793-1">(</span><span·class="s">"stdlib/include/ms_transform.hrl"</span><span·class="p"·data-group-id="8358185793-1">)</span><span·class="p">.</span><span·class="w"> |
| 230 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 230 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="8358185793-2">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="8358185793-3">(</span><span·class="w"> |
| 231 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 231 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id="8358185793-4">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="8358185793-5">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span[·...·truncated·by·diffoscope;·len:·264,·SHA:·538cd643650ae6e01f28e3930f5d2a784c8c4a626232a31d091674bbada30d74·...·]-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">2000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ···························</span><span·class="n">E</span><span·class="w"> | 232 | ···························</span><span·class="n">E</span><span·class="w"> |
| 233 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id=" | 233 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id="8358185793-3">)</span><span·class="p"·data-group-id="8358185793-2">)</span><span·class="p">.</span></code></pre><h2·id="module-example-3"·class="section-heading"> |
| 234 | ··<a·href="#module-example-3"·class="hover-link"> | 234 | ··<a·href="#module-example-3"·class="hover-link"> |
| 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 235 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 236 | ··</a> | 236 | ··</a> |
| 237 | ··<span·class="text">Example·3</span> | 237 | ··<span·class="text">Example·3</span> |
| 238 | </h2> | 238 | </h2> |
| 239 | <p>Assume·that·we·want·the·whole·object·matching·instead·of·only·one·element.·One | 239 | <p>Assume·that·we·want·the·whole·object·matching·instead·of·only·one·element.·One |
| 240 | alternative·is·to·assign·a·variable·to·every·part·of·the·record·and·build·it·up | 240 | alternative·is·to·assign·a·variable·to·every·part·of·the·record·and·build·it·up |
| 241 | once·again·in·the·body·of·the·fun,·but·the·following·is·easier:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 241 | once·again·in·the·body·of·the·fun,·but·the·following·is·easier:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="6211200826-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="6211200826-2">(</span><span·class="w"> |
| 242 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 242 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id="6211200826-3">(</span><span·class="n">Obj</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="6211200826-4">{</span><span·class="ss">empno</span><sp[·...·truncated·by·diffoscope;·len:·362,·SHA:·fa621b8114c112de0cdd70f347d82b1da2ec5244fc01e4c20bd5134716efa262·...·]-3">)</span><span·class="w"> |
| 243 | ·························</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">2000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 243 | ·························</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">2000</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 244 | ······························</span><span·class="n">Obj</span><span·class="w"> | 244 | ······························</span><span·class="n">Obj</span><span·class="w"> |
| 245 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id=" | 245 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id="6211200826-2">)</span><span·class="p"·data-group-id="6211200826-1">)</span><span·class="p">.</span></code></pre><p>As·in·ordinary·Erlang·matching,·you·can·bind·a·variable·to·the·whole·matched |
| 246 | object·using·a·"match·inside·the·match",·that·is,·a·<code·class="inline">=</code>.·Unfortunately·in·funs | 246 | object·using·a·"match·inside·the·match",·that·is,·a·<code·class="inline">=</code>.·Unfortunately·in·funs |
| 247 | translated·to·match·specifications,·it·is·allowed·only·at·the·"top-level",·that | 247 | translated·to·match·specifications,·it·is·allowed·only·at·the·"top-level",·that |
| 248 | is,·matching·the·<em>whole</em>·object·arriving·to·be·matched·into·a·separate·variable. | 248 | is,·matching·the·<em>whole</em>·object·arriving·to·be·matched·into·a·separate·variable. |
| 249 | If·you·are·used·to·writing·match·specifications·by·hand,·we·mention·that | 249 | If·you·are·used·to·writing·match·specifications·by·hand,·we·mention·that |
| 250 | variable·A·is·simply·translated·into·'$_'.·Alternatively,·pseudo·function | 250 | variable·A·is·simply·translated·into·'$_'.·Alternatively,·pseudo·function |
| 251 | <code·class="inline">object/0</code>·also·returns·the·whole·matched·object,·see·section | 251 | <code·class="inline">object/0</code>·also·returns·the·whole·matched·object,·see·section |
| 252 | <a·href="ms_transform.html#warnings_and_restrictions">Warnings·and·Restrictions</a>.</p><h2·id="module-example-4"·class="section-heading"> | 252 | <a·href="ms_transform.html#warnings_and_restrictions">Warnings·and·Restrictions</a>.</p><h2·id="module-example-4"·class="section-heading"> |
| 253 | ··<a·href="#module-example-4"·class="hover-link"> | 253 | ··<a·href="#module-example-4"·class="hover-link"> |
| 254 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 254 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 255 | ··</a> | 255 | ··</a> |
| 256 | ··<span·class="text">Example·4</span> | 256 | ··<span·class="text">Example·4</span> |
| 257 | </h2> | 257 | </h2> |
| 258 | <p>This·example·concerns·the·body·of·the·fun.·Assume·that·all·employee·numbers | 258 | <p>This·example·concerns·the·body·of·the·fun.·Assume·that·all·employee·numbers |
| 259 | beginning·with·zero·(<code·class="inline">0</code>)·must·be·changed·to·begin·with·one·(<code·class="inline">1</code>)·instead,·and | 259 | beginning·with·zero·(<code·class="inline">0</code>)·must·be·changed·to·begin·with·one·(<code·class="inline">1</code>)·instead,·and |
| 260 | that·we·want·to·create·the·list·<code·class="inline">[{<Old·empno>,<New·empno>}]</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 260 | that·we·want·to·create·the·list·<code·class="inline">[{<Old·empno>,<New·empno>}]</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="6992524338-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="6992524338-2">(</span><span·class="w"> |
| 261 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 261 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id="6992524338-3">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="6992524338-4">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·320,·SHA:·a335f37a2eacc0fea488c6ebb46b7f9434095bac0f7bce8b28fa3da3d8b367b5·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 262 | ······························</span><span·class="p"·data-group-id=" | 262 | ······························</span><span·class="p"·data-group-id="6992524338-6">{</span><span·class="p"·data-group-id="6992524338-7">[</span><span·class="sc">$0</span><span·class="p">|</span><span·class="n">Rest</span><span·class="p"·data-group-id="6992524338-7">]</span><span·class="p">,</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·197,·SHA:·382f39af1f10838045ec78c3ef7b41d46bcd7bc628fef692069fb9eebbd0b878·...·]-6">}</span><span·class="w"> |
| 263 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id=" | 263 | ······················</span><span·class="k">end</span><span·class="p"·data-group-id="6992524338-2">)</span><span·class="p"·data-group-id="6992524338-1">)</span><span·class="p">.</span></code></pre><p>This·query·hits·the·feature·of·partially·bound·keys·in·table·type·<code·class="inline">ordered_set</code>, |
| 264 | so·that·not·the·whole·table·needs·to·be·searched,·only·the·part·containing·keys | 264 | so·that·not·the·whole·table·needs·to·be·searched,·only·the·part·containing·keys |
| 265 | beginning·with·<code·class="inline">0</code>·is·looked·into.</p><h2·id="module-example-5"·class="section-heading"> | 265 | beginning·with·<code·class="inline">0</code>·is·looked·into.</p><h2·id="module-example-5"·class="section-heading"> |
| 266 | ··<a·href="#module-example-5"·class="hover-link"> | 266 | ··<a·href="#module-example-5"·class="hover-link"> |
| 267 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 267 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 268 | ··</a> | 268 | ··</a> |
| 269 | ··<span·class="text">Example·5</span> | 269 | ··<span·class="text">Example·5</span> |
| 270 | </h2> | 270 | </h2> |
| 271 | <p>The·fun·can·have·many·clauses.·Assume·that·we·want·to·do·the·following:</p><ul><li>If·an·employee·started·before·1997,·return·the·tuple | 271 | <p>The·fun·can·have·many·clauses.·Assume·that·we·want·to·do·the·following:</p><ul><li>If·an·employee·started·before·1997,·return·the·tuple |
| 272 | <code·class="inline">{inventory,·<employee·number>}</code>.</li><li>If·an·employee·started·1997·or·later,·but·before·2001,·return | 272 | <code·class="inline">{inventory,·<employee·number>}</code>.</li><li>If·an·employee·started·1997·or·later,·but·before·2001,·return |
| 273 | <code·class="inline">{rookie,·<employee·number>}</code>.</li><li>For·all·other·employees,·return·<code·class="inline">{newbie,·<employee·number>}</code>,·except·for | 273 | <code·class="inline">{rookie,·<employee·number>}</code>.</li><li>For·all·other·employees,·return·<code·class="inline">{newbie,·<employee·number>}</code>,·except·for |
| 274 | those·named·<code·class="inline">Smith</code>·as·they·would·be·affronted·by·anything·other·than·the·tag | 274 | those·named·<code·class="inline">Smith</code>·as·they·would·be·affronted·by·anything·other·than·the·tag |
| 275 | <code·class="inline">guru</code>·and·that·is·also·what·is·returned·for·their·numbers: | 275 | <code·class="inline">guru</code>·and·that·is·also·what·is·returned·for·their·numbers: |
| 276 | <code·class="inline">{guru,·<employee·number>}</code>.</li></ul><p>This·is·accomplished·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id=" | 276 | <code·class="inline">{guru,·<employee·number>}</code>.</li></ul><p>This·is·accomplished·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">select</span><span·class="p"·data-group-id="4850383148-1">(</span><span·class="ss">emp_tab</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ets</span><span·class="p">:</span><span·class="nf">fun2ms</span><span·class="p"·data-group-id="4850383148-2">(</span><span·class="w"> |
| 277 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 277 | ······················</span><span·class="nf">fun</span><span·class="p"·data-group-id="4850383148-3">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="4850383148-4">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span[·...·truncated·by·diffoscope;·len:·304,·SHA:·fd2889e1449a16c181985068b4d9230f5518f546d31f5f8d4322645c6dc88e3e·...·]-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 278 | ······························</span><span·class="p"·data-group-id=" | 278 | ······························</span><span·class="p"·data-group-id="4850383148-5">{</span><span·class="ss">guru</span><span·class="p">,</span><span·class="n">E</span><span·class="p"·data-group-id="4850383148-5">}</span><span·class="p">;</span><span·class="w"> |
| 279 | ·························</span><span·class="p"·data-group-id=" | 279 | ·························</span><span·class="p"·data-group-id="4850383148-6">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="4850383148-7">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><span[·...·truncated·by·diffoscope;·len:·264,·SHA:·530537d4f2e80ef607583030f083fd688a63f6b0e0406c39d387ad20bf3815d6·...·]-6">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="mi">1997</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> |
| 280 | ······························</span><span·class="p"·data-group-id=" | 280 | ······························</span><span·class="p"·data-group-id="4850383148-8">{</span><span·class="ss">inventory</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="p"·data-group-id="4850383148-8">}</span><span·class="p">;</span><span·class="w"> |
| 281 | ·························</span><span·class="p"·data-group-id=" | 281 | ·························</span><span·class="p"·data-group-id="4850383148-9">(</span><span·class="o">#</span><span·class="ss">emp</span><span·class="p"·data-group-id="4850383148-10">{</span><span·class="ss">empno</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">E</span><spa[·...·truncated·by·diffoscope;·len:·266,·SHA:·a480938a5b389e1ecb082f6162230a749bcf6e176d15f4f627e569a87f7afd88·...·]-9">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">2001</span><span·class="w">··</span><span·class="p">-></span><span·class="w"> |
| Max diff block lines reached; 76003/143594 bytes (52.93%) of diff not shown. | |||
| Offset 171, 33 lines modified | Offset 171, 33 lines modified | ||
| 171 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> | 171 | ··<a·href="#fixed-bugs-and-malfunctions-3"·class="hover-link"> |
| 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 172 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 173 | ··</a> | 173 | ··</a> |
| 174 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 174 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 175 | </h3> | 175 | </h3> |
| 176 | <ul><li><p>Made·it·possible·to·expand·help·text·displayed·by·pressing·^[h·by·pressing·^[h·again.</p><p>Own·Id:·OTP-19260·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8884"·title="">PR-8884</a></p></li><li><p>Defining·a·fun·in·the·shell·using·the·syntax·<code·class="inline">fun·Name/Arity</code>·would·fail.·This·has·been·corrected·so·that·the·following·now·works:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nb">is_atom</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 176 | <ul><li><p>Made·it·possible·to·expand·help·text·displayed·by·pressing·^[h·by·pressing·^[h·again.</p><p>Own·Id:·OTP-19260·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8884"·title="">PR-8884</a></p></li><li><p>Defining·a·fun·in·the·shell·using·the·syntax·<code·class="inline">fun·Name/Arity</code>·would·fail.·This·has·been·corrected·so·that·the·following·now·works:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">F</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="nb">is_atom</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> | 177 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> |
| 178 | >·</span><span·class="n">F</span><span·class="p"·data-group-id=" | 178 | >·</span><span·class="n">F</span><span·class="p"·data-group-id="8853881954-1">(</span><span·class="ss">a</span><span·class="p"·data-group-id="8853881954-1">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 179 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 180 | 3>·</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">id</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> | 180 | 3>·</span><span·class="n">Id</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">id</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> | 181 | </span><span·class="p">#</span><span·class="n">Fun</span><span·class="p">.</span><span·class="ss">erl</span><span·class="p">.</span><span·class="mf">42.18682967</span><span·class="o">></span><span·class="gp·unselectable"> |
| 182 | 4>·</span><span·class="n">Id</span><span·class="p"·data-group-id=" | 182 | 4>·</span><span·class="n">Id</span><span·class="p"·data-group-id="8853881954-2">(</span><span·class="mi">42</span><span·class="p"·data-group-id="8853881954-2">)</span><span·class="p">.</span><span·class="w"> |
| 183 | </span><span·class="gt">**·exception·error:·undefined·shell·command·id/1</span><span·class="gp·unselectable"> | 183 | </span><span·class="gt">**·exception·error:·undefined·shell·command·id/1</span><span·class="gp·unselectable"> |
| 184 | 5>·</span><span·class="nf">id</span><span·class="p"·data-group-id=" | 184 | 5>·</span><span·class="nf">id</span><span·class="p"·data-group-id="8853881954-3">(</span><span·class="n">I</span><span·class="p"·data-group-id="8853881954-3">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">I</span><span·class="p">.</span><span·class="w"> |
| 185 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 185 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 186 | 6>·</span><span·class="n">Id</span><span·class="p"·data-group-id=" | 186 | 6>·</span><span·class="n">Id</span><span·class="p"·data-group-id="8853881954-4">(</span><span·class="mi">42</span><span·class="p"·data-group-id="8853881954-4">)</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="mi">42</span></code></pre><p>The·Debugger·has·also·been·corrected·to·correctly·handle·this·syntax·for·a·BIF.</p><p>Own·Id:·OTP-19322·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8963"·title="">GH-8963</a>,·<a·href="https://github.com/erlang/otp/pull/8987"·title="">PR-8987</a></p></li><li><p>Fixed·a·bug·where·completion·of·'fun('·would·cause·the·shell·to·crash.</p><p>Own·Id:·OTP-19351·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9043"·title="">PR-9043</a></p></li><li><p>Fixed·a·bug·causing·the·shell·to·crash·while·trying·to·complete·an·expression·starting·with·a·'/'·or·a·variable·followed·by·'('·or·'/'.·E.g.·Foo/·and·Foo(.</p><p>Own·Id:·OTP-19361·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9078"·title="">PR-9078</a></p></li><li><p><a·href="zip.html#extract/2"><code·class="inline">zip:extract/2</code></a>·with·<code·class="inline">keep_old_files</code>·now·respects·the·<code·class="inline">cwd</code>·option.</p><p>Own·Id:·OTP-19370·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9097"·title="">PR-9097</a>,·<a·href="https://github.com/erlang/otp/issues/9087"·title="">GH-9087</a></p></li><li><p>Fixed·an·error·in·uri_string:percent_decode·spec</p><p>Own·Id:·OTP-19380·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8755"·title="">GH-8755</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> | 187 | </span><span·class="mi">42</span></code></pre><p>The·Debugger·has·also·been·corrected·to·correctly·handle·this·syntax·for·a·BIF.</p><p>Own·Id:·OTP-19322·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8963"·title="">GH-8963</a>,·<a·href="https://github.com/erlang/otp/pull/8987"·title="">PR-8987</a></p></li><li><p>Fixed·a·bug·where·completion·of·'fun('·would·cause·the·shell·to·crash.</p><p>Own·Id:·OTP-19351·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9043"·title="">PR-9043</a></p></li><li><p>Fixed·a·bug·causing·the·shell·to·crash·while·trying·to·complete·an·expression·starting·with·a·'/'·or·a·variable·followed·by·'('·or·'/'.·E.g.·Foo/·and·Foo(.</p><p>Own·Id:·OTP-19361·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9078"·title="">PR-9078</a></p></li><li><p><a·href="zip.html#extract/2"><code·class="inline">zip:extract/2</code></a>·with·<code·class="inline">keep_old_files</code>·now·respects·the·<code·class="inline">cwd</code>·option.</p><p>Own·Id:·OTP-19370·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/9097"·title="">PR-9097</a>,·<a·href="https://github.com/erlang/otp/issues/9087"·title="">GH-9087</a></p></li><li><p>Fixed·an·error·in·uri_string:percent_decode·spec</p><p>Own·Id:·OTP-19380·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8755"·title="">GH-8755</a></p></li></ul><h3·id="improvements-and-new-features"·class="section-heading"> |
| 188 | ··<a·href="#improvements-and-new-features"·class="hover-link"> | 188 | ··<a·href="#improvements-and-new-features"·class="hover-link"> |
| 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 190 | ··</a> | 190 | ··</a> |
| 191 | ··<span·class="text">Improvements·and·New·Features</span> | 191 | ··<span·class="text">Improvements·and·New·Features</span> |
| 192 | </h3> | 192 | </h3> |
| 193 | <ul><li><p>Updated·shell·docs·to·display·the·type·spec,·that·is,·<code·class="inline">h(erlang,·min,·2)</code>)·now·prints·the·type·spec·and·documentation·in·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">h</span><span·class="p"·data-group-id="0 | 193 | <ul><li><p>Updated·shell·docs·to·display·the·type·spec,·that·is,·<code·class="inline">h(erlang,·min,·2)</code>)·now·prints·the·type·spec·and·documentation·in·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="nf">h</span><span·class="p"·data-group-id="0259630685-1">(</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="ss">min</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0259630685-1">)</span><span·class="p">.</span><span·class="w"> |
| 194 | </span><span·class="w"> | 194 | </span><span·class="w"> |
| 195 | ··</span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">min</span><span·class="p"·data-group-id="0 | 195 | ··</span><span·class="p">-</span><span·class="na">spec</span><span·class="w">·</span><span·class="nf">min</span><span·class="p"·data-group-id="0259630685-2">(</span><span·class="n">Term1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Term2</span><span·class="p"·data-group-id="0259630685-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Minimum</span><span·class="w"> |
| 196 | ···············</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="0 | 196 | ···············</span><span·class="k">when</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">term</span><span·class="p"·data-group-id="0259630685-3">(</span><span·class="p"·data-group-id="0259630685-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Term2</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·420,·SHA:·73d7932a45146c2a16a6ead85cad88f75590621d622e83c41525e1ba9e01efdc·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 197 | ··</span><span·class="n">Returns</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">smallest</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">Term2</span><span·class="p">.</span><span·class="w">·</span><span·class="n">If</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">terms</span><span·class="w">·</span><span·class="ss">compare</span><span·class="w">·</span><span·class="ss">equal</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="ss">operator</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">returned</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-19234·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8544"·title="">GH-8544</a>,·<a·href="https://github.com/erlang/otp/pull/8833"·title="">PR-8833</a></p></li><li><p>The·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:io_device/0"><code·class="inline">file:io_device/0</code></a>·type·has·been·updated·to·clearly·show·the·difference·between·a·<code·class="inline">raw</code>·and·<code·class="inline">cooked</code>·IoDevice.</p><p>Own·Id:·OTP-19301·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8956"·title="">PR-8956</a></p></li><li><p>Added·<a·href="json.html#format_key_value_list/3"><code·class="inline">json:format_key_value_list/3</code></a>·and | 197 | ··</span><span·class="n">Returns</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">smallest</span><span·class="w">·</span><span·class="k">of</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">Term2</span><span·class="p">.</span><span·class="w">·</span><span·class="n">If</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="ss">terms</span><span·class="w">·</span><span·class="ss">compare</span><span·class="w">·</span><span·class="ss">equal</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="ss">the</span><span·class="w">·</span><span·class="o">==</span><span·class="w">·</span><span·class="ss">operator</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Term1</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">returned</span><span·class="p">.</span></code></pre><p>Own·Id:·OTP-19234·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8544"·title="">GH-8544</a>,·<a·href="https://github.com/erlang/otp/pull/8833"·title="">PR-8833</a></p></li><li><p>The·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#t:io_device/0"><code·class="inline">file:io_device/0</code></a>·type·has·been·updated·to·clearly·show·the·difference·between·a·<code·class="inline">raw</code>·and·<code·class="inline">cooked</code>·IoDevice.</p><p>Own·Id:·OTP-19301·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8956"·title="">PR-8956</a></p></li><li><p>Added·<a·href="json.html#format_key_value_list/3"><code·class="inline">json:format_key_value_list/3</code></a>·and |
| 198 | <a·href="json.html#format_key_value_list_checked/3"><code·class="inline">json:format_key_value_list_checked/3</code></a>.</p><p>Own·Id:·OTP-19320·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8889"·title="">PR-8889</a></p></li><li><p>Improved·documentation·of·<a·href="../../../../erts-15.2.7/doc/html/time_correction.html#timers">timers</a>.</p><p>Own·Id:·OTP-19360·Aux·Id:·ERIERL-1149,·<a·href="https://github.com/erlang/otp/pull/9062"·title="">PR-9062</a></p></li><li><p>Added·logging·support·to·<a·href="io.html#t:user/0"><code·class="inline">io:user/0</code></a>,·<a·href="io.html#t:standard_io/0"><code·class="inline">io:standard_io/0</code></a>·and·<a·href="io.html#t:standard_error/0"><code·class="inline">io:standard_error/0</code></a>.·See·<a·href="io.html#setopts/2"><code·class="inline">io:setopts/2</code></a>·for·more·details.</p><p>Own·Id:·OTP-19372·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8947"·title="">PR-8947</a></p></li></ul><h2·id="stdlib-6-1-2"·class="section-heading"> | 198 | <a·href="json.html#format_key_value_list_checked/3"><code·class="inline">json:format_key_value_list_checked/3</code></a>.</p><p>Own·Id:·OTP-19320·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8889"·title="">PR-8889</a></p></li><li><p>Improved·documentation·of·<a·href="../../../../erts-15.2.7/doc/html/time_correction.html#timers">timers</a>.</p><p>Own·Id:·OTP-19360·Aux·Id:·ERIERL-1149,·<a·href="https://github.com/erlang/otp/pull/9062"·title="">PR-9062</a></p></li><li><p>Added·logging·support·to·<a·href="io.html#t:user/0"><code·class="inline">io:user/0</code></a>,·<a·href="io.html#t:standard_io/0"><code·class="inline">io:standard_io/0</code></a>·and·<a·href="io.html#t:standard_error/0"><code·class="inline">io:standard_error/0</code></a>.·See·<a·href="io.html#setopts/2"><code·class="inline">io:setopts/2</code></a>·for·more·details.</p><p>Own·Id:·OTP-19372·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8947"·title="">PR-8947</a></p></li></ul><h2·id="stdlib-6-1-2"·class="section-heading"> |
| 199 | ··<a·href="#stdlib-6-1-2"·class="hover-link"> | 199 | ··<a·href="#stdlib-6-1-2"·class="hover-link"> |
| 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 200 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 201 | ··</a> | 201 | ··</a> |
| 202 | ··<span·class="text">STDLIB·6.1.2</span> | 202 | ··<span·class="text">STDLIB·6.1.2</span> |
| Offset 269, 16 lines modified | Offset 269, 16 lines modified | ||
| 269 | <a·href="binary.html#split/2"><code·class="inline">binary:split/2,3</code></a></p><p>The·call·<code·class="inline">binary:copy(<<1:1>>,·0)</code>·would·return·an·empty·binary·instead·of·raising·an·exception.·Similarly,·calls·to·<a·href="binary.html#part/2"><code·class="inline">binary:part/2,3</code></a>·attempting·to·extract·0·bytes·at·position·0·of·a·bitstring·would·return·an·empty·binary·instead·of·raising·an·exception.</p><p>Own·Id:·OTP-18743·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7607"·title="">PR-7607</a>,·<a·href="https://github.com/erlang/otp/pull/7628"·title="">PR-7628</a></p></li><li><p>The·documentation·for·the·preprocessor·now·mentions·that·<code·class="inline">defined(Name)</code>·can·be·called·in·the·condition·for·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·directive·to·test·whether·<code·class="inline">Name</code>·is·the·name·of·a·defined·macro.·(This·feature·was·implemented·in·OTP·21.)</p><p>If·a·function·call·in·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·with·a·name·that·is·not·the·name·of·a·guard·BIF,·there·would·not·be·a·compilation·error,·but·would·instead·cause·the·lines·following·the·directive·to·be·skipped.·This·has·now·been·changed·to·be·a·compilation·error.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18784·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/7706"·title="">GH-7706</a>,·<a·href="https://github.com/erlang/otp/pull/7726"·title="">PR-7726</a></p></li><li><p><code·class="inline">get_until</code>·requests·using·the·I/O·protocol·now·correctly·return·a·binary·or·list·when·<code·class="inline">eof</code>·is·the·last·item·returned·by·the·callback.</p><p>Own·Id:·OTP-18930·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7993"·title="">PR-7993</a>,·<a·href="https://github.com/erlang/otp/issues/4992"·title="">GH-4992</a></p></li><li><p>The·error·handling·the·<code·class="inline">simple_one_for_one</code>·supervisor·has·been·enhanced.·A·transient·child·returning·<code·class="inline">ignore</code>·will·no·longer·cause·a·crash.</p><p>Also,·automatic·shutdown·has·been·disabled·because·it·does·not·make·sense·for·this·supervisor·type.·That·is·was·allowed·is·considered·a·bug.·Therefore,·we·don't·consider·this·an·incompatible·change.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-19029·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8230"·title="">PR-8230</a></p></li><li><p>Fix·shell·expansion·to·not·crash·when·expanding·a·map·with·non-atom·keys·and·to·not·list·zero·arity·functions·when·an·argument·has·been·given.</p><p>Own·Id:·OTP-19073·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8375"·title="">PR-8375</a>,·<a·href="https://github.com/erlang/otp/issues/8366"·title="">GH-8366</a>,·<a·href="https://github.com/erlang/otp/issues/8365"·title="">GH-8365</a>,·<a·href="https://github.com/erlang/otp/issues/8364"·title="">GH-8364</a></p></li></ul><h3·id="improvements-and-new-features-2"·class="section-heading"> | 269 | <a·href="binary.html#split/2"><code·class="inline">binary:split/2,3</code></a></p><p>The·call·<code·class="inline">binary:copy(<<1:1>>,·0)</code>·would·return·an·empty·binary·instead·of·raising·an·exception.·Similarly,·calls·to·<a·href="binary.html#part/2"><code·class="inline">binary:part/2,3</code></a>·attempting·to·extract·0·bytes·at·position·0·of·a·bitstring·would·return·an·empty·binary·instead·of·raising·an·exception.</p><p>Own·Id:·OTP-18743·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7607"·title="">PR-7607</a>,·<a·href="https://github.com/erlang/otp/pull/7628"·title="">PR-7628</a></p></li><li><p>The·documentation·for·the·preprocessor·now·mentions·that·<code·class="inline">defined(Name)</code>·can·be·called·in·the·condition·for·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·directive·to·test·whether·<code·class="inline">Name</code>·is·the·name·of·a·defined·macro.·(This·feature·was·implemented·in·OTP·21.)</p><p>If·a·function·call·in·an·<code·class="inline">-if</code>·or·<code·class="inline">-elif</code>·with·a·name·that·is·not·the·name·of·a·guard·BIF,·there·would·not·be·a·compilation·error,·but·would·instead·cause·the·lines·following·the·directive·to·be·skipped.·This·has·now·been·changed·to·be·a·compilation·error.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18784·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/7706"·title="">GH-7706</a>,·<a·href="https://github.com/erlang/otp/pull/7726"·title="">PR-7726</a></p></li><li><p><code·class="inline">get_until</code>·requests·using·the·I/O·protocol·now·correctly·return·a·binary·or·list·when·<code·class="inline">eof</code>·is·the·last·item·returned·by·the·callback.</p><p>Own·Id:·OTP-18930·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7993"·title="">PR-7993</a>,·<a·href="https://github.com/erlang/otp/issues/4992"·title="">GH-4992</a></p></li><li><p>The·error·handling·the·<code·class="inline">simple_one_for_one</code>·supervisor·has·been·enhanced.·A·transient·child·returning·<code·class="inline">ignore</code>·will·no·longer·cause·a·crash.</p><p>Also,·automatic·shutdown·has·been·disabled·because·it·does·not·make·sense·for·this·supervisor·type.·That·is·was·allowed·is·considered·a·bug.·Therefore,·we·don't·consider·this·an·incompatible·change.</p><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-19029·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8230"·title="">PR-8230</a></p></li><li><p>Fix·shell·expansion·to·not·crash·when·expanding·a·map·with·non-atom·keys·and·to·not·list·zero·arity·functions·when·an·argument·has·been·given.</p><p>Own·Id:·OTP-19073·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8375"·title="">PR-8375</a>,·<a·href="https://github.com/erlang/otp/issues/8366"·title="">GH-8366</a>,·<a·href="https://github.com/erlang/otp/issues/8365"·title="">GH-8365</a>,·<a·href="https://github.com/erlang/otp/issues/8364"·title="">GH-8364</a></p></li></ul><h3·id="improvements-and-new-features-2"·class="section-heading"> |
| 270 | ··<a·href="#improvements-and-new-features-2"·class="hover-link"> | 270 | ··<a·href="#improvements-and-new-features-2"·class="hover-link"> |
| 271 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 271 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 272 | ··</a> | 272 | ··</a> |
| 273 | ··<span·class="text">Improvements·and·New·Features</span> | 273 | ··<span·class="text">Improvements·and·New·Features</span> |
| 274 | </h3> | 274 | </h3> |
| 275 | <ul><li><p>The·functions·<a·href="sets.html#is_equal/2"><code·class="inline">is_equal/2</code></a>,·<a·href="sets.html#map/2"><code·class="inline">map/2</code></a>,·and·<a·href="sets.html#filtermap/2"><code·class="inline">filtermap/2</code></a>·have·been·added·to·the·modules·<a·href="sets.html"><code·class="inline">sets</code></a>,·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>,·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>.</p><p>Own·Id:·OTP-18622·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7183"·title="">PR-7183</a>,·<a·href="https://github.com/erlang/otp/pull/7232"·title="">PR-7232</a></p></li><li><p>The·compiler·now·emits·nicer·error·message·for·function·head·mismatches. | 275 | <ul><li><p>The·functions·<a·href="sets.html#is_equal/2"><code·class="inline">is_equal/2</code></a>,·<a·href="sets.html#map/2"><code·class="inline">map/2</code></a>,·and·<a·href="sets.html#filtermap/2"><code·class="inline">filtermap/2</code></a>·have·been·added·to·the·modules·<a·href="sets.html"><code·class="inline">sets</code></a>,·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>,·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>.</p><p>Own·Id:·OTP-18622·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7183"·title="">PR-7183</a>,·<a·href="https://github.com/erlang/otp/pull/7232"·title="">PR-7232</a></p></li><li><p>The·compiler·now·emits·nicer·error·message·for·function·head·mismatches. |
| 276 | For·example,·given:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">a</span><span·class="p"·data-group-id=" | 276 | For·example,·given:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">a</span><span·class="p"·data-group-id="7853115191-1">(</span><span·class="p"·data-group-id="7853115191-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 277 | </span><span·class="nf">a</span><span·class="p"·data-group-id=" | 277 | </span><span·class="nf">a</span><span·class="p"·data-group-id="7853115191-2">(</span><span·class="p">_</span><span·class="p"·data-group-id="7853115191-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">error</span><span·class="p">.</span></code></pre><p>Erlang/OTP·26·and·earlier·would·emit·a·diagnostic·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch |
| 278 | %····6|·a(_)·->·error. | 278 | %····6|·a(_)·->·error. |
| 279 | %·····|·^</code></pre><p>while·in·Erlang/OTP·27·the·diagnostic·is·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch:·function·a·with·arities·0·and·1·is·regarded·as·two·distinct·functions.·Is·the·number·of·arguments·incorrect·or·is·the·semicolon·in·a/0·unwanted? | 279 | %·····|·^</code></pre><p>while·in·Erlang/OTP·27·the·diagnostic·is·similar·to:</p><pre><code·class="text">t.erl:6:1:·head·mismatch:·function·a·with·arities·0·and·1·is·regarded·as·two·distinct·functions.·Is·the·number·of·arguments·incorrect·or·is·the·semicolon·in·a/0·unwanted? |
| 280 | %····6|·a(_)·->·error. | 280 | %····6|·a(_)·->·error. |
| 281 | %·····|·^</code></pre><p>Own·Id:·OTP-18648·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7383"·title="">PR-7383</a></p></li><li><p><a·href="zip.html#create/2"><code·class="inline">zip:create/2,3</code></a>·will·now·tolerate·POSIX·timestamps·in·the·provided·<code·class="inline">file_info</code>·records.</p><p>Own·Id:·OTP-18668</p></li><li><p>The·callback·function·<a·href="gen_statem.html#c:handle_event/4"><code·class="inline">gen_statem:handle_event/4</code></a>·has·been·cached·in·the·<code·class="inline">gen_statem</code>·engine·to·optimize·callback·call·speed.</p><p>Own·Id:·OTP-18671·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7419"·title="">PR-7419</a></p></li><li><p>The·type·<code·class="inline">beam_lib:beam/0</code>·is·now·exported.</p><p>Own·Id:·OTP-18716·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7534"·title="">PR-7534</a></p></li><li><p>The·documentation·for·the·<a·href="binary.html"><code·class="inline">binary</code></a>·module·has·been·improved.</p><p>Own·Id:·OTP-18741·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7585"·title="">PR-7585</a></p></li><li><p><a·href="binary.html#replace/3"><code·class="inline">binary:replace/3,4</code></a>·now·supports·using·a·fun·for·supplying·the·replacement·binary.</p><p>Own·Id:·OTP-18742·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7590"·title="">PR-7590</a></p></li><li><p>Triple-Quoted·Strings·has·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0064">EEP·64</a>.·See·<a·href="../../../../doc/system/data_types.html#string">String</a>·in·the·Reference·Manual.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">""</span><span·class="s">" | 281 | %·····|·^</code></pre><p>Own·Id:·OTP-18648·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7383"·title="">PR-7383</a></p></li><li><p><a·href="zip.html#create/2"><code·class="inline">zip:create/2,3</code></a>·will·now·tolerate·POSIX·timestamps·in·the·provided·<code·class="inline">file_info</code>·records.</p><p>Own·Id:·OTP-18668</p></li><li><p>The·callback·function·<a·href="gen_statem.html#c:handle_event/4"><code·class="inline">gen_statem:handle_event/4</code></a>·has·been·cached·in·the·<code·class="inline">gen_statem</code>·engine·to·optimize·callback·call·speed.</p><p>Own·Id:·OTP-18671·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7419"·title="">PR-7419</a></p></li><li><p>The·type·<code·class="inline">beam_lib:beam/0</code>·is·now·exported.</p><p>Own·Id:·OTP-18716·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7534"·title="">PR-7534</a></p></li><li><p>The·documentation·for·the·<a·href="binary.html"><code·class="inline">binary</code></a>·module·has·been·improved.</p><p>Own·Id:·OTP-18741·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7585"·title="">PR-7585</a></p></li><li><p><a·href="binary.html#replace/3"><code·class="inline">binary:replace/3,4</code></a>·now·supports·using·a·fun·for·supplying·the·replacement·binary.</p><p>Own·Id:·OTP-18742·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7590"·title="">PR-7590</a></p></li><li><p>Triple-Quoted·Strings·has·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0064">EEP·64</a>.·See·<a·href="../../../../doc/system/data_types.html#string">String</a>·in·the·Reference·Manual.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">""</span><span·class="s">" |
| 282 | ···a | 282 | ···a |
| 283 | ···b | 283 | ···b |
| 284 | ···c | 284 | ···c |
| Offset 293, 30 lines modified | Offset 293, 30 lines modified | ||
| 293 | ····. | 293 | ····. |
| 294 | ····. | 294 | ····. |
| 295 | ····. | 295 | ····. |
| 296 | <0.90.0>··············erlang:apply/2························2586····75011····0 | 296 | <0.90.0>··············erlang:apply/2························2586····75011····0 |
| 297 | my_label··············c:pinfo/2·······························51 | 297 | my_label··············c:pinfo/2·······························51 |
| 298 | 4>·proc_lib:get_label(self()). | 298 | 4>·proc_lib:get_label(self()). |
| 299 | my_label</code></pre><p>Own·Id:·OTP-18789·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7720"·title="">PR-7720</a>,·<a·href="https://github.com/erlang/otp/pull/8003"·title="">PR-8003</a></p></li><li><p><code·class="inline">-callback</code>·attributes·has·been·added·to·modules·<a·href="sys.html"><code·class="inline">sys</code></a>·and·<a·href="erl_error.html"><code·class="inline">erl_error</code></a>.</p><p>Own·Id:·OTP-18793·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7703"·title="">PR-7703</a></p></li><li><p>Several·new·functions·that·accept·funs·have·been·added·to·module·<a·href="timer.html"><code·class="inline">timer</code></a>.</p><p>Functions·<a·href="timer.html#apply_after/2"><code·class="inline">apply_after/2</code></a>,·<a·href="timer.html#apply_interval/2"><code·class="inline">apply_interval/2</code></a>,·and·<code·class="inline">apply_repeatedly/2</code>·accept·a·nullary·fun·as·the·second·argument,·while··functions·<a·href="timer.html#apply_after/3"><code·class="inline">apply_after/3</code></a>,·<a·href="timer.html#apply_interval/3"><code·class="inline">apply_interval/3</code></a>,·and·<code·class="inline">apply_repeatedly/3</code>·accept·an·n-ary·fun·as·the·second·and·a·list·of·n·arguments·for·the·fun·as·the·third·argument.</p><p>Own·Id:·OTP-18808·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7649"·title="">PR-7649</a></p></li><li><p>Sigils·on·string·literals·have·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0066">EEP·66</a>,·that·is:·binary·and·string·sigils·in·verbatim·and·escape·characters·variants,·as·well·as·a·default·(vanilla)·Sigil.··All·for·ordinary·strings·and·for·triple-quoted·strings·(EEP·64).·See·<a·href="../../../../doc/system/data_types.html#sigil">Sigils·in·the·Reference·Manual</a>.</p><p>Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">~"Björn"</span><span·class="p">.</span><span·class="w"> | 299 | my_label</code></pre><p>Own·Id:·OTP-18789·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7720"·title="">PR-7720</a>,·<a·href="https://github.com/erlang/otp/pull/8003"·title="">PR-8003</a></p></li><li><p><code·class="inline">-callback</code>·attributes·has·been·added·to·modules·<a·href="sys.html"><code·class="inline">sys</code></a>·and·<a·href="erl_error.html"><code·class="inline">erl_error</code></a>.</p><p>Own·Id:·OTP-18793·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7703"·title="">PR-7703</a></p></li><li><p>Several·new·functions·that·accept·funs·have·been·added·to·module·<a·href="timer.html"><code·class="inline">timer</code></a>.</p><p>Functions·<a·href="timer.html#apply_after/2"><code·class="inline">apply_after/2</code></a>,·<a·href="timer.html#apply_interval/2"><code·class="inline">apply_interval/2</code></a>,·and·<code·class="inline">apply_repeatedly/2</code>·accept·a·nullary·fun·as·the·second·argument,·while··functions·<a·href="timer.html#apply_after/3"><code·class="inline">apply_after/3</code></a>,·<a·href="timer.html#apply_interval/3"><code·class="inline">apply_interval/3</code></a>,·and·<code·class="inline">apply_repeatedly/3</code>·accept·an·n-ary·fun·as·the·second·and·a·list·of·n·arguments·for·the·fun·as·the·third·argument.</p><p>Own·Id:·OTP-18808·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7649"·title="">PR-7649</a></p></li><li><p>Sigils·on·string·literals·have·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0066">EEP·66</a>,·that·is:·binary·and·string·sigils·in·verbatim·and·escape·characters·variants,·as·well·as·a·default·(vanilla)·Sigil.··All·for·ordinary·strings·and·for·triple-quoted·strings·(EEP·64).·See·<a·href="../../../../doc/system/data_types.html#sigil">Sigils·in·the·Reference·Manual</a>.</p><p>Examples:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">~"Björn"</span><span·class="p">.</span><span·class="w"> |
| 300 | </span><span·class="p"·data-group-id=" | 300 | </span><span·class="p"·data-group-id="6297125306-1"><<</span><span·class="s">"Björn"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="6297125306-1">>></span><span·class="gp·unselectable"> |
| 301 | 2>·</span><span·class="s">~b"Björn"</span><span·class="p">.</span><span·class="w"> | 301 | 2>·</span><span·class="s">~b"Björn"</span><span·class="p">.</span><span·class="w"> |
| 302 | </span><span·class="p"·data-group-id=" | 302 | </span><span·class="p"·data-group-id="6297125306-2"><<</span><span·class="s">"Björn"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="6297125306-2">>></span><span·class="gp·unselectable"> |
| 303 | 3>·</span><span·class="s">~S"\s*(\w+)"</span><span·class="p">.</span><span·class="w"> | 303 | 3>·</span><span·class="s">~S"\s*(\w+)"</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="s">"\\s*(\\w+)"</span><span·class="gp·unselectable"> | 304 | </span><span·class="s">"\\s*(\\w+)"</span><span·class="gp·unselectable"> |
| 305 | 4>·</span><span·class="s">~B"\s*(\w+)"</span><span·class="p">.</span><span·class="w"> | 305 | 4>·</span><span·class="s">~B"\s*(\w+)"</span><span·class="p">.</span><span·class="w"> |
| 306 | </span><span·class="p"·data-group-id=" | 306 | </span><span·class="p"·data-group-id="6297125306-3"><<</span><span·class="s">"\\s*(\\w+)"</span><span·class="p"·data-group-id="6297125306-3">>></span></code></pre><p>Own·Id:·OTP-18825·Aux·Id:·OTP-18750,·<a·href="https://github.com/erlang/otp/pull/7684"·title="">PR-7684</a></p></li><li><p>Functions·<a·href="shell.html#default_multiline_prompt/1"><code·class="inline">shell:default_multiline_prompt/1</code></a>,·<a·href="shell.html#inverted_space_prompt/1"><code·class="inline">shell:inverted_space_prompt/1</code></a>,·and· |
| 307 | <a·href="shell.html#prompt_width/1"><code·class="inline">shell:prompt_width/1</code></a>·have·been·exported·to·help·with·custom·prompt·implementations.</p><p>Own·Id:·OTP-18834·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7675"·title="">PR-7675</a>,·<a·href="https://github.com/erlang/otp/pull/7816"·title="">PR-7816</a></p></li><li><p>The·shell·now·pages·long·output·from·the·documentation·help·command·(<code·class="inline">h(Module)</code>),·auto·completions·and·the·search·command.</p><p>Own·Id:·OTP-18846·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7845"·title="">PR-7845</a></p></li><li><p>The·<code·class="inline">M-h</code>·hotkey·(Alt/Option-h)·now·outputs·help·for·the·module·or·function·directly·before·the·cursor.</p><p>Own·Id:·OTP-18847·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7846"·title="">PR-7846</a></p></li><li><p>Added·support·for·adding·a·custom·code·formatter·that·formats·your·multi-line·shell·commands·in·your·preferred·formatting·on·submission.·See·<code·class="inline">shell:format_shell_func/</code>·and·<a·href="shell.html#erl_pp_format_func/1"><code·class="inline">shell:erl_pp_format_func/1</code></a>.</p><p>Own·Id:·OTP-18848·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7847"·title="">PR-7847</a></p></li><li><p>Added·shell·functions·for·viewing,·forgetting·and·saving·locally·defined·functions,·types·and·records.</p><p>Own·Id:·OTP-18852·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7844"·title="">PR-7844</a></p></li><li><p>Added·<a·href="string.html#jaro_similarity/2"><code·class="inline">string:jaro_similarity/2</code></a>,·which·can·be·used·to·calculate·the·similarity·between·two·strings.</p><p>Own·Id:·OTP-18865·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7879"·title="">PR-7879</a></p></li><li><p>The·new·function·<a·href="ets.html#update_element/4"><code·class="inline">ets:update_element/4</code></a>·is·similar·to·<a·href="ets.html#update_element/3"><code·class="inline">ets:update_element/3</code></a>,·but·takes·a·default·tuple·as·the·fourth·argument,·which·will·be·inserted·if·no·previous·record·with·that·key·exists.</p><p>Own·Id:·OTP-18870·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7857"·title="">PR-7857</a></p></li><li><p>Added·functions·to·retrieve·the·next·higher·or·lower·key/element·from·<a·href="gb_trees.html"><code·class="inline">gb_trees</code></a>·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>,·as·well·as·returning·iterators·that·start·at·given·keys/elements.</p><p>Own·Id:·OTP-18874·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7745"·title="">PR-7745</a></p></li><li><p>When·the·shell·built-in·function·<a·href="c.html#c/1"·title=""><code·class="inline">c/1,2</code></a>·is·used·to·re-compile·a·module,·the·current·working·directory·of·the·original·compilation·is·now·added·to·the·include·path.</p><p>Own·Id:·OTP-18908·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7957"·title="">PR-7957</a></p></li><li><p>The·<code·class="inline">timer</code>·module·now·uses·a·private·table·for·its·internal·state,·slightly·improving·its·performance.</p><p>Own·Id:·OTP-18914·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7973"·title="">PR-7973</a></p></li><li><p><a·href="https://www.erlang.org/eeps/eep-0059">EEP-59·-·Documentation·Attributes</a>·has·been·implemented.</p><p>Documentation·attributes·can·be·used·to·document·functions,·types,·callbacks,·and·modules. | 307 | <a·href="shell.html#prompt_width/1"><code·class="inline">shell:prompt_width/1</code></a>·have·been·exported·to·help·with·custom·prompt·implementations.</p><p>Own·Id:·OTP-18834·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7675"·title="">PR-7675</a>,·<a·href="https://github.com/erlang/otp/pull/7816"·title="">PR-7816</a></p></li><li><p>The·shell·now·pages·long·output·from·the·documentation·help·command·(<code·class="inline">h(Module)</code>),·auto·completions·and·the·search·command.</p><p>Own·Id:·OTP-18846·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7845"·title="">PR-7845</a></p></li><li><p>The·<code·class="inline">M-h</code>·hotkey·(Alt/Option-h)·now·outputs·help·for·the·module·or·function·directly·before·the·cursor.</p><p>Own·Id:·OTP-18847·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7846"·title="">PR-7846</a></p></li><li><p>Added·support·for·adding·a·custom·code·formatter·that·formats·your·multi-line·shell·commands·in·your·preferred·formatting·on·submission.·See·<code·class="inline">shell:format_shell_func/</code>·and·<a·href="shell.html#erl_pp_format_func/1"><code·class="inline">shell:erl_pp_format_func/1</code></a>.</p><p>Own·Id:·OTP-18848·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7847"·title="">PR-7847</a></p></li><li><p>Added·shell·functions·for·viewing,·forgetting·and·saving·locally·defined·functions,·types·and·records.</p><p>Own·Id:·OTP-18852·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7844"·title="">PR-7844</a></p></li><li><p>Added·<a·href="string.html#jaro_similarity/2"><code·class="inline">string:jaro_similarity/2</code></a>,·which·can·be·used·to·calculate·the·similarity·between·two·strings.</p><p>Own·Id:·OTP-18865·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7879"·title="">PR-7879</a></p></li><li><p>The·new·function·<a·href="ets.html#update_element/4"><code·class="inline">ets:update_element/4</code></a>·is·similar·to·<a·href="ets.html#update_element/3"><code·class="inline">ets:update_element/3</code></a>,·but·takes·a·default·tuple·as·the·fourth·argument,·which·will·be·inserted·if·no·previous·record·with·that·key·exists.</p><p>Own·Id:·OTP-18870·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7857"·title="">PR-7857</a></p></li><li><p>Added·functions·to·retrieve·the·next·higher·or·lower·key/element·from·<a·href="gb_trees.html"><code·class="inline">gb_trees</code></a>·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>,·as·well·as·returning·iterators·that·start·at·given·keys/elements.</p><p>Own·Id:·OTP-18874·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7745"·title="">PR-7745</a></p></li><li><p>When·the·shell·built-in·function·<a·href="c.html#c/1"·title=""><code·class="inline">c/1,2</code></a>·is·used·to·re-compile·a·module,·the·current·working·directory·of·the·original·compilation·is·now·added·to·the·include·path.</p><p>Own·Id:·OTP-18908·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7957"·title="">PR-7957</a></p></li><li><p>The·<code·class="inline">timer</code>·module·now·uses·a·private·table·for·its·internal·state,·slightly·improving·its·performance.</p><p>Own·Id:·OTP-18914·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7973"·title="">PR-7973</a></p></li><li><p><a·href="https://www.erlang.org/eeps/eep-0059">EEP-59·-·Documentation·Attributes</a>·has·been·implemented.</p><p>Documentation·attributes·can·be·used·to·document·functions,·types,·callbacks,·and·modules. |
| 308 | The·keyword·<code·class="inline">-moduledoc·"Documentation·here".</code>·is·used·to·document·modules,·while·<code·class="inline">-doc·"Documentation·here".</code>·can·be·used·on·top·of·functions,·types,·and·callbacks·to·document·them,·respectively.</p><ul><li><p>Types,·callbacks,·and·function·documentation·can·be·set·to·<code·class="inline">hidden</code>·either·via·<code·class="inline">-doc·false</code>·or·<code·class="inline">-doc·hidden</code>.·When·documentation·attributes·mark·a·type·as·hidden,·they·will·not·be·part·of·the·documentation.</p></li><li><p>The·documentation·from·<code·class="inline">moduledoc</code>·and·<code·class="inline">doc</code>·gets·added·by·default·to·the·binary·beam·file,·following·the·format·of·<a·href="https://www.erlang.org/eeps/eep-0048">EEP-48</a>.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_doc</code>·will·raise·a·warning·when | 308 | The·keyword·<code·class="inline">-moduledoc·"Documentation·here".</code>·is·used·to·document·modules,·while·<code·class="inline">-doc·"Documentation·here".</code>·can·be·used·on·top·of·functions,·types,·and·callbacks·to·document·them,·respectively.</p><ul><li><p>Types,·callbacks,·and·function·documentation·can·be·set·to·<code·class="inline">hidden</code>·either·via·<code·class="inline">-doc·false</code>·or·<code·class="inline">-doc·hidden</code>.·When·documentation·attributes·mark·a·type·as·hidden,·they·will·not·be·part·of·the·documentation.</p></li><li><p>The·documentation·from·<code·class="inline">moduledoc</code>·and·<code·class="inline">doc</code>·gets·added·by·default·to·the·binary·beam·file,·following·the·format·of·<a·href="https://www.erlang.org/eeps/eep-0048">EEP-48</a>.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_doc</code>·will·raise·a·warning·when |
| 309 | <code·class="inline">-doc</code>·attributes·are·missing·in·exported·functions,·types,·and·callbacks.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_spec_documented</code>·will·raise·a·warning·when | 309 | <code·class="inline">-doc</code>·attributes·are·missing·in·exported·functions,·types,·and·callbacks.</p></li><li><p>Using·the·compiler·flag·<code·class="inline">warn_missing_spec_documented</code>·will·raise·a·warning·when |
| 310 | spec·attributes·are·missing·in·documented·functions,·types,·and·callbacks.</p></li><li><p><code·class="inline">moduledoc</code>s·and·<code·class="inline">doc</code>s·may·refer·to·external·files·to·be·embedded,·such·as·<code·class="inline">-doc·{file,·"README.md"}.</code>,·which·refers·to·the·file·<code·class="inline">README.md</code>·found·in·the·current·working·directory.</p></li><li><p>The·compiler·warns·about·exported·functions·whose·specs·refer·to·hidden·types.·Thus,·there·will·be·warnings·when·a·hidden·type·(meaning,·the·type·is·not·part·of·the·documentation)·gets·used·in·an·exported·function.</p></li></ul><p>Own·Id:·OTP-18916·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7936"·title="">PR-7936</a></p></li><li><p>New·<a·href="ets.html"><code·class="inline">ets</code></a>·functions·<a·href="ets.html#first_lookup/1"><code·class="inline">ets:first_lookup/1</code></a>,·<a·href="ets.html#next_lookup/2"><code·class="inline">ets:next_lookup/2</code></a>,·<a·href="ets.html#prev_lookup/2"><code·class="inline">ets:prev_lookup/2</code></a>·and·<a·href="ets.html#last_lookup/1"><code·class="inline">ets:last_lookup/1</code></a>.·Example:·<code·class="inline">ets:next_lookup/1</code>·is·equivalent·to·<a·href="ets.html#next/2"><code·class="inline">ets:next/2</code></a>·followed·by·<a·href="ets.html#lookup/2"><code·class="inline">ets:lookup/2</code></a>·with·the·next·key.·The·new·combined·functions·are·more·efficient·and·with·guaranteed·atomicity.</p><p>Own·Id:·OTP-18923·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6791"·title="">PR-6791</a></p></li><li><p>The·<code·class="inline">maybe</code>·expression·is·now·enabled·by·default.</p><p>To·use·<code·class="inline">maybe</code>·as·an·atom,·it·needs·to·be·single-quoted.·Alternatively,·the·<code·class="inline">maybe</code>·expression·can·be·disabled·by·disabling·the·<code·class="inline">maybe_expr</code>·feature.·That·can·be·done·by·placing·the·following·the·line·at·the·beginning·of·an·Erlang·source·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">feature</span><span·class="p"·data-group-id=" | 310 | spec·attributes·are·missing·in·documented·functions,·types,·and·callbacks.</p></li><li><p><code·class="inline">moduledoc</code>s·and·<code·class="inline">doc</code>s·may·refer·to·external·files·to·be·embedded,·such·as·<code·class="inline">-doc·{file,·"README.md"}.</code>,·which·refers·to·the·file·<code·class="inline">README.md</code>·found·in·the·current·working·directory.</p></li><li><p>The·compiler·warns·about·exported·functions·whose·specs·refer·to·hidden·types.·Thus,·there·will·be·warnings·when·a·hidden·type·(meaning,·the·type·is·not·part·of·the·documentation)·gets·used·in·an·exported·function.</p></li></ul><p>Own·Id:·OTP-18916·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7936"·title="">PR-7936</a></p></li><li><p>New·<a·href="ets.html"><code·class="inline">ets</code></a>·functions·<a·href="ets.html#first_lookup/1"><code·class="inline">ets:first_lookup/1</code></a>,·<a·href="ets.html#next_lookup/2"><code·class="inline">ets:next_lookup/2</code></a>,·<a·href="ets.html#prev_lookup/2"><code·class="inline">ets:prev_lookup/2</code></a>·and·<a·href="ets.html#last_lookup/1"><code·class="inline">ets:last_lookup/1</code></a>.·Example:·<code·class="inline">ets:next_lookup/1</code>·is·equivalent·to·<a·href="ets.html#next/2"><code·class="inline">ets:next/2</code></a>·followed·by·<a·href="ets.html#lookup/2"><code·class="inline">ets:lookup/2</code></a>·with·the·next·key.·The·new·combined·functions·are·more·efficient·and·with·guaranteed·atomicity.</p><p>Own·Id:·OTP-18923·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6791"·title="">PR-6791</a></p></li><li><p>The·<code·class="inline">maybe</code>·expression·is·now·enabled·by·default.</p><p>To·use·<code·class="inline">maybe</code>·as·an·atom,·it·needs·to·be·single-quoted.·Alternatively,·the·<code·class="inline">maybe</code>·expression·can·be·disabled·by·disabling·the·<code·class="inline">maybe_expr</code>·feature.·That·can·be·done·by·placing·the·following·the·line·at·the·beginning·of·an·Erlang·source·file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">feature</span><span·class="p"·data-group-id="1144786512-1">(</span><span·class="ss">maybe_expr</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">disable</span><span·class="p"·data-group-id="1144786512-1">)</span><span·class="p">.</span></code></pre><p>Another·way·to·disable·the·<[·...·truncated·by·diffoscope;·len:·687,·SHA:·c3b5cca45dc1b0d13ba8270932f1cec0c80eb81f023a18225ede3cb6736367a6·...·]3-1">)</span><span·class="p">.</span><span·class="w"> |
| 311 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 311 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4204101753-2">(</span><span·class="p"·data-group-id="4204101753-3">[</span><span·class="ss">f</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4204101753-3">]</span><span·class="p"·data-group-id="4204101753-2">)</span><span·class="p">.</span><span·class="w"> |
| 312 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 312 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4204101753-4">(</span><span·class="ss">r</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4204101753-5">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·108,·SHA:·e05c8245a1b5fdb8d12049aa635e42a16f5da43c5789802ca7f2835f37a2da12·...·]3-4">)</span><span·class="p">.</span><span·class="w"> |
| 313 | </span><span·class="nf">f</span><span·class="p"·data-group-id=" | 313 | </span><span·class="nf">f</span><span·class="p"·data-group-id="4204101753-6">(</span><span·class="p"·data-group-id="4204101753-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 314 | ····</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id=" | 314 | ····</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="4204101753-7">{</span><span·class="ss">a</span><span·class="o">=</span><span·class="mi">1</span><span·class="p"·data-group-id="4204101753-7">}</span><span·class="o">#</span><span·class="ss">r</span><span·class="p"·data-group-id="4204101753-8">{</span><span[·...·truncated·by·diffoscope;·len:·109,·SHA:·a07216c6232d6c85281fdbd6fc2ed1128ba148b5a2b0280d8c6df3dbc2ba14ba·...·]3-8">}</span><span·class="p">.</span></code></pre><p>The·compiler·raises·the·following·warning:</p><pre><code·class="text">1>·c(t). |
| 315 | t.erl:6:12:·Warning:·expression·updates·a·literal | 315 | t.erl:6:12:·Warning:·expression·updates·a·literal |
| 316 | %····6|·····#r{a=1}#r{b=2}. | 316 | %····6|·····#r{a=1}#r{b=2}. |
| 317 | %·····|············^</code></pre><p>Own·Id:·OTP-18951·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8069"·title="">PR-8069</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Optimized·<code·class="inline">ets:foldl</code>·and·<code·class="inline">ets:foldr</code>·to·use·new·<code·class="inline">ets:next_lookup</code>.·Also·made·them·immune·against·table·renaming.</p><p>Own·Id:·OTP-18993·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8048"·title="">PR-8048</a></p></li><li><p>Windows·now·supports·all·functions·in·<a·href="math.html"><code·class="inline">math</code></a>.</p><p>Own·Id:·OTP-19001·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8164"·title="">PR-8164</a></p></li><li><p><a·href="erl_lint.html"><code·class="inline">erl_lint</code></a>·(and·by·extension·the·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compiler</code></a>)·will·now·warn·for·code·using·deprecated·callbacks.</p><p>The·only·callback·currenly·deprecated·is·<code·class="inline">format_status/2</code>·in·<a·href="gen_server.html#c:format_status/2"><code·class="inline">gen_server</code></a>,·<a·href="gen_event.html#c:format_status/2"><code·class="inline">gen_event</code></a>·and·<a·href="gen_server.html#c:format_status/2"><code·class="inline">gen_statem</code></a>.</p><p>You·can·use·<code·class="inline">nowarn_deprecated_callback</code>·to·silence·the·warning.</p><p>Own·Id:·OTP-19010·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8205"·title="">PR-8205</a></p></li><li><p>There·is·a·new·module·<a·href="json.html"><code·class="inline">json</code></a>·for·encoding·and·decoding·<a·href="https://en.wikipedia.org/wiki/JSON">JSON</a>.</p><p>Both·encoding·and·decoding·can·be·customized.·Decoding·can·be·done·in·a·SAX-like·fashion·and·handle·multiple·documents·and·streams·of·data.</p><p>Own·Id:·OTP-19020·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8111"·title="">PR-8111</a></p></li></ul><h2·id="stdlib-5-2-3-3"·class="section-heading"> | 317 | %·····|············^</code></pre><p>Own·Id:·OTP-18951·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8069"·title="">PR-8069</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Optimized·<code·class="inline">ets:foldl</code>·and·<code·class="inline">ets:foldr</code>·to·use·new·<code·class="inline">ets:next_lookup</code>.·Also·made·them·immune·against·table·renaming.</p><p>Own·Id:·OTP-18993·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8048"·title="">PR-8048</a></p></li><li><p>Windows·now·supports·all·functions·in·<a·href="math.html"><code·class="inline">math</code></a>.</p><p>Own·Id:·OTP-19001·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8164"·title="">PR-8164</a></p></li><li><p><a·href="erl_lint.html"><code·class="inline">erl_lint</code></a>·(and·by·extension·the·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html"><code·class="inline">compiler</code></a>)·will·now·warn·for·code·using·deprecated·callbacks.</p><p>The·only·callback·currenly·deprecated·is·<code·class="inline">format_status/2</code>·in·<a·href="gen_server.html#c:format_status/2"><code·class="inline">gen_server</code></a>,·<a·href="gen_event.html#c:format_status/2"><code·class="inline">gen_event</code></a>·and·<a·href="gen_server.html#c:format_status/2"><code·class="inline">gen_statem</code></a>.</p><p>You·can·use·<code·class="inline">nowarn_deprecated_callback</code>·to·silence·the·warning.</p><p>Own·Id:·OTP-19010·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8205"·title="">PR-8205</a></p></li><li><p>There·is·a·new·module·<a·href="json.html"><code·class="inline">json</code></a>·for·encoding·and·decoding·<a·href="https://en.wikipedia.org/wiki/JSON">JSON</a>.</p><p>Both·encoding·and·decoding·can·be·customized.·Decoding·can·be·done·in·a·SAX-like·fashion·and·handle·multiple·documents·and·streams·of·data.</p><p>Own·Id:·OTP-19020·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8111"·title="">PR-8111</a></p></li></ul><h2·id="stdlib-5-2-3-3"·class="section-heading"> |
| 318 | ··<a·href="#stdlib-5-2-3-3"·class="hover-link"> | 318 | ··<a·href="#stdlib-5-2-3-3"·class="hover-link"> |
| 319 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 319 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 320 | ··</a> | 320 | ··</a> |
| 321 | ··<span·class="text">STDLIB·5.2.3.3</span> | 321 | ··<span·class="text">STDLIB·5.2.3.3</span> |
| Offset 4647, 15 lines modified | Offset 4647, 15 lines modified | ||
| 4647 | ······<p·class="built-using"> | 4647 | ······<p·class="built-using"> |
| 4648 | ········Built·using | 4648 | ········Built·using |
| 4649 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 4649 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 4650 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 4650 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 4651 | ······</p> | 4651 | ······</p> |
| 4652 | <p>Copyright·©·1996-202 | 4652 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 4653 | ····</footer> | 4653 | ····</footer> |
| 4654 | ··</div> | 4654 | ··</div> |
| 4655 | </main> | 4655 | </main> |
| 4656 | </div> | 4656 | </div> |
| 4657 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 4657 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 4658 | ··<script> | 4658 | ··<script> |
| 4659 | ··let·initialized·=·false; | 4659 | ··let·initialized·=·false; |
| Offset 138, 21 lines modified | Offset 138, 21 lines modified | ||
| 138 | ··<a·href="#module-notes"·class="hover-link"> | 138 | ··<a·href="#module-notes"·class="hover-link"> |
| 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 140 | ··</a> | 140 | ··</a> |
| 141 | ··<span·class="text">Notes</span> | 141 | ··<span·class="text">Notes</span> |
| 142 | </h2> | 142 | </h2> |
| 143 | <p><a·href=""·id="notes"></a></p><p>Functions·<a·href="#append/3"><code·class="inline">append/3</code></a>·and·<a·href="#append_list/3"><code·class="inline">append_list/3</code></a>·are | 143 | <p><a·href=""·id="notes"></a></p><p>Functions·<a·href="#append/3"><code·class="inline">append/3</code></a>·and·<a·href="#append_list/3"><code·class="inline">append_list/3</code></a>·are |
| 144 | included·so·that·keyed·values·can·be·stored·in·a·list·<em>accumulator</em>,·for | 144 | included·so·that·keyed·values·can·be·stored·in·a·list·<em>accumulator</em>,·for |
| 145 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">D0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 145 | example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">D0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="8052014488-1">(</span><span·class="p"·data-group-id="8052014488-1">)</span><span·class="p">,</span><span·class="w"> |
| 146 | ··</span><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">store</span><span·class="p"·data-group-id=" | 146 | ··</span><span·class="n">D1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">store</span><span·class="p"·data-group-id="8052014488-2">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8052014488-3">[</span><span·class="p"·data-group-id="8052014488-3">]</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·63,·SHA:·5987669f4fd41b5ee3214cbe698b8b7ec461972062730335d094381fd165fd0c·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 147 | ··</span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 147 | ··</span><span·class="n">D2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="8052014488-4">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D1</span><span·class="p"·data-group-id="8052014488-4">)</span><span·class="p">,</span><span·class="w"> |
| 148 | ··</span><span·class="n">D3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 148 | ··</span><span·class="n">D3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="8052014488-5">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D2</span><span·class="p"·data-group-id="8052014488-5">)</span><span·class="p">,</span><span·class="w"> |
| 149 | ··</span><span·class="n">D4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 149 | ··</span><span·class="n">D4</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="8052014488-6">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">f3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D3</span><span·class="p"·data-group-id="8052014488-6">)</span><span·class="p">,</span><span·class="w"> |
| 150 | ··</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id=" | 150 | ··</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="8052014488-7">(</span><span·class="ss">files</span><span·class="p">,</span><span·class="w">·</span><span·class="n">D4</span><span·class="p"·data-group-id="8052014488-7">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="p"·data-group-id=" | 151 | </span><span·class="p"·data-group-id="8052014488-8">[</span><span·class="ss">f1</span><span·class="p">,</span><span·class="ss">f2</span><span·class="p">,</span><span·class="ss">f3</span><span·class="p"·data-group-id="8052014488-8">]</span></code></pre><p>This·saves·the·trouble·of·first·fetching·a·keyed·value,·appending·a·new·value·to |
| 152 | the·list·of·stored·values,·and·storing·the·result.</p><p>Function·<a·href="#fetch/2"><code·class="inline">fetch/2</code></a>·is·to·be·used·if·the·key·is·known·to·be·in·the | 152 | the·list·of·stored·values,·and·storing·the·result.</p><p>Function·<a·href="#fetch/2"><code·class="inline">fetch/2</code></a>·is·to·be·used·if·the·key·is·known·to·be·in·the |
| 153 | dictionary,·otherwise·function·<a·href="#find/2"><code·class="inline">find/2</code></a>.</p><h2·id="module-see-also"·class="section-heading"> | 153 | dictionary,·otherwise·function·<a·href="#find/2"><code·class="inline">find/2</code></a>.</p><h2·id="module-see-also"·class="section-heading"> |
| 154 | ··<a·href="#module-see-also"·class="hover-link"> | 154 | ··<a·href="#module-see-also"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">See·Also</span> | 157 | ··<span·class="text">See·Also</span> |
| 158 | </h2> | 158 | </h2> |
| Offset 527, 24 lines modified | Offset 527, 24 lines modified | ||
| 527 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(Key,·Value,·Orddict1)·->·Orddict2 | 527 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append(Key,·Value,·Orddict1)·->·Orddict2 |
| 528 | ················when·Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value),·Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> | 528 | ················when·Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value),·Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> |
| 529 | ······</div> | 529 | ······</div> |
| 530 | <p>Appends·a·new·<code·class="inline">Value</code>·to·the·current·list·of·values·associated·with·<code·class="inline">Key</code>.·An | 530 | <p>Appends·a·new·<code·class="inline">Value</code>·to·the·current·list·of·values·associated·with·<code·class="inline">Key</code>.·An |
| 531 | exception·is·generated·if·the·initial·value·associated·with·<code·class="inline">Key</code>·is·not·a·list | 531 | exception·is·generated·if·the·initial·value·associated·with·<code·class="inline">Key</code>·is·not·a·list |
| 532 | of·values.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="6014281522-1">(</span><span·class="p"·data-group-id="6014281522-2">[</span><span·class="p"·data-group-id="6014281522-3">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6014281522-4">[</span><span·class="p"·data-group-id="6014281522-4">]</span><span·class="p"·data-group-id="6014281522-3">}</span><span·class="p"·data-group-id="6014281522-2">]</span><span·class="p"·data-group-id="6014281522-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 533 | 532 | of·values.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·671,·SHA:·15a60122e0a88f47f7dca889a330f0e7c43a9193870251474ab60cdc69314e66·...·]"> | |
| 533 | </span><span·class="p"·data-group-id="6348929841-5">[</span><span·class="p"·data-group-id="6348929841-6">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="6348929841-7">[</span><span·class="p"·data-group-id="6348929841-7">]</span><span·class="p"·data-group-id="6348929841-6">}</span><span·class="p"·data-group-id="6348929841-5">]</span><span·class="gp·unselectable"> | ||
| 534 | 2>·</span><span·class="n">OrdDict2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6 | 534 | 2>·</span><span·class="n">OrdDict2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6348929841-8">(</span><span·class="ss">x</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="6348929841-8">)</span><span·class="p">.</span><span·class="w"> |
| 535 | </span><span·class="p"·data-group-id="6 | 535 | </span><span·class="p"·data-group-id="6348929841-9">[</span><span·class="p"·data-group-id="6348929841-10">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="6348929841-11">[</span><span·class="mi">1</span><span·class="p"·data-group-id="6348929841-11">]</span[·...·truncated·by·diffoscope;·len:·96,·SHA:·168c048fc965993f2c6558ea44a12ed31fcd7f2171476243939e2872be95b6cd·...·]-9">]</span><span·class="gp·unselectable"> |
| 536 | 3>·</span><span·class="n">OrdDict3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6 | 536 | 3>·</span><span·class="n">OrdDict3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6348929841-12">(</span><span·class="ss">x</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict2</span><span·class="p"·data-group-id="6348929841-12">)</span><span·class="p">.</span><span·class="w"> |
| 537 | </span><span·class="p"·data-group-id="6 | 537 | </span><span·class="p"·data-group-id="6348929841-13">[</span><span·class="p"·data-group-id="6348929841-14">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="6348929841-15">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><sp[·...·truncated·by·diffoscope;·len:·146,·SHA:·7208a89a0fb6de759e3a89919580b92514c5b44a11a89abfc768d3bad068c611·...·]-13">]</span><span·class="gp·unselectable"> |
| 538 | 4>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6 | 538 | 4>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="6348929841-16">(</span><span·class="ss">y</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict3</span><span·class="p"·data-group-id="6348929841-16">)</span><span·class="p">.</span><span·class="w"> |
| 539 | </span><span·class="p"·data-group-id="6014281522-17">[</span><span·class="p"·data-group-id="6014281522-18">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="6014281522-19">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6014281522-19">]</span><span·class="p"·data-group-id="6014281522-18">}</span><span·class="p">,</span><span·class="p"·data-group-id="6014281522-20">{</span><span·class="ss">y</span><span·class="p">,</span><span·class="p"·data-group-id="6014281522-21">[</span><span·class="mi">3</span><span·class="p"·data-group-id="6014281522-21">]</span><span·class="p"·data-group-id="6014281522-20">}</span><span·class="p"·data-group-id="6014281522-17">]</span></code></pre><p><em>Example·2:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="3000923859-1">(</span><span·class="p"·data-group-id="3000923859-2">[</span><span·class="p"·data-group-id="3000923859-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">no_list</span><span·class="p"·data-group-id="3000923859-3">}</span><span·class="p"·data-group-id="3000923859-2">]</span><span·class="p"·data-group-id="3000923859-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 540 | </span><span·class="p"·data-group-id=" | 539 | </span><span·class="p"·data-group-id="6348929841-17">[</span><span·class="p"·data-group-id="6348929841-18">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="6348929841-19">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><s[·...·truncated·by·diffoscope;·len:·1255,·SHA:·30c6c1b6a9498775108f80be4b02aba85ad9db04a322093aa4c88fe8828882d6·...·]"> |
| 540 | </span><span·class="p"·data-group-id="5596829604-4">[</span><span·class="p"·data-group-id="5596829604-5">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">no_list</span><span·class="p"·data-group-id="5596829604-5">}</span><span·class="p"·data-group-id="5596829604-4">]</span><span·class="gp·unselectable"> | ||
| 541 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id=" | 541 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append</span><span·class="p"·data-group-id="5596829604-6">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="5596829604-6">)</span><span·class="p">.</span><span·class="w"> |
| 542 | </span><span·class="gt">**·exception·error:·bad·argument | 542 | </span><span·class="gt">**·exception·error:·bad·argument |
| 543 | ·····in·operator··++/2 | 543 | ·····in·operator··++/2 |
| 544 | ········called·as·no_list·++·[1]</span></code></pre> | 544 | ········called·as·no_list·++·[1]</span></code></pre> |
| 545 | ··</section> | 545 | ··</section> |
| 546 | </section> | 546 | </section> |
| 547 | <section·class="detail"·id="append_list/3"> | 547 | <section·class="detail"·id="append_list/3"> |
| Offset 571, 20 lines modified | Offset 571, 20 lines modified | ||
| 571 | ·························Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value), | 571 | ·························Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value), |
| 572 | ·························Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> | 572 | ·························Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> |
| 573 | ······</div> | 573 | ······</div> |
| 574 | <p>Appends·a·list·of·values·<code·class="inline">ValList</code>·to·the·current·list·of·values·associated·with | 574 | <p>Appends·a·list·of·values·<code·class="inline">ValList</code>·to·the·current·list·of·values·associated·with |
| 575 | <code·class="inline">Key</code>.·An·exception·is·generated·if·the·initial·value·associated·with·<code·class="inline">Key</code>·is | 575 | <code·class="inline">Key</code>.·An·exception·is·generated·if·the·initial·value·associated·with·<code·class="inline">Key</code>·is |
| 576 | not·a·list·of·values.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 576 | not·a·list·of·values.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="0146667734-1">(</span><span·class="p"·data-group-id="0146667734-2">[</span><span·class="p"·data-group-id="0146667734-3">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0146667734-4">[</span><s[·...·truncated·by·diffoscope;·len:·198,·SHA:·60e177cdde4eacf9205ea44101d116a8613e065c0f2acf6d9b5d278cc35a3d3c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 577 | </span><span·class="p"·data-group-id=" | 577 | </span><span·class="p"·data-group-id="0146667734-5">[</span><span·class="p"·data-group-id="0146667734-6">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="0146667734-7">[</span><span·class="p"·data-group-id="0146667734-7">]</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·68,·SHA:·8ba8a7ebffd144de7df8e030f0ccdbd8eb67350774bf37c8ed1dcbb5cce617a0·...·]-5">]</span><span·class="gp·unselectable"> |
| 578 | 2>·</span><span·class="n">OrdDict2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append_list</span><span·class="p"·data-group-id=" | 578 | 2>·</span><span·class="n">OrdDict2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append_list</span><span·class="p"·data-group-id="0146667734-8">(</span><span·class="ss">x</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0146667734-9">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="014[·...·truncated·by·diffoscope;·len:·139,·SHA:·09018534b768434fa77978aee6047f12d75311a50b3b8d9a37999086878b6925·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 579 | </span><span·class="p"·data-group-id=" | 579 | </span><span·class="p"·data-group-id="0146667734-10">[</span><span·class="p"·data-group-id="0146667734-11">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="0146667734-12">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><s[·...·truncated·by·diffoscope;·len:·147,·SHA:·0a6f12a5833fb5958d7d1e09b54e6a063f193a3c3bc7daf359b9ee004730eb94·...·]-10">]</span><span·class="gp·unselectable"> |
| 580 | 3>·</span><span·class="n">OrdDict3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append_list</span><span·class="p"·data-group-id=" | 580 | 3>·</span><span·class="n">OrdDict3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">append_list</span><span·class="p"·data-group-id="0146667734-13">(</span><span·class="ss">y</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0146667734-14">[</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="0[·...·truncated·by·diffoscope;·len:·142,·SHA:·e70ed636659bb3d9fe6a5a7c019e3fd85983a550a14447965723d31df0dee6a1·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 581 | </span><span·class="p"·data-group-id=" | 581 | </span><span·class="p"·data-group-id="0146667734-15">[</span><span·class="p"·data-group-id="0146667734-16">{</span><span·class="ss">x</span><span·class="p">,</span><span·class="p"·data-group-id="0146667734-17">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><s[·...·truncated·by·diffoscope;·len:·510,·SHA:·a4f872e1513e7abc0d12737ecc88ac009d4137d21a61e53200a370050828ec2f·...·]-15">]</span></code></pre> |
| 582 | ··</section> | 582 | ··</section> |
| 583 | </section> | 583 | </section> |
| 584 | <section·class="detail"·id="erase/2"> | 584 | <section·class="detail"·id="erase/2"> |
| 585 | ··<div·class="detail-header"> | 585 | ··<div·class="detail-header"> |
| 586 | ····<a·href="#erase/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 586 | ····<a·href="#erase/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 587 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 587 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 603, 18 lines modified | Offset 603, 18 lines modified | ||
| 603 | ······<div·class="specs"> | 603 | ······<div·class="specs"> |
| 604 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·erase(Key,·Orddict1)·->·Orddict2 | 604 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·erase(Key,·Orddict1)·->·Orddict2 |
| 605 | ···············when·Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value),·Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> | 605 | ···············when·Orddict1·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value),·Orddict2·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> |
| 606 | ······</div> | 606 | ······</div> |
| 607 | <p>Erases·all·items·with·a·specified·key·from·a·dictionary.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 607 | <p>Erases·all·items·with·a·specified·key·from·a·dictionary.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="6815168865-1">(</span><span·class="p"·data-group-id="6815168865-2">[</span><span·class="p"·data-group-id="6815168865-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·369,·SHA:·8ccdcaecb1e0e39768131a11f1557cf3928ac4ac45605335db63aaa663e75d70·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 608 | </span><span·class="p"·data-group-id=" | 608 | </span><span·class="p"·data-group-id="6815168865-5">[</span><span·class="p"·data-group-id="6815168865-6">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="6815168865-6">}</span><span·class="p">,</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·191,·SHA:·a3924434700e9b5a0b274f03e8086f6cd63c02c8b3de06f2fd8ea40dea10e97d·...·]-5">]</span><span·class="gp·unselectable"> |
| 609 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">erase</span><span·class="p"·data-group-id=" | 609 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">erase</span><span·class="p"·data-group-id="6815168865-8">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="6815168865-8">)</span><span·class="p">.</span><span·class="w"> |
| 610 | </span><span·class="p"·data-group-id=" | 610 | </span><span·class="p"·data-group-id="6815168865-9">[</span><span·class="p"·data-group-id="6815168865-10">{</span><span·class="ss">b</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6815168865-10">}</span><span·class="p"·data-group-id="6815168865-9">]</span></code></pre> |
| 611 | ··</section> | 611 | ··</section> |
| 612 | </section> | 612 | </section> |
| 613 | <section·class="detail"·id="fetch/2"> | 613 | <section·class="detail"·id="fetch/2"> |
| 614 | ··<div·class="detail-header"> | 614 | ··<div·class="detail-header"> |
| 615 | ····<a·href="#fetch/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 615 | ····<a·href="#fetch/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 616 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 616 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 634, 19 lines modified | Offset 634, 19 lines modified | ||
| 634 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·fetch(Key,·Orddict)·->·Value·when·Orddict·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> | 634 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·fetch(Key,·Orddict)·->·Value·when·Orddict·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value).</pre> |
| 635 | ······</div> | 635 | ······</div> |
| 636 | <p>Returns·the·value·associated·with·<code·class="inline">Key</code>·in·dictionary·<code·class="inline">Orddict</code>.·This·function | 636 | <p>Returns·the·value·associated·with·<code·class="inline">Key</code>·in·dictionary·<code·class="inline">Orddict</code>.·This·function |
| 637 | assumes·that·the·<code·class="inline">Key</code>·is·present·in·the·dictionary.·An·exception·is·generated | 637 | assumes·that·the·<code·class="inline">Key</code>·is·present·in·the·dictionary.·An·exception·is·generated |
| 638 | if·<code·class="inline">Key</code>·is·not·in·the·dictionary.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="1 | 638 | if·<code·class="inline">Key</code>·is·not·in·the·dictionary.</p><p>See·also·section·<a·href="orddict.html#module-notes">Notes</a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="0122423065-1">(</span><span·class="p"·data-group-id="0122423065-2">[</span><span·class="p"·data-group-id="0122423065-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·369,·SHA:·f2856d0420741294103747c791d6179269efb2e968348869cfcd702545d6a398·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 639 | </span><span·class="p"·data-group-id="1 | 639 | </span><span·class="p"·data-group-id="0122423065-5">[</span><span·class="p"·data-group-id="0122423065-6">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0122423065-6">}</span><span·class="p">,</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·191,·SHA:·50245687f521ab1e573c28f79d3da7e282423a8c3b466b9d3d2b22991a7e214d·...·]-5">]</span><span·class="gp·unselectable"> |
| 640 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="1 | 640 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="0122423065-8">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="0122423065-8">)</span><span·class="p">.</span><span·class="w"> |
| 641 | </span><span·class="mi">1</span><span·class="gp·unselectable"> | 641 | </span><span·class="mi">1</span><span·class="gp·unselectable"> |
| 642 | 3>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="1 | 642 | 3>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch</span><span·class="p"·data-group-id="0122423065-9">(</span><span·class="ss">missing</span><span·class="p">,</span><span·class="w">·</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="0122423065-9">)</span><span·class="p">.</span><span·class="w"> |
| 643 | </span><span·class="gt">**·exception·error:·no·function·clause·matching·orddict:fetch(missing,[])</span></code></pre> | 643 | </span><span·class="gt">**·exception·error:·no·function·clause·matching·orddict:fetch(missing,[])</span></code></pre> |
| 644 | ··</section> | 644 | ··</section> |
| 645 | </section> | 645 | </section> |
| 646 | <section·class="detail"·id="fetch_keys/1"> | 646 | <section·class="detail"·id="fetch_keys/1"> |
| 647 | ··<div·class="detail-header"> | 647 | ··<div·class="detail-header"> |
| 648 | ····<a·href="#fetch_keys/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 648 | ····<a·href="#fetch_keys/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 665, 18 lines modified | Offset 665, 18 lines modified | ||
| 665 | ······<div·class="specs"> | 665 | ······<div·class="specs"> |
| 666 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·fetch_keys(Orddict)·->·Keys·when·Orddict·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()),·Keys·::·[Key].</pre> | 666 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·fetch_keys(Orddict)·->·Keys·when·Orddict·::·<a·href="#t:orddict/2">orddict</a>(Key,·Value·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()),·Keys·::·[Key].</pre> |
| 667 | ······</div> | 667 | ······</div> |
| 668 | <p>Returns·a·list·of·all·keys·in·a·dictionary.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 668 | <p>Returns·a·list·of·all·keys·in·a·dictionary.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">OrdDict1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="0192334760-1">(</span><span·class="p"·data-group-id="0192334760-2">[</span><span·class="p"·data-group-id="0192334760-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·369,·SHA:·ae055083ec5395d35283fdcb49e5aac37901cf64496c8fc2ed2eef42e21bef35·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 669 | </span><span·class="p"·data-group-id=" | 669 | </span><span·class="p"·data-group-id="0192334760-5">[</span><span·class="p"·data-group-id="0192334760-6">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0192334760-6">}</span><span·class="p">,</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·191,·SHA:·a4b6c7ea6d833238b38b31eef1efe79fd6354d0dc485488a741590c7600e5ffe·...·]-5">]</span><span·class="gp·unselectable"> |
| 670 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch_keys</span><span·class="p"·data-group-id=" | 670 | 2>·</span><span·class="nc">orddict</span><span·class="p">:</span><span·class="nf">fetch_keys</span><span·class="p"·data-group-id="0192334760-8">(</span><span·class="n">OrdDict1</span><span·class="p"·data-group-id="0192334760-8">)</span><span·class="p">.</span><span·class="w"> |
| 671 | </span><span·class="p"·data-group-id=" | 671 | </span><span·class="p"·data-group-id="0192334760-9">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="p"·data-group-id="0192334760-9">]</span></code></pre> |
| 672 | ··</section> | 672 | ··</section> |
| 673 | </section> | 673 | </section> |
| 674 | <section·class="detail"·id="filter/2"> | 674 | <section·class="detail"·id="filter/2"> |
| 675 | ··<div·class="detail-header"> | 675 | ··<div·class="detail-header"> |
| 676 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 676 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 677 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 677 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Max diff block lines reached; 82511/126991 bytes (64.97%) of diff not shown. | |||
| Offset 1044, 15 lines modified | Offset 1044, 15 lines modified | ||
| 1044 | ······<p·class="built-using"> | 1044 | ······<p·class="built-using"> |
| 1045 | ········Built·using | 1045 | ········Built·using |
| 1046 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1046 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1047 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1047 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1048 | ······</p> | 1048 | ······</p> |
| 1049 | <p>Copyright·©·1996-202 | 1049 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1050 | ····</footer> | 1050 | ····</footer> |
| 1051 | ··</div> | 1051 | ··</div> |
| 1052 | </main> | 1052 | </main> |
| 1053 | </div> | 1053 | </div> |
| 1054 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1054 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1055 | ··<script> | 1055 | ··<script> |
| 1056 | ··let·initialized·=·false; | 1056 | ··let·initialized·=·false; |
| Offset 157, 135 lines modified | Offset 157, 135 lines modified | ||
| 157 | employs·a·number·of·techniques·to·speed·up·testing·and·reliably·shut·down·peer | 157 | employs·a·number·of·techniques·to·speed·up·testing·and·reliably·shut·down·peer |
| 158 | nodes:</p><ul><li>peers·start·linked·to·test·runner·process.·If·the·test·case·fails,·the·peer | 158 | nodes:</p><ul><li>peers·start·linked·to·test·runner·process.·If·the·test·case·fails,·the·peer |
| 159 | node·is·stopped·automatically,·leaving·no·rogue·nodes·running·in·the | 159 | node·is·stopped·automatically,·leaving·no·rogue·nodes·running·in·the |
| 160 | background</li><li>arguments·used·to·start·the·peer·are·saved·in·the·control·process·state·for | 160 | background</li><li>arguments·used·to·start·the·peer·are·saved·in·the·control·process·state·for |
| 161 | manual·analysis.·If·the·test·case·fails,·the·CRASH·REPORT·contains·these | 161 | manual·analysis.·If·the·test·case·fails,·the·CRASH·REPORT·contains·these |
| 162 | arguments</li><li>multiple·test·cases·can·run·concurrently·speeding·up·overall·testing·process, | 162 | arguments</li><li>multiple·test·cases·can·run·concurrently·speeding·up·overall·testing·process, |
| 163 | peer·node·names·are·unique·even·when·there·are·multiple·instances·of·the·same | 163 | peer·node·names·are·unique·even·when·there·are·multiple·instances·of·the·same |
| 164 | test·suite·running·in·parallel</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 164 | test·suite·running·in·parallel</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="3443683562-1">(</span><span·class="ss">my_SUITE</span><span·class="p"·data-group-id="3443683562-1">)</span><span·class="p">.</span><span·class="w"> |
| 165 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id=" | 165 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="3443683562-2">(</span><span·class="ss">ct_suite</span><span·class="p"·data-group-id="3443683562-2">)</span><span·class="p">.</span><span·class="w"> |
| 166 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 166 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3443683562-3">(</span><span·class="p"·data-group-id="3443683562-4">[</span><span·class="ss">all</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">groups</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·116,·SHA:·f54409d6dc86887ab38de5d4b6fc834676b67eb40e940129f9ed823974a3927d·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 167 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="3443683562-5">(</span><span·class="p"·data-group-id="3443683562-6">[</span><span·class="ss">basic</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">args</span><span·class="p">/</span><sp[·...·truncated·by·diffoscope;·len:·506,·SHA:·195329d7754709ac1d2e570f83167498d35e627ec3b74a0ef2d179b624a7497b·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 168 | </span><span·class="w"> | 168 | </span><span·class="w"> |
| 169 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 169 | </span><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="3443683562-7">(</span><span·class="s">"common_test/include/ct.hrl"</span><span·class="p"·data-group-id="3443683562-7">)</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="nf">groups</span><span·class="p"·data-group-id=" | 170 | </span><span·class="nf">groups</span><span·class="p"·data-group-id="3443683562-8">(</span><span·class="p"·data-group-id="3443683562-8">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 171 | ····</span><span·class="p"·data-group-id=" | 171 | ····</span><span·class="p"·data-group-id="3443683562-9">[</span><span·class="p"·data-group-id="3443683562-10">{</span><span·class="ss">quick</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3443683562-11">[</span><span·class="ss">parallel</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·c603c3a5705cee28ed6dee88d50bfdeffdc05f769f780107ae05ea5d88cb266e·...·]-11">]</span><span·class="p">,</span><span·class="w"> |
| 172 | ········</span><span·class="p"·data-group-id=" | 172 | ········</span><span·class="p"·data-group-id="3443683562-12">[</span><span·class="ss">basic</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">args</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">named</span><span·class="p">,</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·264,·SHA:·b0fc3b02c8b9f38ca5353644d67c7d0ae8263b8532da9f28141002787d4cfe7b·...·]-9">]</span><span·class="p">.</span><span·class="w"> |
| 173 | </span><span·class="nf">all</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nf">all</span><span·class="p"·data-group-id="3443683562-13">(</span><span·class="p"·data-group-id="3443683562-13">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 174 | ····</span><span·class="p"·data-group-id=" | 174 | ····</span><span·class="p"·data-group-id="3443683562-14">[</span><span·class="p"·data-group-id="3443683562-15">{</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">quick</span><span·class="p"·data-group-id="3443683562-15">}</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·749cec6891ea39c4821fd34a0693e843a1b429dc72149c4f7b1e63a1490e5634·...·]-14">]</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">basic</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nf">basic</span><span·class="p"·data-group-id="3443683562-16">(</span><span·class="n">Config</span><span·class="p"·data-group-id="3443683562-16">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_list</span><span·class="p"·data-group-id="3443683562-17[·...·truncated·by·diffoscope;·len:·80,·SHA:·c64e3b691f77b7305afcc871e897400c1e4c5331e3a8e8f62349f24ef174f283·...·]-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ····</span><span·class="p"·data-group-id=" | 176 | ····</span><span·class="p"·data-group-id="3443683562-18">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Node</span><span·class="p"·data-group-id="34[·...·truncated·by·diffoscope;·len:·242,·SHA:·be9c11e7d985531818e75945baa405975a1e0a9a270e2c9f61ff9f775126dac8·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 177 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 177 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3443683562-20">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="3443683562-20">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="nf">args</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nf">args</span><span·class="p"·data-group-id="3443683562-21">(</span><span·class="n">Config</span><span·class="p"·data-group-id="3443683562-21">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_list</span><span·class="p"·data-group-id="3443683562-22[·...·truncated·by·diffoscope;·len:·80,·SHA:·c64e3b691f77b7305afcc871e897400c1e4c5331e3a8e8f62349f24ef174f283·...·]-22">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="c1">%%·specify·additional·arguments·to·the·new·node</span><span·class="w"> | 179 | ····</span><span·class="c1">%%·specify·additional·arguments·to·the·new·node</span><span·class="w"> |
| 180 | ····</span><span·class="p"·data-group-id=" | 180 | ····</span><span·class="p"·data-group-id="3443683562-23">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Node</span><span·class="p"·data-group-id="34[·...·truncated·by·diffoscope;·len:·482,·SHA:·2a007778fefb02057400b30d491cbd32dbb940d1c2b4ca7397e5e378765c2797·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 181 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 181 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3443683562-26">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="3443683562-26">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="nf">named</span><span·class="p"·data-group-id=" | 182 | </span><span·class="nf">named</span><span·class="p"·data-group-id="3443683562-27">(</span><span·class="n">Config</span><span·class="p"·data-group-id="3443683562-27">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_list</span><span·class="p"·data-group-id="3443683562-28[·...·truncated·by·diffoscope;·len:·80,·SHA:·c64e3b691f77b7305afcc871e897400c1e4c5331e3a8e8f62349f24ef174f283·...·]-28">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ····</span><span·class="c1">%%·pass·test·case·name·down·to·function·starting·nodes</span><span·class="w"> | 183 | ····</span><span·class="c1">%%·pass·test·case·name·down·to·function·starting·nodes</span><span·class="w"> |
| 184 | ····</span><span·class="n">Peer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_node_impl</span><span·class="p"·data-group-id=" | 184 | ····</span><span·class="n">Peer</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">start_node_impl</span><span·class="p"·data-group-id="3443683562-29">(</span><span·class="ss">named_test</span><span·class="p"·data-group-id="3443683562-29">)</span><span·class="p">,</span><span·class="w"> |
| 185 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 185 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3443683562-30">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="3443683562-30">)</span><span·class="p">.</span><span·class="w"> |
| 186 | </span><span·class="nf">start_node_impl</span><span·class="p"·data-group-id=" | 186 | </span><span·class="nf">start_node_impl</span><span·class="p"·data-group-id="3443683562-31">(</span><span·class="n">ActualTestCase</span><span·class="p"·data-group-id="3443683562-31">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 187 | ····</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="p"·data-group-id="3443683562-32">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="3443683562-32">}</span><sp[·...·truncated·by·diffoscope;·len:·635,·SHA:·1d578b28f96a69b8813a09c094d5966aabff37a2c76f527579797495803df894·...·]-33">)</span><span·class="p">,</span><span·class="w"> |
| 188 | ····</span><span·class="c1">%%·extra·setup·needed·for·multiple·test·cases</span><span·class="w"> | 188 | ····</span><span·class="c1">%%·extra·setup·needed·for·multiple·test·cases</span><span·class="w"> |
| 189 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 189 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="3443683562-36">(</span><span·class="n">Node</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">application</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">set_env</span><span·class="p">,</span><span·class="w">·</s[·...·truncated·by·diffoscope;·len:·335,·SHA:·d52aa28340121b0ae8d06e7923916634dbb6530ff3ef031ddd447840cd5e6e3d·...·]-36">)</span><span·class="p">,</span><span·class="w"> |
| 190 | ····</span><span·class="n">Peer</span><span·class="p">.</span><span·class="w"> | 190 | ····</span><span·class="n">Peer</span><span·class="p">.</span><span·class="w"> |
| 191 | </span><span·class="nf">restart_node</span><span·class="p"·data-group-id=" | 191 | </span><span·class="nf">restart_node</span><span·class="p"·data-group-id="3443683562-38">(</span><span·class="n">Config</span><span·class="p"·data-group-id="3443683562-38">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_list</span><span·class="p"·data-group-id="3443683562-39[·...·truncated·by·diffoscope;·len:·80,·SHA:·c64e3b691f77b7305afcc871e897400c1e4c5331e3a8e8f62349f24ef174f283·...·]-39">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 192 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">CT_PEER_NAME</span><span·class="p"·data-group-id=" | 192 | ····</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">CT_PEER_NAME</span><span·class="p"·data-group-id="3443683562-40">(</span><span·class="p"·data-group-id="3443683562-40">)</span><span·class="p">,</span><span·class="w"> |
| 193 | ····</span><span·class="p"·data-group-id=" | 193 | ····</span><span·class="p"·data-group-id="3443683562-41">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="3443683562-41">}</span><sp[·...·truncated·by·diffoscope;·len:·458,·SHA:·5615dce84f6e0ced35bcbe75423fe8a9798eb52e0c2ed0b6ae307f9ea172f90b·...·]-42">)</span><span·class="p">,</span><span·class="w"> |
| 194 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 194 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3443683562-44">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="3443683562-44">)</span><span·class="p">,</span><span·class="w"> |
| 195 | ····</span><span·class="c1">%%·restart·the·node·with·the·same·name·as·before</span><span·class="w"> | 195 | ····</span><span·class="c1">%%·restart·the·node·with·the·same·name·as·before</span><span·class="w"> |
| 196 | ····</span><span·class="p"·data-group-id=" | 196 | ····</span><span·class="p"·data-group-id="3443683562-45">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="3443683562-45">}</span><s[·...·truncated·by·diffoscope;·len:·758,·SHA:·5eb4eb6e409010f7446a5c01d7d6f6072bd0a6b7f5ba36297543208ba112837c·...·]-46">)</span><span·class="p">,</span><span·class="w"> |
| 197 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 197 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3443683562-49">(</span><span·class="n">Peer2</span><span·class="p"·data-group-id="3443683562-49">)</span><span·class="p">.</span></code></pre><p>The·next·example·demonstrates·how·to·start·multiple·nodes·concurrently:</p><pre><code·class="makeup·erlang"·tra[·...·truncated·by·diffoscope;·len:·410,·SHA:·09dfd35f2e71c62d4ee43178eac20f6721b1e57855873bba2bf295ca86300738·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 198 | ····</span><span·class="n">Peers</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 198 | ····</span><span·class="n">Peers</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3553685708-3">[</span><span·class="o">?</span><span·class="n">CT_PEER</span><span·class="p"·data-group-id="3553685708-4">(</span><span·class="p"·data-group-id="3553685708-5">#{</span><span·class="ss">wait_boot</span><span·class="w">·</span><span·class="p">[·...·truncated·by·diffoscope;·len:·445,·SHA:·27b3bb3606e61b036c8ada9113e0d9cbb9a945b1a3d63b73e0d776a98121710b·...·]-4">)</span><span·class="w"> |
| 199 | ········</span><span·class="p">||</span><span·class="w">·</span><span·class="p">_</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 199 | ········</span><span·class="p">||</span><span·class="w">·</span><span·class="p">_</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="3553685708-8">(</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">4</span><span·class="p"·data-group-id="3553685708-8">)</span><span·class="p"·data-group-id="3553685708-3">]</span><span·class="p">,</span><span·class="w"> |
| 200 | ····</span><span·class="c1">%%·wait·for·all·nodes·to·complete·boot·process,·get·their·names:</span><span·class="w"> | 200 | ····</span><span·class="c1">%%·wait·for·all·nodes·to·complete·boot·process,·get·their·names:</span><span·class="w"> |
| 201 | ····</span><span·class="p">_</span><span·class="n">Nodes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 201 | ····</span><span·class="p">_</span><span·class="n">Nodes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3553685708-9">[</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id="3553685708-10">{</span><span·class="ss">tag</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3553685708-11">{</sp[·...·truncated·by·diffoscope;·len:·279,·SHA:·26f3736f6a85c2757ceeee71a853a124ff2f3d6331c0f0c5f760ef5465abe7c3·...·]-10">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Node</span><span·class="w">·</span><span·class="k">end</span><span·class="w"> |
| 202 | ········</span><span·class="p">||</span><span·class="w">·</span><span·class="p"·data-group-id=" | 202 | ········</span><span·class="p">||</span><span·class="w">·</span><span·class="p"·data-group-id="3553685708-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p"·data-group-id="3553685708-12">}</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·67,·SHA:·03efb6579d66f688196289030461789923be7f415274dd87cd20a487b345709b·...·]-9">]</span><span·class="p">,</span><span·class="w"> |
| 203 | ····</span><span·class="p"·data-group-id=" | 203 | ····</span><span·class="p"·data-group-id="3553685708-13">[</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="3553685708-14">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="3553685708-14">)</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·409,·SHA:·fc32ad8b9f375edc113b4ba0c4da367045a8e651cc9e468e414d92096fa4a074·...·]-13">]</span><span·class="p">.</span></code></pre><p>Start·a·peer·on·a·different·host.·Requires·<code·class="inline">ssh</code>·key-based·authentication·set |
| 204 | up,·allowing·"another_host"·connection·without·password·prompt.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Ssh</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">find_executable</span><span·class="p"·data-group-id="9 | 204 | up,·allowing·"another_host"·connection·without·password·prompt.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Ssh</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">find_executable</span><span·class="p"·data-group-id="9990394983-1">(</span><span·class="s">"ssh"</span><span·class="p"·data-group-id="9990394983-1">)</span><span·class="p">,</span><span·class="w"> |
| 205 | </span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="9 | 205 | </span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="9990394983-2">(</span><span·class="p"·data-group-id="9990394983-3">#{</span><span·class="ss">exec</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="9990394983-4">{</span><span·class="n">Ssh</spa[·...·truncated·by·diffoscope;·len:·330,·SHA:·bc7f890f18c2368a5209c0d684d1fbae3a65a470f040058cf41107c55a999b2e·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 206 | ····</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p"·data-group-id="9 | 206 | ····</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p"·data-group-id="9990394983-3">}</span><span·class="p"·data-group-id="9990394983-2">)</span><span·class="p">,</span></code></pre><p>The·following·Common·Test·case·demonstrates·Docker·integration,·starting·two |
| 207 | containers·with·hostnames·"one"·and·"two".·In·this·example·Erlang·nodes·running | 207 | containers·with·hostnames·"one"·and·"two".·In·this·example·Erlang·nodes·running |
| 208 | inside·containers·form·an·Erlang·cluster.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">docker</span><span·class="p"·data-group-id="4193 | 208 | inside·containers·form·an·Erlang·cluster.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">docker</span><span·class="p"·data-group-id="0841193452-1">(</span><span·class="n">Config</span><span·class="p"·data-group-id="0841193452-1">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">is_list</span><span·class="p"·data-group-id="0841193452-2">([·...·truncated·by·diffoscope;·len:·77,·SHA:·1e734ccd7590da3c73b80014f8c6da228d66bba787e3d89d6b89446ac7e5cb91·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ····</span><span·class="n">Docker</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">find_executable</span><span·class="p"·data-group-id="4193 | 209 | ····</span><span·class="n">Docker</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">os</span><span·class="p">:</span><span·class="nf">find_executable</span><span·class="p"·data-group-id="0841193452-3">(</span><span·class="s">"docker"</span><span·class="p"·data-group-id="0841193452-3">)</span><span·class="p">,</span><span·class="w"> |
| 210 | ····</span><span·class="n">PrivDir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="4193 | 210 | ····</span><span·class="n">PrivDir</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">proplists</span><span·class="p">:</span><span·class="nf">get_value</span><span·class="p"·data-group-id="0841193452-4">(</span><span·class="ss">priv_dir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Config</span><span·class="p"·data-group-id="0841193452-4">)</span><span·class="p">,</span><span·class="w"> |
| 211 | ····</span><span·class="nf">build_release</span><span·class="p"·data-group-id="4193 | 211 | ····</span><span·class="nf">build_release</span><span·class="p"·data-group-id="0841193452-5">(</span><span·class="n">PrivDir</span><span·class="p"·data-group-id="0841193452-5">)</span><span·class="p">,</span><span·class="w"> |
| 212 | ····</span><span·class="nf">build_image</span><span·class="p"·data-group-id="4193 | 212 | ····</span><span·class="nf">build_image</span><span·class="p"·data-group-id="0841193452-6">(</span><span·class="n">PrivDir</span><span·class="p"·data-group-id="0841193452-6">)</span><span·class="p">,</span><span·class="w"> |
| 213 | ····</span><span·class="c1">%%·start·two·Docker·containers</span><span·class="w"> | 213 | ····</span><span·class="c1">%%·start·two·Docker·containers</span><span·class="w"> |
| 214 | ····</span><span·class="p"·data-group-id="4193 | 214 | ····</span><span·class="p"·data-group-id="0841193452-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node</span><span·class="p"·data-group-id="0841193452-7">}</span><span[·...·truncated·by·diffoscope;·len:·247,·SHA:·737949ebc1a1a743f49b343600d9b03cf464bcc9ede3338b514edd1f154bd56c·...·]-9">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">lambda</span><span·class="p">,</span><span·class="w"> |
| 215 | ········</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p">,</span><span·class="w"> | 215 | ········</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p">,</span><span·class="w"> |
| 216 | ········</span><span·class="ss">exec</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4193 | 216 | ········</span><span·class="ss">exec</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-10">{</span><span·class="n">Docker</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-11">[</span><span·class="s">"run"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">[·...·truncated·by·diffoscope;·len:·483,·SHA:·ef86e711385ef7a18a7e02d9e136ede5810562f7f4c5bde58d76d58e56f4bd66·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 217 | ····</span><span·class="p"·data-group-id="4193 | 217 | ····</span><span·class="p"·data-group-id="0841193452-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Peer2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Node2</span><span·class="p"·data-group-id="0841193452-12">}</span><[·...·truncated·by·diffoscope;·len:·252,·SHA:·3385bc6665f66b9923c60f2f55785993e1d30ec3a2f2c38091687b9cf26d8b59·...·]-14">#{</span><span·class="ss">name</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">lambda</span><span·class="p">,</span><span·class="w"> |
| 218 | ········</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p">,</span><span·class="w"> | 218 | ········</span><span·class="ss">connection</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">standard_io</span><span·class="p">,</span><span·class="w"> |
| 219 | ········</span><span·class="ss">exec</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4193 | 219 | ········</span><span·class="ss">exec</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-15">{</span><span·class="n">Docker</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-16">[</span><span·class="s">"run"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">[·...·truncated·by·diffoscope;·len:·484,·SHA:·c4a4cc080175a55d97018f858739b077d0f1e2a4b0527eda0148d72566f0b3bc·...·]-13">)</span><span·class="p">,</span><span·class="w"> |
| 220 | ····</span><span·class="c1">%%·find·IP·address·of·the·second·node·using·alternative·connection·RPC</span><span·class="w"> | 220 | ····</span><span·class="c1">%%·find·IP·address·of·the·second·node·using·alternative·connection·RPC</span><span·class="w"> |
| 221 | ····</span><span·class="p"·data-group-id="4193 | 221 | ····</span><span·class="p"·data-group-id="0841193452-17">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ips</span><span·class="p"·data-group-id="0841193452-17">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·510,·SHA:·cb51db3c864a33d4c52a67ab61de567f2fe4df22169c64b07366f0db982137ae·...·]-18">)</span><span·class="p">,</span><span·class="w"> |
| 222 | ····</span><span·class="p"·data-group-id="4193 | 222 | ····</span><span·class="p"·data-group-id="0841193452-20">{</span><span·class="s">"eth0"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Eth0</span><span·class="p"·data-group-id="0841193452-20">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·[·...·truncated·by·diffoscope;·len:·372,·SHA:·eff6d39d1901c6b05be96fe177ec4c16e356d2ef02b4e3c76874f52424412a2e·...·]-21">)</span><span·class="p">,</span><span·class="w"> |
| 223 | ····</span><span·class="p"·data-group-id="4193 | 223 | ····</span><span·class="p"·data-group-id="0841193452-22">{</span><span·class="ss">addr</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ip</span><span·class="p"·data-group-id="0841193452-22">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·349,·SHA:·f55103c2f2813bdd103b981d2524dae1395c104f176a3bd5dc0ffc87e4acbec0·...·]-23">)</span><span·class="p">,</span><span·class="w"> |
| 224 | ····</span><span·class="c1">%%·make·first·node·to·discover·second·one</span><span·class="w"> | 224 | ····</span><span·class="c1">%%·make·first·node·to·discover·second·one</span><span·class="w"> |
| 225 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="4193 | 225 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0841193452-24">(</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">inet_db</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">set_lookup</span><span·class="p">,</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·288,·SHA:·e06e9b77e6254c6680d8172c348c5129359441ed52fb454cb946bd2f83ddbb9c·...·]-24">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="4193 | 226 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0841193452-27">(</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">inet_db</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">add_host</span><span·class="p">,</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·369,·SHA:·4f319fcea3930c70a3e06984083d75e333392a28b443877c4a6eb34fb8aad63a·...·]-27">)</span><span·class="p">,</span><span·class="w"> |
| 227 | ····</span><span·class="c1">%%·join·a·cluster</span><span·class="w"> | 227 | ····</span><span·class="c1">%%·join·a·cluster</span><span·class="w"> |
| 228 | ····</span><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="4193 | 228 | ····</span><span·class="ss">true</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0841193452-30">(</span><span·class="n">Peer</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">net_kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">connect_node</span><span·class="p">,</span><span·class="w">[·...·truncated·by·diffoscope;·len:·185,·SHA:·1f3c0eb0b440b7b833a0e7dd0aa9fa1c4151701aaae0e66292b46a30a1610e62·...·]-30">)</span><span·class="p">,</span><span·class="w"> |
| 229 | ····</span><span·class="c1">%%·verify·that·second·peer·node·has·only·the·first·node·visible</span><span·class="w"> | 229 | ····</span><span·class="c1">%%·verify·that·second·peer·node·has·only·the·first·node·visible</span><span·class="w"> |
| 230 | ····</span><span·class="p"·data-group-id="4193 | 230 | ····</span><span·class="p"·data-group-id="0841193452-32">[</span><span·class="n">Node</span><span·class="p"·data-group-id="0841193452-32">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">call</span>[·...·truncated·by·diffoscope;·len:·434,·SHA:·0fdb6f54b6400f61c26e886e64fbcbd2f099a82f87018cfdbb11d1295285a913·...·]-33">)</span><span·class="p">,</span><span·class="w"> |
| 231 | ····</span><span·class="c1">%%·stop·peers,·causing·containers·to·also·stop</span><span·class="w"> | 231 | ····</span><span·class="c1">%%·stop·peers,·causing·containers·to·also·stop</span><span·class="w"> |
| 232 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4193 | 232 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="0841193452-35">(</span><span·class="n">Peer2</span><span·class="p"·data-group-id="0841193452-35">)</span><span·class="p">,</span><span·class="w"> |
| 233 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4193 | 233 | ····</span><span·class="nc">peer</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="0841193452-36">(</span><span·class="n">Peer</span><span·class="p"·data-group-id="0841193452-36">)</span><span·class="p">.</span><span·class="w"> |
| 234 | </span><span·class="nf">build_release</span><span·class="p"·data-group-id="4193 | 234 | </span><span·class="nf">build_release</span><span·class="p"·data-group-id="0841193452-37">(</span><span·class="n">Dir</span><span·class="p"·data-group-id="0841193452-37">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 235 | ····</span><span·class="c1">%%·load·sasl.app·file,·otherwise·application:get_key·will·fail</span><span·class="w"> | 235 | ····</span><span·class="c1">%%·load·sasl.app·file,·otherwise·application:get_key·will·fail</span><span·class="w"> |
| 236 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">load</span><span·class="p"·data-group-id="4193 | 236 | ····</span><span·class="nc">application</span><span·class="p">:</span><span·class="nf">load</span><span·class="p"·data-group-id="0841193452-38">(</span><span·class="ss">sasl</span><span·class="p"·data-group-id="0841193452-38">)</span><span·class="p">,</span><span·class="w"> |
| 237 | ····</span><span·class="c1">%%·create·*.rel·-·release·file</span><span·class="w"> | 237 | ····</span><span·class="c1">%%·create·*.rel·-·release·file</span><span·class="w"> |
| 238 | ····</span><span·class="n">RelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="4193 | 238 | ····</span><span·class="n">RelFile</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="0841193452-39">(</span><span·class="n">Dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"lambda.rel"</span><span·class="p"·data-group-id="0841193452-39">)</span><span·class="p">,</span><span·class="w"> |
| 239 | ····</span><span·class="n">Release</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4193 | 239 | ····</span><span·class="n">Release</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-40">{</span><span·class="ss">release</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-41">{</span><span·class="s">"lambda"</span><span·class="p">,</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·70,·SHA:·b8e9ea20040bd4c26144b8c6f00f01d8fcbc029583a5fbf7e485b0345fa60fa6·...·]-41">}</span><span·class="p">,</span><span·class="w"> |
| 240 | ········</span><span·class="p"·data-group-id="4193 | 240 | ········</span><span·class="p"·data-group-id="0841193452-42">{</span><span·class="ss">erts</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="0841193452-43">(</span><span·class="s[·...·truncated·by·diffoscope;·len:·112,·SHA:·2464216b6b33b97d71b83c4ff93e5fa0672376e373397c39249a2b2830de055a·...·]-42">}</span><span·class="p">,</span><span·class="w"> |
| 241 | ········</span><span·class="p"·data-group-id="4193 | 241 | ········</span><span·class="p"·data-group-id="0841193452-44">[</span><span·class="p"·data-group-id="0841193452-45">{</span><span·class="n">App</span><span·class="p">,</span><span·class="w">·</span><span·class="k">begin</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-46">{</span[·...·truncated·by·diffoscope;·len:·691,·SHA:·44708533267abf16440292ed4b7767d262f84672c50e81080716d93db55bb926·...·]-45">}</span><span·class="w"> |
| 242 | ············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">App</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="4193 | 242 | ············</span><span·class="p">||</span><span·class="w">·</span><span·class="n">App</span><span·class="w">·</span><span·class="o"><-</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-48">[</span><span·class="ss">kernel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stdlib</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">sasl</span><span·class="p"·data-group-id="0841193452-48">]</[·...·truncated·by·diffoscope;·len:·100,·SHA:·f2b5c03067e77df9f516dd49598b5319a8c1ee037109337fa632833b4b36a491·...·]-40">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="4193 | 243 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="0841193452-49">(</span><span·class="n">RelFile</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">list_to_binary</span><span·class="p"·data-group-id="0841193452-50">(</span><span·class="nc">lists</span><span·class="p">:</span><span·clas[·...·truncated·by·diffoscope;·len:·62,·SHA:·46a381e6e4ab4975813dbbae1661fd68564f3c7c46c750db356bb44356dd86d7·...·]-51">(</span><span·class="w"> |
| 244 | ········</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4193 | 244 | ········</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="0841193452-52">(</span><span·class="s">"~tp."</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-53">[</span><span·class="n">Release</span><span·class="p"·data-group-id="0841193452-53">]</span><span·cl[·...·truncated·by·diffoscope;·len:·195,·SHA:·e1911552aace623f76505213943e903b0870cc8055036741ee23d6833c9987ed·...·]-49">)</span><span·class="p">,</span><span·class="w"> |
| 245 | ····</span><span·class="n">RelFileNoExt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="4193 | 245 | ····</span><span·class="n">RelFileNoExt</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="0841193452-54">(</span><span·class="n">Dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"lambda"</span><span·class="p"·data-group-id="0841193452-54">)</span><span·class="p">,</span><span·class="w"> |
| 246 | ····</span><span·class="c1">%%·create·boot·script</span><span·class="w"> | 246 | ····</span><span·class="c1">%%·create·boot·script</span><span·class="w"> |
| 247 | ····</span><span·class="p"·data-group-id="4193 | 247 | ····</span><span·class="p"·data-group-id="0841193452-55">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">systools_make</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-56">[</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·292,·SHA:·dc676e71692563f5eafa218481756f34a84529eb6e81bac6d1113b8e60863161·...·]-57">(</span><span·class="n">RelFileNoExt</span><span·class="p">,</span><span·class="w"> |
| 248 | ········</span><span·class="p"·data-group-id="4193 | 248 | ········</span><span·class="p"·data-group-id="0841193452-58">[</span><span·class="ss">silent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-59">{</span><span·class="ss">outdir</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dir</sp[·...·truncated·by·diffoscope;·len:·152,·SHA:·0282948bc47664af6ff8ef6a527034b841ab5ddec1e5d4370707cf5f285b5e8a·...·]-57">)</span><span·class="p">,</span><span·class="w"> |
| 249 | ····</span><span·class="c1">%%·package·release·into·*.tar.gz</span><span·class="w"> | 249 | ····</span><span·class="c1">%%·package·release·into·*.tar.gz</span><span·class="w"> |
| 250 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_tar</span><span·class="p"·data-group-id="4193 | 250 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">systools</span><span·class="p">:</span><span·class="nf">make_tar</span><span·class="p"·data-group-id="0841193452-60">(</span><span·class="n">RelFileNoExt</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0841193452-61">[</span><span·class="p"·data-group-id="0841193452-62">{</span><span·class="ss">erts</span><span·class="p[·...·truncated·by·diffoscope;·len:·375,·SHA:·8dd36c5049a5f015062b750cae22d9aacbb414106ce29f97869be7534dfc6f49·...·]-60">)</span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="nf">build_image</span><span·class="p"·data-group-id="4193 | 251 | </span><span·class="nf">build_image</span><span·class="p"·data-group-id="0841193452-64">(</span><span·class="n">Dir</span><span·class="p"·data-group-id="0841193452-64">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 252 | ····</span><span·class="c1">%%·Create·Dockerfile·example,·working·only·for·Ubuntu·20.04</span><span·class="w"> | 252 | ····</span><span·class="c1">%%·Create·Dockerfile·example,·working·only·for·Ubuntu·20.04</span><span·class="w"> |
| 253 | ····</span><span·class="c1">%%·Expose·port·4445,·and·make·Erlang·distribution·to·listen</span><span·class="w"> | 253 | ····</span><span·class="c1">%%·Expose·port·4445,·and·make·Erlang·distribution·to·listen</span><span·class="w"> |
| 254 | ····</span><span·class="c1">%%··on·this·port,·and·connect·to·it·without·EPMD</span><span·class="w"> | 254 | ····</span><span·class="c1">%%··on·this·port,·and·connect·to·it·without·EPMD</span><span·class="w"> |
| 255 | ····</span><span·class="c1">%%·Set·cookie·on·both·nodes·to·be·the·same.</span><span·class="w"> | 255 | ····</span><span·class="c1">%%·Set·cookie·on·both·nodes·to·be·the·same.</span><span·class="w"> |
| 256 | ····</span><span·class="n">BuildScript</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="4193 | 256 | ····</span><span·class="n">BuildScript</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">filename</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="0841193452-65">(</span><span·class="n">Dir</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Dockerfile"</span><span·class="p"·data-group-id="0841193452-65">)</span><span·class="p">,</span><span·class="w"> |
| 257 | ····</span><span·class="n">Dockerfile</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 257 | ····</span><span·class="n">Dockerfile</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 258 | ······</span><span·class="s">"FROM·ubuntu:20.04·as·runner\n"</span><span·class="w"> | 258 | ······</span><span·class="s">"FROM·ubuntu:20.04·as·runner\n"</span><span·class="w"> |
| 259 | ······</span><span·class="s">"EXPOSE·4445\n"</span><span·class="w"> | 259 | ······</span><span·class="s">"EXPOSE·4445\n"</span><span·class="w"> |
| 260 | ······</span><span·class="s">"WORKDIR·/opt/lambda\n"</span><span·class="w"> | 260 | ······</span><span·class="s">"WORKDIR·/opt/lambda\n"</span><span·class="w"> |
| 261 | ······</span><span·class="s">"COPY·lambda.tar.gz·/tmp\n"</span><span·class="w"> | 261 | ······</span><span·class="s">"COPY·lambda.tar.gz·/tmp\n"</span><span·class="w"> |
| 262 | ······</span><span·class="s">"RUN·tar·-zxvf·/tmp/lambda.tar.gz·-C·/opt/lambda\n"</span><span·class="w"> | 262 | ······</span><span·class="s">"RUN·tar·-zxvf·/tmp/lambda.tar.gz·-C·/opt/lambda\n"</span><span·class="w"> |
| 263 | ······</span><span·class="s">"ENTRYPOINT·[\"/opt/lambda/erts-"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="4193 | 263 | ······</span><span·class="s">"ENTRYPOINT·[\"/opt/lambda/erts-"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">system_info</span><span·class="p"·data-group-id="0841193452-66">(</span><span·class="ss">version</span><span·class="p"·data-group-id="0841193452-66">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w"> |
| 264 | ······</span><span·class="s">"/bin/dyn_erl\",·\"-boot\",·\"/opt/lambda/releases/1.0.0/start\","</span><span·class="w"> | 264 | ······</span><span·class="s">"/bin/dyn_erl\",·\"-boot\",·\"/opt/lambda/releases/1.0.0/start\","</span><span·class="w"> |
| 265 | ······</span><span·class="s">"·\"-kernel\",·\"inet_dist_listen_min\",·\"4445\","</span><span·class="w"> | 265 | ······</span><span·class="s">"·\"-kernel\",·\"inet_dist_listen_min\",·\"4445\","</span><span·class="w"> |
| 266 | ······</span><span·class="s">"·\"-erl_epmd_port\",·\"4445\","</span><span·class="w"> | 266 | ······</span><span·class="s">"·\"-erl_epmd_port\",·\"4445\","</span><span·class="w"> |
| 267 | ······</span><span·class="s">"·\"-setcookie\",·\"secret\"]\n"</span><span·class="p">,</span><span·class="w"> | 267 | ······</span><span·class="s">"·\"-setcookie\",·\"secret\"]\n"</span><span·class="p">,</span><span·class="w"> |
| 268 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="4193 | 268 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write_file</span><span·class="p"·data-group-id="0841193452-67">(</span><span·class="n">BuildScript</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Dockerfile</span><span·class="p"·data-group-id="0841193452-67">)</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 8586/92992 bytes (9.23%) of diff not shown. | |||
| Offset 495, 15 lines modified | Offset 495, 15 lines modified | ||
| 495 | ······<p·class="built-using"> | 495 | ······<p·class="built-using"> |
| 496 | ········Built·using | 496 | ········Built·using |
| 497 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 497 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 498 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 498 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 499 | ······</p> | 499 | ······</p> |
| 500 | <p>Copyright·©·1996-202 | 500 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 501 | ····</footer> | 501 | ····</footer> |
| 502 | ··</div> | 502 | ··</div> |
| 503 | </main> | 503 | </main> |
| 504 | </div> | 504 | </div> |
| 505 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 505 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 506 | ··<script> | 506 | ··<script> |
| 507 | ··let·initialized·=·false; | 507 | ··let·initialized·=·false; |
| Offset 969, 29 lines modified | Offset 969, 29 lines modified | ||
| 969 | the·start·function·used.</p><p>If·neither·this·function·nor·<a·href="#init_fail/3"><code·class="inline">init_fail/2,3</code></a>·is·called·by·the | 969 | the·start·function·used.</p><p>If·neither·this·function·nor·<a·href="#init_fail/3"><code·class="inline">init_fail/2,3</code></a>·is·called·by·the |
| 970 | started·process,·the·start·function·returns·an·error·tuple·when·the·started | 970 | started·process,·the·start·function·returns·an·error·tuple·when·the·started |
| 971 | process·exits,·or·when·the·start·function·time-out·(if·used)·has·passed,·see | 971 | process·exits,·or·when·the·start·function·time-out·(if·used)·has·passed,·see |
| 972 | <a·href="#start/5"><code·class="inline">start/3,4,5</code></a>.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·use·this·function·to·return·an·error·indicating·that·the·process·start | 972 | <a·href="#start/5"><code·class="inline">start/3,4,5</code></a>.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·use·this·function·to·return·an·error·indicating·that·the·process·start |
| 973 | failed.·When·doing·so·the·start·function·can·return·before·the·failing·process | 973 | failed.·When·doing·so·the·start·function·can·return·before·the·failing·process |
| 974 | has·exited,·which·may·block·VM·resources·required·for·a·new·start·attempt·to | 974 | has·exited,·which·may·block·VM·resources·required·for·a·new·start·attempt·to |
| 975 | succeed.·Use·<a·href="#init_fail/3"><code·class="inline">init_fail/2,3</code></a>·for·that·purpose.</p></section><p>The·following·example·illustrates·how·this·function·and·<a·href="#start_link/3"><code·class="inline">proc_lib:start_link/3</code></a> | 975 | succeed.·Use·<a·href="#init_fail/3"><code·class="inline">init_fail/2,3</code></a>·for·that·purpose.</p></section><p>The·following·example·illustrates·how·this·function·and·<a·href="#start_link/3"><code·class="inline">proc_lib:start_link/3</code></a> |
| 976 | are·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="77 | 976 | are·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="4779056818-1">(</span><span·class="ss">my_proc</span><span·class="p"·data-group-id="4779056818-1">)</span><span·class="p">.</span><span·class="w"> |
| 977 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7760597795-2">(</span><span·class="p"·data-group-id="7760597795-3">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="7760597795-3">]</span><span·class="p"·data-group-id="7760597795-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 978 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="77 | 977 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4779056818-2">(</span><span·class="p"·data-group-id="4779056818-3">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4779056818-3">]</span><span·class="p"·data-group-id="4779056818-2">)</span><span·class="p">.</span><span·class="w"> |
| 978 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4779056818-4">(</span><span·class="p"·data-group-id="4779056818-5">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="4779056818-5">]</span><span·class="p"·data-group-id="4779056818-4">)</span><span·class="p">.</span><span·class="w"> | ||
| 979 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="77 | 979 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="4779056818-6">(</span><span·class="p"·data-group-id="4779056818-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 980 | ····</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="77 | 980 | ····</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="4779056818-7">(</span><span·class="ss">my_proc</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4779056818-8">[</span><span·class="nf">self</spa[·...·truncated·by·diffoscope;·len:·202,·SHA:·e300069e2967374cf3d31ed6190fee478cf3abc075f3db3b9bfb4fe9d763b823·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 981 | </span><span·class="nf">init</span><span·class="p"·data-group-id="77 | 981 | </span><span·class="nf">init</span><span·class="p"·data-group-id="4779056818-10">(</span><span·class="n">Parent</span><span·class="p"·data-group-id="4779056818-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 982 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">do_initialization</span><span·class="p"·data-group-id="77 | 982 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">do_initialization</span><span·class="p"·data-group-id="4779056818-11">(</span><span·class="p"·data-group-id="4779056818-11">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 983 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 983 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 984 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_ack</span><span·class="p"·data-group-id="77 | 984 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_ack</span><span·class="p"·data-group-id="4779056818-12">(</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4779056818-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span>[·...·truncated·by·diffoscope;·len:·203,·SHA:·5e4e85938f28a65f4499f6d419e01ac03b6935a42b1e3015bca465723133e864·...·]-12">)</span><span·class="p">;</span><span·class="w"> |
| 985 | ········</span><span·class="p"·data-group-id="77 | 985 | ········</span><span·class="p"·data-group-id="4779056818-15">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="4779056818-15">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 986 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="77 | 986 | ············</span><span·class="nf">exit</span><span·class="p"·data-group-id="4779056818-16">(</span><span·class="n">Reason</span><span·class="p"·data-group-id="4779056818-16">)</span><span·class="w"> |
| 987 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 987 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 988 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="77 | 988 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="4779056818-17">(</span><span·class="p"·data-group-id="4779056818-17">)</span><span·class="p">.</span><span·class="w"> |
| 989 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> | 989 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> |
| 990 | ··</section> | 990 | ··</section> |
| 991 | </section> | 991 | </section> |
| 992 | <section·class="detail"·id="init_fail/2"> | 992 | <section·class="detail"·id="init_fail/2"> |
| 993 | ··<div·class="detail-header"> | 993 | ··<div·class="detail-header"> |
| Offset 1052, 29 lines modified | Offset 1052, 29 lines modified | ||
| 1052 | to·<code·class="inline">Exception</code>.·The·start·function·then·returns·<code·class="inline">Ret</code>.</p><p>See·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#raise/3"><code·class="inline">erlang:raise/3</code></a>·for·a·description·of·<code·class="inline">Class</code>,·<code·class="inline">Reason</code>·and·<code·class="inline">Stacktrace</code>.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·consider·catching·the·exception·from·this·function.·That·would·defeat | 1052 | to·<code·class="inline">Exception</code>.·The·start·function·then·returns·<code·class="inline">Ret</code>.</p><p>See·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#raise/3"><code·class="inline">erlang:raise/3</code></a>·for·a·description·of·<code·class="inline">Class</code>,·<code·class="inline">Reason</code>·and·<code·class="inline">Stacktrace</code>.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>Do·not·consider·catching·the·exception·from·this·function.·That·would·defeat |
| 1053 | its·purpose.·A·process·started·by·a·<a·href="#start/3"><code·class="inline">start[_link|_monitor]/3,4,5</code></a> | 1053 | its·purpose.·A·process·started·by·a·<a·href="#start/3"><code·class="inline">start[_link|_monitor]/3,4,5</code></a> |
| 1054 | function·should·end·in·a·value·(that·will·be·ignored)·or·an·exception·that | 1054 | function·should·end·in·a·value·(that·will·be·ignored)·or·an·exception·that |
| 1055 | will·be·handled·by·this·module.·See·<a·href="proc_lib.html">Description</a>.</p></section><p>If·neither·this·function·nor·<a·href="#init_ack/1"><code·class="inline">init_ack/1,2</code></a>·is·called·by·the | 1055 | will·be·handled·by·this·module.·See·<a·href="proc_lib.html">Description</a>.</p></section><p>If·neither·this·function·nor·<a·href="#init_ack/1"><code·class="inline">init_ack/1,2</code></a>·is·called·by·the |
| 1056 | started·process,·the·start·function·returns·an·error·tuple·when·the·started | 1056 | started·process,·the·start·function·returns·an·error·tuple·when·the·started |
| 1057 | process·exits,·or·when·the·start·function·time-out·(if·used)·has·passed,·see | 1057 | process·exits,·or·when·the·start·function·time-out·(if·used)·has·passed,·see |
| 1058 | <a·href="#start/3"><code·class="inline">start/3,4,5</code></a>.</p><p>The·following·example·illustrates·how·this·function·and·<a·href="#start_link/3"><code·class="inline">proc_lib:start_link/3</code></a> | 1058 | <a·href="#start/3"><code·class="inline">start/3,4,5</code></a>.</p><p>The·following·example·illustrates·how·this·function·and·<a·href="#start_link/3"><code·class="inline">proc_lib:start_link/3</code></a> |
| 1059 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6 | 1059 | can·be·used:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="6649349865-1">(</span><span·class="ss">my_proc</span><span·class="p"·data-group-id="6649349865-1">)</span><span·class="p">.</span><span·class="w"> |
| 1060 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6898389060-2">(</span><span·class="p"·data-group-id="6898389060-3">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="6898389060-3">]</span><span·class="p"·data-group-id="6898389060-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 1061 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6 | 1060 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6649349865-2">(</span><span·class="p"·data-group-id="6649349865-3">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="6649349865-3">]</span><span·class="p"·data-group-id="6649349865-2">)</span><span·class="p">.</span><span·class="w"> |
| 1061 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="6649349865-4">(</span><span·class="p"·data-group-id="6649349865-5">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="6649349865-5">]</span><span·class="p"·data-group-id="6649349865-4">)</span><span·class="p">.</span><span·class="w"> | ||
| 1062 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="6 | 1062 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="6649349865-6">(</span><span·class="p"·data-group-id="6649349865-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1063 | ····</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="6 | 1063 | ····</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="6649349865-7">(</span><span·class="ss">my_proc</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">init</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6649349865-8">[</span><span·class="nf">self</span[·...·truncated·by·diffoscope;·len:·201,·SHA:·3ddb8797fb79536fd4af94b2ab238cf6c104c78421d6344477e93ca0b45fc4b2·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 1064 | </span><span·class="nf">init</span><span·class="p"·data-group-id="6 | 1064 | </span><span·class="nf">init</span><span·class="p"·data-group-id="6649349865-10">(</span><span·class="n">Parent</span><span·class="p"·data-group-id="6649349865-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1065 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">do_initialization</span><span·class="p"·data-group-id="6 | 1065 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nf">do_initialization</span><span·class="p"·data-group-id="6649349865-11">(</span><span·class="p"·data-group-id="6649349865-11">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1066 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 1066 | ········</span><span·class="ss">ok</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1067 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_ack</span><span·class="p"·data-group-id="6 | 1067 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_ack</span><span·class="p"·data-group-id="6649349865-12">(</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6649349865-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><[·...·truncated·by·diffoscope;·len:·202,·SHA:·7169fc1e68a23fd9e98545a8a7087544cceac074ba0689496100969896324597·...·]-12">)</span><span·class="p">;</span><span·class="w"> |
| 1068 | ········</span><span·class="p"·data-group-id="6 | 1068 | ········</span><span·class="p"·data-group-id="6649349865-15">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Reason</span><span·class="p"·data-group-id="6649349865-15">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Error</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1069 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_fail</span><span·class="p"·data-group-id="6 | 1069 | ············</span><span·class="nc">proc_lib</span><span·class="p">:</span><span·class="nf">init_fail</span><span·class="p"·data-group-id="6649349865-16">(</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Error</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6649349865-17">{</span><span·class="nb">exit</span[·...·truncated·by·diffoscope;·len:·174,·SHA:·be16a23759f2e43944870fefac7b095b48e0a3fa2a9a8d6752824ba0ee476244·...·]-16">)</span><span·class="w"> |
| 1070 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 1070 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 1071 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6 | 1071 | ····</span><span·class="nf">loop</span><span·class="p"·data-group-id="6649349865-18">(</span><span·class="p"·data-group-id="6649349865-18">)</span><span·class="p">.</span><span·class="w"> |
| 1072 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> | 1072 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre> |
| 1073 | ··</section> | 1073 | ··</section> |
| 1074 | </section> | 1074 | </section> |
| 1075 | <section·class="detail"·id="initial_call/1"> | 1075 | <section·class="detail"·id="initial_call/1"> |
| 1076 | ··<div·class="detail-header"> | 1076 | ··<div·class="detail-header"> |
| Offset 1948, 15 lines modified | Offset 1948, 15 lines modified | ||
| 1948 | ······<p·class="built-using"> | 1948 | ······<p·class="built-using"> |
| 1949 | ········Built·using | 1949 | ········Built·using |
| 1950 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1950 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1951 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1951 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1952 | ······</p> | 1952 | ······</p> |
| 1953 | <p>Copyright·©·1996-202 | 1953 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1954 | ····</footer> | 1954 | ····</footer> |
| 1955 | ··</div> | 1955 | ··</div> |
| 1956 | </main> | 1956 | </main> |
| 1957 | </div> | 1957 | </div> |
| 1958 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1958 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1959 | ··<script> | 1959 | ··<script> |
| 1960 | ··let·initialized·=·false; | 1960 | ··let·initialized·=·false; |
| Offset 522, 15 lines modified | Offset 522, 15 lines modified | ||
| 522 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append_values(Key,·ListIn)·->·ListOut·when·Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·ListIn·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·ListOut·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> | 522 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·append_values(Key,·ListIn)·->·ListOut·when·Key·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>(),·ListIn·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·ListOut·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> |
| 523 | ······</div> | 523 | ······</div> |
| 524 | <p>Similar·to·<a·href="#get_all_values/2"><code·class="inline">get_all_values/2</code></a>,·but·each·value·is·wrapped·in·a·list·unless·it·is | 524 | <p>Similar·to·<a·href="#get_all_values/2"><code·class="inline">get_all_values/2</code></a>,·but·each·value·is·wrapped·in·a·list·unless·it·is |
| 525 | already·itself·a·list.·The·resulting·list·of·lists·is·concatenated.·This·is | 525 | already·itself·a·list.·The·resulting·list·of·lists·is·concatenated.·This·is |
| 526 | often·useful·for·"incremental"·options.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append_values</span><span·class="p"·data-group-id=" | 526 | often·useful·for·"incremental"·options.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">append_values</span><span·class="p"·data-group-id="9901199389-1">(</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9901199389-2">[</span><span·class="p"·data-group-id="9901199389-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·1837,·SHA:·a47b0651bce9fdf0c221b8a875b7a316bb5930ca6def9a03a4dbb651e41526d3·...·]-1">]</span></code></pre> |
| 527 | ··</section> | 527 | ··</section> |
| 528 | </section> | 528 | </section> |
| 529 | <section·class="detail"·id="compact/1"> | 529 | <section·class="detail"·id="compact/1"> |
| 530 | ··<div·class="detail-header"> | 530 | ··<div·class="detail-header"> |
| 531 | ····<a·href="#compact/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 531 | ····<a·href="#compact/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 532 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 532 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 610, 18 lines modified | Offset 610, 18 lines modified | ||
| 610 | ······</div> | 610 | ······</div> |
| 611 | <p>Expands·particular·properties·to·corresponding·sets·of·properties·(or·other | 611 | <p>Expands·particular·properties·to·corresponding·sets·of·properties·(or·other |
| 612 | terms).</p><p>For·each·pair·<code·class="inline">{Property,·Expansion}</code>·in·<code·class="inline">Expansions</code>:·if·<code·class="inline">E</code>·is·the | 612 | terms).</p><p>For·each·pair·<code·class="inline">{Property,·Expansion}</code>·in·<code·class="inline">Expansions</code>:·if·<code·class="inline">E</code>·is·the |
| 613 | first·entry·in·<code·class="inline">ListIn</code>·with·the·same·key·as·<code·class="inline">Property</code>,·and·<code·class="inline">E</code>·and·<code·class="inline">Property</code> | 613 | first·entry·in·<code·class="inline">ListIn</code>·with·the·same·key·as·<code·class="inline">Property</code>,·and·<code·class="inline">E</code>·and·<code·class="inline">Property</code> |
| 614 | have·equivalent·normal·forms,·then·<code·class="inline">E</code>·is·replaced·with·the·terms·in | 614 | have·equivalent·normal·forms,·then·<code·class="inline">E</code>·is·replaced·with·the·terms·in |
| 615 | <code·class="inline">Expansion</code>,·and·any·following·entries·with·the·same·key·are·deleted·from | 615 | <code·class="inline">Expansion</code>,·and·any·following·entries·with·the·same·key·are·deleted·from |
| 616 | <code·class="inline">ListIn</code>.</p><p>For·example,·the·following·expressions·all·return·<code·class="inline">[fie,·bar,·baz,·fum]</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expand</span><span·class="p"·data-group-id="5805338310-1">(</span><span·class="p"·data-group-id="5805338310-2">[</span><span·class="p"·data-group-id="5805338310-3">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-4">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="5805338310-4">]</span><span·class="p"·data-group-id="5805338310-3">}</span><span·class="p"·data-group-id="5805338310-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-5">[</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="5805338310-5">]</span><span·class="p"·data-group-id="5805338310-1">)</span><span·class="w"> | ||
| 617 | </span><span·class="nf">expand</span><span·class="p"·data-group-id="5805338310-6">(</span><span·class="p"·data-group-id="5805338310-7">[</span><span·class="p"·data-group-id="5805338310-8">{</span><span·class="p"·data-group-id="5805338310-9">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="5805338310-9">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-10">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="5805338310-10">]</span><span·class="p"·data-group-id="5805338310-8">}</span><span·class="p"·data-group-id="5805338310-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-11">[</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="5805338310-11">]</span><span·class="p"·data-group-id="5805338310-6">)</span><span·class="w"> | ||
| 618 | </span><span·class="nf">expand</span><span·class="p"·data-group-id="5805338310-12">(</span><span·class="p"·data-group-id="5805338310-13">[</span><span·class="p"·data-group-id="5805338310-14">{</span><span·class="p"·data-group-id="5805338310-15">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="5805338310-15">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-16">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="5805338310-16">]</span><span·class="p"·data-group-id="5805338310-14">}</span><span·class="p"·data-group-id="5805338310-13">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-17">[</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5805338310-18">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="5805338310-18">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="5805338310-17">]</span><span·class="p"·data-group-id="5805338310-12">)</span></code></pre><p>However,·no·expansion·is·done·in·the·following·call·because·<code·class="inline">{foo,·false}</code> | ||
| 619 | 616 | <code·class="inline">ListIn</code>.</p><p>For·example,·the·following·expressions·all·return·<code·class="inline">[fie,·bar,·baz,·fum]</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expand</span><span·class="p"·data-group-id="14[·...·truncated·by·diffoscope;·len:·915,·SHA:·fa8cf75477764b3d74d28d3222b3ca413d3d14d0d88471f6bc4526f5cad7914a·...·] | |
| 617 | </span><span·class="nf">expand</span><span·class="p"·data-group-id="1407537654-6">(</span><span·class="p"·data-group-id="1407537654-7">[</span><span·class="p"·data-group-id="1407537654-8">{</span><span·class="p"·data-group-id="1407537654-9">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="1407537654-9">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1407537654-10">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="1407537654-10">]</span><span·class="p"·data-group-id="1407537654-8">}</span><span·class="p"·data-group-id="1407537654-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1407537654-11">[</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="1407537654-11">]</span><span·class="p"·data-group-id="1407537654-6">)</span><span·class="w"> | ||
| 618 | </span><span·class="nf">expand</span><span·class="p"·data-group-id="1407537654-12">(</span><span·class="p"·data-group-id="1407537654-13">[</span><span·class="p"·data-group-id="1407537654-14">{</span><span·class="p"·data-group-id="1407537654-15">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="1407537654-15">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1407537654-16">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="1407537654-16">]</span><span·class="p"·data-group-id="1407537654-14">}</span><span·class="p"·data-group-id="1407537654-13">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1407537654-17">[</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1407537654-18">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="1407537654-18">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="1407537654-17">]</span><span·class="p"·data-group-id="1407537654-12">)</span></code></pre><p>However,·no·expansion·is·done·in·the·following·call·because·<code·class="inline">{foo,·false}</code> | ||
| 619 | shadows·<code·class="inline">foo</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">expand</span><span·class="p"·data-group-id="0049942289-1">(</span><span·class="p"·data-group-id="0049942289-2">[</span><span·class="p"·data-group-id="0049942289-3">{</span><span·class="p"·data-group-id="0049942289-4">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="0049942289-4">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0049942289-5">[</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p"·data-group-id="0049942289-5">]</span><span·class="p"·data-group-id="0049942289-3">}</span><span·class="p"·data-group-id="0049942289-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0049942289-6">[</span><span·class="p"·data-group-id="0049942289-7">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="0049942289-7">}</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fie</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">fum</span><span·class="p"·data-group-id="0049942289-6">]</span><span·class="p"·data-group-id="0049942289-1">)</span></code></pre><p>Notice·that·if·the·original·property·term·is·to·be·preserved·in·the·result·when | ||
| 620 | expanded,·it·must·be·included·in·the·expansion·list.·The·inserted·terms·are·not | 620 | expanded,·it·must·be·included·in·the·expansion·list.·The·inserted·terms·are·not |
| 621 | expanded·recursively.·If·<code·class="inline">Expansions</code>·contains·more·than·one·property·with·the | 621 | expanded·recursively.·If·<code·class="inline">Expansions</code>·contains·more·than·one·property·with·the |
| 622 | same·key,·only·the·first·occurrence·is·used.</p><p>See·also·<a·href="#normalize/2"><code·class="inline">normalize/2</code></a>.</p> | 622 | same·key,·only·the·first·occurrence·is·used.</p><p>See·also·<a·href="#normalize/2"><code·class="inline">normalize/2</code></a>.</p> |
| 623 | ··</section> | 623 | ··</section> |
| 624 | </section> | 624 | </section> |
| 625 | <section·class="detail"·id="from_map/1"> | 625 | <section·class="detail"·id="from_map/1"> |
| Offset 992, 15 lines modified | Offset 992, 15 lines modified | ||
| 992 | ···············when·List·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·Keys·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·Lists·::·[[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()]],·Rest·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> | 992 | ···············when·List·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·Keys·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()],·Lists·::·[[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()]],·Rest·::·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>()].</pre> |
| 993 | ······</div> | 993 | ······</div> |
| 994 | <p>Partitions·<code·class="inline">List</code>·into·a·list·of·sublists·and·a·remainder.</p><p><code·class="inline">Lists</code>·contains·one·sublist·for·each·key·in·<code·class="inline">Keys</code>,·in·the·corresponding·order. | 994 | <p>Partitions·<code·class="inline">List</code>·into·a·list·of·sublists·and·a·remainder.</p><p><code·class="inline">Lists</code>·contains·one·sublist·for·each·key·in·<code·class="inline">Keys</code>,·in·the·corresponding·order. |
| 995 | The·relative·order·of·the·elements·in·each·sublist·is·preserved·from·the·original·<code·class="inline">List</code>. | 995 | The·relative·order·of·the·elements·in·each·sublist·is·preserved·from·the·original·<code·class="inline">List</code>. |
| 996 | <code·class="inline">Rest</code>·contains·the·elements·in·<code·class="inline">List</code>·that·are·not·associated·with·any·of·the | 996 | <code·class="inline">Rest</code>·contains·the·elements·in·<code·class="inline">List</code>·that·are·not·associated·with·any·of·the |
| 997 | specified·keys,·also·with·their·original·relative·order·preserved.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">split</span><span·class="p"·data-group-id=" | 997 | specified·keys,·also·with·their·original·relative·order·preserved.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">split</span><span·class="p"·data-group-id="0831459560-1">(</span><span·class="p"·data-group-id="0831459560-2">[</span><span·class="p"·data-group-id="0831459560-3">{</span><span·class="ss">c</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·3432,·SHA:·d903f22524bdef0b25b686bd9e98da7b9ed5eb7f06ef2db57ffd42ee1c0f1000·...·]-1">}</span></code></pre> |
| 998 | ··</section> | 998 | ··</section> |
| 999 | </section> | 999 | </section> |
| 1000 | <section·class="detail"·id="substitute_aliases/2"> | 1000 | <section·class="detail"·id="substitute_aliases/2"> |
| 1001 | ··<div·class="detail-header"> | 1001 | ··<div·class="detail-header"> |
| 1002 | ····<a·href="#substitute_aliases/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1002 | ····<a·href="#substitute_aliases/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1003 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1003 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1109, 15 lines modified | Offset 1109, 15 lines modified | ||
| 1109 | ······</div> | 1109 | ······</div> |
| 1110 | <p>Converts·the·property·list·<code·class="inline">List</code>·to·a·map.</p><p>Shorthand·atom·values·in·<code·class="inline">List</code>·will·be·expanded·to·an·association·of·the·form | 1110 | <p>Converts·the·property·list·<code·class="inline">List</code>·to·a·map.</p><p>Shorthand·atom·values·in·<code·class="inline">List</code>·will·be·expanded·to·an·association·of·the·form |
| 1111 | <code·class="inline">Atom·=>·true</code>.·Tuples·of·the·form·<code·class="inline">{Key,·Value}</code>·in·<code·class="inline">List</code>·will·be·converted·to | 1111 | <code·class="inline">Atom·=>·true</code>.·Tuples·of·the·form·<code·class="inline">{Key,·Value}</code>·in·<code·class="inline">List</code>·will·be·converted·to |
| 1112 | an·association·of·the·form·<code·class="inline">Key·=>·Value</code>.·Anything·else·will·be·silently | 1112 | an·association·of·the·form·<code·class="inline">Key·=>·Value</code>.·Anything·else·will·be·silently |
| 1113 | ignored.</p><p>If·the·same·key·appears·in·<code·class="inline">List</code>·multiple·times,·the·value·of·the·one·appearing | 1113 | ignored.</p><p>If·the·same·key·appears·in·<code·class="inline">List</code>·multiple·times,·the·value·of·the·one·appearing |
| 1114 | nearest·to·the·head·of·<code·class="inline">List</code>·will·be·in·the·result·map,·that·is·the·value·that | 1114 | nearest·to·the·head·of·<code·class="inline">List</code>·will·be·in·the·result·map,·that·is·the·value·that |
| 1115 | would·be·returned·by·a·call·to·<a·href="#get_value/2"><code·class="inline">get_value(Key,·List)</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">to_map</span><span·class="p"·data-group-id=" | 1115 | would·be·returned·by·a·call·to·<a·href="#get_value/2"><code·class="inline">get_value(Key,·List)</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">to_map</span><span·class="p"·data-group-id="0172277366-1">(</span><span·class="p"·data-group-id="0172277366-2">[</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0172277366-3">{</span><span·class="ss">b</span><span·class="p">,</span><span·[·...·truncated·by·diffoscope;·len:·1354,·SHA:·fd032b0af2e2e913eaa73a1f29f41d5ac64db615f31378c13d3abbc5ffde826a·...·]-1">}</span></code></pre> |
| 1116 | ··</section> | 1116 | ··</section> |
| 1117 | </section> | 1117 | </section> |
| 1118 | <section·class="detail"·id="to_map/2"> | 1118 | <section·class="detail"·id="to_map/2"> |
| 1119 | ··<div·class="detail-header"> | 1119 | ··<div·class="detail-header"> |
| 1120 | ····<a·href="#to_map/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1120 | ····<a·href="#to_map/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1121 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1121 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1201, 15 lines modified | Offset 1201, 15 lines modified | ||
| 1201 | ······<p·class="built-using"> | 1201 | ······<p·class="built-using"> |
| 1202 | ········Built·using | 1202 | ········Built·using |
| 1203 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1203 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1204 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1204 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1205 | ······</p> | 1205 | ······</p> |
| 1206 | <p>Copyright·©·1996-202 | 1206 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1207 | ····</footer> | 1207 | ····</footer> |
| 1208 | ··</div> | 1208 | ··</div> |
| 1209 | </main> | 1209 | </main> |
| 1210 | </div> | 1210 | </div> |
| 1211 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1211 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1212 | ··<script> | 1212 | ··<script> |
| 1213 | ··let·initialized·=·false; | 1213 | ··let·initialized·=·false; |
| Offset 713, 18 lines modified | Offset 713, 18 lines modified | ||
| 713 | ······<div·class="specs"> | 713 | ······<div·class="specs"> |
| 714 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·all(Pred,·Q·::·<a·href="#t:queue/1">queue</a>(Item))·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·when·Pred·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> | 714 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·all(Pred,·Q·::·<a·href="#t:queue/1">queue</a>(Item))·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·when·Pred·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> |
| 715 | ······</div> | 715 | ······</div> |
| 716 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">Pred(Item)</code>·returns·<code·class="inline">true</code>·for·all·items·<code·class="inline">Item</code>·in·<code·class="inline">Q</code>, | 716 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">Pred(Item)</code>·returns·<code·class="inline">true</code>·for·all·items·<code·class="inline">Item</code>·in·<code·class="inline">Q</code>, |
| 717 | otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 717 | otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="8710332366-1">(</span><span·class="p"·data-group-id="8710332366-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·134,·SHA:·3f72b0f4e49f317148576f868a5c8866bc22e4fd9e47ecd03c84e45d3e464874·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 718 | 2>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">all</span><span·class="p"·data-group-id=" | 718 | 2>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">all</span><span·class="p"·data-group-id="8710332366-3">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8710332366-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="8710332366-4">)</span><span·class="w">·</span><span·class="p">-></span><[·...·truncated·by·diffoscope;·len:·314,·SHA:·4fbc1a36b44d2d0b0e1ab4452d6974eded6e94fb51afdef1b281a8284d854f8d·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 719 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 719 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 720 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">all</span><span·class="p"·data-group-id=" | 720 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">all</span><span·class="p"·data-group-id="8710332366-5">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8710332366-6">(</span><span·class="n">E</span><span·class="p"·data-group-id="8710332366-6">)</span><span·class="w">·</span><span·class="p">-></span><[·...·truncated·by·diffoscope;·len:·314,·SHA:·7d08725fab5f10a1e0a68853e5210d7d7c7c953291a7ed07f7b568bb330161d5·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 721 | </span><span·class="ss">true</span></code></pre> | 721 | </span><span·class="ss">true</span></code></pre> |
| 722 | ··</section> | 722 | ··</section> |
| 723 | </section> | 723 | </section> |
| 724 | <section·class="detail"·id="any/2"> | 724 | <section·class="detail"·id="any/2"> |
| 725 | ··<div·class="detail-header"> | 725 | ··<div·class="detail-header"> |
| 726 | ····<a·href="#any/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 726 | ····<a·href="#any/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 746, 18 lines modified | Offset 746, 18 lines modified | ||
| 746 | ······<div·class="specs"> | 746 | ······<div·class="specs"> |
| 747 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·any(Pred,·Q·::·<a·href="#t:queue/1">queue</a>(Item))·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·when·Pred·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> | 747 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·any(Pred,·Q·::·<a·href="#t:queue/1">queue</a>(Item))·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·when·Pred·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()).</pre> |
| 748 | ······</div> | 748 | ······</div> |
| 749 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">Pred(Item)</code>·returns·<code·class="inline">true</code>·for·at·least·one·item·<code·class="inline">Item</code>·in | 749 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">Pred(Item)</code>·returns·<code·class="inline">true</code>·for·at·least·one·item·<code·class="inline">Item</code>·in |
| 750 | <code·class="inline">Q</code>,·otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="8 | 750 | <code·class="inline">Q</code>,·otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="8590837021-1">(</span><span·class="p"·data-group-id="8590837021-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·clas[·...·truncated·by·diffoscope;·len:·132,·SHA:·b1358d03b1043731d21409852132237ae929ebce304d932afe7b7cc55cb68f19·...·]1-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 751 | 2>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">any</span><span·class="p"·data-group-id="8 | 751 | 2>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">any</span><span·class="p"·data-group-id="8590837021-3">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8590837021-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="8590837021-4">)</span><span·class="w">·</span><span·class="p">-></span><s[·...·truncated·by·diffoscope;·len:·313,·SHA:·625186613ada18d6282cd9eb97783a6c03948215497ef94fba8b8c4661fed3cf·...·]1-3">)</span><span·class="p">.</span><span·class="w"> |
| 752 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 752 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 753 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">any</span><span·class="p"·data-group-id="8 | 753 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">any</span><span·class="p"·data-group-id="8590837021-5">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8590837021-6">(</span><span·class="n">E</span><span·class="p"·data-group-id="8590837021-6">)</span><span·class="w">·</span><span·class="p">-></span><s[·...·truncated·by·diffoscope;·len:·312,·SHA:·c4dc593b4ca428277fe5f739cd04335f358dd3aab8498a5a84ad1a4ed3f8659f·...·]1-5">)</span><span·class="p">.</span><span·class="w"> |
| 754 | </span><span·class="ss">true</span></code></pre> | 754 | </span><span·class="ss">true</span></code></pre> |
| 755 | ··</section> | 755 | ··</section> |
| 756 | </section> | 756 | </section> |
| 757 | <section·class="detail"·id="delete/2"> | 757 | <section·class="detail"·id="delete/2"> |
| 758 | ··<div·class="detail-header"> | 758 | ··<div·class="detail-header"> |
| 759 | ····<a·href="#delete/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 759 | ····<a·href="#delete/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 779, 17 lines modified | Offset 779, 17 lines modified | ||
| 779 | ······<div·class="specs"> | 779 | ······<div·class="specs"> |
| 780 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·delete(Item,·Q1)·->·Q2·when·Item·::·T,·Q1·::·<a·href="#t:queue/1">queue</a>(T),·Q2·::·<a·href="#t:queue/1">queue</a>(T),·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 780 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·delete(Item,·Q1)·->·Q2·when·Item·::·T,·Q1·::·<a·href="#t:queue/1">queue</a>(T),·Q2·::·<a·href="#t:queue/1">queue</a>(T),·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 781 | ······</div> | 781 | ······</div> |
| 782 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·first·item·matching·<code·class="inline">Item</code>·is·deleted,·if·there | 782 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·first·item·matching·<code·class="inline">Item</code>·is·deleted,·if·there |
| 783 | is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 783 | is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="0772955806-1">(</span><span·class="p"·data-group-id="0772955806-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·134,·SHA:·eb39186550f1e5b385a191c65fdcb4157090b34a16a24dcef1a87602a56f9a87·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 784 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id=" | 784 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete</span><span·class="p"·data-group-id="0772955806-3">(</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Queue</span><span·class="p"·data-group-id="0772955806-3">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 785 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id=" | 785 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">member</span><span·class="p"·data-group-id="0772955806-4">(</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Queue1</span><span·class="p"·data-group-id="0772955806-4">)</span><span·class="p">.</span><span·class="w"> |
| 786 | </span><span·class="ss">false</span></code></pre> | 786 | </span><span·class="ss">false</span></code></pre> |
| 787 | ··</section> | 787 | ··</section> |
| 788 | </section> | 788 | </section> |
| 789 | <section·class="detail"·id="delete_r/2"> | 789 | <section·class="detail"·id="delete_r/2"> |
| 790 | ··<div·class="detail-header"> | 790 | ··<div·class="detail-header"> |
| 791 | ····<a·href="#delete_r/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 791 | ····<a·href="#delete_r/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 811, 18 lines modified | Offset 811, 18 lines modified | ||
| 811 | ······<div·class="specs"> | 811 | ······<div·class="specs"> |
| 812 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·delete_r(Item,·Q1)·->·Q2·when·Item·::·T,·Q1·::·<a·href="#t:queue/1">queue</a>(T),·Q2·::·<a·href="#t:queue/1">queue</a>(T),·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 812 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·delete_r(Item,·Q1)·->·Q2·when·Item·::·T,·Q1·::·<a·href="#t:queue/1">queue</a>(T),·Q2·::·<a·href="#t:queue/1">queue</a>(T),·T·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 813 | ······</div> | 813 | ······</div> |
| 814 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·last·item·matching·<code·class="inline">Item</code>·is·deleted,·if·there | 814 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·last·item·matching·<code·class="inline">Item</code>·is·deleted,·if·there |
| 815 | is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 815 | is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="1309028246-1">(</span><span·class="p"·data-group-id="1309028246-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·183,·SHA:·a7a769283f83b9d156e89ac30b75d96dde1d39739ef5094fd4f756816b60c90a·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 816 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_r</span><span·class="p"·data-group-id=" | 816 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_r</span><span·class="p"·data-group-id="1309028246-3">(</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Queue</span><span·class="p"·data-group-id="1309028246-3">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 817 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id=" | 817 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id="1309028246-4">(</span><span·class="n">Queue1</span><span·class="p"·data-group-id="1309028246-4">)</span><span·class="p">.</span><span·class="w"> |
| 818 | </span><span·class="p"·data-group-id=" | 818 | </span><span·class="p"·data-group-id="1309028246-5">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·4e7a1aea96bf6ffc0f72e2c9402d3170d07c9c30cb9d50eaee239438485a4582·...·]-5">]</span></code></pre> |
| 819 | ··</section> | 819 | ··</section> |
| 820 | </section> | 820 | </section> |
| 821 | <section·class="detail"·id="delete_with/2"> | 821 | <section·class="detail"·id="delete_with/2"> |
| 822 | ··<div·class="detail-header"> | 822 | ··<div·class="detail-header"> |
| 823 | ····<a·href="#delete_with/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 823 | ····<a·href="#delete_with/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 824 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 824 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 848, 18 lines modified | Offset 848, 18 lines modified | ||
| 848 | ·························Q1·::·<a·href="#t:queue/1">queue</a>(Item), | 848 | ·························Q1·::·<a·href="#t:queue/1">queue</a>(Item), |
| 849 | ·························Q2·::·<a·href="#t:queue/1">queue</a>(Item), | 849 | ·························Q2·::·<a·href="#t:queue/1">queue</a>(Item), |
| 850 | ·························Item·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 850 | ·························Item·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 851 | ······</div> | 851 | ······</div> |
| 852 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·first·item·for·which·<code·class="inline">Pred</code>·returns·<code·class="inline">true</code>·is | 852 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·first·item·for·which·<code·class="inline">Pred</code>·returns·<code·class="inline">true</code>·is |
| 853 | deleted,·if·there·is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 853 | deleted,·if·there·is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="3274257769-1">(</span><span·class="p"·data-group-id="3274257769-2">[</span><span·class="mi">100</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·c[·...·truncated·by·diffoscope;·len:·185,·SHA:·a0715a6cf5e0a49498119dd3ad12b910eb09d312b6f7289b4b7177f54faaea49·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 854 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_with</span><span·class="p"·data-group-id=" | 854 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_with</span><span·class="p"·data-group-id="3274257769-3">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="3274257769-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="3274257769-4">)</span><span·class="w">·</span><span·class="p">-></span><[·...·truncated·by·diffoscope;·len:·264,·SHA:·955b493eeade63e9e54438c2fc9db20651871aff1de54cb0219d6dc71d0f289b·...·]-3">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 855 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id=" | 855 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id="3274257769-5">(</span><span·class="n">Queue1</span><span·class="p"·data-group-id="3274257769-5">)</span><span·class="p">.</span><span·class="w"> |
| 856 | </span><span·class="p"·data-group-id=" | 856 | </span><span·class="p"·data-group-id="3274257769-6">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·268e020629a35473d5e851aa513138449f7af2381a5d77a3bee0b8a8326c3c82·...·]-6">]</span></code></pre> |
| 857 | ··</section> | 857 | ··</section> |
| 858 | </section> | 858 | </section> |
| 859 | <section·class="detail"·id="delete_with_r/2"> | 859 | <section·class="detail"·id="delete_with_r/2"> |
| 860 | ··<div·class="detail-header"> | 860 | ··<div·class="detail-header"> |
| 861 | ····<a·href="#delete_with_r/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 861 | ····<a·href="#delete_with_r/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 862 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 862 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 885, 18 lines modified | Offset 885, 18 lines modified | ||
| 885 | ···························Q1·::·<a·href="#t:queue/1">queue</a>(Item), | 885 | ···························Q1·::·<a·href="#t:queue/1">queue</a>(Item), |
| 886 | ···························Q2·::·<a·href="#t:queue/1">queue</a>(Item), | 886 | ···························Q2·::·<a·href="#t:queue/1">queue</a>(Item), |
| 887 | ···························Item·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> | 887 | ···························Item·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:term/0">term</a>().</pre> |
| 888 | ······</div> | 888 | ······</div> |
| 889 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·last·item·for·which·<code·class="inline">Pred</code>·returns·<code·class="inline">true</code>·is | 889 | <p>Returns·a·copy·of·<code·class="inline">Q1</code>·where·the·last·item·for·which·<code·class="inline">Pred</code>·returns·<code·class="inline">true</code>·is |
| 890 | deleted,·if·there·is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id=" | 890 | deleted,·if·there·is·such·an·item.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="8082604183-1">(</span><span·class="p"·data-group-id="8082604183-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·185,·SHA:·7f06e15ea4dd9664ef26a66f457024725dd8831b865b5e29054a955c05928c1c·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 891 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_with</span><span·class="p"·data-group-id=" | 891 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">delete_with</span><span·class="p"·data-group-id="8082604183-3">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="8082604183-4">(</span><span·class="n">E</span><span·class="p"·data-group-id="8082604183-4">)</span><span·class="w">·</span><span·class="p">-></span><[·...·truncated·by·diffoscope;·len:·265,·SHA:·21d699f59cfdb45907afac8b19c1577149a5813daedb0fb851d9a71cd7eab25c·...·]-3">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 892 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id=" | 892 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id="8082604183-5">(</span><span·class="n">Queue1</span><span·class="p"·data-group-id="8082604183-5">)</span><span·class="p">.</span><span·class="w"> |
| 893 | </span><span·class="p"·data-group-id=" | 893 | </span><span·class="p"·data-group-id="8082604183-6">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="[·...·truncated·by·diffoscope;·len:·28,·SHA:·314239c8a5014116331d2f9516eaf8bf3ee05df15af811f496da8140cac7906a·...·]-6">]</span></code></pre> |
| 894 | ··</section> | 894 | ··</section> |
| 895 | </section> | 895 | </section> |
| 896 | <section·class="detail"·id="filter/2"> | 896 | <section·class="detail"·id="filter/2"> |
| 897 | ··<div·class="detail-header"> | 897 | ··<div·class="detail-header"> |
| 898 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 898 | ····<a·href="#filter/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 899 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 899 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 917, 27 lines modified | Offset 917, 27 lines modified | ||
| 917 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·filter(Fun,·Q1·::·<a·href="#t:queue/1">queue</a>(Item))·->·Q2·::·<a·href="#t:queue/1">queue</a>(Item)·when·Fun·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·|·[Item]).</pre> | 917 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·filter(Fun,·Q1·::·<a·href="#t:queue/1">queue</a>(Item))·->·Q2·::·<a·href="#t:queue/1">queue</a>(Item)·when·Fun·::·fun((Item)·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>()·|·[Item]).</pre> |
| 918 | ······</div> | 918 | ······</div> |
| 919 | <p>Returns·a·queue·<code·class="inline">Q2</code>·that·is·the·result·of·calling·<code·class="inline">Fun(Item)</code>·on·all·items·in | 919 | <p>Returns·a·queue·<code·class="inline">Q2</code>·that·is·the·result·of·calling·<code·class="inline">Fun(Item)</code>·on·all·items·in |
| 920 | <code·class="inline">Q1</code>.</p><p>If·<code·class="inline">Fun(Item)</code>·returns·<code·class="inline">true</code>,·<code·class="inline">Item</code>·is·copied·to·the·result·queue.·If·it | 920 | <code·class="inline">Q1</code>.</p><p>If·<code·class="inline">Fun(Item)</code>·returns·<code·class="inline">true</code>,·<code·class="inline">Item</code>·is·copied·to·the·result·queue.·If·it |
| 921 | returns·<code·class="inline">false</code>,·<code·class="inline">Item</code>·is·not·copied.·If·it·returns·a·list,·the·list·elements | 921 | returns·<code·class="inline">false</code>,·<code·class="inline">Item</code>·is·not·copied.·If·it·returns·a·list,·the·list·elements |
| 922 | are·inserted·instead·of·<code·class="inline">Item</code>·in·the·result·queue.</p><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="3 | 922 | are·inserted·instead·of·<code·class="inline">Item</code>·in·the·result·queue.</p><p><em>Example·1:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Queue</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="5347368330-1">(</span><span·class="p"·data-group-id="5347368330-2">[</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·cla[·...·truncated·by·diffoscope;·len:·134,·SHA:·877bbad0db5b8a0f120f6739bfa3710bf04eb20556a4ca2a7a9c6f4dac15cc09·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 923 | </span><span·class="p"·data-group-id="3 | 923 | </span><span·class="p"·data-group-id="5347368330-3">{</span><span·class="p"·data-group-id="5347368330-4">[</span><span·class="mi">5</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="5347368330-4">]</span><span[·...·truncated·by·diffoscope;·len:·240,·SHA:·6b21e1a0f03e8c5d70a160bf0023aa7202896bf26e101eddfa1c115c4e8ce2d6·...·]-3">}</span><span·class="gp·unselectable"> |
| 924 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id="3 | 924 | 2>·</span><span·class="n">Queue1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">filter</span><span·class="p"·data-group-id="5347368330-6">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="5347368330-7">(</span><span·class="n">E</span><span·class="p"·data-group-id="5347368330-7">)</span><span·class="w">·</span><span·class="p">-></span><[·...·truncated·by·diffoscope;·len:·314,·SHA:·55585e1849c468854c89b715c35850192d604e7471d546141d1cfe2d5e5f4433·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 925 | </span><span·class="p"·data-group-id="3 | 925 | </span><span·class="p"·data-group-id="5347368330-8">{</span><span·class="p"·data-group-id="5347368330-9">[</span><span·class="mi">5</span><span·class="p"·data-group-id="5347368330-9">]</span><span·class="p">,</span><span·class="p"·data-group-id="5347368330-10">[</span><span·class="mi">3</span>[·...·truncated·by·diffoscope;·len:·144,·SHA:·a4dedd3dfdccf986fc0bd3efffd9c2552dc6f632480ffca4fdc599880ad0f8d2·...·]-8">}</span><span·class="gp·unselectable"> |
| 926 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id="3 | 926 | 3>·</span><span·class="nc">queue</span><span·class="p">:</span><span·class="nf">to_list</span><span·class="p"·data-group-id="5347368330-11">(</span><span·class="n">Queue1</span><span·class="p"·data-group-id="5347368330-11">)</span><span·class="p">.</span><span·class="w"> |
| 927 | </span><span·class="p"·data-group-id="3 | 927 | </span><span·class="p"·data-group-id="5347368330-12">[</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="5347368330-12">]</span></code></pre><p>So,·<code·class="inline">Fun(Item)</code>·returning·<code·class="inline">[Item]</code>·is·thereby·semantically·equivalent·to |
| 928 | returning·<code·class="inline">true</code>,·just·as·returning·<code·class="inline">[]</code>·is·semantically·equivalent·to·returning | 928 | returning·<code·class="inline">true</code>,·just·as·returning·<code·class="inline">[]</code>·is·semantically·equivalent·to·returning |
| Max diff block lines reached; 117143/163726 bytes (71.55%) of diff not shown. | |||
| Offset 197, 32 lines modified | Offset 197, 32 lines modified | ||
| 197 | or·be·an·explicit·argument·and·return·value.</p><p>The·functions·with·implicit·state·operates·on·a·state·stored | 197 | or·be·an·explicit·argument·and·return·value.</p><p>The·functions·with·implicit·state·operates·on·a·state·stored |
| 198 | in·the·process·dictionary·under·the·key·<code·class="inline">rand_seed</code>.··If·that·key | 198 | in·the·process·dictionary·under·the·key·<code·class="inline">rand_seed</code>.··If·that·key |
| 199 | doesn't·exist·when·the·function·is·called,·<a·href="#seed/1"><code·class="inline">seed/1</code></a>·is·called·automatically | 199 | doesn't·exist·when·the·function·is·called,·<a·href="#seed/1"><code·class="inline">seed/1</code></a>·is·called·automatically |
| 200 | with·the·<a·href="#default-algorithm"><em>default·algorithm</em></a>·and·creates | 200 | with·the·<a·href="#default-algorithm"><em>default·algorithm</em></a>·and·creates |
| 201 | a·reasonably·unpredictable·seed.</p><p>The·functions·with·explicit·state·don't·use·the·process·dictionary.</p><h4><em>Examples</em></h4><p>Simple·use;·create·and·seed·the | 201 | a·reasonably·unpredictable·seed.</p><p>The·functions·with·explicit·state·don't·use·the·process·dictionary.</p><h4><em>Examples</em></h4><p>Simple·use;·create·and·seed·the |
| 202 | <a·href="#default-algorithm"><em>default·algorithm</em></a>·with·a·non-fixed·seed, | 202 | <a·href="#default-algorithm"><em>default·algorithm</em></a>·with·a·non-fixed·seed, |
| 203 | if·not·already·done,·and·generate·two·uniformly·distibuted | 203 | if·not·already·done,·and·generate·two·uniformly·distibuted |
| 204 | floating·point·numbers.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">R0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 204 | floating·point·numbers.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">R0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9576271669-1">(</span><span·class="p"·data-group-id="9576271669-1">)</span><span·class="p">,</span><span·class="w"> |
| 205 | </span><span·class="n">R1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 205 | </span><span·class="n">R1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9576271669-2">(</span><span·class="p"·data-group-id="9576271669-2">)</span><span·class="p">,</span></code></pre><p>Use·a·specified·algorithm:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</span><span·class="o"[·...·truncated·by·diffoscope;·len:·240,·SHA:·54005b964e5822a3b612d6257e0dcae7ea470e9c032501edfb6f5cf6b7bb8ed5·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 206 | </span><span·class="n">R2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 206 | </span><span·class="n">R2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9987399359-2">(</span><span·class="p"·data-group-id="9987399359-2">)</span><span·class="p">,</span></code></pre><p>Use·a·specified·algorithm·with·a·fixed·seed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">_</span><span·class="w">·</sp[·...·truncated·by·diffoscope;·len:·595,·SHA:·b601459ecaf759db6d30ad9037a76646d7ffbe55d7b6661b1f38c0e4b1f134bd·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 207 | </span><span·class="n">R3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 207 | </span><span·class="n">R3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="0959235838-3">(</span><span·class="p"·data-group-id="0959235838-3">)</span><span·class="p">,</span></code></pre><p>Use·the·functional·API·with·a·non-fixed·seed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">S0</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·258,·SHA:·1ee12ea3f6ccb52f8921f87491aa540e95a918b55e7ae74383c90498db420333·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 208 | </span><span·class="p"·data-group-id=" | 208 | </span><span·class="p"·data-group-id="4954439609-2">{</span><span·class="n">R4</span><span·class="p">,</span><span·class="w">·</span><span·class="n">S1</span><span·class="p"·data-group-id="4954439609-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·654,·SHA:·08e197b2755cd0799935f305d1c0ffb367f62d8fb8528eaf88890f6679daa10a·...·]-1">)</span><span·class="p">,</span><span·class="w"> |
| 209 | </span><span·class="n">R6</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 209 | </span><span·class="n">R6</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="7300116053-2">(</span><span·class="p"·data-group-id="7300116053-2">)</span><span·class="p">,</span><span·class="w"> |
| 210 | </span><span·class="n">SND0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">math</span><span·class="p">:</span><span·class="nf">sqrt</span><span·class="p"·data-group-id=" | 210 | </span><span·class="n">SND0</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">math</span><span·class="p">:</span><span·class="nf">sqrt</span><span·class="p"·data-group-id="7300116053-3">(</span><span·class="o">-</span><span·class="mi">2</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="nc">math</span><span·class="p">:</span><span·class="nf">log</span><span·class="p"·data-group-id="730[·...·truncated·by·diffoscope;·len:·2113,·SHA:·efdacf17d4d1b3eb9be430f338a7df23aaa663bf1454e9c60685c6af1f7f73b7·...·]-2">)</span><span·class="p">,</span></code></pre><h4>Quality·of·the·Generated·Numbers</h4><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>The·builtin·random·number·generator·algorithms·are·not·cryptographically |
| 211 | strong.·If·a·cryptographically·strong·random·number·generator·is·needed, | 211 | strong.·If·a·cryptographically·strong·random·number·generator·is·needed, |
| 212 | use·something·like·<a·href="../../../../lib/crypto-5.5.3/doc/html/crypto.html#rand_seed/0"><code·class="inline">crypto:rand_seed/0</code></a>.</p></section><p>For·all·these·generators·except·<code·class="inline">exro928ss</code>·and·<code·class="inline">exsss</code>·the·lowest·bit(s) | 212 | use·something·like·<a·href="../../../../lib/crypto-5.5.3/doc/html/crypto.html#rand_seed/0"><code·class="inline">crypto:rand_seed/0</code></a>.</p></section><p>For·all·these·generators·except·<code·class="inline">exro928ss</code>·and·<code·class="inline">exsss</code>·the·lowest·bit(s) |
| 213 | have·got·a·slightly·less·random·behaviour·than·all·other·bits. | 213 | have·got·a·slightly·less·random·behaviour·than·all·other·bits. |
| 214 | 1·bit·for·<code·class="inline">exrop</code>·(and·<code·class="inline">exsp</code>),·and·3·bits·for·<code·class="inline">exs1024s</code>.·See·for·example | 214 | 1·bit·for·<code·class="inline">exrop</code>·(and·<code·class="inline">exsp</code>),·and·3·bits·for·<code·class="inline">exs1024s</code>.·See·for·example |
| 215 | this·explanation·in·the | 215 | this·explanation·in·the |
| 216 | <a·href="http://xoroshiro.di.unimi.it/xoroshiro128plus.c">Xoroshiro128+</a> | 216 | <a·href="http://xoroshiro.di.unimi.it/xoroshiro128plus.c">Xoroshiro128+</a> |
| 217 | generator·source·code:</p><blockquote><p>Beside·passing·BigCrush,·this·generator·passes·the·PractRand·test·suite | 217 | generator·source·code:</p><blockquote><p>Beside·passing·BigCrush,·this·generator·passes·the·PractRand·test·suite |
| 218 | up·to·(and·included)·16TB,·with·the·exception·of·binary·rank·tests, | 218 | up·to·(and·included)·16TB,·with·the·exception·of·binary·rank·tests, |
| 219 | which·fail·due·to·the·lowest·bit·being·an·LFSR;·all·other·bits·pass·all | 219 | which·fail·due·to·the·lowest·bit·being·an·LFSR;·all·other·bits·pass·all |
| 220 | tests.·We·suggest·to·use·a·sign·test·to·extract·a·random·Boolean·value.</p></blockquote><p>If·this·is·a·problem;·to·generate·a·boolean·with·these·algorithms, | 220 | tests.·We·suggest·to·use·a·sign·test·to·extract·a·random·Boolean·value.</p></blockquote><p>If·this·is·a·problem;·to·generate·a·boolean·with·these·algorithms, |
| 221 | use·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 221 | use·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9257214140-1">(</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="9257214140-2">(</span><span·class="mi">256</span><span·class="p"·data-group-id="9257214140-2">)</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·2110,·SHA:·1ac361f905d92c62dc85d7b3b4340de2f3c252b97d2be471e25e388a4df94fc6·...·]-1">)</span></code></pre><p>The·floating·point·generating·functions·in·this·module·waste·the·lowest·bits |
| 222 | when·converting·from·an·integer·so·they·avoid·this·snag.</p><h2·id="module-niche-algorithms"·class="section-heading"> | 222 | when·converting·from·an·integer·so·they·avoid·this·snag.</p><h2·id="module-niche-algorithms"·class="section-heading"> |
| 223 | ··<a·href="#module-niche-algorithms"·class="hover-link"> | 223 | ··<a·href="#module-niche-algorithms"·class="hover-link"> |
| 224 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 224 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 225 | ··</a> | 225 | ··</a> |
| 226 | ··<span·class="text"><a·href=""·id="niche-algorithms"></a>·Niche·algorithms</span> | 226 | ··<span·class="text"><a·href=""·id="niche-algorithms"></a>·Niche·algorithms</span> |
| 227 | </h2> | 227 | </h2> |
| 228 | <p>The·<a·href="#niche-algorithms-api">niche·algorithms·API</a>·contains | 228 | <p>The·<a·href="#niche-algorithms-api">niche·algorithms·API</a>·contains |
| Offset 1871, 18 lines modified | Offset 1871, 18 lines modified | ||
| 1871 | <p>Generate·a·uniformly·distributed·random·number·<code·class="inline">0.0 =< X < 1.0</code>.</p><p>From·the·specified·<code·class="inline">State</code>,·generates·a·random·number·<code·class="inline">X ::</code> <a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0"><code·class="inline">float/0</code></a>, | 1871 | <p>Generate·a·uniformly·distributed·random·number·<code·class="inline">0.0 =< X < 1.0</code>.</p><p>From·the·specified·<code·class="inline">State</code>,·generates·a·random·number·<code·class="inline">X ::</code> <a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0"><code·class="inline">float/0</code></a>, |
| 1872 | uniformly·distributed·in·the·value·range·<code·class="inline">0.0·=<·X·<·1.0</code>. | 1872 | uniformly·distributed·in·the·value·range·<code·class="inline">0.0·=<·X·<·1.0</code>. |
| 1873 | Returns·the·number·<code·class="inline">X</code>·and·the·updated·<code·class="inline">NewState</code>.</p><p>The·generated·numbers·are·on·the·form·<code·class="inline">N * 2.0^(-53)</code>,·that·is; | 1873 | Returns·the·number·<code·class="inline">X</code>·and·the·updated·<code·class="inline">NewState</code>.</p><p>The·generated·numbers·are·on·the·form·<code·class="inline">N * 2.0^(-53)</code>,·that·is; |
| 1874 | equally·spaced·in·the·interval.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>This·function·may·return·exactly·<code·class="inline">0.0</code>·which·can·be·fatal·for·certain | 1874 | equally·spaced·in·the·interval.</p><section·role="note"·class="admonition·warning"><h4·class="admonition-title·warning">Warning</h4><p>This·function·may·return·exactly·<code·class="inline">0.0</code>·which·can·be·fatal·for·certain |
| 1875 | applications.·If·that·is·undesired·you·can·use·<code·class="inline">(1.0 - rand:uniform())</code> | 1875 | applications.·If·that·is·undesired·you·can·use·<code·class="inline">(1.0 - rand:uniform())</code> |
| 1876 | to·get·the·interval·<code·class="inline">0.0 < X =< 1.0</code>,·or·instead·use·<a·href="#uniform_real/0"><code·class="inline">uniform_real/0</code></a>.</p><p>If·neither·endpoint·is·desired·you·can·achieve·the·range | 1876 | to·get·the·interval·<code·class="inline">0.0 < X =< 1.0</code>,·or·instead·use·<a·href="#uniform_real/0"><code·class="inline">uniform_real/0</code></a>.</p><p>If·neither·endpoint·is·desired·you·can·achieve·the·range |
| 1877 | <code·class="inline">0.0 < X < 1.0</code>·using·test·and·re-try·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_uniform</span><span·class="p"·data-group-id=" | 1877 | <code·class="inline">0.0 < X < 1.0</code>·using·test·and·re-try·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">my_uniform</span><span·class="p"·data-group-id="3856773735-1">(</span><span·class="p"·data-group-id="3856773735-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1878 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id=" | 1878 | ····</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">uniform</span><span·class="p"·data-group-id="3856773735-2">(</span><span·class="p"·data-group-id="3856773735-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1879 | ········</span><span·class="n">X</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="mf">0.0</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="p">;</span><span·class="w"> | 1879 | ········</span><span·class="n">X</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="mf">0.0</span><span·class="w">·</span><span·class="o"><</span><span·class="w">·</span><span·class="n">X</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">X</span><span·class="p">;</span><span·class="w"> |
| 1880 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">my_uniform</span><span·class="p"·data-group-id=" | 1880 | ········</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">my_uniform</span><span·class="p"·data-group-id="3856773735-3">(</span><span·class="p"·data-group-id="3856773735-3">)</span><span·class="w"> |
| 1881 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre></section> | 1881 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre></section> |
| 1882 | ··</section> | 1882 | ··</section> |
| 1883 | </section> | 1883 | </section> |
| 1884 | <section·class="detail"·id="uniform_s/2"> | 1884 | <section·class="detail"·id="uniform_s/2"> |
| 1885 | ··<div·class="detail-header"> | 1885 | ··<div·class="detail-header"> |
| 1886 | ····<a·href="#uniform_s/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1886 | ····<a·href="#uniform_s/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 2027, 15 lines modified | Offset 2027, 15 lines modified | ||
| 2027 | a·new·state·<a·href="#t:mwc59_state/0"><code·class="inline">CX1</code></a>,·according·to·a·Multiply·With·Carry | 2027 | a·new·state·<a·href="#t:mwc59_state/0"><code·class="inline">CX1</code></a>,·according·to·a·Multiply·With·Carry |
| 2028 | generator,·which·is·an·efficient·implementation·of | 2028 | generator,·which·is·an·efficient·implementation·of |
| 2029 | a·Multiplicative·Congruential·Generator·with·a·power·of·2·multiplier | 2029 | a·Multiplicative·Congruential·Generator·with·a·power·of·2·multiplier |
| 2030 | and·a·prime·modulus.</p><p>This·generator·uses·the·multiplier·<code·class="inline">2^32</code>·and·the·modulus | 2030 | and·a·prime·modulus.</p><p>This·generator·uses·the·multiplier·<code·class="inline">2^32</code>·and·the·modulus |
| 2031 | <code·class="inline">16#7fa6502 * 2^32 - 1</code>,·which·have·been·selected,·in·collaboration·with | 2031 | <code·class="inline">16#7fa6502 * 2^32 - 1</code>,·which·have·been·selected,·in·collaboration·with |
| 2032 | Sebastiano·Vigna,·to·avoid·bignum·operations·and·still·get | 2032 | Sebastiano·Vigna,·to·avoid·bignum·operations·and·still·get |
| 2033 | good·statistical·quality.·It·has·been·named·"MWC59"·and·can·be·written·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">C</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="n">CX0</span><span·class="err"> </span><span·class="ow">bsr</span><span·class="err"> </span><span·class="mi">32</span><span·class="w"> | 2033 | good·statistical·quality.·It·has·been·named·"MWC59"·and·can·be·written·as:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">C</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="n">CX0</span><span·class="err"> </span><span·class="ow">bsr</span><span·class="err"> </span><span·class="mi">32</span><span·class="w"> |
| 2034 | </span><span·class="n">X</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="n">CX0</span><span·class="err"> </span><span·class="ow">band</span><span·class="err"> </span><span·class="p"·data-group-id=" | 2034 | </span><span·class="n">X</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="n">CX0</span><span·class="err"> </span><span·class="ow">band</span><span·class="err"> </span><span·class="p"·data-group-id="5016680706-1">(</span><span·class="p"·data-group-id="5016680706-2">(</span><span·class="mi">1</span><span·class="err"> </span><span·class="ow">bsl</span><span·class="err"> </span><span·class="mi">32</span><span·class="p"·data-group-id="5016680706-2">)</spa[·...·truncated·by·diffoscope;·len:·92,·SHA:·e6b68f3f5e28769f98a0282059b78bfd900b396aaea350c1792e11d203585cb3·...·]-1">)</span><span·class="p">)</span><span·class="w"> |
| 2035 | </span><span·class="n">CX1</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="mi">16#7fa6502</span><span·class="err"> </span><span·class="o">*</span><span·class="err"> </span><span·class="n">X</span><span·class="err"> </span><span·class="o">+</span><span·class="err"> </span><span·class="n">C</span></code></pre><p>Because·the·generator·uses·a·multiplier·that·is·a·power·of·2·it·gets | 2035 | </span><span·class="n">CX1</span><span·class="err"> </span><span·class="o">=</span><span·class="err"> </span><span·class="mi">16#7fa6502</span><span·class="err"> </span><span·class="o">*</span><span·class="err"> </span><span·class="n">X</span><span·class="err"> </span><span·class="o">+</span><span·class="err"> </span><span·class="n">C</span></code></pre><p>Because·the·generator·uses·a·multiplier·that·is·a·power·of·2·it·gets |
| 2036 | statistical·flaws·for·collision·tests·and·birthday·spacings·tests | 2036 | statistical·flaws·for·collision·tests·and·birthday·spacings·tests |
| 2037 | in·2·and·3·dimensions,·and·these·caveats·apply·even·when·looking | 2037 | in·2·and·3·dimensions,·and·these·caveats·apply·even·when·looking |
| 2038 | only·at·the·MWC·"digit",·that·is·the·low·32·bits·(the·multiplier) | 2038 | only·at·the·MWC·"digit",·that·is·the·low·32·bits·(the·multiplier) |
| 2039 | of·the·generator·state.··The·higher·bits·of·the·state·are·worse.</p><p>The·quality·of·the·output·value·improves·much·by·using·a·scrambler, | 2039 | of·the·generator·state.··The·higher·bits·of·the·state·are·worse.</p><p>The·quality·of·the·output·value·improves·much·by·using·a·scrambler, |
| 2040 | instead·of·just·taking·the·low·bits. | 2040 | instead·of·just·taking·the·low·bits. |
| 2041 | Function·<a·href="#mwc59_value32/1"><code·class="inline">mwc59_value32</code></a>·is·a·fast·scrambler | 2041 | Function·<a·href="#mwc59_value32/1"><code·class="inline">mwc59_value32</code></a>·is·a·fast·scrambler |
| Offset 2285, 15 lines modified | Offset 2285, 15 lines modified | ||
| 2285 | ······<p·class="built-using"> | 2285 | ······<p·class="built-using"> |
| 2286 | ········Built·using | 2286 | ········Built·using |
| 2287 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2287 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2288 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2288 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2289 | ······</p> | 2289 | ······</p> |
| 2290 | <p>Copyright·©·1996-202 | 2290 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2291 | ····</footer> | 2291 | ····</footer> |
| 2292 | ··</div> | 2292 | ··</div> |
| 2293 | </main> | 2293 | </main> |
| 2294 | </div> | 2294 | </div> |
| 2295 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2295 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2296 | ··<script> | 2296 | ··<script> |
| 2297 | ··let·initialized·=·false; | 2297 | ··let·initialized·=·false; |
| Offset 458, 17 lines modified | Offset 458, 17 lines modified | ||
| 458 | ······<div·class="specs"> | 458 | ······<div·class="specs"> |
| 459 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·seed(A1,·A2,·A3)·->·undefined·|·<a·href="#t:ran/0">ran</a>()·when·A1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·A2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·A3·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>().</pre> | 459 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·seed(A1,·A2,·A3)·->·undefined·|·<a·href="#t:ran/0">ran</a>()·when·A1·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·A2·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>(),·A3·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:integer/0">integer</a>().</pre> |
| 460 | ······</div> | 460 | ······</div> |
| 461 | <p>Seeds·random·number·generation·with·integer·values·in·the·process·dictionary·and | 461 | <p>Seeds·random·number·generation·with·integer·values·in·the·process·dictionary·and |
| 462 | returns·the·old·state.</p><p>The·following·is·an·easy·way·of·obtaining·a·unique·value·to·seed·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">random</span><span·class="p">:</span><span·class="nf">seed</span><span·class="p"·data-group-id=" | 462 | returns·the·old·state.</p><p>The·following·is·an·easy·way·of·obtaining·a·unique·value·to·seed·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">random</span><span·class="p">:</span><span·class="nf">seed</span><span·class="p"·data-group-id="5494252251-1">(</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">phash2</span><span·class="p"·data-group-id="5494252251-2">(</span><span·class="p"·data-group-id="5494252251-3">[</span><span·class="nf">node</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·184,·SHA:·4ba7b22e8d1a3c2670cb540c27d83b7cf9d1f62142814b82f4a5a2321d63e9ff·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 463 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id=" | 463 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">monotonic_time</span><span·class="p"·data-group-id="5494252251-5">(</span><span·class="p"·data-group-id="5494252251-5">)</span><span·class="p">,</span><span·class="w"> |
| 464 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">unique_integer</span><span·class="p"·data-group-id=" | 464 | ············</span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nf">unique_integer</span><span·class="p"·data-group-id="5494252251-6">(</span><span·class="p"·data-group-id="5494252251-6">)</span><span·class="p"·data-group-id="5494252251-1">)</span></code></pre><p>For·details,·see·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#phash2/1"><code·class="inline">erlang:phash2/1</code></a>,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#node/0"><code·class="inline">erlang:node/0</code></a>,·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#monotonic_time/0"><code·class="inline">erlang:monotonic_time/0</code></a>, |
| 465 | and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unique_integer/0"><code·class="inline">erlang:unique_integer/0</code></a>.</p> | 465 | and·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#unique_integer/0"><code·class="inline">erlang:unique_integer/0</code></a>.</p> |
| 466 | ··</section> | 466 | ··</section> |
| 467 | </section> | 467 | </section> |
| 468 | <section·class="detail"·id="uniform/0"> | 468 | <section·class="detail"·id="uniform/0"> |
| 469 | ··<div·class="detail-header"> | 469 | ··<div·class="detail-header"> |
| 470 | ····<a·href="#uniform/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 470 | ····<a·href="#uniform/0"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 615, 15 lines modified | Offset 615, 15 lines modified | ||
| 615 | ······<p·class="built-using"> | 615 | ······<p·class="built-using"> |
| 616 | ········Built·using | 616 | ········Built·using |
| 617 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 617 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 618 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 618 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 619 | ······</p> | 619 | ······</p> |
| 620 | <p>Copyright·©·1996-202 | 620 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 621 | ····</footer> | 621 | ····</footer> |
| 622 | ··</div> | 622 | ··</div> |
| 623 | </main> | 623 | </main> |
| 624 | </div> | 624 | </div> |
| 625 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 625 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 626 | ··<script> | 626 | ··<script> |
| 627 | ··let·initialized·=·false; | 627 | ··let·initialized·=·false; |
| Offset 1371, 17 lines modified | Offset 1371, 17 lines modified | ||
| 1371 | been·passed,·<a·href="#run/2"><code·class="inline">run/2,3</code></a>·is·committed·to·find·a·match·at·the·current | 1371 | been·passed,·<a·href="#run/2"><code·class="inline">run/2,3</code></a>·is·committed·to·find·a·match·at·the·current |
| 1372 | starting·point,·or·not·at·all,·for·example:</p><pre><code·class="text">a+(*COMMIT)b</code></pre><p>This·matches·"xxaab"·but·not·"aacaab".·It·can·be·thought·of·as·a·kind·of·dynamic | 1372 | starting·point,·or·not·at·all,·for·example:</p><pre><code·class="text">a+(*COMMIT)b</code></pre><p>This·matches·"xxaab"·but·not·"aacaab".·It·can·be·thought·of·as·a·kind·of·dynamic |
| 1373 | anchor,·or·"I've·started,·so·I·must·finish".·The·name·of·the·most·recently | 1373 | anchor,·or·"I've·started,·so·I·must·finish".·The·name·of·the·most·recently |
| 1374 | passed·(<em>MARK)·in·the·path·is·passed·back·when·(</em>COMMIT)·forces·a·match·failure.</p><p>If·more·than·one·backtracking·verb·exists·in·a·pattern,·a·different·one·that | 1374 | passed·(<em>MARK)·in·the·path·is·passed·back·when·(</em>COMMIT)·forces·a·match·failure.</p><p>If·more·than·one·backtracking·verb·exists·in·a·pattern,·a·different·one·that |
| 1375 | follows·(<em>COMMIT)·can·be·triggered·first,·so·merely·passing·(</em>COMMIT)·during·a | 1375 | follows·(<em>COMMIT)·can·be·triggered·first,·so·merely·passing·(</em>COMMIT)·during·a |
| 1376 | match·does·not·always·guarantee·that·a·match·must·be·at·this·starting·point.</p><p>Notice·that·(*COMMIT)·at·the·start·of·a·pattern·is·not·the·same·as·an·anchor, | 1376 | match·does·not·always·guarantee·that·a·match·must·be·at·this·starting·point.</p><p>Notice·that·(*COMMIT)·at·the·start·of·a·pattern·is·not·the·same·as·an·anchor, |
| 1377 | unless·the·PCRE·start-of-match·optimizations·are·turned·off,·as·shown·in·the | 1377 | unless·the·PCRE·start-of-match·optimizations·are·turned·off,·as·shown·in·the |
| 1378 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="3821821692-1">(</span><span·class="s">"xyzabc"</span><span·class="p">,</span><span·class="s">"(*COMMIT)abc"</span><span·class="p">,</span><span·class="p"·data-group-id="3821821692-2">[</span><span·class="p"·data-group-id="3821821692-3">{</span><span·class="ss">capture</span><span·class="p">,</span><span·class="ss">all</span><span·class="p">,</span><span·class="ss">list</span><span·class="p"·data-group-id="3821821692-3">}</span><span·class="p"·data-group-id="3821821692-2">]</span><span·class="p"·data-group-id="3821821692-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 1379 | </span><span·class="p"·data-group-id="3821821692-4">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="3821821692-5">[</span><span·class="s">"abc"</span><span·class="p"·data-group-id="3821821692-5">]</span><span·class="p"·data-group-id="3821821692-4">}</span><span·class="gp·unselectable"> | ||
| 1380 | 1378 | following·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="4735816965-1">(</span><span·class="[·...·truncated·by·diffoscope;·len:·512,·SHA:·e20a19a0e1ee4314c0223bd75424154a2f84bd9183929c7adaa7c5be3d7af53d·...·]">)</span><span·class="p">.</span><span·class="w"> | |
| 1379 | </span><span·class="p"·data-group-id="4735816965-4">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="4735816965-5">[</span><span·class="s">"abc"</span><span·class="p"·data-group-id="4735816965-5">]</span><span·class="p"·data-group-id="4735816965-4">}</span><span·class="gp·unselectable"> | ||
| 1380 | 2>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="4735816965-6">(</span><span·class="s">"xyzabc"</span><span·class="p">,</span><span·class="s">"(*COMMIT)abc"</span><span·class="p">,</span><span·class="p"·data-group-id="4735816965-7">[</span><span·class="p"·data-group-id="4735816965-8">{</span><span·class="ss">capture</span><span·class="p">,</span><span·class="ss">all</span><span·class="p">,</span><span·class="ss">list</span><span·class="p"·data-group-id="4735816965-8">}</span><span·class="p">,</span><span·class="ss">no_start_optimize</span><span·class="p"·data-group-id="4735816965-7">]</span><span·class="p"·data-group-id="4735816965-6">)</span><span·class="p">.</span><span·class="w"> | ||
| 1381 | </span><span·class="ss">nomatch</span></code></pre><p>For·this·pattern,·PCRE·knows·that·any·match·must·start·with·"a",·so·the | 1381 | </span><span·class="ss">nomatch</span></code></pre><p>For·this·pattern,·PCRE·knows·that·any·match·must·start·with·"a",·so·the |
| 1382 | optimization·skips·along·the·subject·to·"a"·before·applying·the·pattern·to·the | 1382 | optimization·skips·along·the·subject·to·"a"·before·applying·the·pattern·to·the |
| 1383 | first·set·of·data.·The·match·attempt·then·succeeds.·In·the·second·call·the | 1383 | first·set·of·data.·The·match·attempt·then·succeeds.·In·the·second·call·the |
| 1384 | <code·class="inline">no_start_optimize</code>·disables·the·optimization·that·skips·along·to·the·first | 1384 | <code·class="inline">no_start_optimize</code>·disables·the·optimization·that·skips·along·to·the·first |
| 1385 | character.·The·pattern·is·now·applied·starting·at·"x",·and·so·the·(*COMMIT) | 1385 | character.·The·pattern·is·now·applied·starting·at·"x",·and·so·the·(*COMMIT) |
| 1386 | causes·the·match·to·fail·without·trying·any·other·starting·points.</p><p>The·following·verb·causes·the·match·to·fail·at·the·current·starting·position·in | 1386 | causes·the·match·to·fail·without·trying·any·other·starting·points.</p><p>The·following·verb·causes·the·match·to·fail·at·the·current·starting·position·in |
| 1387 | the·subject·if·there·is·a·later·matching·failure·that·causes·backtracking·to | 1387 | the·subject·if·there·is·a·later·matching·failure·that·causes·backtracking·to |
| Offset 2084, 40 lines modified | Offset 2084, 40 lines modified | ||
| 2084 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·inspect(MP,·Item)·->·{namelist,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()]}·when·MP·::·<a·href="#t:mp/0">mp</a>(),·Item·::·namelist.</pre> | 2084 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·inspect(MP,·Item)·->·{namelist,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:binary/0">binary</a>()]}·when·MP·::·<a·href="#t:mp/0">mp</a>(),·Item·::·namelist.</pre> |
| 2085 | ······</div> | 2085 | ······</div> |
| 2086 | <p>Takes·a·compiled·regular·expression·and·an·item,·and·returns·the·relevant·data | 2086 | <p>Takes·a·compiled·regular·expression·and·an·item,·and·returns·the·relevant·data |
| 2087 | from·the·regular·expression.</p><p>The·only·supported·item·is·<code·class="inline">namelist</code>,·which·returns·the·tuple·<code·class="inline">{namelist,·[binary()]}</code>, | 2087 | from·the·regular·expression.</p><p>The·only·supported·item·is·<code·class="inline">namelist</code>,·which·returns·the·tuple·<code·class="inline">{namelist,·[binary()]}</code>, |
| 2088 | containing·the·names·of·all·(unique)·named·subpatterns·in·the·regular·expression.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 2088 | containing·the·names·of·all·(unique)·named·subpatterns·in·the·regular·expression.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="8878646660-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">MP</span><span·class="p"·data-group-id="8878646660-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">re</span><span·cl[·...·truncated·by·diffoscope;·len:·217,·SHA:·ba09463c82415c72cda49f42e67f1ad04f0f0815337ba2836370a884513d05ee·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 2089 | </span><span·class="p"·data-group-id=" | 2089 | </span><span·class="p"·data-group-id="8878646660-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="8878646660-4">{</span><span·class="ss">re_pattern</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 2090 | ················</span><span·class="p"·data-group-id=" | 2090 | ················</span><span·class="p"·data-group-id="8878646660-5"><<</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">119</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="w"> |
| 2091 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 2091 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="8878646660-5">>></span><span·class="p"·data-group-id="8878646660-4">}</span><span·class="p"·data-group-id="8878646660-3">}</span><span·class="gp·unselectable"> |
| 2092 | 2>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">inspect</span><span·class="p"·data-group-id=" | 2092 | 2>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">inspect</span><span·class="p"·data-group-id="8878646660-6">(</span><span·class="n">MP</span><span·class="p">,</span><span·class="ss">namelist</span><span·class="p"·data-group-id="8878646660-6">)</span><span·class="p">.</span><span·class="w"> |
| 2093 | </span><span·class="p"·data-group-id=" | 2093 | </span><span·class="p"·data-group-id="8878646660-7">{</span><span·class="ss">namelist</span><span·class="p">,</span><span·class="p"·data-group-id="8878646660-8">[</span><span·class="p"·data-group-id="8878646660-9"><<</span><span·class="s">"A"</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·489,·SHA:·9a2b79ac4c46e67b69bc4fe13268e80341343ce22203f10bbd39ad9d5d8b4fd8·...·]-7">}</span><span·class="gp·unselectable"> |
| 2094 | 3>·</span><span·class="p"·data-group-id=" | 2094 | 3>·</span><span·class="p"·data-group-id="8878646660-12">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">MPD</span><span·class="p"·data-group-id="8878646660-12">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">re</span><span[·...·truncated·by·diffoscope;·len:·385,·SHA:·ec250978e28ca144328023748dde4cac65ec0b6a218e379c49866e7c33aecf5a·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 2095 | </span><span·class="p"·data-group-id=" | 2095 | </span><span·class="p"·data-group-id="8878646660-15">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="8878646660-16">{</span><span·class="ss">re_pattern</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 2096 | ················</span><span·class="p"·data-group-id=" | 2096 | ················</span><span·class="p"·data-group-id="8878646660-17"><<</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">119</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">8</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="w"> |
| 2097 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 2097 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="8878646660-17">>></span><span·class="p"·data-group-id="8878646660-16">}</span><span·class="p"·data-group-id="8878646660-15">}</span><span·class="gp·unselectable"> |
| 2098 | 4>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">inspect</span><span·class="p"·data-group-id=" | 2098 | 4>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">inspect</span><span·class="p"·data-group-id="8878646660-18">(</span><span·class="n">MPD</span><span·class="p">,</span><span·class="ss">namelist</span><span·class="p"·data-group-id="8878646660-18">)</span><span·class="p">.</span><span·class="w"> |
| 2099 | </span><span·class="p"·data-group-id=" | 2099 | </span><span·class="p"·data-group-id="8878646660-19">{</span><span·class="ss">namelist</span><span·class="p">,</span><span·class="p"·data-group-id="8878646660-20">[</span><span·class="p"·data-group-id="8878646660-21"><<</span><span·class="s">"B"</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·312,·SHA:·16df29e9eacedbc1a1009b23ace4735ad3cae9a28a1d81c9da160b6a083df44c·...·]-19">}</span></code></pre><p>Notice·in·the·second·example·that·the·duplicate·name·only·occurs·once·in·the |
| 2100 | returned·list,·and·that·the·list·is·in·alphabetical·order·regardless·of·where | 2100 | returned·list,·and·that·the·list·is·in·alphabetical·order·regardless·of·where |
| 2101 | the·names·are·positioned·in·the·regular·expression.·The·order·of·the·names·is | 2101 | the·names·are·positioned·in·the·regular·expression.·The·order·of·the·names·is |
| 2102 | the·same·as·the·order·of·captured·subexpressions·if·<code·class="inline">{capture,·all_names}</code>·is | 2102 | the·same·as·the·order·of·captured·subexpressions·if·<code·class="inline">{capture,·all_names}</code>·is |
| 2103 | specified·as·an·option·to·<a·href="#run/3"><code·class="inline">run/3</code></a>.·You·can·therefore·create·a·name-to-value | 2103 | specified·as·an·option·to·<a·href="#run/3"><code·class="inline">run/3</code></a>.·You·can·therefore·create·a·name-to-value |
| 2104 | mapping·from·the·result·of·<a·href="#run/3"><code·class="inline">run/3</code></a>·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id=" | 2104 | mapping·from·the·result·of·<a·href="#run/3"><code·class="inline">run/3</code></a>·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="3409585576-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">MP</span><span·class="p"·data-group-id="3409585576-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">re</span><span·cl[·...·truncated·by·diffoscope;·len:·217,·SHA:·6262bc3b7b87fdfcb965ac980eacefc3529f567e113b8a2552aef914df42eb0c·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 2105 | </span><span·class="p"·data-group-id=" | 2105 | </span><span·class="p"·data-group-id="3409585576-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3409585576-4">{</span><span·class="ss">re_pattern</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 2106 | ················</span><span·class="p"·data-group-id=" | 2106 | ················</span><span·class="p"·data-group-id="3409585576-5"><<</span><span·class="mi">69</span><span·class="p">,</span><span·class="mi">82</span><span·class="p">,</span><span·class="mi">67</span><span·class="p">,</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">119</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="w"> |
| 2107 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 2107 | ··················</span><span·class="mi">255</span><span·class="p">,</span><span·class="mi">255</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="3409585576-5">>></span><span·class="p"·data-group-id="3409585576-4">}</span><span·class="p"·data-group-id="3409585576-3">}</span><span·class="gp·unselectable"> |
| 2108 | 2>·</span><span·class="p"·data-group-id=" | 2108 | 2>·</span><span·class="p"·data-group-id="3409585576-6">{</span><span·class="ss">namelist</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="3409585576-6">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·251,·SHA:·281f07d29f00df0d369ef887d99e9f380721aa1b9905495a0a1381a8957065b9·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 2109 | </span><span·class="p"·data-group-id=" | 2109 | </span><span·class="p"·data-group-id="3409585576-8">{</span><span·class="ss">namelist</span><span·class="p">,</span><span·class="p"·data-group-id="3409585576-9">[</span><span·class="p"·data-group-id="3409585576-10"><<</span><span·class="s">"A"</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·491,·SHA:·070b47e1888d9e8c02458314a58d5dd49ee6818cedcd4a892a9c9ebd2deab3b3·...·]-8">}</span><span·class="gp·unselectable"> |
| 2110 | 3>·</span><span·class="p"·data-group-id="7384294459-13">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="n">L</span><span·class="p"·data-group-id="7384294459-13">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="7384294459-14">(</span><span·class="s">"AA"</span><span·class="p">,</span><span·class="n">MP</span><span·class="p">,</span><span·class="p"·data-group-id="7384294459-15">[</span><span·class="p"·data-group-id="7384294459-16">{</span><span·class="ss">capture</span><span·class="p">,</span><span·class="ss">all_names</span><span·class="p">,</span><span·class="ss">binary</span><span·class="p"·data-group-id="7384294459-16">}</span><span·class="p"·data-group-id="7384294459-15">]</span><span·class="p"·data-group-id="7384294459-14">)</span><span·class="p">.</span><span·class="w"> | ||
| 2111 | </span><span·class="p"·data-group-id=" | 2110 | 3>·</span><span·class="p"·data-group-id="3409585576-13">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="n">L</span><span·class="p"·data-group-id="3409585576-13">}</span><span·class="w">·</span><span·class="o">=</span><span·clas[·...·truncated·by·diffoscope;·len:·705,·SHA:·8088c15f0943c5f24f413df57884aec95e2ce28c53a3b6a6f930304116aab56d·...·]"> |
| 2111 | </span><span·class="p"·data-group-id="3409585576-17">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="3409585576-18">[</span><span·class="p"·data-group-id="3409585576-19"><<</span><span·class="s">"A"</span><span·class="p"·data-group-id="3409585576-19">>></span><span·class="p">,</span><span·class="p"·data-group-id="3409585576-20"><<</span><span·class="p"·data-group-id="3409585576-20">>></span><span·class="p">,</span><span·class="p"·data-group-id="3409585576-21"><<</span><span·class="p"·data-group-id="3409585576-21">>></span><span·class="p"·data-group-id="3409585576-18">]</span><span·class="p"·data-group-id="3409585576-17">}</span><span·class="gp·unselectable"> | ||
| 2112 | 4>·</span><span·class="n">NameMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">zip</span><span·class="p"·data-group-id=" | 2112 | 4>·</span><span·class="n">NameMap</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">zip</span><span·class="p"·data-group-id="3409585576-22">(</span><span·class="n">N</span><span·class="p">,</span><span·class="n">L</span><span·class="p"·data-group-id="3409585576-22">)</span><span·class="p">.</span><span·class="w"> |
| 2113 | </span><span·class="p"·data-group-id=" | 2113 | </span><span·class="p"·data-group-id="3409585576-23">[</span><span·class="p"·data-group-id="3409585576-24">{</span><span·class="p"·data-group-id="3409585576-25"><<</span><span·class="s">"A"</span><span·class="p"·data-group-id="3409585576-25">>></span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·1128,·SHA:·3ca3e066b72ab8e4b3697a8087bd59830f12e5472561dd1ef2f77b65c5d67875·...·]-23">]</span></code></pre> |
| 2114 | ··</section> | 2114 | ··</section> |
| 2115 | </section> | 2115 | </section> |
| 2116 | <section·class="detail"·id="replace/3"> | 2116 | <section·class="detail"·id="replace/3"> |
| 2117 | ··<div·class="detail-header"> | 2117 | ··<div·class="detail-header"> |
| 2118 | ····<a·href="#replace/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 2118 | ····<a·href="#replace/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 2119 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 2119 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2198, 24 lines modified | Offset 2198, 24 lines modified | ||
| 2198 | both·the·regular·expression·and·<code·class="inline">Subject</code>·are·to·specified·as·valid·Unicode | 2198 | both·the·regular·expression·and·<code·class="inline">Subject</code>·are·to·specified·as·valid·Unicode |
| 2199 | <code·class="inline">charlist()</code>s.</p><p>If·the·replacement·is·given·as·a·string,·it·can·contain·the·special·character | 2199 | <code·class="inline">charlist()</code>s.</p><p>If·the·replacement·is·given·as·a·string,·it·can·contain·the·special·character |
| 2200 | <code·class="inline">&</code>,·which·inserts·the·whole·matching·expression·in·the·result,·and·the·special | 2200 | <code·class="inline">&</code>,·which·inserts·the·whole·matching·expression·in·the·result,·and·the·special |
| 2201 | sequence·<code·class="inline">\</code>N·(where·N·is·an·integer·>·0),·<code·class="inline">\g</code>N,·or·<code·class="inline">\g{</code>N<code·class="inline">}</code>,·resulting·in·the | 2201 | sequence·<code·class="inline">\</code>N·(where·N·is·an·integer·>·0),·<code·class="inline">\g</code>N,·or·<code·class="inline">\g{</code>N<code·class="inline">}</code>,·resulting·in·the |
| 2202 | subexpression·number·N,·is·inserted·in·the·result.·If·no·subexpression·with·that | 2202 | subexpression·number·N,·is·inserted·in·the·result.·If·no·subexpression·with·that |
| 2203 | number·is·generated·by·the·regular·expression,·nothing·is·inserted.</p><p>To·insert·an·&·or·a·\·in·the·result,·precede·it·with·a·\.·Notice·that·Erlang | 2203 | number·is·generated·by·the·regular·expression,·nothing·is·inserted.</p><p>To·insert·an·&·or·a·\·in·the·result,·precede·it·with·a·\.·Notice·that·Erlang |
| 2204 | already·gives·a·special·meaning·to·\·in·literal·strings,·so·a·single·\·must·be | 2204 | already·gives·a·special·meaning·to·\·in·literal·strings,·so·a·single·\·must·be |
| 2205 | written·as·<code·class="inline">"\\"</code>·and·therefore·a·double·\·as·<code·class="inline">"\\\\"</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">replace</span><span·class="p"·data-group-id="9380502116-1">(</span><span·class="s">"abcd"</span><span·class="p">,</span><span·class="s">"c"</span><span·class="p">,</span><span·class="s">"[&]"</span><span·class="p">,</span><span·class="p"·data-group-id="9380502116-2">[</span><span·class="p"·data-group-id="9380502116-3">{</span><span·class="ss">return</span><span·class="p">,</span><span·class="ss">list</span><span·class="p"·data-group-id="9380502116-3">}</span><span·class="p"·data-group-id="9380502116-2">]</span><span·class="p"·data-group-id="9380502116-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 2206 | 2205 | written·as·<code·class="inline">"\\"</code>·and·therefore·a·double·\·as·<code·class="inline">"\\\\"</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·clas[·...·truncated·by·diffoscope;·len:·648,·SHA:·31f9d8ced1e9428b0f09c4d55131cc5c917f7c0f81e199ed8d875699210c15b6·...·]-1">)</span><span·class="p">.</span><span·class="w"> | |
| 2206 | </span><span·class="s">"ab[c]d"</span></code></pre><p>while</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">replace</span><span·class="p"·data-group-id="9508155209-1">(</span><span·class="s">"abcd"</span><span·class="p">,</span><span·class="s">"c"</span><span·class="p">,</span><span·class="s">"[\\&]"</span><span·class="p">,</span><span·class="p"·data-group-id="9508155209-2">[</span><span·class="p"·data-group-id="9508155209-3">{</span><span·class="ss">return</span><span·class="p">,</span><span·class="ss">list</span><span·class="p"·data-group-id="9508155209-3">}</span><span·class="p"·data-group-id="9508155209-2">]</span><span·class="p"·data-group-id="9508155209-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 2207 | </span><span·class="s">"ab[&]d"</span></code></pre><p>If·the·replacement·is·given·as·a·fun,·it·will·be·called·with·the·whole·matching | 2207 | </span><span·class="s">"ab[&]d"</span></code></pre><p>If·the·replacement·is·given·as·a·fun,·it·will·be·called·with·the·whole·matching |
| 2208 | expression·as·the·first·argument·and·a·list·of·subexpression·matches·in·the | 2208 | expression·as·the·first·argument·and·a·list·of·subexpression·matches·in·the |
| 2209 | order·in·which·they·appear·in·the·regular·expression.·The·returned·value·will·be | 2209 | order·in·which·they·appear·in·the·regular·expression.·The·returned·value·will·be |
| 2210 | inserted·in·the·result.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">replace</span><span·class="p"·data-group-id="18 | 2210 | inserted·in·the·result.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">replace</span><span·class="p"·data-group-id="4183228442-1">(</span><span·class="s">"abcd"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">".(.)"</span><span·class="p">,</span><span·class="w"> |
| 2211 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="18 | 2211 | ····</span><span·class="nf">fun</span><span·class="p"·data-group-id="4183228442-2">(</span><span·class="n">Whole</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4183228442-3">[</span><span·class="p"·data-group-id="4183228442-4"><<</span><span·class="n">C</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·133,·SHA:·b1e486cc9eeb2145c37bfdf56193e8d14295637c0645e51c373e89b46143a52b·...·]-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 2212 | ·········</span><span·class="p"·data-group-id="18 | 2212 | ·········</span><span·class="p"·data-group-id="4183228442-5"><<</span><span·class="sc">$#</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Whole</span><span·class="o">/</span><span·class="ss">binary</span><span·class="p">,</span><span·class="w">·</span><span·class="sc">$-</sp[·...·truncated·by·diffoscope;·len:·492,·SHA:·2b7b3161cccb5b28d70130ffe8a8327e5b0c7add83284a4e673b101b5de660fc·...·]-5">>></span><span·class="w"> |
| 2213 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 2213 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 2214 | ····</span><span·class="p"·data-group-id="18 | 2214 | ····</span><span·class="p"·data-group-id="4183228442-7">[</span><span·class="p"·data-group-id="4183228442-8">{</span><span·class="ss">return</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">list</span><span·class="p"·data-group-id="4183228442-8">}</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·72,·SHA:·4654ff37c68b829b2ed7bce6fea7b7797b303a4300721d1fccd4d15612a36c31·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 2215 | </span><span·class="s">"#ab-B#cd"</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Non-matching·optional·subexpressions·will·not·be·included·in·the·list·of | 2215 | </span><span·class="s">"#ab-B#cd"</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Non-matching·optional·subexpressions·will·not·be·included·in·the·list·of |
| 2216 | subexpression·matches·if·they·are·the·last·subexpressions·in·the·regular | 2216 | subexpression·matches·if·they·are·the·last·subexpressions·in·the·regular |
| 2217 | expression.</p><p><em>Example:</em></p><p>The·regular·expression·<code·class="inline">"(a)(b)?(c)?"</code>·("a",·optionally·followed·by·"b", | 2217 | expression.</p><p><em>Example:</em></p><p>The·regular·expression·<code·class="inline">"(a)(b)?(c)?"</code>·("a",·optionally·followed·by·"b", |
| 2218 | optionally·followed·by·"c")·will·create·the·following·subexpression·lists:</p><ul><li><code·class="inline">[<<"a">>,·<<"b">>,·<<"c">>]</code>·when·applied·to·the·string·<code·class="inline">"abc"</code></li><li><code·class="inline">[<<"a">>,·<<>>,·<<"c">>]</code>·when·applied·to·the·string·<code·class="inline">"acx"</code></li><li><code·class="inline">[<<"a">>,·<<"b">>]</code>·when·applied·to·the·string·<code·class="inline">"abx"</code></li><li><code·class="inline">[<<"a">>]</code>·when·applied·to·the·string·<code·class="inline">"axx"</code></li></ul></section><p>As·with·<a·href="#run/3"><code·class="inline">run/3</code></a>,·compilation·errors·raise·the·<code·class="inline">badarg</code>·exception. | 2218 | optionally·followed·by·"c")·will·create·the·following·subexpression·lists:</p><ul><li><code·class="inline">[<<"a">>,·<<"b">>,·<<"c">>]</code>·when·applied·to·the·string·<code·class="inline">"abc"</code></li><li><code·class="inline">[<<"a">>,·<<>>,·<<"c">>]</code>·when·applied·to·the·string·<code·class="inline">"acx"</code></li><li><code·class="inline">[<<"a">>,·<<"b">>]</code>·when·applied·to·the·string·<code·class="inline">"abx"</code></li><li><code·class="inline">[<<"a">>]</code>·when·applied·to·the·string·<code·class="inline">"axx"</code></li></ul></section><p>As·with·<a·href="#run/3"><code·class="inline">run/3</code></a>,·compilation·errors·raise·the·<code·class="inline">badarg</code>·exception. |
| 2219 | <a·href="#compile/2"><code·class="inline">compile/2</code></a>·can·be·used·to·get·more·information·about·the·error.</p> | 2219 | <a·href="#compile/2"><code·class="inline">compile/2</code></a>·can·be·used·to·get·more·information·about·the·error.</p> |
| 2220 | ··</section> | 2220 | ··</section> |
| 2221 | </section> | 2221 | </section> |
| Offset 2320, 27 lines modified | Offset 2320, 27 lines modified | ||
| 2320 | any·matching·subexpressions·(or·as·specified·by·option·<code·class="inline">capture</code>.·The | 2320 | any·matching·subexpressions·(or·as·specified·by·option·<code·class="inline">capture</code>.·The |
| 2321 | <code·class="inline">Captured</code>·part·of·the·return·value·is·hence·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a>·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a>s·when | 2321 | <code·class="inline">Captured</code>·part·of·the·return·value·is·hence·a·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a>·of·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:list/0"><code·class="inline">list/0</code></a>s·when |
| 2322 | this·option·is·specified.</p><p>The·interaction·of·option·<code·class="inline">global</code>·with·a·regular·expression·that·matches·an | 2322 | this·option·is·specified.</p><p>The·interaction·of·option·<code·class="inline">global</code>·with·a·regular·expression·that·matches·an |
| 2323 | empty·string·surprises·some·users.·When·option·<code·class="inline">global</code>·is·specified, | 2323 | empty·string·surprises·some·users.·When·option·<code·class="inline">global</code>·is·specified, |
| 2324 | <a·href="#run/3"><code·class="inline">run/3</code></a>·handles·empty·matches·in·the·same·way·as·Perl:·a | 2324 | <a·href="#run/3"><code·class="inline">run/3</code></a>·handles·empty·matches·in·the·same·way·as·Perl:·a |
| 2325 | zero-length·match·at·any·point·is·also·retried·with·options | 2325 | zero-length·match·at·any·point·is·also·retried·with·options |
| 2326 | <code·class="inline">[anchored,·notempty_atstart]</code>.·If·that·search·gives·a·result·of·length·>·0, | 2326 | <code·class="inline">[anchored,·notempty_atstart]</code>.·If·that·search·gives·a·result·of·length·>·0, |
| 2327 | the·result·is·included.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id=" | 2327 | the·result·is·included.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="9449667284-1">(</span><span·class="s">"cat"</span><span·class="p">,</span><span·class="s">"(|at)"</span><span·class="p">,</span><span·class="p"·data-group-id="9449667284-2">[</span><span·class="ss">global</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·69,·SHA:·b556347a5683cae13517d96dcb42373f85ccc3961d54b027fec748d13a38edc8·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·following·matchings·are·performed:</p><ul><li><p><strong>At·offset·<code·class="inline">0</code></strong>·-·The·regular·expression·<code·class="inline">(|at)</code>·first·match·at·the |
| 2328 | initial·position·of·string·<code·class="inline">cat</code>,·giving·the·result·set·<code·class="inline">[{0,0},{0,0}]</code>·(the | 2328 | initial·position·of·string·<code·class="inline">cat</code>,·giving·the·result·set·<code·class="inline">[{0,0},{0,0}]</code>·(the |
| 2329 | second·<code·class="inline">{0,0}</code>·is·because·of·the·subexpression·marked·by·the·parentheses). | 2329 | second·<code·class="inline">{0,0}</code>·is·because·of·the·subexpression·marked·by·the·parentheses). |
| 2330 | As·the·length·of·the·match·is·0,·we·do·not·advance·to·the·next·position·yet.</p></li><li><p><strong>At·offset·<code·class="inline">0</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·The·search·is | 2330 | As·the·length·of·the·match·is·0,·we·do·not·advance·to·the·next·position·yet.</p></li><li><p><strong>At·offset·<code·class="inline">0</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·The·search·is |
| 2331 | retried·with·options·<code·class="inline">[anchored,·notempty_atstart]</code>·at·the·same·position, | 2331 | retried·with·options·<code·class="inline">[anchored,·notempty_atstart]</code>·at·the·same·position, |
| 2332 | which·does·not·give·any·interesting·result·of·longer·length,·so·the·search | 2332 | which·does·not·give·any·interesting·result·of·longer·length,·so·the·search |
| 2333 | position·is·advanced·to·the·next·character·(<code·class="inline">a</code>).</p></li><li><p><strong>At·offset·<code·class="inline">1</code></strong>·-·The·search·results·in·<code·class="inline">[{1,0},{1,0}]</code>,·so·this·search·is | 2333 | position·is·advanced·to·the·next·character·(<code·class="inline">a</code>).</p></li><li><p><strong>At·offset·<code·class="inline">1</code></strong>·-·The·search·results·in·<code·class="inline">[{1,0},{1,0}]</code>,·so·this·search·is |
| 2334 | also·repeated·with·the·extra·options.</p></li><li><p><strong>At·offset·<code·class="inline">1</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·Alternative·<code·class="inline">ab</code>·is | 2334 | also·repeated·with·the·extra·options.</p></li><li><p><strong>At·offset·<code·class="inline">1</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·Alternative·<code·class="inline">ab</code>·is |
| 2335 | found·and·the·result·is·[{1,2},{1,2}].·The·result·is·added·to·the·list | 2335 | found·and·the·result·is·[{1,2},{1,2}].·The·result·is·added·to·the·list |
| 2336 | of·results·and·the·position·in·the·search·string·is·advanced·two·steps.</p></li><li><p><strong>At·offset·<code·class="inline">3</code></strong>·-·The·search·once·again·matches·the·empty·string,·giving | 2336 | of·results·and·the·position·in·the·search·string·is·advanced·two·steps.</p></li><li><p><strong>At·offset·<code·class="inline">3</code></strong>·-·The·search·once·again·matches·the·empty·string,·giving |
| 2337 | <code·class="inline">[{3,0},{3,0}]</code>.</p></li><li><p><strong>At·offset·<code·class="inline">1</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·This·gives·no·result | 2337 | <code·class="inline">[{3,0},{3,0}]</code>.</p></li><li><p><strong>At·offset·<code·class="inline">1</code>·with·<code·class="inline">[anchored,·notempty_atstart]</code></strong>·-·This·gives·no·result |
| 2338 | of·length·>·0·and·we·are·at·the·last·position,·so·the·global·search·is | 2338 | of·length·>·0·and·we·are·at·the·last·position,·so·the·global·search·is |
| 2339 | complete.</p></li></ul><p>The·result·of·the·call·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 2339 | complete.</p></li></ul><p>The·result·of·the·call·is:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0103635667-1">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="0103635667-2">[</span><span·class="p"·data-group-id="0103635667-3">[</span><span·class="p"·data-group-id="0103635667-4">{</span><span·class="mi">0</sp[·...·truncated·by·diffoscope;·len:·2008,·SHA:·3d64fc05fb8367a8c03aa83d25aa709f3696eb929c0e571237c86134615ce8c2·...·]-1">}</span></code></pre></li><li><p><strong><code·class="inline">notempty</code></strong>·-·An·empty·string·is·not·considered·to·be·a·valid·match·if·this |
| 2340 | option·is·specified.·If·alternatives·in·the·pattern·exist,·they·are·tried.·If | 2340 | option·is·specified.·If·alternatives·in·the·pattern·exist,·they·are·tried.·If |
| 2341 | all·the·alternatives·match·the·empty·string,·the·entire·match·fails.</p><p><em>Example:</em></p><p>If·the·following·pattern·is·applied·to·a·string·not·beginning·with·"a"·or·"b", | 2341 | all·the·alternatives·match·the·empty·string,·the·entire·match·fails.</p><p><em>Example:</em></p><p>If·the·following·pattern·is·applied·to·a·string·not·beginning·with·"a"·or·"b", |
| 2342 | it·would·normally·match·the·empty·string·at·the·start·of·the·subject:</p><pre><code·class="text">a?b?</code></pre><p>With·option·<code·class="inline">notempty</code>,·this·match·is·invalid,·so·<a·href="#run/3"><code·class="inline">run/3</code></a>·searches | 2342 | it·would·normally·match·the·empty·string·at·the·start·of·the·subject:</p><pre><code·class="text">a?b?</code></pre><p>With·option·<code·class="inline">notempty</code>,·this·match·is·invalid,·so·<a·href="#run/3"><code·class="inline">run/3</code></a>·searches |
| 2343 | further·into·the·string·for·occurrences·of·"a"·or·"b".</p></li><li><p><strong><code·class="inline">notempty_atstart</code></strong>·-·Like·<code·class="inline">notempty</code>,·except·that·an·empty·string·match | 2343 | further·into·the·string·for·occurrences·of·"a"·or·"b".</p></li><li><p><strong><code·class="inline">notempty_atstart</code></strong>·-·Like·<code·class="inline">notempty</code>,·except·that·an·empty·string·match |
| 2344 | that·is·not·at·the·start·of·the·subject·is·permitted.·If·the·pattern·is | 2344 | that·is·not·at·the·start·of·the·subject·is·permitted.·If·the·pattern·is |
| 2345 | anchored,·such·a·match·can·occur·only·if·the·pattern·contains·\K.</p><p>Perl·has·no·direct·equivalent·of·<code·class="inline">notempty</code>·or·<code·class="inline">notempty_atstart</code>,·but·it·does | 2345 | anchored,·such·a·match·can·occur·only·if·the·pattern·contains·\K.</p><p>Perl·has·no·direct·equivalent·of·<code·class="inline">notempty</code>·or·<code·class="inline">notempty_atstart</code>,·but·it·does |
| 2346 | make·a·special·case·of·a·pattern·match·of·the·empty·string·within·its·split() | 2346 | make·a·special·case·of·a·pattern·match·of·the·empty·string·within·its·split() |
| Offset 2403, 20 lines modified | Offset 2403, 20 lines modified | ||
| 2403 | than·the·total·number·of·calls,·because·not·all·calls·to·match()·are | 2403 | than·the·total·number·of·calls,·because·not·all·calls·to·match()·are |
| 2404 | recursive.·This·limit·is·of·use·only·if·it·is·set·smaller·than | 2404 | recursive.·This·limit·is·of·use·only·if·it·is·set·smaller·than |
| 2405 | match_limit.</p><p>Limiting·the·recursion·depth·limits·the·amount·of·machine·stack·that | 2405 | match_limit.</p><p>Limiting·the·recursion·depth·limits·the·amount·of·machine·stack·that |
| 2406 | can·be·used,·or,·when·PCRE·has·been·compiled·to·use·memory·on·the·heap | 2406 | can·be·used,·or,·when·PCRE·has·been·compiled·to·use·memory·on·the·heap |
| 2407 | instead·of·the·stack,·the·amount·of·heap·memory·that·can·be·used.</p></blockquote><p>The·Erlang·VM·uses·a·PCRE·library·where·heap·memory·is·used·when·regular | 2407 | instead·of·the·stack,·the·amount·of·heap·memory·that·can·be·used.</p></blockquote><p>The·Erlang·VM·uses·a·PCRE·library·where·heap·memory·is·used·when·regular |
| 2408 | expression·match·recursion·occurs.·This·therefore·limits·the·use·of·machine | 2408 | expression·match·recursion·occurs.·This·therefore·limits·the·use·of·machine |
| 2409 | heap,·not·C·stack.</p><p>Specifying·a·lower·value·can·result·in·matches·with·deep·recursion·failing, | 2409 | heap,·not·C·stack.</p><p>Specifying·a·lower·value·can·result·in·matches·with·deep·recursion·failing, |
| 2410 | when·they·should·have·matched:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id=" | 2410 | when·they·should·have·matched:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="6700401003-1">(</span><span·class="s">"aaaaaaaaaaaaaz"</span><span·class="p">,</span><span·class="s">"(a+)*z"</span><span·class="p"·data-group-id="6700401003-1">)</span><span·class="p">.</span><span·class="w"> |
| 2411 | </span><span·class="p"·data-group-id="3014236585-2">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="3014236585-3">[</span><span·class="p"·data-group-id="3014236585-4">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">14</span><span·class="p"·data-group-id="3014236585-4">}</span><span·class="p">,</span><span·class="p"·data-group-id="3014236585-5">{</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">13</span><span·class="p"·data-group-id="3014236585-5">}</span><span·class="p"·data-group-id="3014236585-3">]</span><span·class="p"·data-group-id="3014236585-2">}</span><span·class="gp·unselectable"> | ||
| 2412 | 2411 | </span><span·class="p"·data-group-id="6700401003-2">{</span><span·class="ss">match</span><span·class="p">,</span><span·class="p"·data-group-id="6700401003-3">[</span><span·class="p"·data-group-id="6700401003-4">{</span><span·class="mi">0</span><span·class=[·...·truncated·by·diffoscope;·len:·430,·SHA:·655bbd221e2570bf615416a23347fa962cac38ac24ffbe265fb96330200571d3·...·]"> | |
| 2412 | 2>·</span><span·class="nc">re</span><span·class="p">:</span><span·class="nf">run</span><span·class="p"·data-group-id="6700401003-6">(</span><span·class="s">"aaaaaaaaaaaaaz"</span><span·class="p">,</span><span·class="s">"(a+)*z"</span><span·class="p">,</span><span·class="p"·data-group-id="6700401003-7">[</span><span·class="p"·data-group-id="6700401003-8">{</span><span·class="ss">match_limit_recursion</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="6700401003-8">}</span><span·class="p"·data-group-id="6700401003-7">]</span><span·class="p"·data-group-id="6700401003-6">)</span><span·class="p">.</span><span·class="w"> | ||
| Max diff block lines reached; 54629/117227 bytes (46.60%) of diff not shown. | |||
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 152, 19 lines modified | Offset 152, 19 lines modified | ||
| 152 | <p>The·following·functions·in·this·module·also·exist·and·provide·the·same | 152 | <p>The·following·functions·in·this·module·also·exist·and·provide·the·same |
| 153 | functionality·in·the·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>·and·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>·modules.·That·is,·by·only | 153 | functionality·in·the·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>·and·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>·modules.·That·is,·by·only |
| 154 | changing·the·module·name·for·each·call,·you·can·try·out·different·set | 154 | changing·the·module·name·for·each·call,·you·can·try·out·different·set |
| 155 | representations.</p><ul><li><a·href="#add_element/2"><code·class="inline">add_element/2</code></a></li><li><a·href="#del_element/2"><code·class="inline">del_element/2</code></a></li><li><a·href="#filter/2"><code·class="inline">filter/2</code></a></li><li><a·href="#filtermap/2"><code·class="inline">filtermap/2</code></a></li><li><a·href="#fold/3"><code·class="inline">fold/3</code></a></li><li><a·href="#from_list/1"><code·class="inline">from_list/1</code></a></li><li><a·href="#intersection/1"><code·class="inline">intersection/1</code></a></li><li><a·href="#intersection/2"><code·class="inline">intersection/2</code></a></li><li><a·href="#is_element/2"><code·class="inline">is_element/2</code></a></li><li><a·href="#is_empty/1"><code·class="inline">is_empty/1</code></a></li><li><a·href="#is_equal/2"><code·class="inline">is_equal/2</code></a></li><li><a·href="#is_set/1"><code·class="inline">is_set/1</code></a></li><li><a·href="#is_subset/2"><code·class="inline">is_subset/2</code></a></li><li><a·href="#map/2"><code·class="inline">map/2</code></a></li><li><a·href="#new/0"><code·class="inline">new/0</code></a></li><li><a·href="#size/1"><code·class="inline">size/1</code></a></li><li><a·href="#subtract/2"><code·class="inline">subtract/2</code></a></li><li><a·href="#to_list/1"><code·class="inline">to_list/1</code></a></li><li><a·href="#union/1"><code·class="inline">union/1</code></a></li><li><a·href="#union/2"><code·class="inline">union/2</code></a></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>While·the·three·set·implementations·offer·the·same·<em>functionality</em>·with | 155 | representations.</p><ul><li><a·href="#add_element/2"><code·class="inline">add_element/2</code></a></li><li><a·href="#del_element/2"><code·class="inline">del_element/2</code></a></li><li><a·href="#filter/2"><code·class="inline">filter/2</code></a></li><li><a·href="#filtermap/2"><code·class="inline">filtermap/2</code></a></li><li><a·href="#fold/3"><code·class="inline">fold/3</code></a></li><li><a·href="#from_list/1"><code·class="inline">from_list/1</code></a></li><li><a·href="#intersection/1"><code·class="inline">intersection/1</code></a></li><li><a·href="#intersection/2"><code·class="inline">intersection/2</code></a></li><li><a·href="#is_element/2"><code·class="inline">is_element/2</code></a></li><li><a·href="#is_empty/1"><code·class="inline">is_empty/1</code></a></li><li><a·href="#is_equal/2"><code·class="inline">is_equal/2</code></a></li><li><a·href="#is_set/1"><code·class="inline">is_set/1</code></a></li><li><a·href="#is_subset/2"><code·class="inline">is_subset/2</code></a></li><li><a·href="#map/2"><code·class="inline">map/2</code></a></li><li><a·href="#new/0"><code·class="inline">new/0</code></a></li><li><a·href="#size/1"><code·class="inline">size/1</code></a></li><li><a·href="#subtract/2"><code·class="inline">subtract/2</code></a></li><li><a·href="#to_list/1"><code·class="inline">to_list/1</code></a></li><li><a·href="#union/1"><code·class="inline">union/1</code></a></li><li><a·href="#union/2"><code·class="inline">union/2</code></a></li></ul><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>While·the·three·set·implementations·offer·the·same·<em>functionality</em>·with |
| 156 | respect·to·the·aforementioned·functions,·their·overall·<em>behavior</em>·may·differ. | 156 | respect·to·the·aforementioned·functions,·their·overall·<em>behavior</em>·may·differ. |
| 157 | As·mentioned,·this·module·considers·elements·as·different·if·and·only·if·they | 157 | As·mentioned,·this·module·considers·elements·as·different·if·and·only·if·they |
| 158 | do·not·match·(<code·class="inline">=:=</code>),·while·both·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>·consider·elements | 158 | do·not·match·(<code·class="inline">=:=</code>),·while·both·<a·href="ordsets.html"><code·class="inline">ordsets</code></a>·and·<a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>·consider·elements |
| 159 | as·different·if·and·only·if·they·do·not·compare·equal·(<code·class="inline">==</code>).</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id=" | 159 | as·different·if·and·only·if·they·do·not·compare·equal·(<code·class="inline">==</code>).</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id="7850043309-1">(</span><span·class="mf">1.0</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">sets</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="7850043309-2">(</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·204,·SHA:·d29e335d485f55032dd0bbbac39e51720e23aadbf6bf6b0015e2041dd5ed82af·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 160 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 160 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 161 | 2>·</span><span·class="nc">ordsets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id=" | 161 | 2>·</span><span·class="nc">ordsets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id="7850043309-4">(</span><span·class="mf">1.0</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">ordsets</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="7850043309-5">(</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·207,·SHA:·3052dc092d654e8567d129a062dceec170fd7eb27f9abeff65c752bc4c5a2e99·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 162 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 163 | 2>·</span><span·class="nc">gb_sets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id=" | 163 | 2>·</span><span·class="nc">gb_sets</span><span·class="p">:</span><span·class="nf">is_element</span><span·class="p"·data-group-id="7850043309-7">(</span><span·class="mf">1.0</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">gb_sets</span><span·class="p">:</span><span·class="nf">from_list</span><span·class="p"·data-group-id="7850043309-8">(</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·207,·SHA:·4b4a3212421f5bc2994e9a2b19d2ad9d23514050d791860f51c12f5d1dd5c718·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="ss">true</span></code></pre></section><h2·id="module-see-also"·class="section-heading"> | 164 | </span><span·class="ss">true</span></code></pre></section><h2·id="module-see-also"·class="section-heading"> |
| 165 | ··<a·href="#module-see-also"·class="hover-link"> | 165 | ··<a·href="#module-see-also"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">See·Also</span> | 168 | ··<span·class="text">See·Also</span> |
| 169 | </h2> | 169 | </h2> |
| 170 | <p><a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>,·<a·href="ordsets.html"><code·class="inline">ordsets</code></a></p> | 170 | <p><a·href="gb_sets.html"><code·class="inline">gb_sets</code></a>,·<a·href="ordsets.html"><code·class="inline">ordsets</code></a></p> |
| Offset 1172, 15 lines modified | Offset 1172, 15 lines modified | ||
| 1172 | ······<p·class="built-using"> | 1172 | ······<p·class="built-using"> |
| 1173 | ········Built·using | 1173 | ········Built·using |
| 1174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1176 | ······</p> | 1176 | ······</p> |
| 1177 | <p>Copyright·©·1996-202 | 1177 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1178 | ····</footer> | 1178 | ····</footer> |
| 1179 | ··</div> | 1179 | ··</div> |
| 1180 | </main> | 1180 | </main> |
| 1181 | </div> | 1181 | </div> |
| 1182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1183 | ··<script> | 1183 | ··<script> |
| 1184 | ··let·initialized·=·false; | 1184 | ··let·initialized·=·false; |
| Offset 162, 15 lines modified | Offset 162, 15 lines modified | ||
| 162 | used·by·the·compiler·are·unavailable·at·runtime.·So,·to·read·the·record·syntax | 162 | used·by·the·compiler·are·unavailable·at·runtime.·So,·to·read·the·record·syntax |
| 163 | and·print·tuples·as·records·when·possible,·record·definitions·must·be·maintained | 163 | and·print·tuples·as·records·when·possible,·record·definitions·must·be·maintained |
| 164 | by·the·shell·itself.</p><p>The·shell·commands·for·reading,·defining,·forgetting,·listing,·and·printing | 164 | by·the·shell·itself.</p><p>The·shell·commands·for·reading,·defining,·forgetting,·listing,·and·printing |
| 165 | records·are·described·below.·Notice·that·each·job·has·its·own·set·of·record | 165 | records·are·described·below.·Notice·that·each·job·has·its·own·set·of·record |
| 166 | definitions.·To·facilitate·matters,·record·definitions·in·modules | 166 | definitions.·To·facilitate·matters,·record·definitions·in·modules |
| 167 | <code·class="inline">shell_default</code>·and·<code·class="inline">user_default</code>·(if·loaded)·are·read·each·time·a·new·job·is | 167 | <code·class="inline">shell_default</code>·and·<code·class="inline">user_default</code>·(if·loaded)·are·read·each·time·a·new·job·is |
| 168 | started.·For·example,·adding·the·following·line·to·<code·class="inline">user_default</code>·makes·the | 168 | started.·For·example,·adding·the·following·line·to·<code·class="inline">user_default</code>·makes·the |
| 169 | definition·of·<code·class="inline">file_info</code>·readily·available·in·the·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 169 | definition·of·<code·class="inline">file_info</code>·readily·available·in·the·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="0628276681-1">(</span><span·class="s">"kernel/include/file.hrl"</span><span·class="p"·data-group-id="0628276681-1">)</span><span·class="p">.</span></code></pre><p>The·shell·runs·in·two·modes:</p><ul><li><code·class="inline">Normal·(possibly·restricted)</code>·mode,·in·which·commands·can·be·edited·and |
| 170 | expressions·evaluated</li><li>Job·Control·Mode,·<code·class="inline">JCL</code>,·in·which·jobs·can·be·started,·killed,·detached,·and | 170 | expressions·evaluated</li><li>Job·Control·Mode,·<code·class="inline">JCL</code>,·in·which·jobs·can·be·started,·killed,·detached,·and |
| 171 | connected</li></ul><p>Only·the·currently·connected·job·can·'talk'·to·the·shell.</p><h2·id="module-shell-commands"·class="section-heading"> | 171 | connected</li></ul><p>Only·the·currently·connected·job·can·'talk'·to·the·shell.</p><h2·id="module-shell-commands"·class="section-heading"> |
| 172 | ··<a·href="#module-shell-commands"·class="hover-link"> | 172 | ··<a·href="#module-shell-commands"·class="hover-link"> |
| 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 174 | ··</a> | 174 | ··</a> |
| 175 | ··<span·class="text">Shell·Commands</span> | 175 | ··<span·class="text">Shell·Commands</span> |
| 176 | </h2> | 176 | </h2> |
| Offset 230, 114 lines modified | Offset 230, 114 lines modified | ||
| 230 | ··<a·href="#module-example"·class="hover-link"> | 230 | ··<a·href="#module-example"·class="hover-link"> |
| 231 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 231 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 232 | ··</a> | 232 | ··</a> |
| 233 | ··<span·class="text">Example</span> | 233 | ··<span·class="text">Example</span> |
| 234 | </h2> | 234 | </h2> |
| 235 | <p>The·following·example·is·a·long·dialog·with·the·shell.·Commands·starting·with | 235 | <p>The·following·example·is·a·long·dialog·with·the·shell.·Commands·starting·with |
| 236 | <code·class="inline">></code>·are·inputs·to·the·shell.·All·other·lines·are·output·from·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">strider</span><span·class="w">·</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> | 236 | <code·class="inline">></code>·are·inputs·to·the·shell.·All·other·lines·are·output·from·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="ss">strider</span><span·class="w">·</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> |
| 237 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id="1 | 237 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="p"·data-group-id="1816941387-1">(</span><span·class="n">BEAM</span><span·class="p"·data-group-id="1816941387-1">)</span><span·class="w">·</span><span·class="ss">emulator</span><span·class="w">·</span><span·class="ss">version</span><span·class="w">·</span><span·class="mf">5.3[·...·truncated·by·diffoscope;·len:·363,·SHA:·6fa1eb20d4a191b050f1357ab08d4d8dffad2ccaa2816d870110c6eeaab5e13e·...·]-3">]</span><span·class="w"> |
| 238 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="1 | 238 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="1816941387-4">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="1816941387-4">)</span><span·class="gp·unselectable"> |
| 239 | 1>·</span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="p">.</span><span·class="w"> | 239 | 1>·</span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="s">"abcd"</span></code></pre><p>Command·1·sets·variable·<code·class="inline">Str</code>·to·string·<code·class="inline">"abcd"</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">length</span><span·class="p"·data-group-id=" | 240 | </span><span·class="s">"abcd"</span></code></pre><p>Command·1·sets·variable·<code·class="inline">Str</code>·to·string·<code·class="inline">"abcd"</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="n">L</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">length</span><span·class="p"·data-group-id="5752890455-1">(</span><span·class="n">Str</span><span·class="p"·data-group-id="5752890455-1">)</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="mi">4</span></code></pre><p>Command·2·sets·<code·class="inline">L</code>·to·the·length·of·string·<code·class="inline">Str</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="n">Descriptor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4341819215-1">{</span><span·class="n">L</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">list_to_atom</span><span·class="p"·data-group-id="4341819215-2">(</span><span·class="n">Str</span><span·class="p"·data-group-id="4341819215-2">)</span><span·class="p"·data-group-id="4341819215-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 242 | </span><span·class=" | 241 | </span><span·class="mi">4</span></code></pre><p>Command·2·sets·<code·class="inline">L</code>·to·the·length·of·string·<code·class="inline">Str</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="n">Descriptor</span[·...·truncated·by·diffoscope;·len:·459,·SHA:·33ca841a2c1b804e07d4be92db2ae6996fa7eb67936fafeae80aaf58fd16ee78·...·] |
| 242 | </span><span·class="p"·data-group-id="1498002288-3">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="1498002288-3">}</span></code></pre><p>Command·3·builds·the·tuple·<code·class="inline">Descriptor</code>,·evaluating·the·BIF | ||
| 243 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#list_to_atom/1"><code·class="inline">list_to_atom/1</code>·</a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="n">L</span><span·class="p">.</span><span·class="w"> | 243 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#list_to_atom/1"><code·class="inline">list_to_atom/1</code>·</a>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="n">L</span><span·class="p">.</span><span·class="w"> |
| 244 | </span><span·class="mi">4</span></code></pre><p>Command·4·prints·the·value·of·variable·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nf">b</span><span·class="p"·data-group-id="7 | 244 | </span><span·class="mi">4</span></code></pre><p>Command·4·prints·the·value·of·variable·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nf">b</span><span·class="p"·data-group-id="7360441937-1">(</span><span·class="p"·data-group-id="7360441937-1">)</span><span·class="p">.</span><span·class="w"> |
| 245 | </span><span·class="n">Descriptor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 245 | </span><span·class="n">Descriptor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7360441937-2">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="7360441937-2">}</span><span·class="w"> |
| 246 | </span><span·class="n">L</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="w"> | 246 | </span><span·class="n">L</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">4</span><span·class="w"> |
| 247 | </span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="w"> | 247 | </span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="w"> |
| 248 | </span><span·class="ss">ok</span></code></pre><p>Command·5·evaluates·the·internal·shell·command·<code·class="inline">b()</code>,·which·is·an·abbreviation | 248 | </span><span·class="ss">ok</span></code></pre><p>Command·5·evaluates·the·internal·shell·command·<code·class="inline">b()</code>,·which·is·an·abbreviation |
| 249 | of·"bindings".·This·prints·the·current·shell·variables·and·their·bindings.·<code·class="inline">ok</code> | 249 | of·"bindings".·This·prints·the·current·shell·variables·and·their·bindings.·<code·class="inline">ok</code> |
| 250 | at·the·end·is·the·return·value·of·function·<code·class="inline">b()</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 250 | at·the·end·is·the·return·value·of·function·<code·class="inline">b()</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nf">f</span><span·class="p"·data-group-id="5665407164-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="5665407164-1">)</span><span·class="p">.</span><span·class="w"> |
| 251 | </span><span·class="ss">ok</span></code></pre><p>Command·6·evaluates·the·internal·shell·command·<code·class="inline">f(L)</code>·(abbreviation·of | 251 | </span><span·class="ss">ok</span></code></pre><p>Command·6·evaluates·the·internal·shell·command·<code·class="inline">f(L)</code>·(abbreviation·of |
| 252 | "forget").·The·value·of·variable·<code·class="inline">L</code>·is·removed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nf">b</span><span·class="p"·data-group-id=" | 252 | "forget").·The·value·of·variable·<code·class="inline">L</code>·is·removed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nf">b</span><span·class="p"·data-group-id="9072471733-1">(</span><span·class="p"·data-group-id="9072471733-1">)</span><span·class="p">.</span><span·class="w"> |
| 253 | </span><span·class="n">Descriptor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 253 | </span><span·class="n">Descriptor</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9072471733-2">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="9072471733-2">}</span><span·class="w"> |
| 254 | </span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="w"> | 254 | </span><span·class="n">Str</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"abcd"</span><span·class="w"> |
| 255 | </span><span·class="ss">ok</span></code></pre><p>Command·7·prints·the·new·bindings.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 255 | </span><span·class="ss">ok</span></code></pre><p>Command·7·prints·the·new·bindings.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">8>·</span><span·class="nf">f</span><span·class="p"·data-group-id="6741663402-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="6741663402-1">)</span><span·class="p">.</span><span·class="w"> |
| 256 | </span><span·class="ss">ok</span></code></pre><p>Command·8·has·no·effect,·as·<code·class="inline">L</code>·has·no·value.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">9>·</span><span·class="p"·data-group-id=" | 256 | </span><span·class="ss">ok</span></code></pre><p>Command·8·has·no·effect,·as·<code·class="inline">L</code>·has·no·value.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">9>·</span><span·class="p"·data-group-id="0937011610-1">{</span><span·class="n">L</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="0937011610-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Descriptor</span><span·class="p">.</span><span·class="w"> |
| 257 | </span><span·class="p"·data-group-id=" | 257 | </span><span·class="p"·data-group-id="0937011610-2">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="0937011610-2">}</span></code></pre><p>Command·9·performs·a·pattern·matching·operation·on·<code·class="inline">Descriptor</code>,·binding·a·new |
| 258 | value·to·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">10>·</span><span·class="n">L</span><span·class="p">.</span><span·class="w"> | 258 | value·to·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">10>·</span><span·class="n">L</span><span·class="p">.</span><span·class="w"> |
| 259 | </span><span·class="mi">4</span></code></pre><p>Command·10·prints·the·current·value·of·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">11>·</span><span·class="p"·data-group-id="6 | 259 | </span><span·class="mi">4</span></code></pre><p>Command·10·prints·the·current·value·of·<code·class="inline">L</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">11>·</span><span·class="p"·data-group-id="5650934189-1">{</span><span·class="n">P</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Q</span><span·class="p">,</span><span·class="w">·</span><span·class="n">R</span><span·class="p"·data-group-id="5650934189-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Descriptor</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·{4,abcd}</span></code></pre><p>Command·11·tries·to·match·<code·class="inline">{P,·Q,·R}</code>·against·<code·class="inline">Descriptor</code>,·which·is·<code·class="inline">{4,·abc}</code>. | 260 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·{4,abcd}</span></code></pre><p>Command·11·tries·to·match·<code·class="inline">{P,·Q,·R}</code>·against·<code·class="inline">Descriptor</code>,·which·is·<code·class="inline">{4,·abc}</code>. |
| 261 | The·match·fails·and·none·of·the·new·variables·become·bound.·The·printout | 261 | The·match·fails·and·none·of·the·new·variables·become·bound.·The·printout |
| 262 | starting·with·"<code·class="inline">**·exception·error:</code>"·is·not·the·value·of·the·expression·(the | 262 | starting·with·"<code·class="inline">**·exception·error:</code>"·is·not·the·value·of·the·expression·(the |
| 263 | expression·had·no·value·because·its·evaluation·failed),·but·a·warning·printed·by | 263 | expression·had·no·value·because·its·evaluation·failed),·but·a·warning·printed·by |
| 264 | the·system·to·inform·the·user·that·an·error·has·occurred.·The·values·of·the | 264 | the·system·to·inform·the·user·that·an·error·has·occurred.·The·values·of·the |
| 265 | other·variables·(<code·class="inline">L</code>,·<code·class="inline">Str</code>,·and·so·on)·are·unchanged.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">12>·</span><span·class="n">P</span><span·class="p">.</span><span·class="w"> | 265 | other·variables·(<code·class="inline">L</code>,·<code·class="inline">Str</code>,·and·so·on)·are·unchanged.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">12>·</span><span·class="n">P</span><span·class="p">.</span><span·class="w"> |
| 266 | </span><span·class="gt">*·1:1:·variable·'P'·is·unbound</span><span·class="gp·unselectable"> | 266 | </span><span·class="gt">*·1:1:·variable·'P'·is·unbound</span><span·class="gp·unselectable"> |
| 267 | 13>·</span><span·class="n">Descriptor</span><span·class="p">.</span><span·class="w"> | 267 | 13>·</span><span·class="n">Descriptor</span><span·class="p">.</span><span·class="w"> |
| 268 | </span><span·class="p"·data-group-id="7 | 268 | </span><span·class="p"·data-group-id="7584595909-1">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="7584595909-1">}</span></code></pre><p>Commands·12·and·13·show·that·<code·class="inline">P</code>·is·unbound·because·the·previous·command·failed, |
| 269 | and·that·<code·class="inline">Descriptor</code>·has·not·changed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">14</span><span·class="o">></span><span·class="p"·data-group-id=" | 269 | and·that·<code·class="inline">Descriptor</code>·has·not·changed.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">14</span><span·class="o">></span><span·class="p"·data-group-id="8612073816-1">{</span><span·class="n">P</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Q</span><span·class="p"·data-group-id="8612073816-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Descriptor</span><span·class="p">.</span><span·class="w"> |
| 270 | </span><span·class="p"·data-group-id=" | 270 | </span><span·class="p"·data-group-id="8612073816-2">{</span><span·class="mi">4</span><span·class="p">,</span><span·class="ss">abcd</span><span·class="p"·data-group-id="8612073816-2">}</span><span·class="gp·unselectable"> |
| 271 | 15>·</span><span·class="n">P</span><span·class="p">.</span><span·class="w"> | 271 | 15>·</span><span·class="n">P</span><span·class="p">.</span><span·class="w"> |
| 272 | </span><span·class="mi">4</span></code></pre><p>Commands·14·and·15·show·a·correct·match·where·<code·class="inline">P</code>·and·<code·class="inline">Q</code>·are·bound.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">16>·</span><span·class="nf">f</span><span·class="p"·data-group-id=" | 272 | </span><span·class="mi">4</span></code></pre><p>Commands·14·and·15·show·a·correct·match·where·<code·class="inline">P</code>·and·<code·class="inline">Q</code>·are·bound.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">16>·</span><span·class="nf">f</span><span·class="p"·data-group-id="3554000467-1">(</span><span·class="p"·data-group-id="3554000467-1">)</span><span·class="p">.</span><span·class="w"> |
| 273 | </span><span·class="ss">ok</span></code></pre><p>Command·16·clears·all·bindings.</p><p>The·next·few·commands·assume·that·<code·class="inline">test1:demo(X)</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">demo</span><span·class="p"·data-group-id=" | 273 | </span><span·class="ss">ok</span></code></pre><p>Command·16·clears·all·bindings.</p><p>The·next·few·commands·assume·that·<code·class="inline">test1:demo(X)</code>·is·defined·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">demo</span><span·class="p"·data-group-id="4645072978-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="4645072978-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 274 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">put</span><span·class="p"·data-group-id=" | 274 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="nf">put</span><span·class="p"·data-group-id="4645072978-2">(</span><span·class="ss">aa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">worked</span><span·class="p"·data-group-id="4645072978-2">)</span><span·class="p">,</span><span·class="w"> |
| 275 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 275 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="n">X</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 276 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="n">X</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">10</span><span·class="p">.</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">17>·</span><span·class="nf">put</span><span·class="p"·data-group-id=" | 276 | </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="err"> </span><span·class="n">X</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">10</span><span·class="p">.</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">17>·</span><span·class="nf">put</span><span·class="p"·data-group-id="6372743686-1">(</span><span·class="ss">aa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">hello</span><span·class="p"·data-group-id="6372743686-1">)</span><span·class="p">.</span><span·class="w"> |
| 277 | </span><span·class="ss">undefined</span><span·class="gp·unselectable"> | 277 | </span><span·class="ss">undefined</span><span·class="gp·unselectable"> |
| 278 | 18>·</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 278 | 18>·</span><span·class="nf">get</span><span·class="p"·data-group-id="6372743686-2">(</span><span·class="ss">aa</span><span·class="p"·data-group-id="6372743686-2">)</span><span·class="p">.</span><span·class="w"> |
| 279 | </span><span·class="ss">hello</span></code></pre><p>Commands·17·and·18·set·and·inspect·the·value·of·item·<code·class="inline">aa</code>·in·the·process | 279 | </span><span·class="ss">hello</span></code></pre><p>Commands·17·and·18·set·and·inspect·the·value·of·item·<code·class="inline">aa</code>·in·the·process |
| 280 | dictionary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">19>·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">test1</span><span·class="p">:</span><span·class="nf">demo</span><span·class="p"·data-group-id="3 | 280 | dictionary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">19>·</span><span·class="n">Y</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">test1</span><span·class="p">:</span><span·class="nf">demo</span><span·class="p"·data-group-id="2324578509-1">(</span><span·class="mi">1</span><span·class="p"·data-group-id="2324578509-1">)</span><span·class="p">.</span><span·class="w"> |
| 281 | </span><span·class="mi">11</span></code></pre><p>Command·19·evaluates·<code·class="inline">test1:demo(1)</code>.·The·evaluation·succeeds·and·the·changes | 281 | </span><span·class="mi">11</span></code></pre><p>Command·19·evaluates·<code·class="inline">test1:demo(1)</code>.·The·evaluation·succeeds·and·the·changes |
| 282 | made·in·the·process·dictionary·become·visible·to·the·shell.·The·new·value·of | 282 | made·in·the·process·dictionary·become·visible·to·the·shell.·The·new·value·of |
| 283 | dictionary·item·<code·class="inline">aa</code>·can·be·seen·in·command·20.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">20>·</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 283 | dictionary·item·<code·class="inline">aa</code>·can·be·seen·in·command·20.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">20>·</span><span·class="nf">get</span><span·class="p"·data-group-id="6845666492-1">(</span><span·class="p"·data-group-id="6845666492-1">)</span><span·class="p">.</span><span·class="w"> |
| 284 | </span><span·class="p"·data-group-id=" | 284 | </span><span·class="p"·data-group-id="6845666492-2">[</span><span·class="p"·data-group-id="6845666492-3">{</span><span·class="ss">aa</span><span·class="p">,</span><span·class="ss">worked</span><span·class="p"·data-group-id="6845666492-3">}</span><span·class="p"·data-group-id="6845666492-2">]</span><span·class="gp·unselectable"> |
| 285 | 21>·</span><span·class="nf">put</span><span·class="p"·data-group-id=" | 285 | 21>·</span><span·class="nf">put</span><span·class="p"·data-group-id="6845666492-4">(</span><span·class="ss">aa</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">hello</span><span·class="p"·data-group-id="6845666492-4">)</span><span·class="p">.</span><span·class="w"> |
| 286 | </span><span·class="ss">worked</span><span·class="gp·unselectable"> | 286 | </span><span·class="ss">worked</span><span·class="gp·unselectable"> |
| 287 | 22>·</span><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">test1</span><span·class="p">:</span><span·class="nf">demo</span><span·class="p"·data-group-id=" | 287 | 22>·</span><span·class="n">Z</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">test1</span><span·class="p">:</span><span·class="nf">demo</span><span·class="p"·data-group-id="6845666492-5">(</span><span·class="mi">2</span><span·class="p"·data-group-id="6845666492-5">)</span><span·class="p">.</span><span·class="w"> |
| 288 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·1 | 288 | </span><span·class="gt">**·exception·error:·no·match·of·right·hand·side·value·1 |
| 289 | ·····in·function··test1:demo/1</span></code></pre><p>Commands·21·and·22·change·the·value·of·dictionary·item·<code·class="inline">aa</code>·to·<code·class="inline">hello</code>·and·call | 289 | ·····in·function··test1:demo/1</span></code></pre><p>Commands·21·and·22·change·the·value·of·dictionary·item·<code·class="inline">aa</code>·to·<code·class="inline">hello</code>·and·call |
| 290 | <code·class="inline">test1:demo(2)</code>.·Evaluation·fails·and·the·changes·made·to·the·dictionary·in | 290 | <code·class="inline">test1:demo(2)</code>.·Evaluation·fails·and·the·changes·made·to·the·dictionary·in |
| 291 | <code·class="inline">test1:demo(2)</code>,·before·the·error·occurred,·are·discarded.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">23>·</span><span·class="n">Z</span><span·class="p">.</span><span·class="w"> | 291 | <code·class="inline">test1:demo(2)</code>,·before·the·error·occurred,·are·discarded.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">23>·</span><span·class="n">Z</span><span·class="p">.</span><span·class="w"> |
| 292 | </span><span·class="gt">*·1:1:·variable·'Z'·is·unbound</span><span·class="gp·unselectable"> | 292 | </span><span·class="gt">*·1:1:·variable·'Z'·is·unbound</span><span·class="gp·unselectable"> |
| 293 | 24>·</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 293 | 24>·</span><span·class="nf">get</span><span·class="p"·data-group-id="4534311828-1">(</span><span·class="ss">aa</span><span·class="p"·data-group-id="4534311828-1">)</span><span·class="p">.</span><span·class="w"> |
| 294 | </span><span·class="ss">hello</span></code></pre><p>Commands·23·and·24·show·that·<code·class="inline">Z</code>·was·not·bound·and·that·dictionary·item·<code·class="inline">aa</code>·has | 294 | </span><span·class="ss">hello</span></code></pre><p>Commands·23·and·24·show·that·<code·class="inline">Z</code>·was·not·bound·and·that·dictionary·item·<code·class="inline">aa</code>·has |
| 295 | retained·its·original·value.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">25>·</span><span·class="nf">erase</span><span·class="p"·data-group-id=" | 295 | retained·its·original·value.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">25>·</span><span·class="nf">erase</span><span·class="p"·data-group-id="9377030459-1">(</span><span·class="p"·data-group-id="9377030459-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">put</span><span·class="p"·data-group-id="9377030459-2">(</span><span·class="ss">aa</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·8da212246aea45a30e7a4d7dce8d9176fa4735e21c4156167db2a8e821434c64·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 296 | </span><span·class="ss">undefined</span><span·class="gp·unselectable"> | 296 | </span><span·class="ss">undefined</span><span·class="gp·unselectable"> |
| 297 | 26>·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 297 | 26>·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="9377030459-3">(</span><span·class="ss">test1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">demo</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9377030459-4">[</span><span·class="mi">1</span><sp[·...·truncated·by·diffoscope;·len:·91,·SHA:·97da001eac7e8935e2c4aefed5bb5a62e35aef3c7b5f8bc0ee36eec6113808b3·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 298 | </span><span·class="o"><</span><span·class="mf">0.57</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 298 | </span><span·class="o"><</span><span·class="mf">0.57</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 299 | 27>·</span><span·class="nf">get</span><span·class="p"·data-group-id=" | 299 | 27>·</span><span·class="nf">get</span><span·class="p"·data-group-id="9377030459-5">(</span><span·class="ss">aa</span><span·class="p"·data-group-id="9377030459-5">)</span><span·class="p">.</span><span·class="w"> |
| 300 | </span><span·class="ss">hello</span></code></pre><p>Commands·25,·26,·and·27·show·the·effect·of·evaluating·<code·class="inline">test1:demo(1)</code>·in·the | 300 | </span><span·class="ss">hello</span></code></pre><p>Commands·25,·26,·and·27·show·the·effect·of·evaluating·<code·class="inline">test1:demo(1)</code>·in·the |
| 301 | background.·In·this·case,·the·expression·is·evaluated·in·a·newly·spawned | 301 | background.·In·this·case,·the·expression·is·evaluated·in·a·newly·spawned |
| 302 | process.·Any·changes·made·in·the·process·dictionary·are·local·to·the·newly | 302 | process.·Any·changes·made·in·the·process·dictionary·are·local·to·the·newly |
| 303 | spawned·process·and·therefore·not·visible·to·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">28>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 303 | spawned·process·and·therefore·not·visible·to·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">28>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4500000742-1">(</span><span·class="s">"hello·hello\n"</span><span·class="p"·data-group-id="4500000742-1">)</span><span·class="p">.</span><span·class="w"> |
| 304 | </span><span·class="ss">hello</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w"> | 304 | </span><span·class="ss">hello</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w"> |
| 305 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 305 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 306 | 29>·</span><span·class="nf">e</span><span·class="p"·data-group-id=" | 306 | 29>·</span><span·class="nf">e</span><span·class="p"·data-group-id="4500000742-2">(</span><span·class="mi">28</span><span·class="p"·data-group-id="4500000742-2">)</span><span·class="p">.</span><span·class="w"> |
| 307 | </span><span·class="ss">hello</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w"> | 307 | </span><span·class="ss">hello</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w"> |
| 308 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 308 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 309 | 30>·</span><span·class="nf">v</span><span·class="p"·data-group-id=" | 309 | 30>·</span><span·class="nf">v</span><span·class="p"·data-group-id="4500000742-3">(</span><span·class="mi">28</span><span·class="p"·data-group-id="4500000742-3">)</span><span·class="p">.</span><span·class="w"> |
| 310 | </span><span·class="ss">ok</span></code></pre><p>Commands·28,·29·and·30·use·the·history·facilities·of·the·shell.·Command·29 | 310 | </span><span·class="ss">ok</span></code></pre><p>Commands·28,·29·and·30·use·the·history·facilities·of·the·shell.·Command·29 |
| 311 | re-evaluates·command·28.·Command·30·uses·the·value·(result)·of·command·28.·In | 311 | re-evaluates·command·28.·Command·30·uses·the·value·(result)·of·command·28.·In |
| 312 | the·cases·of·a·pure·function·(a·function·with·no·side·effects),·the·result·is | 312 | the·cases·of·a·pure·function·(a·function·with·no·side·effects),·the·result·is |
| 313 | the·same.·For·a·function·with·side·effects,·the·result·can·be·different.</p><p>The·next·few·commands·show·some·record·manipulation.·It·is·assumed·that·<code·class="inline">ex.erl</code> | 313 | the·same.·For·a·function·with·side·effects,·the·result·can·be·different.</p><p>The·next·few·commands·show·some·record·manipulation.·It·is·assumed·that·<code·class="inline">ex.erl</code> |
| 314 | defines·a·record·as·follows:</p><p><code·class="inline">-record(rec,·{a,·b·=·val()}).</code></p><p><code·class="inline">val()·-></code><br/> <code·class="inline">3.</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">31>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 314 | defines·a·record·as·follows:</p><p><code·class="inline">-record(rec,·{a,·b·=·val()}).</code></p><p><code·class="inline">val()·-></code><br/> <code·class="inline">3.</code></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">31>·</span><span·class="nf">c</span><span·class="p"·data-group-id="7957643492-1">(</span><span·class="ss">ex</span><span·class="p"·data-group-id="7957643492-1">)</span><span·class="p">.</span><span·class="w"> |
| 315 | </span><span·class="p"·data-group-id=" | 315 | </span><span·class="p"·data-group-id="7957643492-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">ex</span><span·class="p"·data-group-id="7957643492-2">}</span><span·class="gp·unselectable"> |
| 316 | 32>·</span><span·class="nf">rr</span><span·class="p"·data-group-id=" | 316 | 32>·</span><span·class="nf">rr</span><span·class="p"·data-group-id="7957643492-3">(</span><span·class="ss">ex</span><span·class="p"·data-group-id="7957643492-3">)</span><span·class="p">.</span><span·class="w"> |
| 317 | </span><span·class="p"·data-group-id=" | 317 | </span><span·class="p"·data-group-id="7957643492-4">[</span><span·class="ss">rec</span><span·class="p"·data-group-id="7957643492-4">]</span></code></pre><p>Commands·31·and·32·compile·file·<code·class="inline">ex.erl</code>·and·read·the·record·definitions·in |
| 318 | <code·class="inline">ex.beam</code>.·If·the·compiler·did·not·output·any·record·definitions·on·the·BEAM | 318 | <code·class="inline">ex.beam</code>.·If·the·compiler·did·not·output·any·record·definitions·on·the·BEAM |
| 319 | file,·<code·class="inline">rr(ex)</code>·tries·to·read·record·definitions·from·the·source·file·instead.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">33>·</span><span·class="nf">rl</span><span·class="p"·data-group-id=" | 319 | file,·<code·class="inline">rr(ex)</code>·tries·to·read·record·definitions·from·the·source·file·instead.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">33>·</span><span·class="nf">rl</span><span·class="p"·data-group-id="4137336710-1">(</span><span·class="ss">rec</span><span·class="p"·data-group-id="4137336710-1">)</span><span·class="p">.</span><span·class="w"> |
| 320 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id=" | 320 | </span><span·class="p">-</span><span·class="na">record</span><span·class="p"·data-group-id="4137336710-2">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="p"·data-group-id="4137336710-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="ss">b</span><span·class="w">·</span><span·class="o">=</span><span·cl[·...·truncated·by·diffoscope;·len:·241,·SHA:·3ac78c68c51977c4a5c00eb247d3416ee038dadf12e28a8c838460c8c01ae539·...·]10-2">)</span><span·class="p">.</span><span·class="w"> |
| 321 | </span><span·class="ss">ok</span></code></pre><p>Command·33·prints·the·definition·of·the·record·named·<code·class="inline">rec</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">34>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 321 | </span><span·class="ss">ok</span></code></pre><p>Command·33·prints·the·definition·of·the·record·named·<code·class="inline">rec</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">34>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="8044561100-1">{</span><span·class="p"·data-group-id="8044561100-1">}</span><span·class="p">.</span><span·class="w"> |
| 322 | </span><span·class="gt">**·exception·error:·undefined·shell·command·val/0</span></code></pre><p>Command·34·tries·to·create·a·<code·class="inline">rec</code>·record,·but·fails·as·function·<code·class="inline">val/0</code>·is | 322 | </span><span·class="gt">**·exception·error:·undefined·shell·command·val/0</span></code></pre><p>Command·34·tries·to·create·a·<code·class="inline">rec</code>·record,·but·fails·as·function·<code·class="inline">val/0</code>·is |
| 323 | undefined.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">35>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 323 | undefined.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">35>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="0336539252-1">{</span><span·class="ss">b</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">3</span><span·class="p"·data-group-id="0336539252-1">}</span><span·class="p">.</span><span·class="w"> |
| 324 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 324 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="0336539252-2">{</span><span·class="ss">a</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="ss">b</span><span·class="w">·</span><span·class="o">=</span><span·c[·...·truncated·by·diffoscope;·len:·81,·SHA:·5b3888b599dec8674ec070659932fdba776278c9edb2135363ab209e7b5bf7fc·...·]52-2">}</span></code></pre><p>Command·35·shows·the·workaround:·explicitly·assign·values·to·record·fields·that |
| 325 | cannot·otherwise·be·initialized.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">36>·</span><span·class="nf">rp</span><span·class="p"·data-group-id=" | 325 | cannot·otherwise·be·initialized.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">36>·</span><span·class="nf">rp</span><span·class="p"·data-group-id="0239478553-1">(</span><span·class="nf">v</span><span·class="p"·data-group-id="0239478553-2">(</span><span·class="o">-</span><span·class="mi">1</span><span·class="p"·data-group-id="0239478553-2">)</span><span·class="p"·data-group-id="0239478553-1">)</span><span·class="p">.</span><span·class="w"> |
| 326 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id=" | 326 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="0239478553-3">{</span><span·class="ss">a</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="ss">b</span><span·class="w">·</span><span·class="o">=</span><span·c[·...·truncated·by·diffoscope;·len:·83,·SHA:·2a6d05bf7f6ae8f7f1dd32e75cd683387496620659889efa2c71f8aa1ee5e7b4·...·]-3">}</span><span·class="w"> |
| 327 | </span><span·class="ss">ok</span></code></pre><p>Command·36·prints·the·newly·created·record·using·record·definitions·maintained | 327 | </span><span·class="ss">ok</span></code></pre><p>Command·36·prints·the·newly·created·record·using·record·definitions·maintained |
| 328 | by·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">37>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="7 | 328 | by·the·shell.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">37>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="7645743666-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7645743666-2">{</span><span·class="ss">f</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·272,·SHA:·3a6dcd2b8ad94346840b23961b76afdfbb23578ccf233fe6c681de1be2afa062·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 329 | </span><span·class="ss">rec</span></code></pre><p>Command·37·defines·a·record·directly·in·the·shell.·The·definition·replaces·the | 329 | </span><span·class="ss">rec</span></code></pre><p>Command·37·defines·a·record·directly·in·the·shell.·The·definition·replaces·the |
| 330 | one·read·from·file·<code·class="inline">ex.beam</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">38>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="4 | 330 | one·read·from·file·<code·class="inline">ex.beam</code>.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">38>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="4390498947-1">{</span><span·class="p"·data-group-id="4390498947-1">}</span><span·class="p">.</span><span·class="w"> |
| 331 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="4 | 331 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="4390498947-2">{</span><span·class="ss">f</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="4390498947-3">[</span><span·class="p"·data-group-id="4390498947-3">]</span><span·class="p"·data-group-id="4[·...·truncated·by·diffoscope;·len:·9,·SHA:·206746a40dec62cd3e7a71b04ecf27f603cb191fdbec69f84a69516f91623013·...·]-2">}</span><span·class="w"> |
| 332 | </span><span·class="ss">ok</span></code></pre><p>Command·38·creates·a·record·using·the·new·definition,·and·prints·the·result.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">39>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="1 | 332 | </span><span·class="ss">ok</span></code></pre><p>Command·38·creates·a·record·using·the·new·definition,·and·prints·the·result.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">39>·</span><span·class="nf">rd</span><span·class="p"·data-group-id="1736291964-1">(</span><span·class="ss">rec</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1736291964-2">{</span><span·class="ss">c</span><span·class="p"·data-group-id="1736291964-2">}</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·5fbcc91b7e48b73e0c08bbffb71c65a457362152d9e654486087b90c2803f065·...·]-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">A</span><span·class="p">.</span><span·class="w"> |
| 333 | </span><span·class="gt">*·1:15:·variable·'A'·is·unbound</span><span·class="gp·unselectable"> | 333 | </span><span·class="gt">*·1:15:·variable·'A'·is·unbound</span><span·class="gp·unselectable"> |
| 334 | 40>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="1 | 334 | 40>·</span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="1736291964-3">{</span><span·class="p"·data-group-id="1736291964-3">}</span><span·class="p">.</span><span·class="w"> |
| 335 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="1 | 335 | </span><span·class="o">#</span><span·class="ss">rec</span><span·class="p"·data-group-id="1736291964-4">{</span><span·class="ss">c</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p"·data-group-id="1736291964-4">}</span><span·class="w"> |
| 336 | </span><span·class="ss">ok</span></code></pre><p>Command·39·and·40·show·that·record·definitions·are·updated·as·side·effects.·The | 336 | </span><span·class="ss">ok</span></code></pre><p>Command·39·and·40·show·that·record·definitions·are·updated·as·side·effects.·The |
| 337 | evaluation·of·the·command·fails,·but·the·definition·of·<code·class="inline">rec</code>·has·been·carried | 337 | evaluation·of·the·command·fails,·but·the·definition·of·<code·class="inline">rec</code>·has·been·carried |
| 338 | out.</p><p>For·the·next·command,·it·is·assumed·that·<code·class="inline">test1:loop(N)</code>·is·defined·as·follows:</p><p><code·class="inline">loop(N)·-></code><br/> <code·class="inline">io:format("Hello·Number:·~w~n",·[N]),</code><br/> <code·class="inline">loop(N+1).</code></p><pre><code·class="text">41>·test1:loop(0). | 338 | out.</p><p>For·the·next·command,·it·is·assumed·that·<code·class="inline">test1:loop(N)</code>·is·defined·as·follows:</p><p><code·class="inline">loop(N)·-></code><br/> <code·class="inline">io:format("Hello·Number:·~w~n",·[N]),</code><br/> <code·class="inline">loop(N+1).</code></p><pre><code·class="text">41>·test1:loop(0). |
| Max diff block lines reached; 23621/75386 bytes (31.33%) of diff not shown. | |||
| Offset 125, 18 lines modified | Offset 125, 18 lines modified | ||
| 125 | ····<small·class="app-vsn"·translate="no">(stdlib·v6.2.2.1)</small> | 125 | ····<small·class="app-vsn"·translate="no">(stdlib·v6.2.2.1)</small> |
| 126 | ··</h1> | 126 | ··</h1> |
| 127 | ····<section·id="moduledoc"> | 127 | ····<section·id="moduledoc"> |
| 128 | <p>Customizing·the·Erlang·environment.</p><p>The·functions·in·this·module·are·called·when·no·module·name·is·specified·in·a | 128 | <p>Customizing·the·Erlang·environment.</p><p>The·functions·in·this·module·are·called·when·no·module·name·is·specified·in·a |
| 129 | shell·command.</p><p>Consider·the·following·shell·dialog:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id=" | 129 | shell·command.</p><p>Consider·the·following·shell·dialog:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">reverse</span><span·class="p"·data-group-id="8268495351-1">(</span><span·class="s">"abc"</span><span·class="p"·data-group-id="8268495351-1">)</span><span·class="p">.</span><span·class="w"> |
| 130 | </span><span·class="s">"cba"</span><span·class="gp·unselectable"> | 130 | </span><span·class="s">"cba"</span><span·class="gp·unselectable"> |
| 131 | 2>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 131 | 2>·</span><span·class="nf">c</span><span·class="p"·data-group-id="8268495351-2">(</span><span·class="ss">foo</span><span·class="p"·data-group-id="8268495351-2">)</span><span·class="p">.</span><span·class="w"> |
| 132 | </span><span·class="p"·data-group-id=" | 132 | </span><span·class="p"·data-group-id="8268495351-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">foo</span><span·class="p"·data-group-id="8268495351-3">}</span></code></pre><p>In·command·one,·module·<a·href="lists.html"><code·class="inline">lists</code></a>·is·called.·In·command·two,·no·module·name·is |
| 133 | specified.·The·shell·searches·module·<code·class="inline">user_default</code>·followed·by·module | 133 | specified.·The·shell·searches·module·<code·class="inline">user_default</code>·followed·by·module |
| 134 | <code·class="inline">shell_default</code>·for·function·<code·class="inline">c/1</code>.</p><p><code·class="inline">shell_default</code>·is·intended·for·"system·wide"·customizations·to·the·shell. | 134 | <code·class="inline">shell_default</code>·for·function·<code·class="inline">c/1</code>.</p><p><code·class="inline">shell_default</code>·is·intended·for·"system·wide"·customizations·to·the·shell. |
| 135 | <code·class="inline">user_default</code>·is·intended·for·"local"·or·individual·user·customizations.</p><h2·id="module-hint"·class="section-heading"> | 135 | <code·class="inline">user_default</code>·is·intended·for·"local"·or·individual·user·customizations.</p><h2·id="module-hint"·class="section-heading"> |
| 136 | ··<a·href="#module-hint"·class="hover-link"> | 136 | ··<a·href="#module-hint"·class="hover-link"> |
| 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 137 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 138 | ··</a> | 138 | ··</a> |
| 139 | ··<span·class="text">Hint</span> | 139 | ··<span·class="text">Hint</span> |
| Offset 231, 15 lines modified | Offset 231, 15 lines modified | ||
| 231 | ······<p·class="built-using"> | 231 | ······<p·class="built-using"> |
| 232 | ········Built·using | 232 | ········Built·using |
| 233 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 233 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 234 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 234 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 235 | ······</p> | 235 | ······</p> |
| 236 | <p>Copyright·©·1996-202 | 236 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 237 | ····</footer> | 237 | ····</footer> |
| 238 | ··</div> | 238 | ··</div> |
| 239 | </main> | 239 | </main> |
| 240 | </div> | 240 | </div> |
| 241 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 241 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 242 | ··<script> | 242 | ··<script> |
| 243 | ··let·initialized·=·false; | 243 | ··let·initialized·=·false; |
| Offset 1242, 15 lines modified | Offset 1242, 15 lines modified | ||
| 1242 | ······<p·class="built-using"> | 1242 | ······<p·class="built-using"> |
| 1243 | ········Built·using | 1243 | ········Built·using |
| 1244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1246 | ······</p> | 1246 | ······</p> |
| 1247 | <p>Copyright·©·1996-202 | 1247 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1248 | ····</footer> | 1248 | ····</footer> |
| 1249 | ··</div> | 1249 | ··</div> |
| 1250 | </main> | 1250 | </main> |
| 1251 | </div> | 1251 | </div> |
| 1252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1253 | ··<script> | 1253 | ··<script> |
| 1254 | ··let·initialized·=·false; | 1254 | ··let·initialized·=·false; |
| Offset 367, 15 lines modified | Offset 367, 15 lines modified | ||
| 367 | ······</div> | 367 | ······</div> |
| 368 | <p>Starts·a·number·of·pseudo·servers.·A·pseudo·server·is·a·server·with·a·registered | 368 | <p>Starts·a·number·of·pseudo·servers.·A·pseudo·server·is·a·server·with·a·registered |
| 369 | name·that·does·nothing·but·pass·on·all·message·to·the·real·server·that·executes | 369 | name·that·does·nothing·but·pass·on·all·message·to·the·real·server·that·executes |
| 370 | at·a·master·node.·A·pseudo·server·is·an·intermediary·that·only·has·the·same | 370 | at·a·master·node.·A·pseudo·server·is·an·intermediary·that·only·has·the·same |
| 371 | registered·name·as·the·real·server.</p><p>For·example,·if·you·have·started·a·slave·node·<code·class="inline">N</code>·and·want·to·execute·<code·class="inline">pxw</code> | 371 | registered·name·as·the·real·server.</p><p>For·example,·if·you·have·started·a·slave·node·<code·class="inline">N</code>·and·want·to·execute·<code·class="inline">pxw</code> |
| 372 | graphics·code·on·this·node,·you·can·start·server·<code·class="inline">pxw_server</code>·as·a·pseudo·server | 372 | graphics·code·on·this·node,·you·can·start·server·<code·class="inline">pxw_server</code>·as·a·pseudo·server |
| 373 | at·the·slave·node.·This·is·illustrated·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">rpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 373 | at·the·slave·node.·This·is·illustrated·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">rpc</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="6180346103-1">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">slave</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pseudo</span><span·class="p">,</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·462,·SHA:·2228d4ccf37115b7e2d0e167e1281a7e44117554cf5d267f5390e73be24d1aae·...·]-1">)</span><span·class="p">.</span></code></pre> |
| 374 | ··</section> | 374 | ··</section> |
| 375 | </section> | 375 | </section> |
| 376 | <section·class="detail"·id="relay/1"> | 376 | <section·class="detail"·id="relay/1"> |
| 377 | ··<div·class="detail-header"> | 377 | ··<div·class="detail-header"> |
| 378 | ····<a·href="#relay/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 378 | ····<a·href="#relay/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 379 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 379 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 513, 17 lines modified | Offset 513, 17 lines modified | ||
| 513 | as·fully·qualified·names;·short·names·can·also·be·used.·This·is·the·same | 513 | as·fully·qualified·names;·short·names·can·also·be·used.·This·is·the·same |
| 514 | condition·that·applies·to·names·of·distributed·Erlang·nodes.</p><p>The·name·of·the·started·node·becomes·<code·class="inline">Name@Host</code>.</p><p>The·slave·node·resets·its·<a·href="io.html#t:user/0"><code·class="inline">io:user/0</code></a>·process·so·that·all·terminal·I/O·that·is | 514 | condition·that·applies·to·names·of·distributed·Erlang·nodes.</p><p>The·name·of·the·started·node·becomes·<code·class="inline">Name@Host</code>.</p><p>The·slave·node·resets·its·<a·href="io.html#t:user/0"><code·class="inline">io:user/0</code></a>·process·so·that·all·terminal·I/O·that·is |
| 515 | produced·at·the·slave·is·automatically·relayed·to·the·master.·Also,·the·file | 515 | produced·at·the·slave·is·automatically·relayed·to·the·master.·Also,·the·file |
| 516 | server·is·relayed·to·the·master.</p><p>Argument·<code·class="inline">Args</code>·is·used·to·set·<code·class="inline">erl</code>·command-line·arguments.·It·is | 516 | server·is·relayed·to·the·master.</p><p>Argument·<code·class="inline">Args</code>·is·used·to·set·<code·class="inline">erl</code>·command-line·arguments.·It·is |
| 517 | passed·to·the·new·node·and·can·be·used·for·a·variety·of·purposes;·see | 517 | passed·to·the·new·node·and·can·be·used·for·a·variety·of·purposes;·see |
| 518 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erl(1)</code></a>.</p><p>As·an·example,·suppose·that·you·want·to·start·a·slave·node·at·host·<code·class="inline">H</code>·with·node | 518 | <a·href="../../../../erts-15.2.7/doc/html/erl_cmd.html"><code·class="inline">erl(1)</code></a>.</p><p>As·an·example,·suppose·that·you·want·to·start·a·slave·node·at·host·<code·class="inline">H</code>·with·node |
| 519 | name·<code·class="inline">Name@H</code>·and·want·the·slave·node·to·have·the·following·properties:</p><ul><li>Directory·<code·class="inline">Dir</code>·is·to·be·added·to·the·code·path.</li><li>The·Mnesia·directory·is·to·be·set·to·<code·class="inline">M</code>.</li><li>The·Unix·<code·class="inline">DISPLAY</code>·environment·variable·is·to·be·set·to·the·display·of·the | 519 | name·<code·class="inline">Name@H</code>·and·want·the·slave·node·to·have·the·following·properties:</p><ul><li>Directory·<code·class="inline">Dir</code>·is·to·be·added·to·the·code·path.</li><li>The·Mnesia·directory·is·to·be·set·to·<code·class="inline">M</code>.</li><li>The·Unix·<code·class="inline">DISPLAY</code>·environment·variable·is·to·be·set·to·the·display·of·the |
| 520 | master·node.</li></ul><p>The·following·code·is·executed·to·achieve·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"·-env·DISPLAY·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nc">net_adm</span><span·class="p">:</span><span·class="nf">localhost</span><span·class="p"·data-group-id=" | 520 | master·node.</li></ul><p>The·following·code·is·executed·to·achieve·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"·-env·DISPLAY·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nc">net_adm</span><span·class="p">:</span><span·class="nf">localhost</span><span·class="p"·data-group-id="6532475841-1">(</span><span·class="p"·data-group-id="6532475841-1">)</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">":0·"</span><span·class="p">,</span><span·class="w"> |
| 521 | </span><span·class="n">Arg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"-mnesia_dir·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"·-pa·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">E</span><span·class="p">,</span><span·class="w"> | 521 | </span><span·class="n">Arg</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"-mnesia_dir·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">M</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="s">"·-pa·"</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">Dir</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="n">E</span><span·class="p">,</span><span·class="w"> |
| 522 | </span><span·class="nc">slave</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 522 | </span><span·class="nc">slave</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="6532475841-2">(</span><span·class="n">H</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Arg</span><span·class="p"·data-group-id="6532475841-2">)</span><span·class="p">.</span></code></pre><p>The·function·returns·<code·class="inline">{ok,·Node}</code>,·where·<code·class="inline">Node</code>·is·the·name·of·the·new·node, |
| 523 | otherwise·<code·class="inline">{error,·Reason}</code>,·where·<code·class="inline">Reason</code>·can·be·one·of:</p><ul><li><p><strong><code·class="inline">timeout</code></strong>·-·The·master·node·failed·to·get·in·contact·with·the·slave·node. | 523 | otherwise·<code·class="inline">{error,·Reason}</code>,·where·<code·class="inline">Reason</code>·can·be·one·of:</p><ul><li><p><strong><code·class="inline">timeout</code></strong>·-·The·master·node·failed·to·get·in·contact·with·the·slave·node. |
| 524 | This·can·occur·in·a·number·of·circumstances:</p><ul><li>Erlang/OTP·is·not·installed·on·the·remote·host.</li><li>The·file·system·on·the·other·host·has·a·different·structure·to·the·the | 524 | This·can·occur·in·a·number·of·circumstances:</p><ul><li>Erlang/OTP·is·not·installed·on·the·remote·host.</li><li>The·file·system·on·the·other·host·has·a·different·structure·to·the·the |
| 525 | master.</li><li>The·Erlang·nodes·have·different·cookies.</li></ul></li><li><p><strong><code·class="inline">no_rsh</code></strong>·-·No·remote·shell·program·was·found·on·the·computer.·Note·that | 525 | master.</li><li>The·Erlang·nodes·have·different·cookies.</li></ul></li><li><p><strong><code·class="inline">no_rsh</code></strong>·-·No·remote·shell·program·was·found·on·the·computer.·Note·that |
| 526 | <code·class="inline">ssh</code>·is·used·by·default,·but·this·can·be·overridden·with·the·<code·class="inline">-rsh</code>·flag.</p></li><li><p><strong><code·class="inline">{already_running,·Node}</code></strong>·-·A·node·with·name·<code·class="inline">Name@Host</code>·already·exists.</p></li></ul> | 526 | <code·class="inline">ssh</code>·is·used·by·default,·but·this·can·be·overridden·with·the·<code·class="inline">-rsh</code>·flag.</p></li><li><p><strong><code·class="inline">{already_running,·Node}</code></strong>·-·A·node·with·name·<code·class="inline">Name@Host</code>·already·exists.</p></li></ul> |
| 527 | ··</section> | 527 | ··</section> |
| 528 | </section> | 528 | </section> |
| 529 | <section·class="detail"·id="start_link/1"> | 529 | <section·class="detail"·id="start_link/1"> |
| Offset 686, 15 lines modified | Offset 686, 15 lines modified | ||
| 686 | ······<p·class="built-using"> | 686 | ······<p·class="built-using"> |
| 687 | ········Built·using | 687 | ········Built·using |
| 688 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 688 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 689 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 689 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 690 | ······</p> | 690 | ······</p> |
| 691 | <p>Copyright·©·1996-202 | 691 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 692 | ····</footer> | 692 | ····</footer> |
| 693 | ··</div> | 693 | ··</div> |
| 694 | </main> | 694 | </main> |
| 695 | </div> | 695 | </div> |
| 696 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 696 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 697 | ··<script> | 697 | ··<script> |
| 698 | ··let·initialized·=·false; | 698 | ··let·initialized·=·false; |
| Offset 157, 21 lines modified | Offset 157, 21 lines modified | ||
| 157 | string·and·returns·a·formatted·expressions·as·a·string.·See | 157 | string·and·returns·a·formatted·expressions·as·a·string.·See |
| 158 | <a·href="shell.html#format_shell_func/1"><code·class="inline">shell:format_shell_func/1</code></a>·for·how·to·set·it·from·inside·the·shell.</p><p>If·instead·a·string·is·provided,·it·will·be·used·as·a·shell·command.·Your | 158 | <a·href="shell.html#format_shell_func/1"><code·class="inline">shell:format_shell_func/1</code></a>·for·how·to·set·it·from·inside·the·shell.</p><p>If·instead·a·string·is·provided,·it·will·be·used·as·a·shell·command.·Your |
| 159 | command·must·include·<code·class="inline">${file}</code>·somewhere·in·the·string,·for·the·shell·to·know | 159 | command·must·include·<code·class="inline">${file}</code>·somewhere·in·the·string,·for·the·shell·to·know |
| 160 | where·the·file·goes·in·the·command.</p><pre><code·class="text">-stdlib·format_shell_func·"\"emacs·-batch·\${file}·-l·~/erlang-format/emacs-format-file·-f·emacs-format-function\""</code></pre><pre><code·class="text">-stdlib·format_shell_func·"{shell,·erl_pp_format_func}"</code></pre></li><li><p><strong><code·class="inline"·id="shell_prompt_func">shell_prompt_func·=·{Mod,·Func}·|·default</code></strong>·-·where</p><ul><li><code·class="inline">Mod·=·atom()</code></li><li><code·class="inline">Func·=·atom()</code></li></ul><p>Can·be·used·to·set·a·customized·Erlang·shell·prompt·function.</p></li><li><p><strong><code·class="inline"·id="shell_multiline_prompt">shell_multiline_prompt·=·{Mod,·Func}·|·string()·|·default</code></strong>·-·where</p><ul><li><code·class="inline">Mod·=·atom()</code></li><li><code·class="inline">Func·=·atom()</code></li></ul><p>Can·be·used·to·set·a·customized·multiline·shell·prompt·function.·The·multiline | 160 | where·the·file·goes·in·the·command.</p><pre><code·class="text">-stdlib·format_shell_func·"\"emacs·-batch·\${file}·-l·~/erlang-format/emacs-format-file·-f·emacs-format-function\""</code></pre><pre><code·class="text">-stdlib·format_shell_func·"{shell,·erl_pp_format_func}"</code></pre></li><li><p><strong><code·class="inline"·id="shell_prompt_func">shell_prompt_func·=·{Mod,·Func}·|·default</code></strong>·-·where</p><ul><li><code·class="inline">Mod·=·atom()</code></li><li><code·class="inline">Func·=·atom()</code></li></ul><p>Can·be·used·to·set·a·customized·Erlang·shell·prompt·function.</p></li><li><p><strong><code·class="inline"·id="shell_multiline_prompt">shell_multiline_prompt·=·{Mod,·Func}·|·string()·|·default</code></strong>·-·where</p><ul><li><code·class="inline">Mod·=·atom()</code></li><li><code·class="inline">Func·=·atom()</code></li></ul><p>Can·be·used·to·set·a·customized·multiline·shell·prompt·function.·The·multiline |
| 161 | prompt·function·takes·the·main·prompt·as·its·only·parameter.</p></li><li><p><strong><code·class="inline"·id="shell_saved_results">shell_saved_results·=·integer()·>=·0</code></strong>·-·Can·be | 161 | prompt·function·takes·the·main·prompt·as·its·only·parameter.</p></li><li><p><strong><code·class="inline"·id="shell_saved_results">shell_saved_results·=·integer()·>=·0</code></strong>·-·Can·be |
| 162 | used·to·determine·how·many·results·are·saved·by·the·Erlang·shell.</p></li><li><p><strong><code·class="inline"·id="shell_session_slogan">shell_session_slogan·=·string()·|·fun()·->·string())</code></strong>·-·The·slogan·printed·when·starting·an·Erlang·shell. | 162 | used·to·determine·how·many·results·are·saved·by·the·Erlang·shell.</p></li><li><p><strong><code·class="inline"·id="shell_session_slogan">shell_session_slogan·=·string()·|·fun()·->·string())</code></strong>·-·The·slogan·printed·when·starting·an·Erlang·shell. |
| 163 | Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">stdlib</span><span·class="w">·</span><span·class="ss">shell_session_slogan</span><span·class="w">·</span><span·class="ss">'"Test·slogan"'</span><span·class="w"> | 163 | Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">stdlib</span><span·class="w">·</span><span·class="ss">shell_session_slogan</span><span·class="w">·</span><span·class="ss">'"Test·slogan"'</span><span·class="w"> |
| 164 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id=" | 164 | </span><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">26</span><span·class="w">·</span><span·class="p"·data-group-id="2495987707-1">[</span><span·class="n">DEVELOPMENT</span><span·class="p"·data-group-id="2495987707-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="2495987707-2">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">1[·...·truncated·by·diffoscope;·len:·1496,·SHA:·c5ba1bd286b45c4251bc6dfa1a29ad42305bbb658498557bb282ff2b03033891·...·]-8">]</span><span·class="w"> |
| 165 | </span><span·class="n">Test</span><span·class="w">·</span><span·class="ss">slogan</span><span·class="w"> | 165 | </span><span·class="n">Test</span><span·class="w">·</span><span·class="ss">slogan</span><span·class="w"> |
| 166 | </span><span·class="mi">1</span><span·class="o">></span></code></pre></li><li><p><strong><code·class="inline"·id="shell_slogan">shell_slogan·=·string()·|·fun(()·->·string())</code></strong>·-·The | 166 | </span><span·class="mi">1</span><span·class="o">></span></code></pre></li><li><p><strong><code·class="inline"·id="shell_slogan">shell_slogan·=·string()·|·fun(()·->·string())</code></strong>·-·The |
| 167 | slogan·printed·when·starting·the·Erlang·shell·subsystem.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">stdlib</span><span·class="w">·</span><span·class="ss">shell_slogan</span><span·class="w">·</span><span·class="ss">'"Test·slogan"'</span><span·class="w"> | 167 | slogan·printed·when·starting·the·Erlang·shell·subsystem.·Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">-</span><span·class="ss">stdlib</span><span·class="w">·</span><span·class="ss">shell_slogan</span><span·class="w">·</span><span·class="ss">'"Test·slogan"'</span><span·class="w"> |
| 168 | </span><span·class="n">Test</span><span·class="w">·</span><span·class="ss">slogan</span><span·class="w"> | 168 | </span><span·class="n">Test</span><span·class="w">·</span><span·class="ss">slogan</span><span·class="w"> |
| 169 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V13</span><span·class="p">.</span><span·class="mf">0.2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 169 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V13</span><span·class="p">.</span><span·class="mf">0.2</span><span·class="w">··</span><span·class="p"·data-group-id="6435832117-1">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="6435832117-1">)</span><span·class="w"> |
| 170 | </span><span·class="mi">1</span><span·class="o">></span></code></pre><p>The·default·is·the·return·value·of | 170 | </span><span·class="mi">1</span><span·class="o">></span></code></pre><p>The·default·is·the·return·value·of |
| 171 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#system_info_system_version"><code·class="inline">erlang:system_info(system_version)</code></a>.</p></li><li><p><strong><code·class="inline"·id="shell_strings">shell_strings·=·boolean()</code></strong>·-·Can·be·used·to·determine | 171 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#system_info_system_version"><code·class="inline">erlang:system_info(system_version)</code></a>.</p></li><li><p><strong><code·class="inline"·id="shell_strings">shell_strings·=·boolean()</code></strong>·-·Can·be·used·to·determine |
| 172 | how·the·Erlang·shell·outputs·lists·of·integers.</p></li></ul><h2·id="see-also"·class="section-heading"> | 172 | how·the·Erlang·shell·outputs·lists·of·integers.</p></li></ul><h2·id="see-also"·class="section-heading"> |
| 173 | ··<a·href="#see-also"·class="hover-link"> | 173 | ··<a·href="#see-also"·class="hover-link"> |
| 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 174 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 175 | ··</a> | 175 | ··</a> |
| 176 | ··<span·class="text">See·Also</span> | 176 | ··<span·class="text">See·Also</span> |
| Offset 223, 15 lines modified | Offset 223, 15 lines modified | ||
| 223 | ······<p·class="built-using"> | 223 | ······<p·class="built-using"> |
| 224 | ········Built·using | 224 | ········Built·using |
| 225 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 225 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 226 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 226 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 227 | ······</p> | 227 | ······</p> |
| 228 | <p>Copyright·©·1996-202 | 228 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 229 | ····</footer> | 229 | ····</footer> |
| 230 | ··</div> | 230 | ··</div> |
| 231 | </main> | 231 | </main> |
| 232 | </div> | 232 | </div> |
| 233 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 233 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 234 | ··<script> | 234 | ··<script> |
| 235 | ··let·initialized·=·false; | 235 | ··let·initialized·=·false; |
| Offset 145, 22 lines modified | Offset 145, 22 lines modified | ||
| 145 | <a·href="#replace/3"><code·class="inline">replace/3</code></a>,·<a·href="#split/2"><code·class="inline">split/2</code></a>,·<a·href="#split/3"><code·class="inline">split/3</code></a>·and·<a·href="#trim/3"><code·class="inline">trim/3</code></a>.</p><p>Splitting·and·appending·strings·is·to·be·done·on·grapheme·clusters·borders. | 145 | <a·href="#replace/3"><code·class="inline">replace/3</code></a>,·<a·href="#split/2"><code·class="inline">split/2</code></a>,·<a·href="#split/3"><code·class="inline">split/3</code></a>·and·<a·href="#trim/3"><code·class="inline">trim/3</code></a>.</p><p>Splitting·and·appending·strings·is·to·be·done·on·grapheme·clusters·borders. |
| 146 | There·is·no·verification·that·the·results·of·appending·strings·are·valid·or | 146 | There·is·no·verification·that·the·results·of·appending·strings·are·valid·or |
| 147 | normalized.</p><p>Most·of·the·functions·expect·all·input·to·be·normalized·to·one·form,·see·for | 147 | normalized.</p><p>Most·of·the·functions·expect·all·input·to·be·normalized·to·one·form,·see·for |
| 148 | example·<a·href="unicode.html#characters_to_nfc_list/1"><code·class="inline">unicode:characters_to_nfc_list/1</code></a>.</p><p>Language·or·locale·specific·handling·of·input·is·not·considered·in·any·function.</p><p>The·functions·can·crash·for·non-valid·input·strings.·For·example,·the·functions | 148 | example·<a·href="unicode.html#characters_to_nfc_list/1"><code·class="inline">unicode:characters_to_nfc_list/1</code></a>.</p><p>Language·or·locale·specific·handling·of·input·is·not·considered·in·any·function.</p><p>The·functions·can·crash·for·non-valid·input·strings.·For·example,·the·functions |
| 149 | expect·UTF-8·binaries·but·not·all·functions·verify·that·all·binaries·are·encoded | 149 | expect·UTF-8·binaries·but·not·all·functions·verify·that·all·binaries·are·encoded |
| 150 | correctly.</p><p>Unless·otherwise·specified·the·return·value·type·is·the·same·as·the·input·type. | 150 | correctly.</p><p>Unless·otherwise·specified·the·return·value·type·is·the·same·as·the·input·type. |
| 151 | That·is,·binary·input·returns·binary·output,·list·input·returns·a·list·output, | 151 | That·is,·binary·input·returns·binary·output,·list·input·returns·a·list·output, |
| 152 | and·mixed·input·can·return·a·mixed·output.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">trim</span><span·class="p"·data-group-id=" | 152 | and·mixed·input·can·return·a·mixed·output.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">trim</span><span·class="p"·data-group-id="1028416998-1">(</span><span·class="s">"··sarah··"</span><span·class="p"·data-group-id="1028416998-1">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="s">"sarah"</span><span·class="gp·unselectable"> | 153 | </span><span·class="s">"sarah"</span><span·class="gp·unselectable"> |
| 154 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">trim</span><span·class="p"·data-group-id=" | 154 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">trim</span><span·class="p"·data-group-id="1028416998-2">(</span><span·class="p"·data-group-id="1028416998-3"><<</span><span·class="s">"··sarah··"</span><span·class="p"·data-group-id="1028416998-3">>></span><span·class="p"·data-group-id="1028416998-2">)</span><span·class="p">.</span><span·class="w"> |
| 155 | </span><span·class="p"·data-group-id=" | 155 | </span><span·class="p"·data-group-id="1028416998-4"><<</span><span·class="s">"sarah"</span><span·class="p"·data-group-id="1028416998-4">>></span><span·class="gp·unselectable"> |
| 156 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">lexemes</span><span·class="p"·data-group-id=" | 156 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">lexemes</span><span·class="p"·data-group-id="1028416998-5">(</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"·"</span><span·class="p"·data-group-id="1028416998-5">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="1028416998-6">[</span><span·class="s">"foo"</span><span·class="p">,</span><span·class="s">"bar"</span><span·class="p"·data-group-id="1028416998-6">]</span><span·class="gp·unselectable"> |
| 158 | 4>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">lexemes</span><span·class="p"·data-group-id="4624085633-7">(</span><span·class="p"·data-group-id="4624085633-8"><<</span><span·class="s">"foo·bar"</span><span·class="p"·data-group-id="4624085633-8">>></span><span·class="p">,</span><span·class="w">·</span><span·class="s">"·"</span><span·class="p"·data-group-id="4624085633-7">)</span><span·class="p">.</span><span·class="w"> | ||
| 159 | </span><span·class=" | 158 | 4>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">lexemes</span><span·class="p"·data-group-id="1028416998-7">(</span><span·class="p"·data-group-id="1028416998-8"><<</span><span·class="s">"foo·bar"</span><sp[·...·truncated·by·diffoscope;·len:·233,·SHA:·45dd4085a7be57a04fbf9cece0d2daaf7a5bc31ef0416d45050dc2ad406cc5ed·...·]> |
| 159 | </span><span·class="p"·data-group-id="1028416998-9">[</span><span·class="p"·data-group-id="1028416998-10"><<</span><span·class="s">"foo"</span><span·class="p"·data-group-id="1028416998-10">>></span><span·class="p">,</span><span·class="p"·data-group-id="1028416998-11"><<</span><span·class="s">"bar"</span><span·class="p"·data-group-id="1028416998-11">>></span><span·class="p"·data-group-id="1028416998-9">]</span></code></pre><p>This·module·has·been·reworked·in·Erlang/OTP·20·to·handle·<a·href="unicode.html#t:chardata/0"><code·class="inline">unicode:chardata/0</code></a> | ||
| 160 | and·operate·on·grapheme·clusters.·The | 160 | and·operate·on·grapheme·clusters.·The |
| 161 | <a·href="string.html#obsolete-api-functions"><code·class="inline">old·functions</code></a>·that·only·work·on·Latin-1 | 161 | <a·href="string.html#obsolete-api-functions"><code·class="inline">old·functions</code></a>·that·only·work·on·Latin-1 |
| 162 | lists·as·input·are·still·available·but·should·not·be·used,·they·will·be | 162 | lists·as·input·are·still·available·but·should·not·be·used,·they·will·be |
| 163 | deprecated·in·a·future·release.</p><h2·id="module-notes"·class="section-heading"> | 163 | deprecated·in·a·future·release.</p><h2·id="module-notes"·class="section-heading"> |
| 164 | ··<a·href="#module-notes"·class="hover-link"> | 164 | ··<a·href="#module-notes"·class="hover-link"> |
| 165 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 165 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 166 | ··</a> | 166 | ··</a> |
| Offset 1062, 15 lines modified | Offset 1062, 15 lines modified | ||
| 1062 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·casefold(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>().</pre> | 1062 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·casefold(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>().</pre> |
| 1063 | ······</div> | 1063 | ······</div> |
| 1064 | <p>Converts·<code·class="inline">String</code>·to·a·case-agnostic·comparable·string.·Function | 1064 | <p>Converts·<code·class="inline">String</code>·to·a·case-agnostic·comparable·string.·Function |
| 1065 | <a·href="#casefold/1"><code·class="inline">casefold/1</code></a>·is·preferred·over·<a·href="#lowercase/1"><code·class="inline">lowercase/1</code></a> | 1065 | <a·href="#casefold/1"><code·class="inline">casefold/1</code></a>·is·preferred·over·<a·href="#lowercase/1"><code·class="inline">lowercase/1</code></a> |
| 1066 | when·two·strings·are·to·be·compared·for·equality.·See·also·<a·href="#equal/4"><code·class="inline">equal/4</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">casefold</span><span·class="p"·data-group-id=" | 1066 | when·two·strings·are·to·be·compared·for·equality.·See·also·<a·href="#equal/4"><code·class="inline">equal/4</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">casefold</span><span·class="p"·data-group-id="2074409595-1">(</span><span·class="s">"Ω·and·ẞ·SHARP·S"</span><span·class="p"·data-group-id="2074409595-1">)</span><span·class="p">.</span><span·class="w"> |
| 1067 | </span><span·class="s">"ω·and·ss·sharp·s"</span></code></pre> | 1067 | </span><span·class="s">"ω·and·ss·sharp·s"</span></code></pre> |
| 1068 | ··</section> | 1068 | ··</section> |
| 1069 | </section> | 1069 | </section> |
| 1070 | <section·class="detail"·id="chomp/1"> | 1070 | <section·class="detail"·id="chomp/1"> |
| 1071 | ··<div·class="detail-header"> | 1071 | ··<div·class="detail-header"> |
| 1072 | ····<a·href="#chomp/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1072 | ····<a·href="#chomp/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1092, 17 lines modified | Offset 1092, 17 lines modified | ||
| 1092 | ······<div·class="specs"> | 1092 | ······<div·class="specs"> |
| 1093 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·chomp(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>().</pre> | 1093 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·chomp(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>().</pre> |
| 1094 | ······</div> | 1094 | ······</div> |
| 1095 | <p>Returns·a·string·where·any·trailing·<code·class="inline">\n</code>·or·<code·class="inline">\r\n</code>·have·been·removed·from | 1095 | <p>Returns·a·string·where·any·trailing·<code·class="inline">\n</code>·or·<code·class="inline">\r\n</code>·have·been·removed·from |
| 1096 | <code·class="inline">String</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">182>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">chomp</span><span·class="p"·data-group-id=" | 1096 | <code·class="inline">String</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">182>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">chomp</span><span·class="p"·data-group-id="1791934953-1">(</span><span·class="p"·data-group-id="1791934953-2"><<</span><span·class="s">"\nHello\n\n"</span><span·class="p"·data-group-id="1791934953-2">>></span><span·class="p"·data-group-id="1791934953-1">)</span><span·class="p">.</span><span·class="w"> |
| 1097 | </span><span·class="p"·data-group-id=" | 1097 | </span><span·class="p"·data-group-id="1791934953-3"><<</span><span·class="s">"\nHello"</span><span·class="p"·data-group-id="1791934953-3">>></span><span·class="gp·unselectable"> |
| 1098 | 183>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">chomp</span><span·class="p"·data-group-id=" | 1098 | 183>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">chomp</span><span·class="p"·data-group-id="1791934953-4">(</span><span·class="s">"\nHello\r\r\n"</span><span·class="p"·data-group-id="1791934953-4">)</span><span·class="p">.</span><span·class="w"> |
| 1099 | </span><span·class="s">"\nHello\r"</span></code></pre> | 1099 | </span><span·class="s">"\nHello\r"</span></code></pre> |
| 1100 | ··</section> | 1100 | ··</section> |
| 1101 | </section> | 1101 | </section> |
| 1102 | <section·class="detail"·id="equal/2"> | 1102 | <section·class="detail"·id="equal/2"> |
| 1103 | ··<div·class="detail-header"> | 1103 | ··<div·class="detail-header"> |
| 1104 | ····<a·href="#equal/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1104 | ····<a·href="#equal/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1189, 19 lines modified | Offset 1189, 19 lines modified | ||
| 1189 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">A</code>·and·<code·class="inline">B</code>·are·equal,·otherwise·<code·class="inline">false</code>.</p><p>If·<code·class="inline">IgnoreCase</code>·is·<code·class="inline">true</code>·the·function·does·<a·href="#casefold/1"><code·class="inline">casefold</code>ing</a>·on·the | 1189 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">A</code>·and·<code·class="inline">B</code>·are·equal,·otherwise·<code·class="inline">false</code>.</p><p>If·<code·class="inline">IgnoreCase</code>·is·<code·class="inline">true</code>·the·function·does·<a·href="#casefold/1"><code·class="inline">casefold</code>ing</a>·on·the |
| 1190 | fly·before·the·equality·test.</p><p>If·<code·class="inline">Norm</code>·is·not·<code·class="inline">none</code>·the·function·applies·normalization·on·the·fly·before·the | 1190 | fly·before·the·equality·test.</p><p>If·<code·class="inline">Norm</code>·is·not·<code·class="inline">none</code>·the·function·applies·normalization·on·the·fly·before·the |
| 1191 | equality·test.·There·are·four·available·normalization·forms: | 1191 | equality·test.·There·are·four·available·normalization·forms: |
| 1192 | <a·href="unicode.html#characters_to_nfc_list/1"><code·class="inline">nfc</code></a>, | 1192 | <a·href="unicode.html#characters_to_nfc_list/1"><code·class="inline">nfc</code></a>, |
| 1193 | <a·href="unicode.html#characters_to_nfd_list/1"><code·class="inline">nfd</code></a>, | 1193 | <a·href="unicode.html#characters_to_nfd_list/1"><code·class="inline">nfd</code></a>, |
| 1194 | <a·href="unicode.html#characters_to_nfkc_list/1"><code·class="inline">nfkc</code></a>,·and | 1194 | <a·href="unicode.html#characters_to_nfkc_list/1"><code·class="inline">nfkc</code></a>,·and |
| 1195 | <a·href="unicode.html#characters_to_nfkd_list/1"><code·class="inline">nfkd</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id=" | 1195 | <a·href="unicode.html#characters_to_nfkd_list/1"><code·class="inline">nfkd</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id="9599681858-1">(</span><span·class="s">"åäö"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9599681858-2"><<</span><span·class="s">"åäö"</span><span·class="o">/</span><span·class="ss">utf8</spa[·...·truncated·by·diffoscope;·len:·103,·SHA:·7dce5ff9ae1c1377cdcd7d2c56aaaacfa8f62a740e24d5a10ee34d06ea7d445a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1196 | </span><span·class="ss">true</span><span·class="gp·unselectable"> | 1196 | </span><span·class="ss">true</span><span·class="gp·unselectable"> |
| 1197 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id=" | 1197 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id="9599681858-3">(</span><span·class="s">"åäö"</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_binary</span><span·class="p"·data-group-id="9599681858-4">[·...·truncated·by·diffoscope;·len:·140,·SHA:·b850fe721fc69357e30b3d58035be3d747f420adc71a83bb83e50e2615122e47·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 1198 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 1198 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 1199 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id=" | 1199 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">equal</span><span·class="p"·data-group-id="9599681858-5">(</span><span·class="s">"åäö"</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_binary</span><span·class="p"·data-group-id="9599681858-6">[·...·truncated·by·diffoscope;·len:·291,·SHA:·4a9b327b12b0729b155ebb8d97cb0963268077a39c49481f0d585f64392df896·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 1200 | </span><span·class="ss">true</span></code></pre> | 1200 | </span><span·class="ss">true</span></code></pre> |
| 1201 | ··</section> | 1201 | ··</section> |
| 1202 | </section> | 1202 | </section> |
| 1203 | <section·class="detail"·id="find/2"> | 1203 | <section·class="detail"·id="find/2"> |
| 1204 | ··<div·class="detail-header"> | 1204 | ··<div·class="detail-header"> |
| 1205 | ····<a·href="#find/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1205 | ····<a·href="#find/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1255, 21 lines modified | Offset 1255, 21 lines modified | ||
| 1255 | ··············when·String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·SearchPattern·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·Dir·::·<a·href="#t:direction/0">direction</a>().</pre> | 1255 | ··············when·String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·SearchPattern·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·Dir·::·<a·href="#t:direction/0">direction</a>().</pre> |
| 1256 | ······</div> | 1256 | ······</div> |
| 1257 | <p>Removes·anything·before·<code·class="inline">SearchPattern</code>·in·<code·class="inline">String</code>·and·returns·the·remainder·of | 1257 | <p>Removes·anything·before·<code·class="inline">SearchPattern</code>·in·<code·class="inline">String</code>·and·returns·the·remainder·of |
| 1258 | the·string·or·<code·class="inline">nomatch</code>·if·<code·class="inline">SearchPattern</code>·is·not·found.·<code·class="inline">Dir</code>,·which·can·be | 1258 | the·string·or·<code·class="inline">nomatch</code>·if·<code·class="inline">SearchPattern</code>·is·not·found.·<code·class="inline">Dir</code>,·which·can·be |
| 1259 | <code·class="inline">leading</code>·or·<code·class="inline">trailing</code>,·indicates·from·which·direction·characters·are·to·be | 1259 | <code·class="inline">leading</code>·or·<code·class="inline">trailing</code>,·indicates·from·which·direction·characters·are·to·be |
| 1260 | searched.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id=" | 1260 | searched.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id="9624998440-1">(</span><span·class="s">"ab..cd..ef"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"."</span><span·class="p"·data-group-id="9624998440-1">)</span><span·class="p">.</span><span·class="w"> |
| 1261 | </span><span·class="s">"..cd..ef"</span><span·class="gp·unselectable"> | 1261 | </span><span·class="s">"..cd..ef"</span><span·class="gp·unselectable"> |
| 1262 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id=" | 1262 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id="9624998440-2">(</span><span·class="p"·data-group-id="9624998440-3"><<</span><span·class="s">"ab..cd..ef"</span><span·class="p"·data-group-id="9624998440-3">>></span><span·class="p">,</span><span·class="w">·</span><span·class="s">"[·...·truncated·by·diffoscope;·len:·137,·SHA:·0b52043ad673633b68c4ec45112926638ebf19279162da62177e4ab8bbe052d7·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 1263 | </span><span·class="p"·data-group-id=" | 1263 | </span><span·class="p"·data-group-id="9624998440-4"><<</span><span·class="s">"..ef"</span><span·class="p"·data-group-id="9624998440-4">>></span><span·class="gp·unselectable"> |
| 1264 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id=" | 1264 | 3>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id="9624998440-5">(</span><span·class="p"·data-group-id="9624998440-6"><<</span><span·class="s">"ab..cd..ef"</span><span·class="p"·data-group-id="9624998440-6">>></span><span·class="p">,</span><span·class="w">·</span><span·class="s">"[·...·truncated·by·diffoscope;·len:·135,·SHA:·f22a482f99d29545228d573f8a5d0644095df023d10ff9feb2c3316bfcbc1a6c·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 1265 | </span><span·class="ss">nomatch</span><span·class="gp·unselectable"> | 1265 | </span><span·class="ss">nomatch</span><span·class="gp·unselectable"> |
| 1266 | 4>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id=" | 1266 | 4>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">find</span><span·class="p"·data-group-id="9624998440-7">(</span><span·class="s">"ab..cd..ef"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"x"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">trailing</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·34fc3e067fe1f4316c8ac568c143c39c32b0dedfaf7fadc2f38fdb0bdffb8a71·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 1267 | </span><span·class="ss">nomatch</span></code></pre> | 1267 | </span><span·class="ss">nomatch</span></code></pre> |
| 1268 | ··</section> | 1268 | ··</section> |
| 1269 | </section> | 1269 | </section> |
| 1270 | <section·class="detail"·id="is_empty/1"> | 1270 | <section·class="detail"·id="is_empty/1"> |
| 1271 | ··<div·class="detail-header"> | 1271 | ··<div·class="detail-header"> |
| 1272 | ····<a·href="#is_empty/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1272 | ····<a·href="#is_empty/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1290, 17 lines modified | Offset 1290, 17 lines modified | ||
| 1290 | ······<div·class="specs"> | 1290 | ······<div·class="specs"> |
| 1291 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_empty(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> | 1291 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·is_empty(String·::·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>())·->·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:boolean/0">boolean</a>().</pre> |
| 1292 | ······</div> | 1292 | ······</div> |
| 1293 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">String</code>·is·the·empty·string,·otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">is_empty</span><span·class="p"·data-group-id=" | 1293 | <p>Returns·<code·class="inline">true</code>·if·<code·class="inline">String</code>·is·the·empty·string,·otherwise·<code·class="inline">false</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">is_empty</span><span·class="p"·data-group-id="7306618679-1">(</span><span·class="s">"foo"</span><span·class="p"·data-group-id="7306618679-1">)</span><span·class="p">.</span><span·class="w"> |
| 1294 | </span><span·class="ss">false</span><span·class="gp·unselectable"> | 1294 | </span><span·class="ss">false</span><span·class="gp·unselectable"> |
| 1295 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">is_empty</span><span·class="p"·data-group-id=" | 1295 | 2>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">is_empty</span><span·class="p"·data-group-id="7306618679-2">(</span><span·class="p"·data-group-id="7306618679-3">[</span><span·class="s">""</span><span·class="p">,</span><span·class="p"·data-group-id="7306618679-4"><<</span><span·class="p"·data-group-id="7306618679-4">>></span><s[·...·truncated·by·diffoscope;·len:·90,·SHA:·975fbb72894fb5d8ea53bff969a1a8d184a2c8f811780826157f5399aa8fdaee·...·]79-2">)</span><span·class="p">.</span><span·class="w"> |
| 1296 | </span><span·class="ss">true</span></code></pre> | 1296 | </span><span·class="ss">true</span></code></pre> |
| 1297 | ··</section> | 1297 | ··</section> |
| 1298 | </section> | 1298 | </section> |
| 1299 | <section·class="detail"·id="jaro_similarity/2"> | 1299 | <section·class="detail"·id="jaro_similarity/2"> |
| 1300 | ··<div·class="detail-header"> | 1300 | ··<div·class="detail-header"> |
| 1301 | ····<a·href="#jaro_similarity/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1301 | ····<a·href="#jaro_similarity/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1328, 21 lines modified | Offset 1328, 21 lines modified | ||
| 1328 | ·····························Similarity·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0">float</a>().</pre> | 1328 | ·····························Similarity·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:float/0">float</a>().</pre> |
| 1329 | ······</div> | 1329 | ······</div> |
| 1330 | <p>Returns·a·float·between·<code·class="inline">+0.0</code>·and·<code·class="inline">1.0</code>·representing·the | 1330 | <p>Returns·a·float·between·<code·class="inline">+0.0</code>·and·<code·class="inline">1.0</code>·representing·the |
| 1331 | <a·href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance">Jaro·similarity</a> | 1331 | <a·href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance">Jaro·similarity</a> |
| 1332 | between·the·given·strings.·Strings·with·a·higher·similarity·will·score·closer | 1332 | between·the·given·strings.·Strings·with·a·higher·similarity·will·score·closer |
| 1333 | to·<code·class="inline">1.0</code>,·with·<code·class="inline">+0.0</code>·meaning·no·similarity·and·<code·class="inline">1.0</code>·meaning·an·exact·match.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">jaro_similarity</span><span·class="p"·data-group-id="6 | 1333 | to·<code·class="inline">1.0</code>,·with·<code·class="inline">+0.0</code>·meaning·no·similarity·and·<code·class="inline">1.0</code>·meaning·an·exact·match.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">string</span><span·class="p">:</span><span·class="nf">jaro_similarity</span><span·class="p"·data-group-id="6762193717-1">(</span><span·class="s">"ditto"</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"ditto"</span><span·class="p"·data-group-id="6762193717-1">)</span><span·class="p">.</span><span·class="w"> |
| 1334 | </span><span·class="mf">1.0</span><span·class="gp·unselectable"> | 1334 | </span><span·class="mf">1.0</span><span·class="gp·unselectable"> |
| Max diff block lines reached; 123207/151261 bytes (81.45%) of diff not shown. | |||
| Offset 154, 18 lines modified | Offset 154, 18 lines modified | ||
| 154 | left.</p><p><a·href=""·id="sup_flags"></a></p><h3·id="module-supervisor-flags"·class="section-heading"> | 154 | left.</p><p><a·href=""·id="sup_flags"></a></p><h3·id="module-supervisor-flags"·class="section-heading"> |
| 155 | ··<a·href="#module-supervisor-flags"·class="hover-link"> | 155 | ··<a·href="#module-supervisor-flags"·class="hover-link"> |
| 156 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 156 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 157 | ··</a> | 157 | ··</a> |
| 158 | ··<span·class="text">Supervisor·flags</span> | 158 | ··<span·class="text">Supervisor·flags</span> |
| 159 | </h3> | 159 | </h3> |
| 160 | <p>The·supervisor·properties·are·defined·by·the·supervisor·flags.·The·type | 160 | <p>The·supervisor·properties·are·defined·by·the·supervisor·flags.·The·type |
| 161 | definition·for·the·supervisor·flags·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sup_flags</span><span·class="p"·data-group-id=" | 161 | definition·for·the·supervisor·flags·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">sup_flags</span><span·class="p"·data-group-id="7917285186-1">(</span><span·class="p"·data-group-id="7917285186-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="7917285186-2">#{</span><span·class="ss">strategy</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·179,·SHA:·9fa0e12a7f331cabf1199ea48f62cd720ee6df214279f5f0dbf823d1f8a3db4d·...·]-3">)</span><span·class="p">,</span><span·class="w">···········</span><span·class="c1">%·optional</span><span·class="w"> |
| 162 | ················</span><span·class="ss">intensity</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id=" | 162 | ················</span><span·class="ss">intensity</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">non_neg_integer</span><span·class="p"·data-group-id="7917285186-4">(</span><span·class="p"·data-group-id="7917285186-4">)</span><span·class="p">,</span><span·class="w">···</span><span·class="c1">%·optional</span><span·class="w"> |
| 163 | ················</span><span·class="ss">period</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id=" | 163 | ················</span><span·class="ss">period</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">pos_integer</span><span·class="p"·data-group-id="7917285186-5">(</span><span·class="p"·data-group-id="7917285186-5">)</span><span·class="p">,</span><span·class="w">··········</span><span·class="c1">%·optional</span><span·class="w"> |
| 164 | ················</span><span·class="ss">auto_shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id=" | 164 | ················</span><span·class="ss">auto_shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">auto_shutdown</span><span·class="p"·data-group-id="7917285186-6">(</span><span·class="p"·data-group-id="7917285186-6">)</span><span·class="p"·data-group-id="7917285186-2">}</span><span·class="w">·</span><span·class="c1">%·optional</span></code></pre><h4>Restart·Strategies</h4><p>A·supervisor·can·have·one·of·the·following·<em>restart·strategies</em>·specified·with |
| 165 | the·<code·class="inline">strategy</code>·key·in·the·above·map:</p><ul><li><p><code·class="inline">one_for_one</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·only | 165 | the·<code·class="inline">strategy</code>·key·in·the·above·map:</p><ul><li><p><code·class="inline">one_for_one</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·only |
| 166 | that·child·process·is·affected.·This·is·the·default·restart·strategy.</p></li><li><p><code·class="inline">one_for_all</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·all | 166 | that·child·process·is·affected.·This·is·the·default·restart·strategy.</p></li><li><p><code·class="inline">one_for_all</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·all |
| 167 | other·child·processes·are·terminated·and·then·all·child·processes·are | 167 | other·child·processes·are·terminated·and·then·all·child·processes·are |
| 168 | restarted.</p></li><li><p><code·class="inline">rest_for_one</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·the | 168 | restarted.</p></li><li><p><code·class="inline">rest_for_one</code>·-·If·one·child·process·terminates·and·is·to·be·restarted,·the |
| 169 | 'rest'·of·the·child·processes·(that·is,·the·child·processes·after·the | 169 | 'rest'·of·the·child·processes·(that·is,·the·child·processes·after·the |
| 170 | terminated·child·process·in·the·start·order)·are·terminated.·Then·the | 170 | terminated·child·process·in·the·start·order)·are·terminated.·Then·the |
| 171 | terminated·child·process·and·all·child·processes·after·it·are·restarted.</p></li><li><p><code·class="inline">simple_one_for_one</code>·-·A·simplified·<code·class="inline">one_for_one</code>·supervisor,·where·all·child | 171 | terminated·child·process·and·all·child·processes·after·it·are·restarted.</p></li><li><p><code·class="inline">simple_one_for_one</code>·-·A·simplified·<code·class="inline">one_for_one</code>·supervisor,·where·all·child |
| Offset 201, 21 lines modified | Offset 201, 21 lines modified | ||
| 201 | the·automatic·shutdowns·they·rely·on·will·not·happen.</p><p>It·is·up·to·implementors·to·take·proper·precautions·if·they·expect·that·their | 201 | the·automatic·shutdowns·they·rely·on·will·not·happen.</p><p>It·is·up·to·implementors·to·take·proper·precautions·if·they·expect·that·their |
| 202 | applications·may·be·compiled·with·older·OTP·versions.</p></section><p><a·href=""·id="child_spec"></a></p><h3·id="module-child-specification"·class="section-heading"> | 202 | applications·may·be·compiled·with·older·OTP·versions.</p></section><p><a·href=""·id="child_spec"></a></p><h3·id="module-child-specification"·class="section-heading"> |
| 203 | ··<a·href="#module-child-specification"·class="hover-link"> | 203 | ··<a·href="#module-child-specification"·class="hover-link"> |
| 204 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 204 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 205 | ··</a> | 205 | ··</a> |
| 206 | ··<span·class="text">Child·specification</span> | 206 | ··<span·class="text">Child·specification</span> |
| 207 | </h3> | 207 | </h3> |
| 208 | <p>The·type·definition·of·a·child·specification·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">child_spec</span><span·class="p"·data-group-id="5055155321-1">(</span><span·class="p"·data-group-id="5055155321-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="5055155321-2">#{</span><span·class="ss">id</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">child_id</span><span·class="p"·data-group-id="5055155321-3">(</span><span·class="p"·data-group-id="5055155321-3">)</span><span·class="p">,</span><span·class="w">·············</span><span·class="c1">%·mandatory</span><span·class="w"> | ||
| 209 | 208 | <p>The·type·definition·of·a·child·specification·is·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">child_spec</span><span·class="p"·data-group-id="0292583622-1">(</span><span·class="p"·data-group-id="0292583622-1">)</span><s[·...·truncated·by·diffoscope;·len:·405,·SHA:·114da0a064287d49cdee3755c96f6b365613ff845585face7ed3209897615d79·...·]············</span><span·class="c1">%·mandatory</span><span·class="w"> | |
| 209 | ·················</span><span·class="ss">start</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">mfargs</span><span·class="p"·data-group-id="0292583622-4">(</span><span·class="p"·data-group-id="0292583622-4">)</span><span·class="p">,</span><span·class="w">············</span><span·class="c1">%·mandatory</span><span·class="w"> | ||
| 210 | ·················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">restart</span><span·class="p"·data-group-id=" | 210 | ·················</span><span·class="ss">restart</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">restart</span><span·class="p"·data-group-id="0292583622-5">(</span><span·class="p"·data-group-id="0292583622-5">)</span><span·class="p">,</span><span·class="w">·········</span><span·class="c1">%·optional</span><span·class="w"> |
| 211 | ·················</span><span·class="ss">significant</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">significant</span><span·class="p"·data-group-id="5055155321-6">(</span><span·class="p"·data-group-id="5055155321-6">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·optional</span><span·class="w"> | ||
| 212 | ·················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">shutdown</span><span·class="p"·data-group-id="5055155321-7">(</span><span·class="p"·data-group-id="5055155321-7">)</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·optional</span><span·class="w"> | ||
| 213 | ·················</span><span·class="ss"> | 211 | ·················</span><span·class="ss">significant</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">significant</span><span·class="p"·data-group-id="0292583622-6">(</span><span·class="p"·data-group-id="0292583622-6">)</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·19,·SHA:·887e09d9f57385f2929afb80f23f02203796ca6431e1f51107d90a29beb84747·...·]·</span><span·class="c1">%·optional</span><span·class="w"> |
| 212 | ·················</span><span·class="ss">shutdown</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">shutdown</span><span·class="p"·data-group-id="0292583622-7">(</span><span·class="p"·data-group-id="0292583622-7">)</span><span·class="p">,</span><span·class="w">·······</span><span·class="c1">%·optional</span><span·class="w"> | ||
| 213 | ·················</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">worker</span><span·class="p"·data-group-id="0292583622-8">(</span><span·class="p"·data-group-id="0292583622-8">)</span><span·class="p">,</span><span·class="w">·············</span><span·class="c1">%·optional</span><span·class="w"> | ||
| 214 | ·················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id=" | 214 | ·················</span><span·class="ss">modules</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="nf">modules</span><span·class="p"·data-group-id="0292583622-9">(</span><span·class="p"·data-group-id="0292583622-9">)</span><span·class="p"·data-group-id="0292583622-2">}</span><span·class="w">·········</span><span·class="c1">%·optional</span></code></pre><p>The·old·tuple·format·is·kept·for·backwards·compatibility,·see·<a·href="#t:child_spec/0"><code·class="inline">child_spec/0</code></a>, |
| 215 | but·the·map·is·preferred.</p><ul><li><p><code·class="inline">id</code>·is·used·to·identify·the·child·specification·internally·by·the·supervisor.</p><p>The·<code·class="inline">id</code>·key·is·mandatory.</p><p>Notice·that·this·identifier·on·occations·has·been·called·"name".·As·far·as | 215 | but·the·map·is·preferred.</p><ul><li><p><code·class="inline">id</code>·is·used·to·identify·the·child·specification·internally·by·the·supervisor.</p><p>The·<code·class="inline">id</code>·key·is·mandatory.</p><p>Notice·that·this·identifier·on·occations·has·been·called·"name".·As·far·as |
| 216 | possible,·the·terms·"identifier"·or·"id"·are·now·used·but·to·keep·backward | 216 | possible,·the·terms·"identifier"·or·"id"·are·now·used·but·to·keep·backward |
| 217 | compatibility,·some·occurences·of·"name"·can·still·be·found,·for·example·in | 217 | compatibility,·some·occurences·of·"name"·can·still·be·found,·for·example·in |
| 218 | error·messages.</p></li><li><p><code·class="inline">start</code>·defines·the·function·call·used·to·start·the·child·process.·It·must·be | 218 | error·messages.</p></li><li><p><code·class="inline">start</code>·defines·the·function·call·used·to·start·the·child·process.·It·must·be |
| 219 | a·module-function-arguments·tuple·<code·class="inline">{M,F,A}</code>·used·as | 219 | a·module-function-arguments·tuple·<code·class="inline">{M,F,A}</code>·used·as |
| 220 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,F,A)</code></a>.</p><p>The·start·function·<em>must·create·and·link·to</em>·the·child·process,·and·must | 220 | <a·href="../../../../erts-15.2.7/doc/html/erlang.html#apply/3"><code·class="inline">apply(M,F,A)</code></a>.</p><p>The·start·function·<em>must·create·and·link·to</em>·the·child·process,·and·must |
| 221 | return·<code·class="inline">{ok,Child}</code>·or·<code·class="inline">{ok,Child,Info}</code>,·where·<code·class="inline">Child</code>·is·the·pid·of·the | 221 | return·<code·class="inline">{ok,Child}</code>·or·<code·class="inline">{ok,Child,Info}</code>,·where·<code·class="inline">Child</code>·is·the·pid·of·the |
| Offset 1738, 15 lines modified | Offset 1738, 15 lines modified | ||
| 1738 | ······<p·class="built-using"> | 1738 | ······<p·class="built-using"> |
| 1739 | ········Built·using | 1739 | ········Built·using |
| 1740 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1740 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1741 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1741 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1742 | ······</p> | 1742 | ······</p> |
| 1743 | <p>Copyright·©·1996-202 | 1743 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1744 | ····</footer> | 1744 | ····</footer> |
| 1745 | ··</div> | 1745 | ··</div> |
| 1746 | </main> | 1746 | </main> |
| 1747 | </div> | 1747 | </div> |
| 1748 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1748 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1749 | ··<script> | 1749 | ··<script> |
| 1750 | ··let·initialized·=·false; | 1750 | ··let·initialized·=·false; |
| Offset 407, 15 lines modified | Offset 407, 15 lines modified | ||
| 407 | ······<p·class="built-using"> | 407 | ······<p·class="built-using"> |
| 408 | ········Built·using | 408 | ········Built·using |
| 409 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 409 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 410 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 410 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 411 | ······</p> | 411 | ······</p> |
| 412 | <p>Copyright·©·1996-202 | 412 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 413 | ····</footer> | 413 | ····</footer> |
| 414 | ··</div> | 414 | ··</div> |
| 415 | </main> | 415 | </main> |
| 416 | </div> | 416 | </div> |
| 417 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 417 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 418 | ··<script> | 418 | ··<script> |
| 419 | ··let·initialized·=·false; | 419 | ··let·initialized·=·false; |
| Offset 2229, 15 lines modified | Offset 2229, 15 lines modified | ||
| 2229 | ······<p·class="built-using"> | 2229 | ······<p·class="built-using"> |
| 2230 | ········Built·using | 2230 | ········Built·using |
| 2231 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2231 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2232 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2232 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2233 | ······</p> | 2233 | ······</p> |
| 2234 | <p>Copyright·©·1996-202 | 2234 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2235 | ····</footer> | 2235 | ····</footer> |
| 2236 | ··</div> | 2236 | ··</div> |
| 2237 | </main> | 2237 | </main> |
| 2238 | </div> | 2238 | </div> |
| 2239 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2239 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2240 | ··<script> | 2240 | ··<script> |
| 2241 | ··let·initialized·=·false; | 2241 | ··let·initialized·=·false; |
| Offset 142, 23 lines modified | Offset 142, 23 lines modified | ||
| 142 | <a·href="../../../../erts-15.2.7/doc/html/time_correction.html"><em>Time·and·Time·Correction·in·Erlang</em></a> | 142 | <a·href="../../../../erts-15.2.7/doc/html/time_correction.html"><em>Time·and·Time·Correction·in·Erlang</em></a> |
| 143 | ERTS·User's·guide.</p><h2·id="module-examples"·class="section-heading"> | 143 | ERTS·User's·guide.</p><h2·id="module-examples"·class="section-heading"> |
| 144 | ··<a·href="#module-examples"·class="hover-link"> | 144 | ··<a·href="#module-examples"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">Examples</span> | 147 | ··<span·class="text">Examples</span> |
| 148 | </h2> | 148 | </h2> |
| 149 | <p><em>Example·1</em></p><p>The·following·example·shows·how·to·print·"Hello·World!"·in·5·seconds:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id=" | 149 | <p><em>Example·1</em></p><p>The·following·example·shows·how·to·print·"Hello·World!"·in·5·seconds:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id="7561308797-1">(</span><span·class="mi">5000</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">io</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">format</span><span·class="p">,</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·440,·SHA:·0205d493a0b865154069688be5dc2475fc8e9e09d43f6b0455a32c596dd0446a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="p"·data-group-id=" | 150 | </span><span·class="p"·data-group-id="7561308797-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">TRef</span><span·class="p"·data-group-id="7561308797-4">}</span><span·class="w"> |
| 151 | </span><span·class="n">Hello</span><span·class="w">·</span><span·class="n">World</span><span·class="o">!</span></code></pre><p><em>Example·2</em></p><p>The·following·example·shows·a·process·performing·a·certain·action,·and·if·this | 151 | </span><span·class="n">Hello</span><span·class="w">·</span><span·class="n">World</span><span·class="o">!</span></code></pre><p><em>Example·2</em></p><p>The·following·example·shows·a·process·performing·a·certain·action,·and·if·this |
| 152 | action·is·not·completed·within·a·certain·limit,·the·process·is·killed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 152 | action·is·not·completed·within·a·certain·limit,·the·process·is·killed:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Pid</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn</span><span·class="p"·data-group-id="5008609752-1">(</span><span·class="ss">mod</span><span·class="p">,</span><span·class="w">·</span><span·class="k">fun</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5008609752-2">[</span><span·class="ss">foo</span><span[·...·truncated·by·diffoscope;·len:·163,·SHA:·7f6e50c8ff21d5cb647372e55681ec65fcc4b94ec9a26efd83f2a01c9dc284b2·...·]2-1">)</span><span·class="p">,</span><span·class="w"> |
| 153 | </span><span·class="c1">%%·If·pid·is·not·finished·in·10·seconds,·kill·him</span><span·class="w"> | 153 | </span><span·class="c1">%%·If·pid·is·not·finished·in·10·seconds,·kill·him</span><span·class="w"> |
| 154 | </span><span·class="p"·data-group-id=" | 154 | </span><span·class="p"·data-group-id="5008609752-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">R</span><span·class="p"·data-group-id="5008609752-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·459,·SHA:·f33474e8bc6079b135efcabad3c9c7bc79bdc0470b113bf7a7b2cd6bbddbda77·...·]2-4">)</span><span·class="p">,</span><span·class="w"> |
| 155 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 155 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 156 | </span><span·class="c1">%%·We·change·our·mind...</span><span·class="w"> | 156 | </span><span·class="c1">%%·We·change·our·mind...</span><span·class="w"> |
| 157 | </span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">cancel</span><span·class="p"·data-group-id=" | 157 | </span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">cancel</span><span·class="p"·data-group-id="5008609752-6">(</span><span·class="n">R</span><span·class="p"·data-group-id="5008609752-6">)</span><span·class="p">,</span><span·class="w"> |
| 158 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="module-notes"·class="section-heading"> | 158 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="module-notes"·class="section-heading"> |
| 159 | ··<a·href="#module-notes"·class="hover-link"> | 159 | ··<a·href="#module-notes"·class="hover-link"> |
| 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 160 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 161 | ··</a> | 161 | ··</a> |
| 162 | ··<span·class="text">Notes</span> | 162 | ··<span·class="text">Notes</span> |
| 163 | </h2> | 163 | </h2> |
| 164 | <p>A·timer·can·always·be·removed·by·calling·<a·href="#cancel/1"><code·class="inline">cancel/1</code></a>.</p><p>An·interval·timer,·that·is,·a·timer·created·by·evaluating·any·of·the·functions | 164 | <p>A·timer·can·always·be·removed·by·calling·<a·href="#cancel/1"><code·class="inline">cancel/1</code></a>.</p><p>An·interval·timer,·that·is,·a·timer·created·by·evaluating·any·of·the·functions |
| Offset 177, 28 lines modified | Offset 177, 28 lines modified | ||
| 177 | process,·and·therefore·calls·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·in·those·functions·will·return·the·Pid | 177 | process,·and·therefore·calls·to·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·in·those·functions·will·return·the·Pid |
| 178 | of·this·process,·which·is·different·from·the·process·that·called | 178 | of·this·process,·which·is·different·from·the·process·that·called |
| 179 | <code·class="inline">timer:apply_*</code>.</p><p><em>Example</em></p><p>In·the·following·example,·the·intention·is·to·set·a·timer·to·execute·a·function | 179 | <code·class="inline">timer:apply_*</code>.</p><p><em>Example</em></p><p>In·the·following·example,·the·intention·is·to·set·a·timer·to·execute·a·function |
| 180 | after·1·second,·which·performs·a·fictional·task,·and·then·wants·to·inform·the | 180 | after·1·second,·which·performs·a·fictional·task,·and·then·wants·to·inform·the |
| 181 | process·which·set·the·timer·about·its·completion,·by·sending·it·a·<code·class="inline">done</code> | 181 | process·which·set·the·timer·about·its·completion,·by·sending·it·a·<code·class="inline">done</code> |
| 182 | message.</p><p>Using·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·<em>inside</em>·the·timed·function,·the·code·below·does·not·work·as | 182 | message.</p><p>Using·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·<em>inside</em>·the·timed·function,·the·code·below·does·not·work·as |
| 183 | intended.·The·task·gets·done,·but·the·<code·class="inline">done</code>·message·gets·sent·to·the·wrong | 183 | intended.·The·task·gets·done,·but·the·<code·class="inline">done</code>·message·gets·sent·to·the·wrong |
| 184 | process·and·is·lost.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id=" | 184 | process·and·is·lost.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id="2918106107-1">(</span><span·class="mi">1000</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="2918106107-2">(</span><span·class="p"·data-group-id="2918106107-2">)</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·566,·SHA:·6fffb56ed0304a29524cf1798feca7a733290a0c064a51622375cb5f6f3658ae·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 185 | </span><span·class="p"·data-group-id=" | 185 | </span><span·class="p"·data-group-id="2918106107-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">TRef</span><span·class="p"·data-group-id="2918106107-5">}</span><span·class="gp·unselectable"> |
| 186 | 2>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 186 | 2>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="c1">%%·...·5s·pass...</span><span·class="w"> | 187 | </span><span·class="c1">%%·...·5s·pass...</span><span·class="w"> |
| 188 | </span><span·class="ss">timeout</span></code></pre><p>The·code·below·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·in·the·process·which·sets·the·timer·and·assigns·it | 188 | </span><span·class="ss">timeout</span></code></pre><p>The·code·below·calls·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#self/0"><code·class="inline">self/0</code></a>·in·the·process·which·sets·the·timer·and·assigns·it |
| 189 | to·a·variable,·which·is·then·used·in·the·function·to·send·the·<code·class="inline">done</code>·message·to, | 189 | to·a·variable,·which·is·then·used·in·the·function·to·send·the·<code·class="inline">done</code>·message·to, |
| 190 | and·so·works·as·intended.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Target</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id=" | 190 | and·so·works·as·intended.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="n">Target</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="3124112120-1">(</span><span·class="p"·data-group-id="3124112120-1">)</span><span·class="w"> |
| 191 | </span><span·class="o"><</span><span·class="mf">0.82</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> | 191 | </span><span·class="o"><</span><span·class="mf">0.82</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="gp·unselectable"> |
| 192 | 2>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id=" | 192 | 2>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id="3124112120-2">(</span><span·class="mi">1000</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="3124112120-3">(</span><span·class="p"·data-group-id="3124112120-3">)</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·461,·SHA:·a494edc62d8038f7871b02c3f571bf07ef861d8a8417c76be71f8fb445c05977·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 193 | </span><span·class="p"·data-group-id=" | 193 | </span><span·class="p"·data-group-id="3124112120-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">TRef</span><span·class="p"·data-group-id="3124112120-5">}</span><span·class="gp·unselectable"> |
| 194 | 3>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 194 | 3>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="c1">%%·...·1s·passes...</span><span·class="w"> | 195 | </span><span·class="c1">%%·...·1s·passes...</span><span·class="w"> |
| 196 | </span><span·class="ss">done</span></code></pre><p>Another·option·is·to·pass·the·message·target·as·a·parameter·to·the·function.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id=" | 196 | </span><span·class="ss">done</span></code></pre><p>Another·option·is·to·pass·the·message·target·as·a·parameter·to·the·function.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">apply_after</span><span·class="p"·data-group-id="0747786683-1">(</span><span·class="mi">1000</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0747786683-2">(</span><span·class="n">Target</span><span·class="p"·data-group-id="0747786683-2">)</s[·...·truncated·by·diffoscope;·len:·778,·SHA:·89e468226bcb35104798136ea990c01900817df36f95604e2fb57348ba5a0de1·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 197 | </span><span·class="p"·data-group-id=" | 197 | </span><span·class="p"·data-group-id="0747786683-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">TRef</span><span·class="p"·data-group-id="0747786683-6">}</span><span·class="gp·unselectable"> |
| 198 | 2>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 198 | 2>·</span><span·class="k">receive</span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">done</span><span·class="w">·</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">5000</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">timeout</span><span·class="w">·</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="c1">%%·...·1s·passes...</span><span·class="w"> | 199 | </span><span·class="c1">%%·...·1s·passes...</span><span·class="w"> |
| 200 | </span><span·class="ss">done</span></code></pre> | 200 | </span><span·class="ss">done</span></code></pre> |
| 201 | ····</section> | 201 | ····</section> |
| 202 | </div> | 202 | </div> |
| Offset 1577, 15 lines modified | Offset 1577, 15 lines modified | ||
| 1577 | ······<p·class="built-using"> | 1577 | ······<p·class="built-using"> |
| 1578 | ········Built·using | 1578 | ········Built·using |
| 1579 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1579 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1580 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1580 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1581 | ······</p> | 1581 | ······</p> |
| 1582 | <p>Copyright·©·1996-202 | 1582 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1583 | ····</footer> | 1583 | ····</footer> |
| 1584 | ··</div> | 1584 | ··</div> |
| 1585 | </main> | 1585 | </main> |
| 1586 | </div> | 1586 | </div> |
| 1587 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1587 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1588 | ··<script> | 1588 | ··<script> |
| 1589 | ··let·initialized·=·false; | 1589 | ··let·initialized·=·false; |
| Offset 1031, 21 lines modified | Offset 1031, 21 lines modified | ||
| 1031 | binaries·in·other·ways·are·split·on·non-UTF·character·boundaries.·An | 1031 | binaries·in·other·ways·are·split·on·non-UTF·character·boundaries.·An |
| 1032 | <code·class="inline">incomplete</code>·tuple·is·then·returned·instead·of·the·<code·class="inline">error</code>·tuple.·It·consists·of | 1032 | <code·class="inline">incomplete</code>·tuple·is·then·returned·instead·of·the·<code·class="inline">error</code>·tuple.·It·consists·of |
| 1033 | the·same·parts·as·the·<code·class="inline">error</code>·tuple,·but·the·tag·is·<code·class="inline">incomplete</code>·instead·of | 1033 | the·same·parts·as·the·<code·class="inline">error</code>·tuple,·but·the·tag·is·<code·class="inline">incomplete</code>·instead·of |
| 1034 | <code·class="inline">error</code>·and·the·last·element·is·always·guaranteed·to·be·a·binary·consisting·of | 1034 | <code·class="inline">error</code>·and·the·last·element·is·always·guaranteed·to·be·a·binary·consisting·of |
| 1035 | the·first·part·of·a·(so·far)·valid·UTF·character.</p><p>If·one·UTF·character·is·split·over·two·consecutive·binaries·in·the·<code·class="inline">Data</code>,·the | 1035 | the·first·part·of·a·(so·far)·valid·UTF·character.</p><p>If·one·UTF·character·is·split·over·two·consecutive·binaries·in·the·<code·class="inline">Data</code>,·the |
| 1036 | conversion·succeeds.·This·means·that·a·character·can·be·decoded·from·a·range·of | 1036 | conversion·succeeds.·This·means·that·a·character·can·be·decoded·from·a·range·of |
| 1037 | binaries·as·long·as·the·whole·range·is·specified·as·input·without·errors | 1037 | binaries·as·long·as·the·whole·range·is·specified·as·input·without·errors |
| 1038 | occurring.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">decode_data</span><span·class="p"·data-group-id=" | 1038 | occurring.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">decode_data</span><span·class="p"·data-group-id="5357299993-1">(</span><span·class="n">Data</span><span·class="p"·data-group-id="5357299993-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1039 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_list</span><span·class="p"·data-group-id=" | 1039 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_list</span><span·class="p"·data-group-id="5357299993-2">(</span><span·class="n">Data</span><span·class="p">,</span><span·class="ss">unicode</span><span·class="p"·data-group-id="5357299993-2">)</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 1040 | ······</span><span·class="p"·data-group-id=" | 1040 | ······</span><span·class="p"·data-group-id="5357299993-3">{</span><span·class="ss">incomplete</span><span·class="p">,</span><span·class="n">Encoded</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Rest</span><span·class="p"·data-group-id="5357299993-3">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1041 | ············</span><span·class="n">More</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">get_some_more_data</span><span·class="p"·data-group-id=" | 1041 | ············</span><span·class="n">More</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">get_some_more_data</span><span·class="p"·data-group-id="5357299993-4">(</span><span·class="p"·data-group-id="5357299993-4">)</span><span·class="p">,</span><span·class="w"> |
| 1042 | ············</span><span·class="n">Encoded</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nf">decode_data</span><span·class="p"·data-group-id=" | 1042 | ············</span><span·class="n">Encoded</span><span·class="w">·</span><span·class="o">++</span><span·class="w">·</span><span·class="nf">decode_data</span><span·class="p"·data-group-id="5357299993-5">(</span><span·class="p"·data-group-id="5357299993-6">[</span><span·class="n">Rest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">More</span><span·class="p"·data-group-id="5357299993-6">]</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·6b04da34e16bacd64a13b6144bc9eeb38cfc5a2f1066205ecd82a96903f575b8·...·]-5">)</span><span·class="p">;</span><span·class="w"> |
| 1043 | ······</span><span·class="p"·data-group-id=" | 1043 | ······</span><span·class="p"·data-group-id="5357299993-7">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="n">Encoded</span><span·class="p">,</span><span·class="n">Rest</span><span·class="p"·data-group-id="5357299993-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1044 | ············</span><span·class="nf">handle_error</span><span·class="p"·data-group-id=" | 1044 | ············</span><span·class="nf">handle_error</span><span·class="p"·data-group-id="5357299993-8">(</span><span·class="n">Encoded</span><span·class="p">,</span><span·class="n">Rest</span><span·class="p"·data-group-id="5357299993-8">)</span><span·class="p">;</span><span·class="w"> |
| 1045 | ······</span><span·class="n">List</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 1045 | ······</span><span·class="n">List</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 1046 | ············</span><span·class="n">List</span><span·class="w"> | 1046 | ············</span><span·class="n">List</span><span·class="w"> |
| 1047 | ···</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>However,·bit·strings·that·are·not·whole·bytes·are·not·allowed,·so·a·UTF | 1047 | ···</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>However,·bit·strings·that·are·not·whole·bytes·are·not·allowed,·so·a·UTF |
| 1048 | character·must·be·split·along·8-bit·boundaries·to·ever·be·decoded.</p><p>A·<code·class="inline">badarg</code>·exception·is·thrown·for·the·following·cases:</p><ul><li>Any·parameters·are·of·the·wrong·type.</li><li>The·list·structure·is·invalid·(a·number·as·tail).</li><li>The·binaries·do·not·contain·whole·bytes·(bit·strings).</li></ul> | 1048 | character·must·be·split·along·8-bit·boundaries·to·ever·be·decoded.</p><p>A·<code·class="inline">badarg</code>·exception·is·thrown·for·the·following·cases:</p><ul><li>Any·parameters·are·of·the·wrong·type.</li><li>The·list·structure·is·invalid·(a·number·as·tail).</li><li>The·binaries·do·not·contain·whole·bytes·(bit·strings).</li></ul> |
| 1049 | ··</section> | 1049 | ··</section> |
| 1050 | </section> | 1050 | </section> |
| 1051 | <section·class="detail"·id="characters_to_nfc_binary/1"> | 1051 | <section·class="detail"·id="characters_to_nfc_binary/1"> |
| Offset 1070, 16 lines modified | Offset 1070, 16 lines modified | ||
| 1070 | ······<div·class="specs"> | 1070 | ······<div·class="specs"> |
| 1071 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfc_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1071 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfc_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1072 | ······</div> | 1072 | ······</div> |
| 1073 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1073 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1074 | of·canonical·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfc_binary</span><span·class="p"·data-group-id=" | 1074 | of·canonical·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfc_binary</span><span·class="p"·data-group-id="0577324510-1">(</span><span·class="p"·data-group-id="0577324510-2">[</span><span·class="p"·data-group-id="0577324510-3"><<</span><span·class="s">"abc..a"</span><span·class="p"·data-group-id="0577324510-3">>></span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·645,·SHA:·d87cb09afee1c423033534c06130593f6af44b8cba3084d6143e8deb18dbc45a·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1075 | </span><span·class="p"·data-group-id=" | 1075 | </span><span·class="p"·data-group-id="0577324510-7"><<</span><span·class="s">"abc..åäö"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="0577324510-7">>></span></code></pre> |
| 1076 | ··</section> | 1076 | ··</section> |
| 1077 | </section> | 1077 | </section> |
| 1078 | <section·class="detail"·id="characters_to_nfc_list/1"> | 1078 | <section·class="detail"·id="characters_to_nfc_list/1"> |
| 1079 | ··<div·class="detail-header"> | 1079 | ··<div·class="detail-header"> |
| 1080 | ····<a·href="#characters_to_nfc_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1080 | ····<a·href="#characters_to_nfc_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1081 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1081 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1100, 15 lines modified | Offset 1100, 15 lines modified | ||
| 1100 | ······<div·class="specs"> | 1100 | ······<div·class="specs"> |
| 1101 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfc_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1101 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfc_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1102 | ······</div> | 1102 | ······</div> |
| 1103 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1103 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1104 | of·canonical·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfc_list</span><span·class="p"·data-group-id="6 | 1104 | of·canonical·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfc_list</span><span·class="p"·data-group-id="6876143846-1">(</span><span·class="p"·data-group-id="6876143846-2">[</span><span·class="p"·data-group-id="6876143846-3"><<</span><span·class="s">"abc..a"</span><span·class="p"·data-group-id="6876143846-3">>></span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·644,·SHA:·3457b87901719f38d5d727bb5e7ea220752b1225a216c54b1deccc3fad3aaf62·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1105 | </span><span·class="s">"abc..åäö"</span></code></pre> | 1105 | </span><span·class="s">"abc..åäö"</span></code></pre> |
| 1106 | ··</section> | 1106 | ··</section> |
| 1107 | </section> | 1107 | </section> |
| 1108 | <section·class="detail"·id="characters_to_nfd_binary/1"> | 1108 | <section·class="detail"·id="characters_to_nfd_binary/1"> |
| 1109 | ··<div·class="detail-header"> | 1109 | ··<div·class="detail-header"> |
| 1110 | ····<a·href="#characters_to_nfd_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1110 | ····<a·href="#characters_to_nfd_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1130, 16 lines modified | Offset 1130, 16 lines modified | ||
| 1130 | ······<div·class="specs"> | 1130 | ······<div·class="specs"> |
| 1131 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfd_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1131 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfd_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1132 | ······</div> | 1132 | ······</div> |
| 1133 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1133 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1134 | of·canonical·equivalent·Decomposed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_binary</span><span·class="p"·data-group-id=" | 1134 | of·canonical·equivalent·Decomposed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_binary</span><span·class="p"·data-group-id="9246908976-1">(</span><span·class="s">"abc..åäö"</span><span·class="p"·data-group-id="9246908976-1">)</span><span·class="p">.</span><span·class="w"> |
| 1135 | </span><span·class="p"·data-group-id=" | 1135 | </span><span·class="p"·data-group-id="9246908976-2"><<</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">99</span><span·class="p">,</span><span·class="mi">46</span><span·class="p">,</span><span·class="mi">46</span><[·...·truncated·by·diffoscope;·len:·497,·SHA:·624cc1256ac5973ee09b8cfd605f69efcdbe450b7eb2e5073f34d7c488090d57·...·]-2">>></span></code></pre> |
| 1136 | ··</section> | 1136 | ··</section> |
| 1137 | </section> | 1137 | </section> |
| 1138 | <section·class="detail"·id="characters_to_nfd_list/1"> | 1138 | <section·class="detail"·id="characters_to_nfd_list/1"> |
| 1139 | ··<div·class="detail-header"> | 1139 | ··<div·class="detail-header"> |
| 1140 | ····<a·href="#characters_to_nfd_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1140 | ····<a·href="#characters_to_nfd_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1141 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1141 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1160, 16 lines modified | Offset 1160, 16 lines modified | ||
| 1160 | ······<div·class="specs"> | 1160 | ······<div·class="specs"> |
| 1161 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfd_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1161 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfd_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1162 | ······</div> | 1162 | ······</div> |
| 1163 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1163 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1164 | of·canonical·equivalent·Decomposed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_list</span><span·class="p"·data-group-id=" | 1164 | of·canonical·equivalent·Decomposed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfd_list</span><span·class="p"·data-group-id="3389221416-1">(</span><span·class="s">"abc..åäö"</span><span·class="p"·data-group-id="3389221416-1">)</span><span·class="p">.</span><span·class="w"> |
| 1165 | </span><span·class="p"·data-group-id=" | 1165 | </span><span·class="p"·data-group-id="3389221416-2">[</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">99</span><span·class="p">,</span><span·class="mi">46</span><span·class="p">,</span><span·class="mi">46</span><span·cl[·...·truncated·by·diffoscope;·len:·337,·SHA:·3744457ee940a3089dfd9a4be9e42f9aeada3f5909eab5213fdea0f0d498d867·...·]-2">]</span></code></pre> |
| 1166 | ··</section> | 1166 | ··</section> |
| 1167 | </section> | 1167 | </section> |
| 1168 | <section·class="detail"·id="characters_to_nfkc_binary/1"> | 1168 | <section·class="detail"·id="characters_to_nfkc_binary/1"> |
| 1169 | ··<div·class="detail-header"> | 1169 | ··<div·class="detail-header"> |
| 1170 | ····<a·href="#characters_to_nfkc_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1170 | ····<a·href="#characters_to_nfkc_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1171 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1171 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1190, 16 lines modified | Offset 1190, 16 lines modified | ||
| 1190 | ······<div·class="specs"> | 1190 | ······<div·class="specs"> |
| 1191 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkc_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1191 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkc_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1192 | ······</div> | 1192 | ······</div> |
| 1193 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1193 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1194 | of·compatibly·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfkc_binary</span><span·class="p"·data-group-id=" | 1194 | of·compatibly·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·an·utf8·encoded·binary.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfkc_binary</span><span·class="p"·data-group-id="5492724861-1">(</span><span·class="p"·data-group-id="5492724861-2">[</span><span·class="p"·data-group-id="5492724861-3"><<</span><span·class="s">"abc..a"</span><span·class="p"·data-group-id="5492724861-3">>></span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·857,·SHA:·20bbfe4b5f5ee66825ae3b688e775c4a94c0ed7955f8903ed78785c39105fccb·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1195 | </span><span·class="p"·data-group-id=" | 1195 | </span><span·class="p"·data-group-id="5492724861-8"><<</span><span·class="s">"abc..åäö32"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="5492724861-8">>></span></code></pre> |
| 1196 | ··</section> | 1196 | ··</section> |
| 1197 | </section> | 1197 | </section> |
| 1198 | <section·class="detail"·id="characters_to_nfkc_list/1"> | 1198 | <section·class="detail"·id="characters_to_nfkc_list/1"> |
| 1199 | ··<div·class="detail-header"> | 1199 | ··<div·class="detail-header"> |
| 1200 | ····<a·href="#characters_to_nfkc_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1200 | ····<a·href="#characters_to_nfkc_list/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1201 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1201 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1220, 15 lines modified | Offset 1220, 15 lines modified | ||
| 1220 | ······<div·class="specs"> | 1220 | ······<div·class="specs"> |
| 1221 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkc_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1221 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkc_list(<a·href="#t:chardata/0">chardata</a>())·->·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()]·|·{error,·[<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:char/0">char</a>()],·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1222 | ······</div> | 1222 | ······</div> |
| 1223 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form | 1223 | <p>Converts·a·possibly·deep·list·of·characters·and·binaries·into·a·Normalized·Form |
| 1224 | of·compatibly·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfkc_list</span><span·class="p"·data-group-id="68 | 1224 | of·compatibly·equivalent·Composed·characters·according·to·the·Unicode·standard.</p><p>Any·binaries·in·the·input·must·be·encoded·with·utf8·encoding.</p><p>The·result·is·a·list·of·characters.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">unicode</span><span·class="p">:</span><span·class="nf">characters_to_nfkc_list</span><span·class="p"·data-group-id="5658679354-1">(</span><span·class="p"·data-group-id="5658679354-2">[</span><span·class="p"·data-group-id="5658679354-3"><<</span><span·class="s">"abc..a"</span><span·class="p"·data-group-id="5658679354-3">>></span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·857,·SHA:·8d4ec9fa7357f2ec66671d6ee0f41397e7600ad9b788592974604f7bce2a199f·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 1225 | </span><span·class="s">"abc..åäö32"</span></code></pre> | 1225 | </span><span·class="s">"abc..åäö32"</span></code></pre> |
| 1226 | ··</section> | 1226 | ··</section> |
| 1227 | </section> | 1227 | </section> |
| 1228 | <section·class="detail"·id="characters_to_nfkd_binary/1"> | 1228 | <section·class="detail"·id="characters_to_nfkd_binary/1"> |
| 1229 | ··<div·class="detail-header"> | 1229 | ··<div·class="detail-header"> |
| 1230 | ····<a·href="#characters_to_nfkd_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1230 | ····<a·href="#characters_to_nfkd_binary/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 1251, 16 lines modified | Offset 1251, 16 lines modified | ||
| 1251 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkd_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> | 1251 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·characters_to_nfkd_binary(<a·href="#t:chardata/0">chardata</a>())·->·<a·href="#t:unicode_binary/0">unicode_binary</a>()·|·{error,·<a·href="#t:unicode_binary/0">unicode_binary</a>(),·<a·href="#t:chardata/0">chardata</a>()}.</pre> |
| 1252 | ······</div> | 1252 | ······</div> |
| Max diff block lines reached; 8544/38176 bytes (22.38%) of diff not shown. | |||
| Offset 335, 28 lines modified | Offset 335, 28 lines modified | ||
| 335 | communicating·externally.·Functions·and·bit·syntax·exist·to·encode·and·decode | 335 | communicating·externally.·Functions·and·bit·syntax·exist·to·encode·and·decode |
| 336 | both·UTF-8,·UTF-16,·and·UTF-32·in·binaries.·However,·library·functions·dealing | 336 | both·UTF-8,·UTF-16,·and·UTF-32·in·binaries.·However,·library·functions·dealing |
| 337 | with·binaries·and·Unicode·in·general·only·deal·with·the·default·encoding.</p><p>Character·data·can·be·combined·from·many·sources,·sometimes·available·in·a·mix | 337 | with·binaries·and·Unicode·in·general·only·deal·with·the·default·encoding.</p><p>Character·data·can·be·combined·from·many·sources,·sometimes·available·in·a·mix |
| 338 | of·strings·and·binaries.·Erlang·has·for·long·had·the·concept·of·<code·class="inline">iodata</code>·or | 338 | of·strings·and·binaries.·Erlang·has·for·long·had·the·concept·of·<code·class="inline">iodata</code>·or |
| 339 | <code·class="inline">iolist</code>s,·where·binaries·and·lists·can·be·combined·to·represent·a·sequence·of | 339 | <code·class="inline">iolist</code>s,·where·binaries·and·lists·can·be·combined·to·represent·a·sequence·of |
| 340 | bytes.·In·the·same·way,·the·Unicode-aware·modules·often·allow·for·combinations | 340 | bytes.·In·the·same·way,·the·Unicode-aware·modules·often·allow·for·combinations |
| 341 | of·binaries·and·lists,·where·the·binaries·have·characters·encoded·in·UTF-8·and | 341 | of·binaries·and·lists,·where·the·binaries·have·characters·encoded·in·UTF-8·and |
| 342 | the·lists·contain·such·binaries·or·numbers·representing·Unicode·code·points:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">unicode_binary</span><span·class="p"·data-group-id=" | 342 | the·lists·contain·such·binaries·or·numbers·representing·Unicode·code·points:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">unicode_binary</span><span·class="p"·data-group-id="6761180633-1">(</span><span·class="p"·data-group-id="6761180633-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="6761180633-2">(</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·c07dfef260143f0223387e84097c18785eafae19c14539de7986d12c937cd356·...·]-2">)</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="ss">characters</span><span·class="w">·</span><span·class="ss">encoded</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">8</span><span·class="w">·</span><span·class="ss">coding</span><span·class="w">·</span><span·class="ss">standard</span><span·class="w"> |
| 343 | </span><span·class="nf">chardata</span><span·class="p"·data-group-id=" | 343 | </span><span·class="nf">chardata</span><span·class="p"·data-group-id="6761180633-3">(</span><span·class="p"·data-group-id="6761180633-3">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">charlist</span><span·class="p"·data-group-id="6761180633-4">(</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·233,·SHA:·123006e7fdf99f1b4db4f54ccb53aaf32695ce7f38568a74ac6c98f7cbfd4a4b·...·]-5">)</span><span·class="w"> |
| 344 | </span><span·class="nf">charlist</span><span·class="p"·data-group-id="4309379784-6">(</span><span·class="p"·data-group-id="4309379784-6">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">maybe_improper_list</span><span·class="p"·data-group-id="4309379784-7">(</span><span·class="nf">char</span><span·class="p"·data-group-id="4309379784-8">(</span><span·class="p"·data-group-id="4309379784-8">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">unicode_binary</span><span·class="p"·data-group-id="4309379784-9">(</span><span·class="p"·data-group-id="4309379784-9">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">charlist</span><span·class="p"·data-group-id="4309379784-10">(</span><span·class="p"·data-group-id="4309379784-10">)</span><span·class="p">,</span><span·class="w"> | ||
| 345 | 344 | </span><span·class="nf">charlist</span><span·class="p"·data-group-id="6761180633-6">(</span><span·class="p"·data-group-id="6761180633-6">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">maybe_improper_list</s[·...·truncated·by·diffoscope;·len:·659,·SHA:·a9d983a8edba9164412f4d721166bbe5ee468eff3d15cc61d5bdf107ff38dd78·...·] | |
| 345 | ··</span><span·class="nf">unicode_binary</span><span·class="p"·data-group-id="6761180633-11">(</span><span·class="p"·data-group-id="6761180633-11">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="nf">nil</span><span·class="p"·data-group-id="6761180633-12">(</span><span·class="p"·data-group-id="6761180633-12">)</span><span·class="p"·data-group-id="6761180633-7">)</span></code></pre><p>The·module·<a·href="unicode.html"><code·class="inline">unicode</code></a>·even·supports·similar·mixes·with·binaries·containing | ||
| 346 | other·encodings·than·UTF-8,·but·that·is·a·special·case·to·allow·for·conversions | 346 | other·encodings·than·UTF-8,·but·that·is·a·special·case·to·allow·for·conversions |
| 347 | to·and·from·external·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">external_unicode_binary</span><span·class="p"·data-group-id="67 | 347 | to·and·from·external·data:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">external_unicode_binary</span><span·class="p"·data-group-id="1567167178-1">(</span><span·class="p"·data-group-id="1567167178-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">binary</span><span·class="p"·data-group-id="1567167178-2">(</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·0851035135d9cc748d016dc967ea685cdf36d840dc51c56c7e4f657db705fe4e·...·]-2">)</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="ss">characters</span><span·class="w">·</span><span·class="ss">coded</span><span·class="w">·</span><span·class="ss">in</span><span·class="w">·</span><span·class="ss">a</span><span·class="w">·</span><span·class="ss">user</span><span·class="o">-</span><span·class="ss">specified</span><span·class="w"> |
| 348 | ··</span><span·class="n">Unicode</span><span·class="w">·</span><span·class="ss">encoding</span><span·class="w">·</span><span·class="ss">other</span><span·class="w">·</span><span·class="ss">than</span><span·class="w">·</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">8</span><span·class="w">·</span><span·class="p"·data-group-id="67 | 348 | ··</span><span·class="n">Unicode</span><span·class="w">·</span><span·class="ss">encoding</span><span·class="w">·</span><span·class="ss">other</span><span·class="w">·</span><span·class="ss">than</span><span·class="w">·</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">8</span><span·class="w">·</span><span·class="p"·data-group-id="1567167178-3">(</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">16</span><span·class="w">·</span><span·class="ow">or</span><span·class="w">·</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">32</span><span·cl[·...·truncated·by·diffoscope;·len:·33,·SHA:·767ff04171a62f05d0b9cee2ad72c6f9a6fc5d91e2a5ff116183786383fbe448·...·]-3">)</span><span·class="w"> |
| 349 | </span><span·class="nf">external_chardata</span><span·class="p"·data-group-id="67 | 349 | </span><span·class="nf">external_chardata</span><span·class="p"·data-group-id="1567167178-4">(</span><span·class="p"·data-group-id="1567167178-4">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">external_charlist</span><span·class="p"·data-group-id="1567167178-5">(</span><span·class="p"[·...·truncated·by·diffoscope;·len:·251,·SHA:·cf4e69978370a89ad01750d83f28efe23a67bcb883c944c10c93c3d92f914c25·...·]-6">)</span><span·class="w"> |
| 350 | </span><span·class="nf">external_charlist</span><span·class="p"·data-group-id="67 | 350 | </span><span·class="nf">external_charlist</span><span·class="p"·data-group-id="1567167178-7">(</span><span·class="p"·data-group-id="1567167178-7">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">maybe_improper_list</span><span·class="p"·data-group-id="1567167178-8">(</span><span·class="[·...·truncated·by·diffoscope;·len:·335,·SHA:·fb72bdc01696fbaf568b9ff08a0c6a9586a6b2d57b0cd653831d2b8569bef025·...·]-10">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 351 | ··</span><span·class="nf">external_charlist</span><span·class="p"·data-group-id="67 | 351 | ··</span><span·class="nf">external_charlist</span><span·class="p"·data-group-id="1567167178-11">(</span><span·class="p"·data-group-id="1567167178-11">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">external_unicode_binary</span><span·class="p"·data-group-id="1567167178-12">(</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·272,·SHA:·0747405b83b557f05c3a334b5f6d41131c3480cf57a13a8ed1a159d6bf9c34dc·...·]-8">)</span></code></pre><h2·id="basic-language-support"·class="section-heading"> |
| 352 | ··<a·href="#basic-language-support"·class="hover-link"> | 352 | ··<a·href="#basic-language-support"·class="hover-link"> |
| 353 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 353 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 354 | ··</a> | 354 | ··</a> |
| 355 | ··<span·class="text">Basic·Language·Support</span> | 355 | ··<span·class="text">Basic·Language·Support</span> |
| 356 | </h2> | 356 | </h2> |
| 357 | <p><a·href=""·id="unicode_in_erlang"></a>·As·from·Erlang/OTP·R16,·Erlang·source·files·can·be | 357 | <p><a·href=""·id="unicode_in_erlang"></a>·As·from·Erlang/OTP·R16,·Erlang·source·files·can·be |
| 358 | written·in·UTF-8·or·bytewise·(<code·class="inline">latin1</code>)·encoding.·For·information·about·how·to | 358 | written·in·UTF-8·or·bytewise·(<code·class="inline">latin1</code>)·encoding.·For·information·about·how·to |
| Offset 396, 78 lines modified | Offset 396, 78 lines modified | ||
| 396 | ··<a·href="#heuristic-string-detection"·class="hover-link"> | 396 | ··<a·href="#heuristic-string-detection"·class="hover-link"> |
| 397 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 397 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 398 | ··</a> | 398 | ··</a> |
| 399 | ··<span·class="text">Heuristic·String·Detection</span> | 399 | ··<span·class="text">Heuristic·String·Detection</span> |
| 400 | </h3> | 400 | </h3> |
| 401 | <p>In·certain·output·functions·and·in·the·output·of·return·values·in·the·shell, | 401 | <p>In·certain·output·functions·and·in·the·output·of·return·values·in·the·shell, |
| 402 | Erlang·tries·to·detect·string·data·in·lists·and·binaries·heuristically. | 402 | Erlang·tries·to·detect·string·data·in·lists·and·binaries·heuristically. |
| 403 | Typically·you·will·see·heuristic·detection·in·a·situation·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="0 | 403 | Typically·you·will·see·heuristic·detection·in·a·situation·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="p"·data-group-id="7043872052-1">[</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">99</span><span·class="p"·data-group-id="7043872052-1">]</span><span·class="p">.</span><span·class="w"> |
| 404 | </span><span·class="s">"abc"</span><span·class="gp·unselectable"> | 404 | </span><span·class="s">"abc"</span><span·class="gp·unselectable"> |
| 405 | 2>·</span><span·class="p"·data-group-id="0 | 405 | 2>·</span><span·class="p"·data-group-id="7043872052-2"><<</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">98</span><span·class="p">,</span><span·class="mi">99</span><span·class="p"·data-group-id="7043872052-2">>></span><span·class="p">.</span><span·class="w"> |
| 406 | </span><span·class="p"·data-group-id="0 | 406 | </span><span·class="p"·data-group-id="7043872052-3"><<</span><span·class="s">"abc"</span><span·class="p"·data-group-id="7043872052-3">>></span><span·class="gp·unselectable"> |
| 407 | 3>·</span><span·class="p"·data-group-id="0 | 407 | 3>·</span><span·class="p"·data-group-id="7043872052-4"><<</span><span·class="mi">195</span><span·class="p">,</span><span·class="mi">165</span><span·class="p">,</span><span·class="mi">195</span><span·class="p">,</span><span·class="mi">164</span><span·class="p">,</span><span·class="mi">195</s[·...·truncated·by·diffoscope;·len:·96,·SHA:·652210749cc5913e01a67bcd1db2000b3d499e9d3c14d85c6c8b1e3f1457b712·...·]-4">>></span><span·class="p">.</span><span·class="w"> |
| 408 | </span><span·class="p"·data-group-id="0 | 408 | </span><span·class="p"·data-group-id="7043872052-5"><<</span><span·class="s">"åäö"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="7043872052-5">>></span></code></pre><p>Here·the·shell·detects·lists·containing·printable·characters·or·binaries |
| 409 | containing·printable·characters·in·bytewise·or·UTF-8·encoding.·But·what·is·a | 409 | containing·printable·characters·in·bytewise·or·UTF-8·encoding.·But·what·is·a |
| 410 | printable·character?·One·view·is·that·anything·the·Unicode·standard·thinks·is | 410 | printable·character?·One·view·is·that·anything·the·Unicode·standard·thinks·is |
| 411 | printable,·is·also·printable·according·to·the·heuristic·detection.·The·result·is | 411 | printable,·is·also·printable·according·to·the·heuristic·detection.·The·result·is |
| 412 | then·that·almost·any·list·of·integers·are·deemed·a·string,·and·all·sorts·of | 412 | then·that·almost·any·list·of·integers·are·deemed·a·string,·and·all·sorts·of |
| 413 | characters·are·printed,·maybe·also·characters·that·your·terminal·lacks·in·its | 413 | characters·are·printed,·maybe·also·characters·that·your·terminal·lacks·in·its |
| 414 | font·set·(resulting·in·some·unappreciated·generic·output).·Another·way·is·to | 414 | font·set·(resulting·in·some·unappreciated·generic·output).·Another·way·is·to |
| 415 | keep·it·backward·compatible·so·that·only·the·ISO·Latin-1·character·set·is·used | 415 | keep·it·backward·compatible·so·that·only·the·ISO·Latin-1·character·set·is·used |
| 416 | to·detect·a·string.·A·third·way·is·to·let·the·user·decide·exactly·what·Unicode | 416 | to·detect·a·string.·A·third·way·is·to·let·the·user·decide·exactly·what·Unicode |
| 417 | ranges·that·are·to·be·viewed·as·characters.</p><p>As·from·Erlang/OTP·R16B·you·can·select·the·ISO·Latin-1·range·or·the·whole | 417 | ranges·that·are·to·be·viewed·as·characters.</p><p>As·from·Erlang/OTP·R16B·you·can·select·the·ISO·Latin-1·range·or·the·whole |
| 418 | Unicode·range·by·supplying·startup·flag·<code·class="inline">+pc·latin1</code>·or·<code·class="inline">+pc·unicode</code>, | 418 | Unicode·range·by·supplying·startup·flag·<code·class="inline">+pc·latin1</code>·or·<code·class="inline">+pc·unicode</code>, |
| 419 | respectively.·For·backward·compatibility,·<code·class="inline">latin1</code>·is·default.·This·only | 419 | respectively.·For·backward·compatibility,·<code·class="inline">latin1</code>·is·default.·This·only |
| 420 | controls·how·heuristic·string·detection·is·done.·More·ranges·are·expected·to·be | 420 | controls·how·heuristic·string·detection·is·done.·More·ranges·are·expected·to·be |
| 421 | added·in·the·future,·enabling·tailoring·of·the·heuristics·to·the·language·and | 421 | added·in·the·future,·enabling·tailoring·of·the·heuristics·to·the·language·and |
| 422 | region·relevant·to·the·user.</p><p>The·following·examples·show·the·two·startup·options:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="w"> | 422 | region·relevant·to·the·user.</p><p>The·following·examples·show·the·two·startup·options:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="w"> |
| 423 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="7 | 423 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="7293518760-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="7293518760-1">)</span><span·class="w">·</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·781,·SHA:·2fa380d81ef2458224d23944805d40d1302d01e439ccb4bd9540b5b5d8b1d13f·...·]-5">]</span><span·class="w"> |
| 424 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="7 | 424 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="7293518760-6">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="7293518760-6">)</span><span·class="gp·unselectable"> |
| 425 | 1>·</span><span·class="p"·data-group-id="7 | 425 | 1>·</span><span·class="p"·data-group-id="7293518760-7">[</span><span·class="mi">1024</span><span·class="p"·data-group-id="7293518760-7">]</span><span·class="p">.</span><span·class="w"> |
| 426 | </span><span·class="p"·data-group-id="7 | 426 | </span><span·class="p"·data-group-id="7293518760-8">[</span><span·class="mi">1024</span><span·class="p"·data-group-id="7293518760-8">]</span><span·class="gp·unselectable"> |
| 427 | 2>·</span><span·class="p"·data-group-id="7 | 427 | 2>·</span><span·class="p"·data-group-id="7293518760-9">[</span><span·class="mi">1070</span><span·class="p">,</span><span·class="mi">1085</span><span·class="p">,</span><span·class="mi">1080</span><span·class="p">,</span><span·class="mi">1082</span><span·class="p">,</span><span·class="mi">1086</span[·...·truncated·by·diffoscope;·len:·94,·SHA:·6af036fbf2edf2b7ddae0f6e1db440d5238c12988842697cd5cdcc9fb94875a7·...·]-9">]</span><span·class="p">.</span><span·class="w"> |
| 428 | </span><span·class="p"·data-group-id="7 | 428 | </span><span·class="p"·data-group-id="7293518760-10">[</span><span·class="mi">1070</span><span·class="p">,</span><span·class="mi">1085</span><span·class="p">,</span><span·class="mi">1080</span><span·class="p">,</span><span·class="mi">1082</span><span·class="p">,</span><span·class="mi">1086</spa[·...·truncated·by·diffoscope;·len:·95,·SHA:·4a0d4c3a71bbae348383287e590b429dfe1091d99515246013ab473e5e590725·...·]-10">]</span><span·class="gp·unselectable"> |
| 429 | 3>·</span><span·class="p"·data-group-id="7 | 429 | 3>·</span><span·class="p"·data-group-id="7293518760-11">[</span><span·class="mi">229</span><span·class="p">,</span><span·class="mi">228</span><span·class="p">,</span><span·class="mi">246</span><span·class="p"·data-group-id="7293518760-11">]</span><span·class="p">.</span><span·class="w"> |
| 430 | </span><span·class="s">"åäö"</span><span·class="gp·unselectable"> | 430 | </span><span·class="s">"åäö"</span><span·class="gp·unselectable"> |
| 431 | 4>·</span><span·class="p"·data-group-id="7 | 431 | 4>·</span><span·class="p"·data-group-id="7293518760-12"><<</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">174</span><span·class="p">,</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">189</span><span·class="p">,</span><span·class="mi">208</s[·...·truncated·by·diffoscope;·len:·402,·SHA:·0de2a8c796fc2bcf69f181bc99642fc1694f28306ff1036e55ba3add566d7898·...·]-12">>></span><span·class="p">.</span><span·class="w"> |
| 432 | </span><span·class="p"·data-group-id="7 | 432 | </span><span·class="p"·data-group-id="7293518760-13"><<</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">174</span><span·class="p">,</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">189</span><span·class="p">,</span><span·class="mi">208</s[·...·truncated·by·diffoscope;·len:·402,·SHA:·0de2a8c796fc2bcf69f181bc99642fc1694f28306ff1036e55ba3add566d7898·...·]-13">>></span><span·class="gp·unselectable"> |
| 433 | 5>·</span><span·class="p"·data-group-id="7 | 433 | 5>·</span><span·class="p"·data-group-id="7293518760-14"><<</span><span·class="mi">229</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p">,</span><span·class="mi">228</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p">,</span><span·class="mi">246<[·...·truncated·by·diffoscope;·len:·99,·SHA:·01f39bb89d3c95f8772e5854b8c4303c786b440aed08940f293ec9e9036d9975·...·]-14">>></span><span·class="p">.</span><span·class="w"> |
| 434 | </span><span·class="p"·data-group-id="7 | 434 | </span><span·class="p"·data-group-id="7293518760-15"><<</span><span·class="s">"åäö"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="7293518760-15">>></span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">unicode</span><span·class="w"> |
| 435 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id=" | 435 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="4434666791-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="4434666791-1">)</span><span·class="w">·</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·782,·SHA:·7eb04cc622d641c6c328d30e0fe954bc80f787638956feca646c59c42fdf6429·...·]-5">]</span><span·class="w"> |
| 436 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 436 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="4434666791-6">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="4434666791-6">)</span><span·class="gp·unselectable"> |
| 437 | 1>·</span><span·class="p"·data-group-id=" | 437 | 1>·</span><span·class="p"·data-group-id="4434666791-7">[</span><span·class="mi">1024</span><span·class="p"·data-group-id="4434666791-7">]</span><span·class="p">.</span><span·class="w"> |
| 438 | </span><span·class="s">"Ѐ"</span><span·class="gp·unselectable"> | 438 | </span><span·class="s">"Ѐ"</span><span·class="gp·unselectable"> |
| 439 | 2>·</span><span·class="p"·data-group-id=" | 439 | 2>·</span><span·class="p"·data-group-id="4434666791-8">[</span><span·class="mi">1070</span><span·class="p">,</span><span·class="mi">1085</span><span·class="p">,</span><span·class="mi">1080</span><span·class="p">,</span><span·class="mi">1082</span><span·class="p">,</span><span·class="mi">1086</spa[·...·truncated·by·diffoscope;·len:·95,·SHA:·6bde7ece5a57b6237f6a9fafe60b900d14e061743b8809792951ae8da55eba61·...·]-8">]</span><span·class="p">.</span><span·class="w"> |
| 440 | </span><span·class="s">"Юникод"</span><span·class="gp·unselectable"> | 440 | </span><span·class="s">"Юникод"</span><span·class="gp·unselectable"> |
| 441 | 3>·</span><span·class="p"·data-group-id=" | 441 | 3>·</span><span·class="p"·data-group-id="4434666791-9">[</span><span·class="mi">229</span><span·class="p">,</span><span·class="mi">228</span><span·class="p">,</span><span·class="mi">246</span><span·class="p"·data-group-id="4434666791-9">]</span><span·class="p">.</span><span·class="w"> |
| 442 | </span><span·class="s">"åäö"</span><span·class="gp·unselectable"> | 442 | </span><span·class="s">"åäö"</span><span·class="gp·unselectable"> |
| 443 | 4>·</span><span·class="p"·data-group-id=" | 443 | 4>·</span><span·class="p"·data-group-id="4434666791-10"><<</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">174</span><span·class="p">,</span><span·class="mi">208</span><span·class="p">,</span><span·class="mi">189</span><span·class="p">,</span><span·class="mi">208</[·...·truncated·by·diffoscope;·len:·403,·SHA:·7daf34a82ac6bb5c90df322e305298d03d265024eee40bb0da7d42274005c4d9·...·]-10">>></span><span·class="p">.</span><span·class="w"> |
| 444 | </span><span·class="p"·data-group-id=" | 444 | </span><span·class="p"·data-group-id="4434666791-11"><<</span><span·class="s">"Юникод"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="4434666791-11">>></span><span·class="gp·unselectable"> |
| 445 | 5>·</span><span·class="p"·data-group-id=" | 445 | 5>·</span><span·class="p"·data-group-id="4434666791-12"><<</span><span·class="mi">229</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p">,</span><span·class="mi">228</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p">,</span><span·class="mi">246[·...·truncated·by·diffoscope;·len:·100,·SHA:·b88587836ef3819edac0d920c6ef1204fd040a82f28170d1837aac398a950760·...·]-12">>></span><span·class="p">.</span><span·class="w"> |
| 446 | </span><span·class="p"·data-group-id=" | 446 | </span><span·class="p"·data-group-id="4434666791-13"><<</span><span·class="s">"åäö"</span><span·class="o">/</span><span·class="ss">utf8</span><span·class="p"·data-group-id="4434666791-13">>></span></code></pre><p>In·the·examples,·you·can·see·that·the·default·Erlang·shell·interprets·only |
| 447 | characters·from·the·ISO·Latin1·range·as·printable·and·only·detects·lists·or | 447 | characters·from·the·ISO·Latin1·range·as·printable·and·only·detects·lists·or |
| 448 | binaries·with·those·"printable"·characters·as·containing·string·data.·The·valid | 448 | binaries·with·those·"printable"·characters·as·containing·string·data.·The·valid |
| 449 | UTF-8·binary·containing·the·Russian·word·"Юникод",·is·not·printed·as·a·string. | 449 | UTF-8·binary·containing·the·Russian·word·"Юникод",·is·not·printed·as·a·string. |
| 450 | When·started·with·all·Unicode·characters·printable·(<code·class="inline">+pc·unicode</code>),·the·shell | 450 | When·started·with·all·Unicode·characters·printable·(<code·class="inline">+pc·unicode</code>),·the·shell |
| 451 | outputs·anything·containing·printable·Unicode·data·(in·binaries,·either·UTF-8·or | 451 | outputs·anything·containing·printable·Unicode·data·(in·binaries,·either·UTF-8·or |
| 452 | bytewise·encoded)·as·string·data.</p><p>These·heuristics·are·also·used·by·<a·href="io.html#format/2"><code·class="inline">io:format/2</code></a>,·<a·href="io_lib.html#format/2"><code·class="inline">io_lib:format/2</code></a>,·and·friends | 452 | bytewise·encoded)·as·string·data.</p><p>These·heuristics·are·also·used·by·<a·href="io.html#format/2"><code·class="inline">io:format/2</code></a>,·<a·href="io_lib.html#format/2"><code·class="inline">io_lib:format/2</code></a>,·and·friends |
| 453 | when·modifier·<code·class="inline">t</code>·is·used·with·<code·class="inline">~p</code>·or·<code·class="inline">~P</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="w"> | 453 | when·modifier·<code·class="inline">t</code>·is·used·with·<code·class="inline">~p</code>·or·<code·class="inline">~P</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="w"> |
| 454 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id=" | 454 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="5899832280-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="5899832280-1">)</span><span·class="w">·</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·782,·SHA:·6392aa6e322c6d066ed409fe51397e15a50d187b58d52bfdbc17e89cd0728821·...·]-5">]</span><span·class="w"> |
| 455 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 455 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="5899832280-6">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="5899832280-6">)</span><span·class="gp·unselectable"> |
| 456 | 1>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 456 | 1>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="5899832280-7">(</span><span·class="s">"~tp</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="5899832280-8">[</span><span·class="p"·data-group-id="5899832280-9">{</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·1308,·SHA:·bb130af3678b700b46738c453973d4ce393aa71eefe4a7c30482228859f1614b·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 457 | </span><span·class="p"·data-group-id=" | 457 | </span><span·class="p"·data-group-id="5899832280-13">{</span><span·class="p"·data-group-id="5899832280-14"><<</span><span·class="s">"åäö"</span><span·class="p"·data-group-id="5899832280-14">>></span><span·class="p">,</span><span·class="p"·data-group-id="5899832280-15"><[·...·truncated·by·diffoscope;·len:·938,·SHA:·63a675c14ae6d7d5e5c5119f0ea7764dd1260a43e4cd45e933e0ae1d9cbbe070·...·]-13">}</span><span·class="w"> |
| 458 | </span><span·class="ss">ok</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">unicode</span><span·class="w"> | 458 | </span><span·class="ss">ok</span></code></pre><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="ss">erl</span><span·class="w">·</span><span·class="o">+</span><span·class="ss">pc</span><span·class="w">·</span><span·class="ss">unicode</span><span·class="w"> |
| 459 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id=" | 459 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="2946273595-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="2946273595-1">)</span><span·class="w">·</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·782,·SHA:·7a72437fd780efc4559754f63c5dd04587d715c72faa7751be06ed987f752960·...·]-5">]</span><span·class="w"> |
| 460 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 460 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="2946273595-6">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="2946273595-6">)</span><span·class="gp·unselectable"> |
| 461 | 1>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 461 | 1>·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="2946273595-7">(</span><span·class="s">"~tp</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="2946273595-8">[</span><span·class="p"·data-group-id="2946273595-9">{</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·1308,·SHA:·2f4f960ce9d9c8b6b355f69eb917669dd273177340ece7653c2dbfc53e3a12ae·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 462 | </span><span·class="p"·data-group-id=" | 462 | </span><span·class="p"·data-group-id="2946273595-13">{</span><span·class="p"·data-group-id="2946273595-14"><<</span><span·class="s">"åäö"</span><span·class="p"·data-group-id="2946273595-14">>></span><span·class="p">,</span><span·class="p"·data-group-id="2946273595-15"><[·...·truncated·by·diffoscope;·len:·443,·SHA:·192f190b062dff8a44f77113bdad88f81cad22e6fe7631f026ae71943ec7e14f·...·]-13">}</span><span·class="w"> |
| 463 | </span><span·class="ss">ok</span></code></pre><p>Notice·that·this·only·affects·<em>heuristic</em>·interpretation·of·lists·and·binaries | 463 | </span><span·class="ss">ok</span></code></pre><p>Notice·that·this·only·affects·<em>heuristic</em>·interpretation·of·lists·and·binaries |
| 464 | on·output.·For·example,·the·<code·class="inline">~ts</code>·format·sequence·always·outputs·a·valid·list·of | 464 | on·output.·For·example,·the·<code·class="inline">~ts</code>·format·sequence·always·outputs·a·valid·list·of |
| 465 | characters,·regardless·of·the·<code·class="inline">+pc</code>·setting,·as·the·programmer·has·explicitly | 465 | characters,·regardless·of·the·<code·class="inline">+pc</code>·setting,·as·the·programmer·has·explicitly |
| 466 | requested·string·output.</p><h2·id="the-interactive-shell"·class="section-heading"> | 466 | requested·string·output.</p><h2·id="the-interactive-shell"·class="section-heading"> |
| 467 | ··<a·href="#the-interactive-shell"·class="hover-link"> | 467 | ··<a·href="#the-interactive-shell"·class="hover-link"> |
| 468 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 468 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 469 | ··</a> | 469 | ··</a> |
| Offset 482, 47 lines modified | Offset 482, 47 lines modified | ||
| 482 | example,·a·<code·class="inline">LANG</code>·environment·variable·can·be·set·as·follows:</p><pre><code·class="text">$·echo·$LANG | 482 | example,·a·<code·class="inline">LANG</code>·environment·variable·can·be·set·as·follows:</p><pre><code·class="text">$·echo·$LANG |
| 483 | en_US.UTF-8</code></pre><p>Most·systems·handle·variable·<code·class="inline">LC_CTYPE</code>·before·<code·class="inline">LANG</code>,·so·if·that·is·set,·it | 483 | en_US.UTF-8</code></pre><p>Most·systems·handle·variable·<code·class="inline">LC_CTYPE</code>·before·<code·class="inline">LANG</code>,·so·if·that·is·set,·it |
| 484 | must·be·set·to·<code·class="inline">UTF-8</code>:</p><pre><code·class="text">$·echo·$LC_CTYPE | 484 | must·be·set·to·<code·class="inline">UTF-8</code>:</p><pre><code·class="text">$·echo·$LC_CTYPE |
| 485 | en_US.UTF-8</code></pre><p>The·<code·class="inline">LANG</code>·or·<code·class="inline">LC_CTYPE</code>·setting·are·to·be·consistent·with·what·the·terminal·is | 485 | en_US.UTF-8</code></pre><p>The·<code·class="inline">LANG</code>·or·<code·class="inline">LC_CTYPE</code>·setting·are·to·be·consistent·with·what·the·terminal·is |
| 486 | capable·of.·There·is·no·portable·way·for·Erlang·to·ask·the·terminal·about·its | 486 | capable·of.·There·is·no·portable·way·for·Erlang·to·ask·the·terminal·about·its |
| 487 | UTF-8·capacity,·we·have·to·rely·on·the·language·and·character·type·settings.</p><p>To·investigate·what·Erlang·thinks·about·the·terminal,·the·call | 487 | UTF-8·capacity,·we·have·to·rely·on·the·language·and·character·type·settings.</p><p>To·investigate·what·Erlang·thinks·about·the·terminal,·the·call |
| 488 | <a·href="io.html#getopts/1"><code·class="inline">io:getopts()</code></a>·can·be·used·when·the·shell·is·started:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="n">LC_CTYPE</span><span·class="o">=</span><span·class="ss">en_US</span><span·class="p">.</span><span·class="n">ISO</span><span·class="o">-</span><span·class="mi">8859</span><span·class="o">-</span><span·class="mi">1</span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> | 488 | <a·href="io.html#getopts/1"><code·class="inline">io:getopts()</code></a>·can·be·used·when·the·shell·is·started:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="sc">$·</span><span·class="n">LC_CTYPE</span><span·class="o">=</span><span·class="ss">en_US</span><span·class="p">.</span><span·class="n">ISO</span><span·class="o">-</span><span·class="mi">8859</span><span·class="o">-</span><span·class="mi">1</span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> |
| 489 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id=" | 489 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="1752316249-1">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="1752316249-1">)</span><span·class="w">·</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·782,·SHA:·4b6966b521e2d90a034ba562311a6f15608d9fa0c502a7fa997347474e1e459d·...·]-5">]</span><span·class="w"> |
| 490 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 490 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="1752316249-6">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="1752316249-6">)</span><span·class="gp·unselectable"> |
| 491 | 1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keyfind</span><span·class="p"·data-group-id=" | 491 | 1>·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">keyfind</span><span·class="p"·data-group-id="1752316249-7">(</span><span·class="ss">encoding</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">getopts</span>[·...·truncated·by·diffoscope;·len:·147,·SHA:·55236bf53c2b08ff6b9fd30e3f7eb6ce095fef321c818f205703a8358e6d7d4d·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 492 | </span><span·class="p"·data-group-id=" | 492 | </span><span·class="p"·data-group-id="1752316249-9">{</span><span·class="ss">encoding</span><span·class="p">,</span><span·class="ss">latin1</span><span·class="p"·data-group-id="1752316249-9">}</span><span·class="gp·unselectable"> |
| 493 | 2>·</span><span·class="nf">q</span><span·class="p"·data-group-id=" | 493 | 2>·</span><span·class="nf">q</span><span·class="p"·data-group-id="1752316249-10">(</span><span·class="p"·data-group-id="1752316249-10">)</span><span·class="p">.</span><span·class="w"> |
| 494 | </span><span·class="ss">ok</span><span·class="w"> | 494 | </span><span·class="ss">ok</span><span·class="w"> |
| 495 | </span><span·class="sc">$·</span><span·class="n">LC_CTYPE</span><span·class="o">=</span><span·class="ss">en_US</span><span·class="p">.</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">8</span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> | 495 | </span><span·class="sc">$·</span><span·class="n">LC_CTYPE</span><span·class="o">=</span><span·class="ss">en_US</span><span·class="p">.</span><span·class="n">UTF</span><span·class="o">-</span><span·class="mi">8</span><span·class="w">·</span><span·class="ss">erl</span><span·class="w"> |
| 496 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id=" | 496 | </span><span·class="n">Erlang</span><span·class="w">·</span><span·class="n">R16B</span><span·class="w">·</span><span·class="p"·data-group-id="1752316249-11">(</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">5.10</span><span·class="p">.</span><span·class="mi">1</span><span·class="p"·data-group-id="1752316249-11">)</span><span·class="w">·</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·791,·SHA:·c69a0973eb53bdb94723f5e657a160efaaf898f04489eda256b11efb3eea5157·...·]-15">]</span><span·class="w"> |
| 497 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id=" | 497 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V5</span><span·class="p">.</span><span·class="mf">10.1</span><span·class="w">··</span><span·class="p"·data-group-id="1752316249-16">(</span><span·class="ss">abort</span><span·class="w">·</span><span·class="ss">with</span><span·class="w">·</span><span·class="err">^</span><span·class="n">G</span><span·class="p"·data-group-id="1752316249-16">)</span><span·class="gp·unselectable"> |
| Max diff block lines reached; 91676/163334 bytes (56.13%) of diff not shown. | |||
| Offset 587, 19 lines modified | Offset 587, 19 lines modified | ||
| 587 | ···························QueryString·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:error/0">error</a>().</pre> | 587 | ···························QueryString·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:error/0">error</a>().</pre> |
| 588 | ······</div> | 588 | ······</div> |
| 589 | <p>Composes·a·form-urlencoded·<code·class="inline">QueryString</code>·based·on·a·<code·class="inline">QueryList</code>,·a·list·of | 589 | <p>Composes·a·form-urlencoded·<code·class="inline">QueryString</code>·based·on·a·<code·class="inline">QueryList</code>,·a·list·of |
| 590 | non-percent-encoded·key-value·pairs.</p><p>Form-urlencoding·is·defined·in·section·4.10.21.6·of·the·<a·href="https://www.w3.org/TR/html52/">HTML·5.2</a> | 590 | non-percent-encoded·key-value·pairs.</p><p>Form-urlencoding·is·defined·in·section·4.10.21.6·of·the·<a·href="https://www.w3.org/TR/html52/">HTML·5.2</a> |
| 591 | specification·and·in·section·4.10.22.6·of·the·<a·href="https://www.w3.org/TR/html50/">HTML·5.0</a> | 591 | specification·and·in·section·4.10.22.6·of·the·<a·href="https://www.w3.org/TR/html50/">HTML·5.0</a> |
| 592 | specification·for·non-UTF-8·encodings.</p><p>See·also·the·opposite·operation·<a·href="#dissect_query/1"><code·class="inline">dissect_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id=" | 592 | specification·for·non-UTF-8·encodings.</p><p>See·also·the·opposite·operation·<a·href="#dissect_query/1"><code·class="inline">dissect_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id="6523734082-1">(</span><span·class="p"·data-group-id="6523734082-2">[</span><span·class="p"·data-group-id="6523734082-3">{</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·354,·SHA:·eb0223a1a8588b71c64a3b4798fec70b67d60992bc431cabf47f0adf0cbb6801·...·]2-1">)</span><span·class="p">.</span><span·class="w"> |
| 593 | </span><span·class="s">"foo+bar=1&city=%C3%B6rebro"</span><span·class="gp·unselectable"> | 593 | </span><span·class="s">"foo+bar=1&city=%C3%B6rebro"</span><span·class="gp·unselectable"> |
| 594 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id=" | 594 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id="6523734082-5">(</span><span·class="p"·data-group-id="6523734082-6">[</span><span·class="p"·data-group-id="6523734082-7">{</span><span·class="p"·data-group-id="6523734082-8"><<</span><span·class="s">"foo·bar"</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·254,·SHA:·30705cc8d13675b96c538ffa88b07c6326d24fab1b5f14c35f4e5c372b30370d·...·]2-7">}</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 595 | 2>·</span><span·class="p"·data-group-id=" | 595 | 2>·</span><span·class="p"·data-group-id="6523734082-10">{</span><span·class="p"·data-group-id="6523734082-11"><<</span><span·class="s">"city"</span><span·class="p"·data-group-id="6523734082-11">>></span><span·class="p">,</span><span·class="p"·data-group-id="6523734082-12">&l[·...·truncated·by·diffoscope;·len:·314,·SHA:·5f2c715803432815b9dd64eb7139fb45e556cb88627a351a67414647fabe4659·...·]2-5">)</span><span·class="p">.</span><span·class="w"> |
| 596 | </span><span·class="p"·data-group-id=" | 596 | </span><span·class="p"·data-group-id="6523734082-13"><<</span><span·class="s">"foo+bar=1&city=%C3%B6rebro"</span><span·class="p"·data-group-id="6523734082-13">>></span></code></pre> |
| 597 | ··</section> | 597 | ··</section> |
| 598 | </section> | 598 | </section> |
| 599 | <section·class="detail"·id="compose_query/2"> | 599 | <section·class="detail"·id="compose_query/2"> |
| 600 | ··<div·class="detail-header"> | 600 | ··<div·class="detail-header"> |
| 601 | ····<a·href="#compose_query/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 601 | ····<a·href="#compose_query/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 602 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 602 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 632, 20 lines modified | Offset 632, 20 lines modified | ||
| 632 | algorithm.</p><p>There·are·two·supported·encodings:·<code·class="inline">utf8</code>·(or·<code·class="inline">unicode</code>)·and·<code·class="inline">latin1</code>.</p><p>Each·character·in·the·entry's·name·and·value·that·cannot·be·expressed·using·the | 632 | algorithm.</p><p>There·are·two·supported·encodings:·<code·class="inline">utf8</code>·(or·<code·class="inline">unicode</code>)·and·<code·class="inline">latin1</code>.</p><p>Each·character·in·the·entry's·name·and·value·that·cannot·be·expressed·using·the |
| 633 | selected·character·encoding,·is·replaced·by·a·string·consisting·of·a·U+0026 | 633 | selected·character·encoding,·is·replaced·by·a·string·consisting·of·a·U+0026 |
| 634 | AMPERSAND·character·(&),·a·"#"·(U+0023)·character,·one·or·more·ASCII·digits | 634 | AMPERSAND·character·(&),·a·"#"·(U+0023)·character,·one·or·more·ASCII·digits |
| 635 | representing·the·Unicode·code·point·of·the·character·in·base·ten,·and·finally·a | 635 | representing·the·Unicode·code·point·of·the·character·in·base·ten,·and·finally·a |
| 636 | ";"·(U+003B)·character.</p><p>Bytes·that·are·out·of·the·range·0x2A,·0x2D,·0x2E,·0x30·to·0x39,·0x41·to·0x5A, | 636 | ";"·(U+003B)·character.</p><p>Bytes·that·are·out·of·the·range·0x2A,·0x2D,·0x2E,·0x30·to·0x39,·0x41·to·0x5A, |
| 637 | 0x5F,·0x61·to·0x7A,·are·percent-encoded·(U+0025·PERCENT·SIGN·character·(%) | 637 | 0x5F,·0x61·to·0x7A,·are·percent-encoded·(U+0025·PERCENT·SIGN·character·(%) |
| 638 | followed·by·uppercase·ASCII·hex·digits·representing·the·hexadecimal·value·of·the | 638 | followed·by·uppercase·ASCII·hex·digits·representing·the·hexadecimal·value·of·the |
| 639 | byte).</p><p>See·also·the·opposite·operation·<a·href="#dissect_query/1"><code·class="inline">dissect_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id="1781711252-1">(</span><span·class="p"·data-group-id="1781711252-2">[</span><span·class="p"·data-group-id="1781711252-3">{</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group-id="1781711252-3">}</span><span·class="p">,</span><span·class="p"·data-group-id="1781711252-4">{</span><span·class="s">"city"</span><span·class="p">,</span><span·class="s">"örebro"</span><span·class="p"·data-group-id="1781711252-4">}</span><span·class="p"·data-group-id="1781711252-2">]</span><span·class="p">,</span><span·class="gp·unselectable"> | ||
| 640 | 639 | byte).</p><p>See·also·the·opposite·operation·<a·href="#dissect_query/1"><code·class="inline">dissect_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">[·...·truncated·by·diffoscope;·len:·731,·SHA:·1f01620e13bf59e7805b22d050a859a18cdd8c381e2827bb70126731645d1557·...·]"> | |
| 640 | 1>·</span><span·class="p"·data-group-id="2147155351-5">[</span><span·class="p"·data-group-id="2147155351-6">{</span><span·class="ss">encoding</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">latin1</span><span·class="p"·data-group-id="2147155351-6">}</span><span·class="p"·data-group-id="2147155351-5">]</span><span·class="p"·data-group-id="2147155351-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 641 | </span><span·class="s">"foo+bar=1&city=%F6rebro"</span><span·class="gp·unselectable"> | 641 | </span><span·class="s">"foo+bar=1&city=%F6rebro"</span><span·class="gp·unselectable"> |
| 642 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id="1 | 642 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">compose_query</span><span·class="p"·data-group-id="2147155351-7">(</span><span·class="p"·data-group-id="2147155351-8">[</span><span·class="p"·data-group-id="2147155351-9">{</span><span·class="p"·data-group-id="2147155351-10"><<</span><span·class="s">"foo·bar"</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·259,·SHA:·43ceee5a6308935d27e753e8ba23e492c5f47f74d944ba57fc4e80c1b86f7f86·...·]-9">}</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 643 | 2>·</span><span·class="p"·data-group-id="1 | 643 | 2>·</span><span·class="p"·data-group-id="2147155351-12">{</span><span·class="p"·data-group-id="2147155351-13"><<</span><span·class="s">"city"</span><span·class="p"·data-group-id="2147155351-13">>></span><span·class="p">,</span><span·class="p"·data-group-id="2147155351-14">&l[·...·truncated·by·diffoscope;·len:·685,·SHA:·e4ecc80e09964dc595ca35315263068e81eef760a3d81f7db0e350f8ee06290f·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 644 | </span><span·class="p"·data-group-id="1 | 644 | </span><span·class="p"·data-group-id="2147155351-17"><<</span><span·class="s">"foo+bar=1&city=%26%2326481%3B%26%2320140%3B"</span><span·class="p"·data-group-id="2147155351-17">>></span></code></pre> |
| 645 | ··</section> | 645 | ··</section> |
| 646 | </section> | 646 | </section> |
| 647 | <section·class="detail"·id="dissect_query/1"> | 647 | <section·class="detail"·id="dissect_query/1"> |
| 648 | ··<div·class="detail-header"> | 648 | ··<div·class="detail-header"> |
| 649 | ····<a·href="#dissect_query/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 649 | ····<a·href="#dissect_query/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 650 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 650 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 671, 19 lines modified | Offset 671, 19 lines modified | ||
| 671 | ···························QueryList·::·[{<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>()·|·true}]·|·<a·href="#t:error/0">error</a>().</pre> | 671 | ···························QueryList·::·[{<a·href="unicode.html#t:chardata/0">unicode:chardata</a>(),·<a·href="unicode.html#t:chardata/0">unicode:chardata</a>()·|·true}]·|·<a·href="#t:error/0">error</a>().</pre> |
| 672 | ······</div> | 672 | ······</div> |
| 673 | <p>Dissects·an·urlencoded·<code·class="inline">QueryString</code>·and·returns·a·<code·class="inline">QueryList</code>,·a·list·of | 673 | <p>Dissects·an·urlencoded·<code·class="inline">QueryString</code>·and·returns·a·<code·class="inline">QueryList</code>,·a·list·of |
| 674 | non-percent-encoded·key-value·pairs.</p><p>Form-urlencoding·is·defined·in·section·4.10.21.6·of·the·<a·href="https://www.w3.org/TR/html52/">HTML·5.2</a> | 674 | non-percent-encoded·key-value·pairs.</p><p>Form-urlencoding·is·defined·in·section·4.10.21.6·of·the·<a·href="https://www.w3.org/TR/html52/">HTML·5.2</a> |
| 675 | specification·and·in·section·4.10.22.6·of·the·<a·href="https://www.w3.org/TR/html50/">HTML·5.0</a> | 675 | specification·and·in·section·4.10.22.6·of·the·<a·href="https://www.w3.org/TR/html50/">HTML·5.0</a> |
| 676 | specification·for·non-UTF-8·encodings.</p><p>See·also·the·opposite·operation·<a·href="#compose_query/1"><code·class="inline">compose_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">dissect_query</span><span·class="p"·data-group-id=" | 676 | specification·for·non-UTF-8·encodings.</p><p>See·also·the·opposite·operation·<a·href="#compose_query/1"><code·class="inline">compose_query/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">dissect_query</span><span·class="p"·data-group-id="2149062214-1">(</span><span·class="s">"foo+bar=1&city=%C3%B6rebro"</span><span·class="p"·data-group-id="2149062214-1">)</span><span·class="p">.</span><span·class="w"> |
| 677 | </span><span·class="p"·data-group-id="9236149893-2">[</span><span·class="p"·data-group-id="9236149893-3">{</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group-id="9236149893-3">}</span><span·class="p">,</span><span·class="p"·data-group-id="9236149893-4">{</span><span·class="s">"city"</span><span·class="p">,</span><span·class="s">"örebro"</span><span·class="p"·data-group-id="9236149893-4">}</span><span·class="p"·data-group-id="9236149893-2">]</span><span·class="gp·unselectable"> | ||
| 678 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">dissect_query</span><span·class="p"·data-group-id="9236149893-5">(</span><span·class="p"·data-group-id="9236149893-6"><<</span><span·class="s">"foo+bar=1&city=%26%2326481%3B%26%2320140%3B"</span><span·class="p"·data-group-id="9236149893-6">>></span><span·class="p"·data-group-id="9236149893-5">)</span><span·class="p">.</span><span·class="w"> | ||
| 679 | </span><span·class="p"·data-group-id="9236149893-7">[</span><span·class="p"·data-group-id="9236149893-8">{</span><span·class="p"·data-group-id="9236149893-9"><<</span><span·class="s">"foo·bar"</span><span·class="p"·data-group-id="9236149893-9">>></span><span·class="p">,</span><span·class="p"·data-group-id="9236149893-10"><<</span><span·class="s">"1"</span><span·class="p"·data-group-id="9236149893-10">>></span><span·class="p"·data-group-id="9236149893-8">}</span><span·class="p">,</span><span·class="w"> | ||
| 680 | 677 | </span><span·class="p"·data-group-id="2149062214-2">[</span><span·class="p"·data-group-id="2149062214-3">{</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="s">"1"</span><span·class="p"·data-group-id="2149062214[·...·truncated·by·diffoscope;·len:·328,·SHA:·0361ac1b6dcea56f387ed94aadc6790bb1744c4adef1569589baf3409fa0da09·...·]> | |
| 678 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">dissect_query</span><span·class="p"·data-group-id="2149062214-5">(</span><span·class="p"·data-group-id="2149062214-6"><<</span><span·class="s">"foo+bar=1&city=%26%2326481%3B%26%2320140%3B"</span><span·class="p"·data-group-id="2149062214-6">>></span><span·class="p"·data-group-id="2149062214-5">)</span><span·class="p">.</span><span·class="w"> | ||
| 679 | </span><span·class="p"·data-group-id="2149062214-7">[</span><span·class="p"·data-group-id="2149062214-8">{</span><span·class="p"·data-group-id="2149062214-9"><<</span><span·class="s">"foo·bar"</span><span·class="p"·data-group-id="2149062214-9">>></span><span·class="p">,</span><span·class="p"·data-group-id="2149062214-10"><<</span><span·class="s">"1"</span><span·class="p"·data-group-id="2149062214-10">>></span><span·class="p"·data-group-id="2149062214-8">}</span><span·class="p">,</span><span·class="w"> | ||
| 680 | ·</span><span·class="p"·data-group-id="2149062214-11">{</span><span·class="p"·data-group-id="2149062214-12"><<</span><span·class="s">"city"</span><span·class="p"·data-group-id="2149062214-12">>></span><span·class="p">,</span><span·class="p"·data-group-id="2149062214-13"><<</span><span·class="mi">230</span><span·class="p">,</span><span·class="mi">157</span><span·class="p">,</span><span·class="mi">177</span><span·class="p">,</span><span·class="mi">228</span><span·class="p">,</span><span·class="mi">186</span><span·class="p">,</span><span·class="mi">172</span><span·class="p"·data-group-id="2149062214-13">>></span><span·class="p"·data-group-id="2149062214-11">}</span><span·class="p"·data-group-id="2149062214-7">]</span></code></pre> | ||
| 681 | ··</section> | 681 | ··</section> |
| 682 | </section> | 682 | </section> |
| 683 | <section·class="detail"·id="normalize/1"> | 683 | <section·class="detail"·id="normalize/1"> |
| 684 | ··<div·class="detail-header"> | 684 | ··<div·class="detail-header"> |
| 685 | ····<a·href="#normalize/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 685 | ····<a·href="#normalize/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 686 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 686 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 707, 22 lines modified | Offset 707, 22 lines modified | ||
| 707 | ···················when·URI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:uri_map/0">uri_map</a>(),·NormalizedURI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:error/0">error</a>().</pre> | 707 | ···················when·URI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:uri_map/0">uri_map</a>(),·NormalizedURI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:error/0">error</a>().</pre> |
| 708 | ······</div> | 708 | ······</div> |
| 709 | <p>Transforms·an·<code·class="inline">URI</code>·into·a·normalized·form·using·Syntax-Based·Normalization·as | 709 | <p>Transforms·an·<code·class="inline">URI</code>·into·a·normalized·form·using·Syntax-Based·Normalization·as |
| 710 | defined·by·<a·href="https://www.ietf.org/rfc/rfc3986.txt">RFC·3986</a>.</p><p>This·function·implements·case·normalization,·percent-encoding·normalization, | 710 | defined·by·<a·href="https://www.ietf.org/rfc/rfc3986.txt">RFC·3986</a>.</p><p>This·function·implements·case·normalization,·percent-encoding·normalization, |
| 711 | path·segment·normalization·and·scheme·based·normalization·for·HTTP(S)·with·basic | 711 | path·segment·normalization·and·scheme·based·normalization·for·HTTP(S)·with·basic |
| 712 | support·for·FTP,·SSH,·SFTP·and·TFTP.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 712 | support·for·FTP,·SSH,·SFTP·and·TFTP.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7470202804-1">(</span><span·class="s">"/a/b/c/./../../g"</span><span·class="p"·data-group-id="7470202804-1">)</span><span·class="p">.</span><span·class="w"> |
| 713 | </span><span·class="s">"/a/g"</span><span·class="gp·unselectable"> | 713 | </span><span·class="s">"/a/g"</span><span·class="gp·unselectable"> |
| 714 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 714 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7470202804-2">(</span><span·class="p"·data-group-id="7470202804-3"><<</span><span·class="s">"mid/content=5/../6"</span><span·class="p"·data-group-id="7470202804-3">>></span><span·class="p"·data-group-id="7470202804-2">)</span><span·class="p">.</span><span·class="w"> |
| 715 | </span><span·class="p"·data-group-id=" | 715 | </span><span·class="p"·data-group-id="7470202804-4"><<</span><span·class="s">"mid/6"</span><span·class="p"·data-group-id="7470202804-4">>></span><span·class="gp·unselectable"> |
| 716 | 3>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 716 | 3>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7470202804-5">(</span><span·class="s">"http://localhost:80"</span><span·class="p"·data-group-id="7470202804-5">)</span><span·class="p">.</span><span·class="w"> |
| 717 | </span><span·class="s">"http://localhost/"</span><span·class="gp·unselectable"> | 717 | </span><span·class="s">"http://localhost/"</span><span·class="gp·unselectable"> |
| 718 | 4>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 718 | 4>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7470202804-6">(</span><span·class="p"·data-group-id="7470202804-7">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p">,</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/a/b/c/./../../g"</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 719 | 4>·</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"localhost-örebro"</span><span·class="p"·data-group-id=" | 719 | 4>·</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"localhost-örebro"</span><span·class="p"·data-group-id="7470202804-7">}</span><span·class="p"·data-group-id="7470202804-6">)</span><span·class="p">.</span><span·class="w"> |
| 720 | </span><span·class="s">"http://localhost-%C3%B6rebro/a/g"</span></code></pre> | 720 | </span><span·class="s">"http://localhost-%C3%B6rebro/a/g"</span></code></pre> |
| 721 | ··</section> | 721 | ··</section> |
| 722 | </section> | 722 | </section> |
| 723 | <section·class="detail"·id="normalize/2"> | 723 | <section·class="detail"·id="normalize/2"> |
| 724 | ··<div·class="detail-header"> | 724 | ··<div·class="detail-header"> |
| 725 | ····<a·href="#normalize/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 725 | ····<a·href="#normalize/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| Offset 749, 23 lines modified | Offset 749, 23 lines modified | ||
| 749 | ·······················Options·::·[return_map], | 749 | ·······················Options·::·[return_map], |
| 750 | ·······················NormalizedURI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:uri_map/0">uri_map</a>()·|·<a·href="#t:error/0">error</a>().</pre> | 750 | ·······················NormalizedURI·::·<a·href="#t:uri_string/0">uri_string</a>()·|·<a·href="#t:uri_map/0">uri_map</a>()·|·<a·href="#t:error/0">error</a>().</pre> |
| 751 | ······</div> | 751 | ······</div> |
| 752 | <p>Same·as·<a·href="#normalize/1"><code·class="inline">normalize/1</code></a>·but·with·an·additional·<code·class="inline">Options</code> | 752 | <p>Same·as·<a·href="#normalize/1"><code·class="inline">normalize/1</code></a>·but·with·an·additional·<code·class="inline">Options</code> |
| 753 | parameter,·that·controls·whether·the·normalized·URI·shall·be·returned·as·an | 753 | parameter,·that·controls·whether·the·normalized·URI·shall·be·returned·as·an |
| 754 | uri_map().</p><p>There·is·one·supported·option:·<code·class="inline">return_map</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7 | 754 | uri_map().</p><p>There·is·one·supported·option:·<code·class="inline">return_map</code>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="4075176507-1">(</span><span·class="s">"/a/b/c/./../../g"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4075176507-2">[</span><span·class="ss">return_map</span><span·class="p"·data-group-id="4075176507-2">]</[·...·truncated·by·diffoscope;·len:·46,·SHA:·b4c67eb5a4fcc5239b57ec326c94af6066594cca933f86e01dc0b30ce5fb412c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 755 | </span><span·class="p"·data-group-id="7 | 755 | </span><span·class="p"·data-group-id="4075176507-3">#{</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/a/g"</span><span·class="p"·data-group-id="4075176507-3">}</span><span·class="gp·unselectable"> |
| 756 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7 | 756 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="4075176507-4">(</span><span·class="p"·data-group-id="4075176507-5"><<</span><span·class="s">"mid/content=5/../6"</span><span·class="p"·data-group-id="4075176507-5">>></span><span·class="p">,</span><span·class="w">·</span><span·class="[·...·truncated·by·diffoscope;·len:·168,·SHA:·e40a8b4ab7e973ed7f1f9492e9f21dd37875a7a83aa0291845b6b6d43b105881·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 757 | </span><span·class="p"·data-group-id="7 | 757 | </span><span·class="p"·data-group-id="4075176507-7">#{</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="4075176507-8"><<</span><span·class="s">"mid/6"</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·72,·SHA:·20889489f001dc78c89b91c95f857452049c32b63a8c1b76f5395efe2f77c2d8·...·]-7">}</span><span·class="gp·unselectable"> |
| 758 | 3>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7 | 758 | 3>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="4075176507-9">(</span><span·class="s">"http://localhost:80"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4075176507-10">[</span><span·class="ss">return_map</span><span·class="p"·data-group-id="4075176507-10[·...·truncated·by·diffoscope;·len:·51,·SHA:·56fa1a060c920d9cb1b88ba0455a7011b37dd03e5a00e06e9edabd1264a2bed2·...·]-9">)</span><span·class="p">.</span><span·class="w"> |
| 759 | </span><span·class="p"·data-group-id="7 | 759 | </span><span·class="p"·data-group-id="4075176507-11">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·290,·SHA:·f92c22e7c21d010505e639349da8ae1005f14b2310e5e5f2c5d977f68269a642·...·]-11">}</span><span·class="gp·unselectable"> |
| 760 | 4>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="7 | 760 | 4>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="4075176507-12">(</span><span·class="p"·data-group-id="4075176507-13">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p">,</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">80</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/a/b/c/./../../g"</span><span·class="p">,</span><span·class="gp·unselectable"> |
| 761 | 4>·</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"localhost-örebro"</span><span·class="p"·data-group-id="7 | 761 | 4>·</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"localhost-örebro"</span><span·class="p"·data-group-id="4075176507-13">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="4075176507-14">[</span><span·class="ss">return_map</span><span·class="p"·data-group-id="4075176507-14">]</span><span·class="p"·data-group-id="4075176507-12">)</span><span·class="p">.</span><span·class="w"> |
| 762 | </span><span·class="p"·data-group-id="7 | 762 | </span><span·class="p"·data-group-id="4075176507-15">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·300,·SHA:·a954c0421181e01633e262cdef6641dd324ef4fe88c7d20ba0d4e1e70bc12536·...·]-15">}</span></code></pre> |
| 763 | ··</section> | 763 | ··</section> |
| 764 | </section> | 764 | </section> |
| 765 | <section·class="detail"·id="parse/1"> | 765 | <section·class="detail"·id="parse/1"> |
| 766 | ··<div·class="detail-header"> | 766 | ··<div·class="detail-header"> |
| 767 | ····<a·href="#parse/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 767 | ····<a·href="#parse/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 768 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 768 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 787, 22 lines modified | Offset 787, 22 lines modified | ||
| 787 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·parse(URIString)·->·URIMap·when·URIString·::·<a·href="#t:uri_string/0">uri_string</a>(),·URIMap·::·<a·href="#t:uri_map/0">uri_map</a>()·|·<a·href="#t:error/0">error</a>().</pre> | 787 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·parse(URIString)·->·URIMap·when·URIString·::·<a·href="#t:uri_string/0">uri_string</a>(),·URIMap·::·<a·href="#t:uri_map/0">uri_map</a>()·|·<a·href="#t:error/0">error</a>().</pre> |
| 788 | ······</div> | 788 | ······</div> |
| 789 | <p>Parses·an·<a·href="https://www.ietf.org/rfc/rfc3986.txt">RFC·3986</a>·compliant | 789 | <p>Parses·an·<a·href="https://www.ietf.org/rfc/rfc3986.txt">RFC·3986</a>·compliant |
| 790 | <a·href="#t:uri_string/0"><code·class="inline">uri_string/0</code></a>·into·a·<a·href="#t:uri_map/0"><code·class="inline">uri_map/0</code></a>,·that·holds·the·parsed·components·of·the | 790 | <a·href="#t:uri_string/0"><code·class="inline">uri_string/0</code></a>·into·a·<a·href="#t:uri_map/0"><code·class="inline">uri_map/0</code></a>,·that·holds·the·parsed·components·of·the |
| 791 | <code·class="inline">URI</code>.·If·parsing·fails,·an·error·tuple·is·returned.</p><p>See·also·the·opposite·operation·<a·href="#recompose/1"><code·class="inline">recompose/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="20 | 791 | <code·class="inline">URI</code>.·If·parsing·fails,·an·error·tuple·is·returned.</p><p>See·also·the·opposite·operation·<a·href="#recompose/1"><code·class="inline">recompose/1</code></a>.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="8208799512-1">(</span><span·class="s">"foo://user@example.com:8042/over/there?name=ferret#nose"</span><span·class="p"·data-group-id="8208799512-1">)</span><span·class="p">.</span><span·class="w"> |
| 792 | </span><span·class="p"·data-group-id="20 | 792 | </span><span·class="p"·data-group-id="8208799512-2">#{</span><span·class="ss">fragment</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"nose"</span><span·class="p">,</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"example.com"</span><span·class="p">,</span><span·class="w"> |
| 793 | ··</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/over/there"</span><span·class="p">,</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">8042</span><span·class="p">,</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"name=ferret"</span><span·class="p">,</span><span·class="w"> | 793 | ··</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/over/there"</span><span·class="p">,</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">8042</span><span·class="p">,</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"name=ferret"</span><span·class="p">,</span><span·class="w"> |
| 794 | ··</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">userinfo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"user"</span><span·class="p"·data-group-id="20 | 794 | ··</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">userinfo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"user"</span><span·class="p"·data-group-id="8208799512-2">}</span><span·class="gp·unselectable"> |
| 795 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="20 | 795 | 2>·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="8208799512-3">(</span><span·class="p"·data-group-id="8208799512-4"><<</span><span·class="s">"foo://user@example.com:8042/over/there?name=ferret"</span><span·class="p"·data-group-id="8208799512-4">>></span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·12,·SHA:·ccfd12f49558f7b776f62e8185dc0c3ecf2f51798b2563c35cec99ae80841b44·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 796 | </span><span·class="p"·data-group-id="20 | 796 | </span><span·class="p"·data-group-id="8208799512-5">#{</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8208799512-6"><<</span><span·class="s">"example.com"</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·312,·SHA:·ff7fef6b157eae8a43940e4d6835aeaae6971431c90e92f1b954e55cad122398·...·]-7">>></span><span·class="p">,</span><span·class="w"> |
| 797 | ··</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">8042</span><span·class="p">,</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="20 | 797 | ··</span><span·class="ss">port</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="mi">8042</span><span·class="p">,</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8208799512-8"><<</span><span·class="s">"name=ferret"</span><span·class="p"·data-group-id="8208799512-8">>></span><span·class="p">,</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w"[·...·truncated·by·diffoscope;·len:·148,·SHA:·99539faf780d2a0b8614cc134879ea8c363c1d7f53188a89eea1fce47f52b644·...·]-9">>></span><span·class="p">,</span><span·class="w"> |
| 798 | ··</span><span·class="ss">userinfo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="20 | 798 | ··</span><span·class="ss">userinfo</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="8208799512-10"><<</span><span·class="s">"user"</span><span·class="p"·data-group-id="8208799512-10">>></span><span·class="p"·data-group-id="8208799512-5">}</span></code></pre> |
| Max diff block lines reached; 46159/92272 bytes (50.02%) of diff not shown. | |||
| Offset 190, 27 lines modified | Offset 190, 27 lines modified | ||
| 190 | URI·components·using·<a·href="unicode_usage.html#what-unicode-is">Unicode</a>·characters. | 190 | URI·components·using·<a·href="unicode_usage.html#what-unicode-is">Unicode</a>·characters. |
| 191 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·is·a·convenient·choice·for·enabling | 191 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·is·a·convenient·choice·for·enabling |
| 192 | operations·such·as·producing·standard·compliant·URIs·out·of·components·that·have | 192 | operations·such·as·producing·standard·compliant·URIs·out·of·components·that·have |
| 193 | special·or·<a·href="unicode_usage.html#what-unicode-is">Unicode</a>·characters.·It·is·easier | 193 | special·or·<a·href="unicode_usage.html#what-unicode-is">Unicode</a>·characters.·It·is·easier |
| 194 | to·explain·this·by·an·example.</p><p>Let's·say·that·we·would·like·to·create·the·following·URI·and·send·it·over·the | 194 | to·explain·this·by·an·example.</p><p>Let's·say·that·we·would·like·to·create·the·following·URI·and·send·it·over·the |
| 195 | network:·<code·class="inline">http://cities/örebro?foo·bar</code>.·This·is·not·a·valid·URI·as·it·contains | 195 | network:·<code·class="inline">http://cities/örebro?foo·bar</code>.·This·is·not·a·valid·URI·as·it·contains |
| 196 | characters·that·are·not·allowed·in·a·URI·such·as·"ö"·and·the·space.·We·can | 196 | characters·that·are·not·allowed·in·a·URI·such·as·"ö"·and·the·space.·We·can |
| 197 | verify·this·by·parsing·the·URI:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 197 | verify·this·by·parsing·the·URI:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="2076467521-1">(</span><span·class="s">"http://cities/örebro?foo·bar"</span><span·class="p"·data-group-id="2076467521-1">)</span><span·class="p">.</span><span·class="w"> |
| 198 | ··</span><span·class="p"·data-group-id=" | 198 | ··</span><span·class="p"·data-group-id="2076467521-2">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="ss">invalid_uri</span><span·class="p">,</span><span·class="s">":"</span><span·class="p"·data-group-id="2076467521-2">}</span></code></pre><p>The·URI·parser·tries·all·possible·combinations·to·interpret·the·input·and·fails |
| 199 | at·the·last·attempt·when·it·encounters·the·colon·character·<code·class="inline">":"</code>.·Note,·that·the | 199 | at·the·last·attempt·when·it·encounters·the·colon·character·<code·class="inline">":"</code>.·Note,·that·the |
| 200 | inital·fault·occurs·when·the·parser·attempts·to·interpret·the·character·<code·class="inline">"ö"</code> | 200 | inital·fault·occurs·when·the·parser·attempts·to·interpret·the·character·<code·class="inline">"ö"</code> |
| 201 | and·after·a·failure·back-tracks·to·the·point·where·it·has·another·possible | 201 | and·after·a·failure·back-tracks·to·the·point·where·it·has·another·possible |
| 202 | parsing·alternative.</p><p>The·proper·way·to·solve·this·problem·is·to·use·<a·href="uri_string.html#recompose/1"><code·class="inline">uri_string:recompose/1</code></a>·with·a | 202 | parsing·alternative.</p><p>The·proper·way·to·solve·this·problem·is·to·use·<a·href="uri_string.html#recompose/1"><code·class="inline">uri_string:recompose/1</code></a>·with·a |
| 203 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·as·input:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">recompose</span><span·class="p"·data-group-id=" | 203 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·as·input:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">recompose</span><span·class="p"·data-group-id="6344181648-1">(</span><span·class="p"·data-group-id="6344181648-2">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"cities"</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/örebro"</span><span·class="p">,</span><span·class="w"> |
| 204 | ··</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"foo·bar"</span><span·class="p"·data-group-id=" | 204 | ··</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"foo·bar"</span><span·class="p"·data-group-id="6344181648-2">}</span><span·class="p"·data-group-id="6344181648-1">)</span><span·class="p">.</span><span·class="w"> |
| 205 | ··</span><span·class="s">"http://cities/%C3%B6rebro?foo%20bar"</span></code></pre><p>The·result·is·a·valid·URI·where·all·the·special·characters·are·encoded·as | 205 | ··</span><span·class="s">"http://cities/%C3%B6rebro?foo%20bar"</span></code></pre><p>The·result·is·a·valid·URI·where·all·the·special·characters·are·encoded·as |
| 206 | defined·by·the·standard.·Applying·<a·href="uri_string.html#parse/1"><code·class="inline">uri_string:parse/1</code></a>·and | 206 | defined·by·the·standard.·Applying·<a·href="uri_string.html#parse/1"><code·class="inline">uri_string:parse/1</code></a>·and |
| 207 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·on·the·URI·returns·the·original·input:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 207 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·on·the·URI·returns·the·original·input:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="mi">3</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="8741819952-1">(</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="8741819952-2">(</span><span·class="s">"http://cities/%C3%B6rebro?foo%20bar"</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·70,·SHA:·f9ae14ed4b430f04b82344d3585e6a9047f851114204711d0472890e2c238078·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 208 | ··</span><span·class="p"·data-group-id=" | 208 | ··</span><span·class="p"·data-group-id="8741819952-3">#{</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"cities"</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/örebro"</span><span·class="p">,</span><span·class="k">query</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"foo·bar"</span><span·class="p">,</span><span·class="w"> |
| 209 | ··</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id=" | 209 | ··</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id="8741819952-3">}</span></code></pre><p>This·symmetric·property·is·heavily·used·in·our·property·test·suite.</p><h2·id="percent-encoding"·class="section-heading"> |
| 210 | ··<a·href="#percent-encoding"·class="hover-link"> | 210 | ··<a·href="#percent-encoding"·class="hover-link"> |
| 211 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 211 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 212 | ··</a> | 212 | ··</a> |
| 213 | ··<span·class="text">Percent-encoding</span> | 213 | ··<span·class="text">Percent-encoding</span> |
| 214 | </h2> | 214 | </h2> |
| 215 | <p>As·you·have·seen·in·the·previous·chapter,·a·standard·URI·can·only·contain·a | 215 | <p>As·you·have·seen·in·the·previous·chapter,·a·standard·URI·can·only·contain·a |
| 216 | strict·subset·of·the·US·ASCII·character·set,·moreover·the·allowed·set·of | 216 | strict·subset·of·the·US·ASCII·character·set,·moreover·the·allowed·set·of |
| Offset 225, 72 lines modified | Offset 225, 72 lines modified | ||
| 225 | <a·href="unicode_usage.html#what-unicode-is">Unicode</a>·and·it·is·encoded·using·a·single | 225 | <a·href="unicode_usage.html#what-unicode-is">Unicode</a>·and·it·is·encoded·using·a·single |
| 226 | octet·<code·class="inline">0x20</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><a·href="unicode_usage.html#what-unicode-is">Unicode</a>·is·backward·compatible·with·ASCII, | 226 | octet·<code·class="inline">0x20</code>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p><a·href="unicode_usage.html#what-unicode-is">Unicode</a>·is·backward·compatible·with·ASCII, |
| 227 | the·encoding·of·the·first·128·characters·is·the·same·binary·value·as·in·ASCII.</p></section><p><a·href=""·id="percent_encoding"></a>·It·is·a·major·source·of·confusion·exactly·which | 227 | the·encoding·of·the·first·128·characters·is·the·same·binary·value·as·in·ASCII.</p></section><p><a·href=""·id="percent_encoding"></a>·It·is·a·major·source·of·confusion·exactly·which |
| 228 | characters·will·be·percent-encoded.·In·order·to·make·it·easier·to·answer·this | 228 | characters·will·be·percent-encoded.·In·order·to·make·it·easier·to·answer·this |
| 229 | question·the·library·provides·a·utility·function, | 229 | question·the·library·provides·a·utility·function, |
| 230 | <a·href="uri_string.html#allowed_characters/0"><code·class="inline">uri_string:allowed_characters/0</code></a>,·that | 230 | <a·href="uri_string.html#allowed_characters/0"><code·class="inline">uri_string:allowed_characters/0</code></a>,·that |
| 231 | lists·the·allowed·set·of·characters·in·each·major·URI·component,·and·also·in·the | 231 | lists·the·allowed·set·of·characters·in·each·major·URI·component,·and·also·in·the |
| 232 | most·important·standard·character·sets.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">allowed_characters</span><span·class="p"·data-group-id=" | 232 | most·important·standard·character·sets.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">allowed_characters</span><span·class="p"·data-group-id="5936345456-1">(</span><span·class="p"·data-group-id="5936345456-1">)</span><span·class="p">.</span><span·class="w"> |
| 233 | ····</span><span·class="p"·data-group-id=" | 233 | ····</span><span·class="p"·data-group-id="5936345456-2">[</span><span·class="p"·data-group-id="5936345456-3">{</span><span·class="ss">scheme</span><span·class="p">,</span><span·class="w"> |
| 234 | ·····</span><span·class="s">"+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</span><span·class="p"·data-group-id=" | 234 | ·····</span><span·class="s">"+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</span><span·class="p"·data-group-id="5936345456-3">}</span><span·class="p">,</span><span·class="w"> |
| 235 | ····</span><span·class="p"·data-group-id=" | 235 | ····</span><span·class="p"·data-group-id="5936345456-4">{</span><span·class="ss">userinfo</span><span·class="p">,</span><span·class="w"> |
| 236 | ·····</span><span·class="s">"!$%&'()*+,-.0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 236 | ·····</span><span·class="s">"!$%&'()*+,-.0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-4">}</span><span·class="p">,</span><span·class="w"> |
| 237 | ····</span><span·class="p"·data-group-id=" | 237 | ····</span><span·class="p"·data-group-id="5936345456-5">{</span><span·class="ss">host</span><span·class="p">,</span><span·class="w"> |
| 238 | ·····</span><span·class="s">"!$&'()*+,-.0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 238 | ·····</span><span·class="s">"!$&'()*+,-.0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-5">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ····</span><span·class="p"·data-group-id=" | 239 | ····</span><span·class="p"·data-group-id="5936345456-6">{</span><span·class="ss">ipv4</span><span·class="p">,</span><span·class="s">".0123456789"</span><span·class="p"·data-group-id="5936345456-6">}</span><span·class="p">,</span><span·class="w"> |
| 240 | ····</span><span·class="p"·data-group-id=" | 240 | ····</span><span·class="p"·data-group-id="5936345456-7">{</span><span·class="ss">ipv6</span><span·class="p">,</span><span·class="s">".0123456789:ABCDEFabcdef"</span><span·class="p"·data-group-id="5936345456-7">}</span><span·class="p">,</span><span·class="w"> |
| 241 | ····</span><span·class="p"·data-group-id=" | 241 | ····</span><span·class="p"·data-group-id="5936345456-8">{</span><span·class="ss">regname</span><span·class="p">,</span><span·class="w"> |
| 242 | ·····</span><span·class="s">"!$%&'()*+,-.0123456789;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 242 | ·····</span><span·class="s">"!$%&'()*+,-.0123456789;=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-8">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ····</span><span·class="p"·data-group-id=" | 243 | ····</span><span·class="p"·data-group-id="5936345456-9">{</span><span·class="ss">path</span><span·class="p">,</span><span·class="w"> |
| 244 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 244 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-9">}</span><span·class="p">,</span><span·class="w"> |
| 245 | ····</span><span·class="p"·data-group-id=" | 245 | ····</span><span·class="p"·data-group-id="5936345456-10">{</span><span·class="k">query</span><span·class="p">,</span><span·class="w"> |
| 246 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 246 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-10">}</span><span·class="p">,</span><span·class="w"> |
| 247 | ····</span><span·class="p"·data-group-id=" | 247 | ····</span><span·class="p"·data-group-id="5936345456-11">{</span><span·class="ss">fragment</span><span·class="p">,</span><span·class="w"> |
| 248 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 248 | ·····</span><span·class="s">"!$%&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-11">}</span><span·class="p">,</span><span·class="w"> |
| 249 | ····</span><span·class="p"·data-group-id=" | 249 | ····</span><span·class="p"·data-group-id="5936345456-12">{</span><span·class="ss">reserved</span><span·class="p">,</span><span·class="s">"!#$&'()*+,/:;=?@[]"</span><span·class="p"·data-group-id="5936345456-12">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ····</span><span·class="p"·data-group-id=" | 250 | ····</span><span·class="p"·data-group-id="5936345456-13">{</span><span·class="ss">unreserved</span><span·class="p">,</span><span·class="w"> |
| 251 | ·····</span><span·class="s">"-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id=" | 251 | ·····</span><span·class="s">"-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"</span><span·class="p"·data-group-id="5936345456-13">}</span><span·class="p"·data-group-id="5936345456-2">]</span></code></pre><p>If·a·URI·component·has·a·character·that·is·not·allowed,·it·will·be |
| 252 | percent-encoded·when·the·URI·is·produced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">recompose</span><span·class="p"·data-group-id=" | 252 | percent-encoded·when·the·URI·is·produced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">2</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">recompose</span><span·class="p"·data-group-id="6642998313-1">(</span><span·class="p"·data-group-id="6642998313-2">#{</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"https"</span><span·class="p">,</span><span·clas[·...·truncated·by·diffoscope;·len:·444,·SHA:·f84a0c4938a6328cbb49aec8f026bdc9d6f057805fa5336194ab6293ef2f7a80·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 253 | ····</span><span·class="s">"https://local%23host"</span></code></pre><p>Consuming·a·URI·containing·percent-encoded·triplets·can·take·many·steps.·The | 253 | ····</span><span·class="s">"https://local%23host"</span></code></pre><p>Consuming·a·URI·containing·percent-encoded·triplets·can·take·many·steps.·The |
| 254 | following·example·shows·how·to·handle·an·input·URI·that·is·not·normalized·and | 254 | following·example·shows·how·to·handle·an·input·URI·that·is·not·normalized·and |
| 255 | contains·multiple·percent-encoded·triplets.·First,·the·input | 255 | contains·multiple·percent-encoded·triplets.·First,·the·input |
| 256 | <a·href="uri_string.html#t:uri_string/0"><code·class="inline">uri_string()</code></a>·is·to·be·parsed·into·a | 256 | <a·href="uri_string.html#t:uri_string/0"><code·class="inline">uri_string()</code></a>·is·to·be·parsed·into·a |
| 257 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>.·The·parsing·only·splits·the·URI·into | 257 | <a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>.·The·parsing·only·splits·the·URI·into |
| 258 | its·components·without·doing·any·decoding:</p><pre><code·class="text">····3>·uri_string:parse("http://%6C%6Fcal%23host/%F6re%26bro%20"). | 258 | its·components·without·doing·any·decoding:</p><pre><code·class="text">····3>·uri_string:parse("http://%6C%6Fcal%23host/%F6re%26bro%20"). |
| 259 | ····#{host·=>·"%6C%6Fcal%23host",path·=>·"/%F6re%26bro%20", | 259 | ····#{host·=>·"%6C%6Fcal%23host",path·=>·"/%F6re%26bro%20", |
| 260 | ······scheme·=>·"http"}}</code></pre><p>The·input·is·a·valid·URI·but·how·can·you·decode·those·percent-encoded·octets? | 260 | ······scheme·=>·"http"}}</code></pre><p>The·input·is·a·valid·URI·but·how·can·you·decode·those·percent-encoded·octets? |
| 261 | You·can·try·to·normalize·the·input·with·<a·href="uri_string.html#normalize/1"><code·class="inline">uri_string:normalize/1</code></a>.·The·normalize | 261 | You·can·try·to·normalize·the·input·with·<a·href="uri_string.html#normalize/1"><code·class="inline">uri_string:normalize/1</code></a>.·The·normalize |
| 262 | operation·decodes·those·percent-encoded·triplets·that·correspond·to·a·character | 262 | operation·decodes·those·percent-encoded·triplets·that·correspond·to·a·character |
| 263 | in·the·unreserved·set.·Normalization·is·a·safe,·idempotent·operation·that | 263 | in·the·unreserved·set.·Normalization·is·a·safe,·idempotent·operation·that |
| 264 | converts·a·URI·into·its·canonical·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 264 | converts·a·URI·into·its·canonical·form:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">4</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="6708053326-1">(</span><span·class="s">"http://%6C%6Fcal%23host/%F6re%26bro%20"</span><span·class="p"·data-group-id="6708053326-1">)</span><span·class="p">.</span><span·class="w"> |
| 265 | ····</span><span·class="s">"http://local%23host/%F6re%26bro%20"</span><span·class="w"> | 265 | ····</span><span·class="s">"http://local%23host/%F6re%26bro%20"</span><span·class="w"> |
| 266 | ····</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id=" | 266 | ····</span><span·class="mi">5</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">normalize</span><span·class="p"·data-group-id="6708053326-2">(</span><span·class="s">"http://%6C%6Fcal%23host/%F6re%26bro%20"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6708053326-3">[</span><span·class="ss">return_map</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·68,·SHA:·7dc855916ab76b5714df9e126b258e26e668a3c1534ae9ccf019b8012c4baeb2·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 267 | ····</span><span·class="p"·data-group-id=" | 267 | ····</span><span·class="p"·data-group-id="6708053326-4">#{</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"local%23host"</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/%F6re%26bro%20"</span><span·class="p">,</span><span·class="w"> |
| 268 | ······</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id=" | 268 | ······</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id="6708053326-4">}</span></code></pre><p>There·are·still·a·few·percent-encoded·triplets·left·in·the·output.·At·this |
| 269 | point,·when·the·URI·is·already·parsed,·it·is·safe·to·apply·application·specific | 269 | point,·when·the·URI·is·already·parsed,·it·is·safe·to·apply·application·specific |
| 270 | decoding·on·the·remaining·character·triplets.·Erlang/OTP·provides·a·function, | 270 | decoding·on·the·remaining·character·triplets.·Erlang/OTP·provides·a·function, |
| 271 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·for·raw·percent·decoding·that·you·can·use·on·the | 271 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·for·raw·percent·decoding·that·you·can·use·on·the |
| 272 | host·and·path·components,·or·on·the·whole·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 272 | host·and·path·components,·or·on·the·whole·map:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">6</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="7698429122-1">(</span><span·class="s">"local%23host"</span><span·class="p"·data-group-id="7698429122-1">)</span><span·class="p">.</span><span·class="w"> |
| 273 | ····</span><span·class="s">"local#host"</span><span·class="w"> | 273 | ····</span><span·class="s">"local#host"</span><span·class="w"> |
| 274 | ····</span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 274 | ····</span><span·class="mi">7</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="7698429122-2">(</span><span·class="s">"/%F6re%26bro%20"</span><span·class="p"·data-group-id="7698429122-2">)</span><span·class="p">.</span><span·class="w"> |
| 275 | ····</span><span·class="p"·data-group-id=" | 275 | ····</span><span·class="p"·data-group-id="7698429122-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="ss">invalid_utf8</span><span·class="p">,</span><span·class="p"·data-group-id="7698429122-4"><<</span><span·class="s">"/öre&bro·"</span><span·class="[·...·truncated·by·diffoscope;·len:·88,·SHA:·9bf3d5193fd0a7f91c4dcb75b8e978a75fb51ecec46eb82656b7c6b61cf531b3·...·]-3">}</span><span·class="w"> |
| 276 | ····</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 276 | ····</span><span·class="mi">8</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="7698429122-5">(</span><span·class="p"·data-group-id="7698429122-6">#{</span><span·class="ss">host</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"local%23host"</span><span·class="p">,</span><span·class="ss">path</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"/%F6re%26bro%20"</span><span·class="p">,</span><span·class="w"> |
| 277 | ····</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id=" | 277 | ····</span><span·class="ss">scheme</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="s">"http"</span><span·class="p"·data-group-id="7698429122-6">}</span><span·class="p"·data-group-id="7698429122-5">)</span><span·class="p">.</span><span·class="w"> |
| 278 | ····</span><span·class="p"·data-group-id=" | 278 | ····</span><span·class="p"·data-group-id="7698429122-7">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="p"·data-group-id="7698429122-8">{</span><span·class="ss">invalid</span><span·class="p">,</span><span·class="p"·data-group-id="7698429122-9">{</span><span·class="ss">pat[·...·truncated·by·diffoscope;·len:·517,·SHA:·a549eee5d8bcc745323780023b40b591a25e66527f9691762d77b58d0f61c0c2·...·]-7">}</span></code></pre><p>The·<code·class="inline">host</code>·was·successfully·decoded·but·the·path·contains·at·least·one·character |
| 279 | with·non-UTF-8·encoding.·In·order·to·be·able·to·decode·this,·you·have·to·make | 279 | with·non-UTF-8·encoding.·In·order·to·be·able·to·decode·this,·you·have·to·make |
| 280 | assumptions·about·the·encoding·used·in·these·triplets.·The·most·obvious·choice | 280 | assumptions·about·the·encoding·used·in·these·triplets.·The·most·obvious·choice |
| 281 | is·<em>latin-1</em>,·so·you·can·try·<a·href="uri_string.html#transcode/2"><code·class="inline">uri_string:transcode/2</code></a>,·to·transcode·the·path·to | 281 | is·<em>latin-1</em>,·so·you·can·try·<a·href="uri_string.html#transcode/2"><code·class="inline">uri_string:transcode/2</code></a>,·to·transcode·the·path·to |
| 282 | UTF-8·and·run·the·percent-decode·operation·on·the·transcoded·string:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">transcode</span><span·class="p"·data-group-id=" | 282 | UTF-8·and·run·the·percent-decode·operation·on·the·transcoded·string:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">9</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">transcode</span><span·class="p"·data-group-id="8580142152-1">(</span><span·class="s">"/%F6re%26bro%20"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8580142152-2">[</span><span·class="p"·data-group-id="8580142152-3">{</span><span·class="ss">in_encoding</[·...·truncated·by·diffoscope;·len:·230,·SHA:·c9b1de1bc8c1328cd0e3aa9beef854e7e3ad975cb75336d8c528eb4129ee5a99·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 283 | ····</span><span·class="s">"/%C3%B6re%26bro%20"</span><span·class="w"> | 283 | ····</span><span·class="s">"/%C3%B6re%26bro%20"</span><span·class="w"> |
| 284 | ····</span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 284 | ····</span><span·class="mi">10</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="8580142152-4">(</span><span·class="s">"/%C3%B6re%26bro%20"</span><span·class="p"·data-group-id="8580142152-4">)</span><span·class="p">.</span><span·class="w"> |
| 285 | ····</span><span·class="s">"/öre&bro·"</span></code></pre><p>It·is·important·to·emphasize·that·it·is·not·safe·to·apply | 285 | ····</span><span·class="s">"/öre&bro·"</span></code></pre><p>It·is·important·to·emphasize·that·it·is·not·safe·to·apply |
| 286 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·directly·on·an·input·URI:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">11</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id=" | 286 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>·directly·on·an·input·URI:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="mi">11</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">percent_decode</span><span·class="p"·data-group-id="0559368462-1">(</span><span·class="s">"http://%6C%6Fcal%23host/%C3%B6re%26bro%20"</span><span·class="p"·data-group-id="0559368462-1">)</span><span·class="p">.</span><span·class="w"> |
| 287 | ····</span><span·class="s">"http://local#host/öre&bro·"</span><span·class="w"> | 287 | ····</span><span·class="s">"http://local#host/öre&bro·"</span><span·class="w"> |
| 288 | ····</span><span·class="mi">12</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id=" | 288 | ····</span><span·class="mi">12</span><span·class="o">></span><span·class="w">·</span><span·class="nc">uri_string</span><span·class="p">:</span><span·class="nf">parse</span><span·class="p"·data-group-id="0559368462-2">(</span><span·class="s">"http://local#host/öre&bro·"</span><span·class="p"·data-group-id="0559368462-2">)</span><span·class="p">.</span><span·class="w"> |
| 289 | ····</span><span·class="p"·data-group-id=" | 289 | ····</span><span·class="p"·data-group-id="0559368462-3">{</span><span·class="ss">error</span><span·class="p">,</span><span·class="ss">invalid_uri</span><span·class="p">,</span><span·class="s">":"</span><span·class="p"·data-group-id="0559368462-3">}</span></code></pre><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>Percent-encoding·is·implemented·in·<a·href="uri_string.html#recompose/1"><code·class="inline">uri_string:recompose/1</code></a>·and·it·happens |
| 290 | when·converting·a·<a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·into·a | 290 | when·converting·a·<a·href="uri_string.html#t:uri_map/0"><code·class="inline">uri_map()</code></a>·into·a |
| 291 | <a·href="uri_string.html#t:uri_string/0"><code·class="inline">uri_string()</code></a>.·Applying·any·percent-encoding | 291 | <a·href="uri_string.html#t:uri_string/0"><code·class="inline">uri_string()</code></a>.·Applying·any·percent-encoding |
| 292 | directly·on·an·input·URI·would·not·be·safe·just·as·in·the·case·of | 292 | directly·on·an·input·URI·would·not·be·safe·just·as·in·the·case·of |
| 293 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>,·the·output·could·be·an·invalid·URI.·Quoting | 293 | <a·href="uri_string.html#percent_decode/1"><code·class="inline">uri_string:percent_decode/1</code></a>,·the·output·could·be·an·invalid·URI.·Quoting |
| 294 | functions·allow·users·to·perform·raw·percent·encoding·and·decoding·on | 294 | functions·allow·users·to·perform·raw·percent·encoding·and·decoding·on |
| 295 | application·data·which·cannot·be·handled·automatically·by | 295 | application·data·which·cannot·be·handled·automatically·by |
| 296 | <a·href="uri_string.html#recompose/1"><code·class="inline">uri_string:recompose/1</code></a>.·For·example·in·scenario·when·user·would·need·to·use | 296 | <a·href="uri_string.html#recompose/1"><code·class="inline">uri_string:recompose/1</code></a>.·For·example·in·scenario·when·user·would·need·to·use |
| Offset 378, 15 lines modified | Offset 378, 15 lines modified | ||
| 378 | ······<p·class="built-using"> | 378 | ······<p·class="built-using"> |
| 379 | ········Built·using | 379 | ········Built·using |
| 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 382 | ······</p> | 382 | ······</p> |
| 383 | <p>Copyright·©·1996-202 | 383 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 384 | ····</footer> | 384 | ····</footer> |
| 385 | ··</div> | 385 | ··</div> |
| 386 | </main> | 386 | </main> |
| 387 | </div> | 387 | </div> |
| 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 389 | ··<script> | 389 | ··<script> |
| 390 | ··let·initialized·=·false; | 390 | ··let·initialized·=·false; |
| Offset 882, 15 lines modified | Offset 882, 15 lines modified | ||
| 882 | ······<p·class="built-using"> | 882 | ······<p·class="built-using"> |
| 883 | ········Built·using | 883 | ········Built·using |
| 884 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 884 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 885 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 885 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 886 | ······</p> | 886 | ······</p> |
| 887 | <p>Copyright·©·1996-202 | 887 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 888 | ····</footer> | 888 | ····</footer> |
| 889 | ··</div> | 889 | ··</div> |
| 890 | </main> | 890 | </main> |
| 891 | </div> | 891 | </div> |
| 892 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 892 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 893 | ··<script> | 893 | ··<script> |
| 894 | ··let·initialized·=·false; | 894 | ··let·initialized·=·false; |
| Offset 1020, 37 lines modified | Offset 1020, 37 lines modified | ||
| 1020 | <code·class="inline">Archive</code>,·starting·with·<code·class="inline">AccIn·==·Acc0</code>.</p><p><code·class="inline">FileInArchive</code>·is·the·name·that·the·file·has·in·the·archive.</p><p><code·class="inline">GetInfo</code>·is·a·fun·that·returns·information·about·the·file.</p><p><code·class="inline">GetBin</code>·returns·the·file·contents.</p><p>Both·<code·class="inline">GetInfo</code>·and·<code·class="inline">GetBin</code>·must·be·called·within·the·<code·class="inline">Fun</code>.·Their·behavior·is | 1020 | <code·class="inline">Archive</code>,·starting·with·<code·class="inline">AccIn·==·Acc0</code>.</p><p><code·class="inline">FileInArchive</code>·is·the·name·that·the·file·has·in·the·archive.</p><p><code·class="inline">GetInfo</code>·is·a·fun·that·returns·information·about·the·file.</p><p><code·class="inline">GetBin</code>·returns·the·file·contents.</p><p>Both·<code·class="inline">GetInfo</code>·and·<code·class="inline">GetBin</code>·must·be·called·within·the·<code·class="inline">Fun</code>.·Their·behavior·is |
| 1021 | undefined·if·they·are·called·outside·the·context·of·<code·class="inline">Fun</code>.</p><p>The·<code·class="inline">Fun</code>·must·return·a·new·accumulator,·which·is·passed·to·the·next·call. | 1021 | undefined·if·they·are·called·outside·the·context·of·<code·class="inline">Fun</code>.</p><p>The·<code·class="inline">Fun</code>·must·return·a·new·accumulator,·which·is·passed·to·the·next·call. |
| 1022 | <a·href="#foldl/3"><code·class="inline">foldl/3</code></a>·returns·the·final·accumulator·value.·<code·class="inline">Acc0</code>·is·returned | 1022 | <a·href="#foldl/3"><code·class="inline">foldl/3</code></a>·returns·the·final·accumulator·value.·<code·class="inline">Acc0</code>·is·returned |
| 1023 | if·the·archive·is·empty.·It·is·not·necessary·to·iterate·over·all·files·in·the | 1023 | if·the·archive·is·empty.·It·is·not·necessary·to·iterate·over·all·files·in·the |
| 1024 | archive.·The·iteration·can·be·ended·prematurely·in·a·controlled·manner·by | 1024 | archive.·The·iteration·can·be·ended·prematurely·in·a·controlled·manner·by |
| 1025 | throwing·an·exception.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"dummy.zip"</span><span·class="p">.</span><span·class="w"> | 1025 | throwing·an·exception.</p><p><em>Example:</em></p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">>·</span><span·class="n">Name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="s">"dummy.zip"</span><span·class="p">.</span><span·class="w"> |
| 1026 | </span><span·class="s">"dummy.zip"</span><span·class="gp·unselectable"> | 1026 | </span><span·class="s">"dummy.zip"</span><span·class="gp·unselectable"> |
| 1027 | >·</span><span·class="p"·data-group-id=" | 1027 | >·</span><span·class="p"·data-group-id="0746934527-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0746934527-2">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><span·[·...·truncated·by·diffoscope;·len:·1460,·SHA:·44d5dda10319de050872fc1f0666a1ed1d7ecb602dbb08244601d01b3e90269d·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 1028 | </span><span·class="p"·data-group-id=" | 1028 | </span><span·class="p"·data-group-id="0746934527-10">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0746934527-11">{</span><span·class="s">"dummy.zip"</span><span·class="p">,</span><span·class="w"> |
| 1029 | ·····</span><span·class="p"·data-group-id=" | 1029 | ·····</span><span·class="p"·data-group-id="0746934527-12"><<</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">75</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">20</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">74</span><span·class="p">,</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">60</span><span·class="p">,</span><span·class="mi">171</span><span·class="p">,</span><span·class="mi">39</span><span·class="p">,</span><span·class="mi">212</span><span·class="p">,</span><span·class="mi">26</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 1030 | ·······</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 1030 | ·······</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="0746934527-12">>></span><span·class="p"·data-group-id="0746934527-11">}</span><span·class="p"·data-group-id="0746934527-10">}</span><span·class="gp·unselectable"> |
| 1031 | >·</span><span·class="p"·data-group-id=" | 1031 | >·</span><span·class="p"·data-group-id="0746934527-13">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FileSpec</span><span·class="p"·data-group-id="0746934527-13">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·1787,·SHA:·30b686b63e0430d2a37d8857f6da1d587f55d44c07b987f8b3e5ee802b19ab91·...·]-14">)</span><span·class="p">.</span><span·class="w"> |
| 1032 | </span><span·class="p"·data-group-id=" | 1032 | </span><span·class="p"·data-group-id="0746934527-22">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0746934527-23">[</span><span·class="p"·data-group-id="0746934527-24">{</span><span·class="s">"bar"</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·127,·SHA:·90ad35b1289fd28ed5027b0703e7d2bb0437174851b6c66e7ae4180e2c2629f8·...·]-25">>></span><span·class="p">,</span><span·class="w"> |
| 1033 | ······</span><span·class="p"·data-group-id=" | 1033 | ······</span><span·class="p"·data-group-id="0746934527-26">{</span><span·class="ss">file_info</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">regular</span><span·class="p">,</span><span·class="ss">read_write</span><span·class="p">,</span><span·class="w"> |
| 1034 | ·················</span><span·class="p"·data-group-id=" | 1034 | ·················</span><span·class="p"·data-group-id="0746934527-27">{</span><span·class="p"·data-group-id="0746934527-28">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-28">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·e1d5b0f62e78b55e90b77b53ab71b469a3db00adbc9c2ce40b667e89ebe13ec9·...·]-27">}</span><span·class="p">,</span><span·class="w"> |
| 1035 | ·················</span><span·class="p"·data-group-id=" | 1035 | ·················</span><span·class="p"·data-group-id="0746934527-30">{</span><span·class="p"·data-group-id="0746934527-31">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-31">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·9babd8ab5172180dc59c163ff798bc61d6511c09906767353d192b4fdb89bafb·...·]-30">}</span><span·class="p">,</span><span·class="w"> |
| 1036 | ·················</span><span·class="p"·data-group-id=" | 1036 | ·················</span><span·class="p"·data-group-id="0746934527-33">{</span><span·class="p"·data-group-id="0746934527-34">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-34">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·1282cf2ac6f3d6cbe5911ad8270800036a6eafe1092dcad99ea12ff3a2f69361·...·]-33">}</span><span·class="p">,</span><span·class="w"> |
| 1037 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id=" | 1037 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="0746934527-26">}</span><span·class="p"·data-group-id="0746934527-24">}</span><span·class="p">,</span><span·class="w"> |
| 1038 | ·····</span><span·class="p"·data-group-id=" | 1038 | ·····</span><span·class="p"·data-group-id="0746934527-36">{</span><span·class="s">"foo"</span><span·class="p">,</span><span·class="p"·data-group-id="0746934527-37"><<</span><span·class="s">"FOO"</span><span·class="p"·data-group-id="0746934527-37">>></span><span·class="p">,</span><span·class="w"> |
| 1039 | ······</span><span·class="p"·data-group-id=" | 1039 | ······</span><span·class="p"·data-group-id="0746934527-38">{</span><span·class="ss">file_info</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="ss">regular</span><span·class="p">,</span><span·class="ss">read_write</span><span·class="p">,</span><span·class="w"> |
| 1040 | ·················</span><span·class="p"·data-group-id=" | 1040 | ·················</span><span·class="p"·data-group-id="0746934527-39">{</span><span·class="p"·data-group-id="0746934527-40">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-40">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·b0c1cdb29c1b7c1f69bca0a89a8ef4c6bcb91e2f7df2d5a95d2d03e37a25d89a·...·]-39">}</span><span·class="p">,</span><span·class="w"> |
| 1041 | ·················</span><span·class="p"·data-group-id=" | 1041 | ·················</span><span·class="p"·data-group-id="0746934527-42">{</span><span·class="p"·data-group-id="0746934527-43">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-43">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·40c9070eb248a15000efe3cc040c32bd5861a0c77023a3dabd79d6ddcdc9bbdc·...·]-42">}</span><span·class="p">,</span><span·class="w"> |
| 1042 | ·················</span><span·class="p"·data-group-id=" | 1042 | ·················</span><span·class="p"·data-group-id="0746934527-45">{</span><span·class="p"·data-group-id="0746934527-46">{</span><span·class="mi">2010</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="0746934527-46">}</span[·...·truncated·by·diffoscope;·len:·299,·SHA:·c7e4279d450884f695d3cb989c2ab584243bca9efbb7cfea117aef3e2ee66e2b·...·]-45">}</span><span·class="p">,</span><span·class="w"> |
| 1043 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id=" | 1043 | ·················</span><span·class="mi">54</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="0746934527-38">}</span><span·class="p"·data-group-id="0746934527-36">}</span><span·class="p"·data-group-id="0746934527-23">]</span><span·class="p"·data-group-id="0746934527-22">}</span><span·class="gp·unselectable"> |
| 1044 | >·</span><span·class="p"·data-group-id=" | 1044 | >·</span><span·class="p"·data-group-id="0746934527-48">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0746934527-49">{</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Bin</span><spa[·...·truncated·by·diffoscope;·len:·836,·SHA:·b5b7d57f06372dc9d5000ff6526a17a21a0e15e57855f1f023385eedc96da295·...·]-50">)</span><span·class="p">.</span><span·class="w"> |
| 1045 | </span><span·class="p"·data-group-id=" | 1045 | </span><span·class="p"·data-group-id="0746934527-53">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0746934527-54">{</span><span·class="s">"dummy.zip"</span><span·class="p">,</span><span·class="w"> |
| 1046 | ·····</span><span·class="p"·data-group-id=" | 1046 | ·····</span><span·class="p"·data-group-id="0746934527-55"><<</span><span·class="mi">80</span><span·class="p">,</span><span·class="mi">75</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">4</span><span·class="p">,</span><span·class="mi">20</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">74</span><span·class="p">,</span><span·class="mi">152</span><span·class="p">,</span><span·class="mi">97</span><span·class="p">,</span><span·class="mi">60</span><span·class="p">,</span><span·class="mi">171</span><span·class="p">,</span><span·class="mi">39</span><span·class="p">,</span><span·class="mi">212</span><span·class="p">,</span><span·class="mi">26</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 1047 | ·······</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id=" | 1047 | ·······</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="0746934527-55">>></span><span·class="p"·data-group-id="0746934527-54">}</span><span·class="p"·data-group-id="0746934527-53">}</span><span·class="gp·unselectable"> |
| 1048 | >·</span><span·class="k">catch</span><span·class="w">·</span><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id=" | 1048 | >·</span><span·class="k">catch</span><span·class="w">·</span><span·class="nc">zip</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="0746934527-56">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="0746934527-57">(</span><span·class="s">"foo"</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·1433,·SHA:·aee52051bf99763cac5f2bad0b981a215de12e9eb5311b720052f42e473e0c71·...·]-56">)</span><span·class="p">.</span><span·class="w"> |
| 1049 | </span><span·class="p"·data-group-id=" | 1049 | </span><span·class="p"·data-group-id="0746934527-63"><<</span><span·class="s">"FOO"</span><span·class="p"·data-group-id="0746934527-63">>></span></code></pre> |
| 1050 | ··</section> | 1050 | ··</section> |
| 1051 | </section> | 1051 | </section> |
| 1052 | <section·class="detail"·id="list_dir/1"> | 1052 | <section·class="detail"·id="list_dir/1"> |
| 1053 | ··<div·class="detail-header"> | 1053 | ··<div·class="detail-header"> |
| 1054 | ····<a·href="#list_dir/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1054 | ····<a·href="#list_dir/1"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1055 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1055 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1619, 15 lines modified | Offset 1619, 15 lines modified | ||
| 1619 | ······<p·class="built-using"> | 1619 | ······<p·class="built-using"> |
| 1620 | ········Built·using | 1620 | ········Built·using |
| 1621 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1621 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1622 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1622 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1623 | ······</p> | 1623 | ······</p> |
| 1624 | <p>Copyright·©·1996-202 | 1624 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1625 | ····</footer> | 1625 | ····</footer> |
| 1626 | ··</div> | 1626 | ··</div> |
| 1627 | </main> | 1627 | </main> |
| 1628 | </div> | 1628 | </div> |
| 1629 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1629 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1630 | ··<script> | 1630 | ··<script> |
| 1631 | ··let·initialized·=·false; | 1631 | ··let·initialized·=·false; |
| Offset 139, 15 lines modified | Offset 139, 15 lines modified | ||
| 139 | ······<p·class="built-using"> | 139 | ······<p·class="built-using"> |
| 140 | ········Built·using | 140 | ········Built·using |
| 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 143 | ······</p> | 143 | ······</p> |
| 144 | <p>Copyright·©·1996-202 | 144 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 145 | ····</footer> | 145 | ····</footer> |
| 146 | ··</div> | 146 | ··</div> |
| 147 | </main> | 147 | </main> |
| 148 | </div> | 148 | </div> |
| 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 150 | ··<script> | 150 | ··<script> |
| 151 | ··let·initialized·=·false; | 151 | ··let·initialized·=·false; |
| Offset 249, 15 lines modified | Offset 249, 15 lines modified | ||
| 249 | ······<p·class="built-using"> | 249 | ······<p·class="built-using"> |
| 250 | ········Built·using | 250 | ········Built·using |
| 251 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 251 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 252 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 252 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 253 | ······</p> | 253 | ······</p> |
| 254 | <p>Copyright·©·1996-202 | 254 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 255 | ····</footer> | 255 | ····</footer> |
| 256 | ··</div> | 256 | ··</div> |
| 257 | </main> | 257 | </main> |
| 258 | </div> | 258 | </div> |
| 259 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 259 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 260 | ··<script> | 260 | ··<script> |
| 261 | ··let·initialized·=·false; | 261 | ··let·initialized·=·false; |
| Offset 177, 15 lines modified | Offset 177, 15 lines modified | ||
| 177 | ······<p·class="built-using"> | 177 | ······<p·class="built-using"> |
| 178 | ········Built·using | 178 | ········Built·using |
| 179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 179 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 180 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 181 | ······</p> | 181 | ······</p> |
| 182 | <p>Copyright·©·1996-202 | 182 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 183 | ····</footer> | 183 | ····</footer> |
| 184 | ··</div> | 184 | ··</div> |
| 185 | </main> | 185 | </main> |
| 186 | </div> | 186 | </div> |
| 187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 187 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 188 | ··<script> | 188 | ··<script> |
| 189 | ··let·initialized·=·false; | 189 | ··let·initialized·=·false; |
| Offset 853, 15 lines modified | Offset 853, 15 lines modified | ||
| 853 | ······<p·class="built-using"> | 853 | ······<p·class="built-using"> |
| 854 | ········Built·using | 854 | ········Built·using |
| 855 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 855 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 856 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 856 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 857 | ······</p> | 857 | ······</p> |
| 858 | <p>Copyright·©·1996-202 | 858 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 859 | ····</footer> | 859 | ····</footer> |
| 860 | ··</div> | 860 | ··</div> |
| 861 | </main> | 861 | </main> |
| 862 | </div> | 862 | </div> |
| 863 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 863 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 864 | ··<script> | 864 | ··<script> |
| 865 | ··let·initialized·=·false; | 865 | ··let·initialized·=·false; |
| Offset 433, 15 lines modified | Offset 433, 15 lines modified | ||
| 433 | ······<p·class="built-using"> | 433 | ······<p·class="built-using"> |
| 434 | ········Built·using | 434 | ········Built·using |
| 435 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 435 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 436 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 436 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 437 | ······</p> | 437 | ······</p> |
| 438 | <p>Copyright·©·1996-202 | 438 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 439 | ····</footer> | 439 | ····</footer> |
| 440 | ··</div> | 440 | ··</div> |
| 441 | </main> | 441 | </main> |
| 442 | </div> | 442 | </div> |
| 443 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 443 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 444 | ··<script> | 444 | ··<script> |
| 445 | ··let·initialized·=·false; | 445 | ··let·initialized·=·false; |
| Offset 969, 15 lines modified | Offset 969, 15 lines modified | ||
| 969 | ······<p·class="built-using"> | 969 | ······<p·class="built-using"> |
| 970 | ········Built·using | 970 | ········Built·using |
| 971 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 971 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 972 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 972 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 973 | ······</p> | 973 | ······</p> |
| 974 | <p>Copyright·©·1996-202 | 974 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 975 | ····</footer> | 975 | ····</footer> |
| 976 | ··</div> | 976 | ··</div> |
| 977 | </main> | 977 | </main> |
| 978 | </div> | 978 | </div> |
| 979 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 979 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 980 | ··<script> | 980 | ··<script> |
| 981 | ··let·initialized·=·false; | 981 | ··let·initialized·=·false; |
| Offset 379, 15 lines modified | Offset 379, 15 lines modified | ||
| 379 | ······<p·class="built-using"> | 379 | ······<p·class="built-using"> |
| 380 | ········Built·using | 380 | ········Built·using |
| 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 383 | ······</p> | 383 | ······</p> |
| 384 | <p>Copyright·©·1996-202 | 384 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 385 | ····</footer> | 385 | ····</footer> |
| 386 | ··</div> | 386 | ··</div> |
| 387 | </main> | 387 | </main> |
| 388 | </div> | 388 | </div> |
| 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 390 | ··<script> | 390 | ··<script> |
| 391 | ··let·initialized·=·false; | 391 | ··let·initialized·=·false; |
| Offset 6602, 18 lines modified | Offset 6602, 18 lines modified | ||
| 6602 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_postcomments(<a·href="#t:syntaxTree/0">syntaxTree</a>())·->·[<a·href="#t:syntaxTree/0">syntaxTree</a>()].</pre> | 6602 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_postcomments(<a·href="#t:syntaxTree/0">syntaxTree</a>())·->·[<a·href="#t:syntaxTree/0">syntaxTree</a>()].</pre> |
| 6603 | ······</div> | 6603 | ······</div> |
| 6604 | <p>Returns·the·associated·post-comments·of·a·node.</p><p>This·is·a·possibly·empty·list·of·abstract·comments,·in·top-down | 6604 | <p>Returns·the·associated·post-comments·of·a·node.</p><p>This·is·a·possibly·empty·list·of·abstract·comments,·in·top-down |
| 6605 | textual·order.·When·the·code·is·formatted,·post-comments·are·typically | 6605 | textual·order.·When·the·code·is·formatted,·post-comments·are·typically |
| 6606 | displayed·to·the·right·of·and/or·below·the·node.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 6606 | displayed·to·the·right·of·and/or·below·the·node.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7550358109-1">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Y</span><span·class="p"·data-group-id="7550358109-1">}</span><span·class="w">·····</span><span·class="c1">%·Post-comment·of·tuple</span></code></pre><p>If·possible,·the·comment·should·be·moved·past·any·following·separator·characters |
| 6607 | on·the·same·line,·rather·than·placing·the·separators·on·the·following·line. | 6607 | on·the·same·line,·rather·than·placing·the·separators·on·the·following·line. |
| 6608 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id=" | 6608 | For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="8123506402-1">(</span><span·class="p"·data-group-id="8123506402-2">[</span><span·class="n">X</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Xs</span><span·class="p"·data-group-id="8123506402-2">]</span><span·c[·...·truncated·by·diffoscope;·len:·106,·SHA:·465e5a3b305426e138b5f4c511ccca3fc1bb7857060b54573114ede30485c1a7·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 6609 | ····</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 6609 | ····</span><span·class="nf">foo</span><span·class="p"·data-group-id="8123506402-3">(</span><span·class="n">Xs</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">bar</span><span·class="p"·data-group-id="8123506402-4">(</span><span·class="n">X</span><span·class="p"·data-group-id="8123506402-4">)</span><spa[·...·truncated·by·diffoscope;·len:·37,·SHA:·8bd98325445e332d807b45a6219507fb1a8e9cfad3a21a2088054042cea6cfc4·...·]-3">)</span><span·class="p">;</span><span·class="w">·····</span><span·class="c1">%·Post-comment·of·'bar(X)'·node</span><span·class="w"> |
| 6610 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>(where·the·comment·is·moved·past·the·rightmost·"<code·class="inline">)</code>"·and·the·"<code·class="inline">;</code>").</p><p><em>See·also:·</em><a·href="#comment/2"><code·class="inline">comment/2</code></a>,·<a·href="#get_attrs/1"><code·class="inline">get_attrs/1</code></a>,·<a·href="#get_precomments/1"><code·class="inline">get_precomments/1</code></a>, | 6610 | ·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>(where·the·comment·is·moved·past·the·rightmost·"<code·class="inline">)</code>"·and·the·"<code·class="inline">;</code>").</p><p><em>See·also:·</em><a·href="#comment/2"><code·class="inline">comment/2</code></a>,·<a·href="#get_attrs/1"><code·class="inline">get_attrs/1</code></a>,·<a·href="#get_precomments/1"><code·class="inline">get_precomments/1</code></a>, |
| 6611 | <a·href="#set_postcomments/2"><code·class="inline">set_postcomments/2</code></a>.</p> | 6611 | <a·href="#set_postcomments/2"><code·class="inline">set_postcomments/2</code></a>.</p> |
| 6612 | ··</section> | 6612 | ··</section> |
| 6613 | </section> | 6613 | </section> |
| 6614 | <section·class="detail"·id="get_precomments/1"> | 6614 | <section·class="detail"·id="get_precomments/1"> |
| 6615 | ··<div·class="detail-header"> | 6615 | ··<div·class="detail-header"> |
| Offset 6636, 18 lines modified | Offset 6636, 18 lines modified | ||
| 6636 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_precomments(<a·href="#t:syntaxTree/0">syntaxTree</a>())·->·[<a·href="#t:syntaxTree/0">syntaxTree</a>()].</pre> | 6636 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·get_precomments(<a·href="#t:syntaxTree/0">syntaxTree</a>())·->·[<a·href="#t:syntaxTree/0">syntaxTree</a>()].</pre> |
| 6637 | ······</div> | 6637 | ······</div> |
| 6638 | <p>Returns·the·associated·pre-comments·of·a·node.</p><p>This·is·a·possibly·empty·list·of·abstract·comments,·in·top-down | 6638 | <p>Returns·the·associated·pre-comments·of·a·node.</p><p>This·is·a·possibly·empty·list·of·abstract·comments,·in·top-down |
| 6639 | textual·order.·When·the·code·is·formatted,·pre-comments·are·typically | 6639 | textual·order.·When·the·code·is·formatted,·pre-comments·are·typically |
| 6640 | displayed·directly·above·the·node.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·Pre-comment·of·function</span><span·class="w"> | 6640 | displayed·directly·above·the·node.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·Pre-comment·of·function</span><span·class="w"> |
| 6641 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="6005609624-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="6005609624-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-group-id="6005609624-2">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="n">X</span><span·class="p"·data-group-id="6005609624-2">}</span><span·class="p">.</span></code></pre><p>If·possible,·the·comment·should·be·moved·before·any·preceding·separator | ||
| 6642 | 6641 | </span><span·class="nf">foo</span><span·class="p"·data-group-id="9251524093-1">(</span><span·class="n">X</span><span·class="p"·data-group-id="9251524093-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·300,·SHA:·564335a33edb1f7c0ba59f6381b39ba4adfcaf830b96b2a1002e76f64d85867d·...·] | |
| 6642 | characters·on·the·same·line.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">foo</span><span·class="p"·data-group-id="5497575741-1">(</span><span·class="p"·data-group-id="5497575741-2">[</span><span·class="n">X</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Xs</span><span·class="p"·data-group-id="5497575741-2">]</span><span·class="p"·data-group-id="5497575741-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 6643 | ····</span><span·class="c1">%·Pre-comment·of·'bar(X)'·node</span><span·class="w"> | 6643 | ····</span><span·class="c1">%·Pre-comment·of·'bar(X)'·node</span><span·class="w"> |
| 6644 | ····</span><span·class="p"·data-group-id=" | 6644 | ····</span><span·class="p"·data-group-id="5497575741-3">[</span><span·class="nf">bar</span><span·class="p"·data-group-id="5497575741-4">(</span><span·class="n">X</span><span·class="p"·data-group-id="5497575741-4">)</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·194,·SHA:·ce6185588135a9cacef26a039c93d61adb36c85743d2189d453757e1b7dd8b37·...·]-3">]</span><span·class="p">;</span><span·class="w"> |
| 6645 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>(where·the·comment·is·moved·before·the·"<code·class="inline">[</code>").</p><p><em>See·also:·</em><a·href="#comment/2"><code·class="inline">comment/2</code></a>,·<a·href="#get_attrs/1"><code·class="inline">get_attrs/1</code></a>,·<a·href="#get_postcomments/1"><code·class="inline">get_postcomments/1</code></a>, | 6645 | </span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>(where·the·comment·is·moved·before·the·"<code·class="inline">[</code>").</p><p><em>See·also:·</em><a·href="#comment/2"><code·class="inline">comment/2</code></a>,·<a·href="#get_attrs/1"><code·class="inline">get_attrs/1</code></a>,·<a·href="#get_postcomments/1"><code·class="inline">get_postcomments/1</code></a>, |
| 6646 | <a·href="#set_precomments/2"><code·class="inline">set_precomments/2</code></a>.</p> | 6646 | <a·href="#set_precomments/2"><code·class="inline">set_precomments/2</code></a>.</p> |
| 6647 | ··</section> | 6647 | ··</section> |
| 6648 | </section> | 6648 | </section> |
| 6649 | <section·class="detail"·id="has_comments/1"> | 6649 | <section·class="detail"·id="has_comments/1"> |
| 6650 | ··<div·class="detail-header"> | 6650 | ··<div·class="detail-header"> |
| Offset 11543, 15 lines modified | Offset 11543, 15 lines modified | ||
| 11543 | ······<p·class="built-using"> | 11543 | ······<p·class="built-using"> |
| 11544 | ········Built·using | 11544 | ········Built·using |
| 11545 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 11545 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 11546 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 11546 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 11547 | ······</p> | 11547 | ······</p> |
| 11548 | <p>Copyright·©·1996-202 | 11548 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 11549 | ····</footer> | 11549 | ····</footer> |
| 11550 | ··</div> | 11550 | ··</div> |
| 11551 | </main> | 11551 | </main> |
| 11552 | </div> | 11552 | </div> |
| 11553 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 11553 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 11554 | ··<script> | 11554 | ··<script> |
| 11555 | ··let·initialized·=·false; | 11555 | ··let·initialized·=·false; |
| Offset 2386, 15 lines modified | Offset 2386, 15 lines modified | ||
| 2386 | ······<p·class="built-using"> | 2386 | ······<p·class="built-using"> |
| 2387 | ········Built·using | 2387 | ········Built·using |
| 2388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2390 | ······</p> | 2390 | ······</p> |
| 2391 | <p>Copyright·©·1996-202 | 2391 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2392 | ····</footer> | 2392 | ····</footer> |
| 2393 | ··</div> | 2393 | ··</div> |
| 2394 | </main> | 2394 | </main> |
| 2395 | </div> | 2395 | </div> |
| 2396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2397 | ··<script> | 2397 | ··<script> |
| 2398 | ··let·initialized·=·false; | 2398 | ··let·initialized·=·false; |
| Offset 134, 38 lines modified | Offset 134, 38 lines modified | ||
| 134 | Merl·itself,·see·the·documentation·of·<a·href="erl_syntax.html"><code·class="inline">erl_syntax</code></a>.</p><h3·id="module-quick-start"·class="section-heading"> | 134 | Merl·itself,·see·the·documentation·of·<a·href="erl_syntax.html"><code·class="inline">erl_syntax</code></a>.</p><h3·id="module-quick-start"·class="section-heading"> |
| 135 | ··<a·href="#module-quick-start"·class="hover-link"> | 135 | ··<a·href="#module-quick-start"·class="hover-link"> |
| 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 136 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 137 | ··</a> | 137 | ··</a> |
| 138 | ··<span·class="text">Quick·start</span> | 138 | ··<span·class="text">Quick·start</span> |
| 139 | </h3> | 139 | </h3> |
| 140 | <p>To·enable·the·full·power·of·Merl,·your·module·needs·to·include·the·Merl·header | 140 | <p>To·enable·the·full·power·of·Merl,·your·module·needs·to·include·the·Merl·header |
| 141 | file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id=" | 141 | file:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include_lib</span><span·class="p"·data-group-id="0116996128-1">(</span><span·class="s">"syntax_tools/include/merl.hrl"</span><span·class="p"·data-group-id="0116996128-1">)</span><span·class="p">.</span></code></pre><p>Then,·you·can·use·the·<code·class="inline">?Q(Text)</code>·macros·in·your·code·to·create·ASTs·or·match·on |
| 142 | existing·ASTs.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Tuple</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 142 | existing·ASTs.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Tuple</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9277597986-1">(</span><span·class="s">"{foo,·42}"</span><span·class="p"·data-group-id="9277597986-1">)</span><span·class="p">,</span><span·class="w"> |
| 143 | </span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 143 | </span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9277597986-2">(</span><span·class="s">"{foo,·_@Number}"</span><span·class="p"·data-group-id="9277597986-2">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Tuple</span><span·class="p">,</span><span·class="w"> |
| 144 | </span><span·class="n">Call</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 144 | </span><span·class="n">Call</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9277597986-3">(</span><span·class="s">"foo:bar(_@Number)"</span><span·class="p"·data-group-id="9277597986-3">)</span></code></pre><p>Calling·<code·class="inline">merl:print(Call)</code>·will·then·print·the·following·code:</p><pre><code·class="mak[·...·truncated·by·diffoscope;·len:·225,·SHA:·ce8927869419383a1cff76addc7eff92594dc65986e9412f7f5bf1551205a5a4·...·]-1">)</span></code></pre><p>The·<code·class="inline">?Q</code>·macros·turn·the·quoted·code·fragments·into·ASTs,·and·lifts |
| 145 | metavariables·such·as·<code·class="inline">_@Tuple</code>·and·<code·class="inline">_@Number</code>·to·the·level·of·your·Erlang·code, | 145 | metavariables·such·as·<code·class="inline">_@Tuple</code>·and·<code·class="inline">_@Number</code>·to·the·level·of·your·Erlang·code, |
| 146 | so·you·can·use·the·corresponding·Erlang·variables·<code·class="inline">Tuple</code>·and·<code·class="inline">Number</code>·directly. | 146 | so·you·can·use·the·corresponding·Erlang·variables·<code·class="inline">Tuple</code>·and·<code·class="inline">Number</code>·directly. |
| 147 | This·is·the·most·straightforward·way·to·use·Merl,·and·in·many·cases·it's·all·you | 147 | This·is·the·most·straightforward·way·to·use·Merl,·and·in·many·cases·it's·all·you |
| 148 | need.</p><p>You·can·even·write·case·switches·using·<code·class="inline">?Q</code>·macros·as·patterns.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">AST</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 148 | need.</p><p>You·can·even·write·case·switches·using·<code·class="inline">?Q</code>·macros·as·patterns.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">AST</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 149 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 149 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="3984897265-1">(</span><span·class="s">"{foo,·_@Foo}"</span><span·class="p"·data-group-id="3984897265-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·92,·SHA:·6514ae42841429eb7b797575df5743df9d0ac1af9adf5e5a85a548b6214fc906·...·]-2">)</span><span·class="p">;</span><span·class="w"> |
| 150 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 150 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="3984897265-3">(</span><span·class="s">"{bar,·_@Bar}"</span><span·class="p"·data-group-id="3984897265-3">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nc">erl_syntax</span><span·class="p">:</span><[·...·truncated·by·diffoscope;·len:·391,·SHA:·2a3bb3bdb426ae58d8f2997fbf98f6d8bf1ae592996dde5ab83f228939aba89e·...·]-5">)</span><span·class="p">;</span><span·class="w"> |
| 151 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_default</span><span·class="p"·data-group-id=" | 151 | ····</span><span·class="p">_</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">handle_default</span><span·class="p"·data-group-id="3984897265-6">(</span><span·class="p"·data-group-id="3984897265-6">)</span><span·class="w"> |
| 152 | </span><span·class="k">end</span></code></pre><p>These·case·switches·only·allow·<code·class="inline">?Q(...)</code>·or·<code·class="inline">_</code>·as·clause·patterns,·and·the | 152 | </span><span·class="k">end</span></code></pre><p>These·case·switches·only·allow·<code·class="inline">?Q(...)</code>·or·<code·class="inline">_</code>·as·clause·patterns,·and·the |
| 153 | guards·may·contain·any·expressions,·not·just·Erlang·guard·expressions.</p><p>If·the·macro·<code·class="inline">MERL_NO_TRANSFORM</code>·is·defined·before·the·<code·class="inline">merl.hrl</code>·header·file·is | 153 | guards·may·contain·any·expressions,·not·just·Erlang·guard·expressions.</p><p>If·the·macro·<code·class="inline">MERL_NO_TRANSFORM</code>·is·defined·before·the·<code·class="inline">merl.hrl</code>·header·file·is |
| 154 | included,·the·parse·transform·used·by·Merl·will·be·disabled,·and·in·that·case, | 154 | included,·the·parse·transform·used·by·Merl·will·be·disabled,·and·in·that·case, |
| 155 | the·match·expressions·<code·class="inline">?Q(...)·=·...</code>,·case·switches·using·<code·class="inline">?Q(...)</code>·patterns, | 155 | the·match·expressions·<code·class="inline">?Q(...)·=·...</code>,·case·switches·using·<code·class="inline">?Q(...)</code>·patterns, |
| 156 | and·automatic·metavariables·like·<code·class="inline">_@Tuple</code>·cannot·be·used·in·your·code,·but·the | 156 | and·automatic·metavariables·like·<code·class="inline">_@Tuple</code>·cannot·be·used·in·your·code,·but·the |
| 157 | Merl·macros·and·functions·still·work.·To·do·metavariable·substitution,·you·need | 157 | Merl·macros·and·functions·still·work.·To·do·metavariable·substitution,·you·need |
| 158 | to·use·the·<code·class="inline">?Q(Text,·Map)</code>·macro.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Tuple</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 158 | to·use·the·<code·class="inline">?Q(Text,·Map)</code>·macro.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Tuple</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="3999576510-1">(</span><span·class="s">"{foo,·_@bar,·_@baz}"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3999576510-2">[</span><span·class="p"·data-group-id="3999576510-3">{</span><span·class="ss">bar</span[·...·truncated·by·diffoscope;·len:·453,·SHA:·fbe12f3ad3479b793ad3b2db6cedf0311bd4d60e5bc8e454825c1b9d65f3bab7·...·]-1">)</span></code></pre><p>The·text·given·to·a·<code·class="inline">?Q(Text)</code>·macro·can·be·either·a·single·string·or·a·list·of |
| 159 | strings.·The·latter·is·useful·when·you·need·to·split·a·long·expression·over | 159 | strings.·The·latter·is·useful·when·you·need·to·split·a·long·expression·over |
| 160 | multiple·lines.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 160 | multiple·lines.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="3836049672-1">(</span><span·class="p"·data-group-id="3836049672-2">[</span><span·class="s">"case·_@Expr·of"</span><span·class="p">,</span><span·class="w"> |
| 161 | ····</span><span·class="s">"··{foo,·X}·->·f(X);"</span><span·class="p">,</span><span·class="w"> | 161 | ····</span><span·class="s">"··{foo,·X}·->·f(X);"</span><span·class="p">,</span><span·class="w"> |
| 162 | ····</span><span·class="s">"··{bar,·X}·->·g(X)"</span><span·class="p">,</span><span·class="w"> | 162 | ····</span><span·class="s">"··{bar,·X}·->·g(X)"</span><span·class="p">,</span><span·class="w"> |
| 163 | ····</span><span·class="s">"··_·->·h(X)"</span><span·class="w"> | 163 | ····</span><span·class="s">"··_·->·h(X)"</span><span·class="w"> |
| 164 | </span><span·class="s">"end"</span><span·class="p"·data-group-id=" | 164 | </span><span·class="s">"end"</span><span·class="p"·data-group-id="3836049672-2">]</span><span·class="p"·data-group-id="3836049672-1">)</span></code></pre><p>If·there·is·a·syntax·error·somewhere·in·the·text·(like·the·missing·semicolon·in |
| 165 | the·second·clause·above)·this·allows·Merl·to·generate·an·error·message·pointing | 165 | the·second·clause·above)·this·allows·Merl·to·generate·an·error·message·pointing |
| 166 | to·the·exact·line·in·your·source·code.·(Just·remember·to·comma-separate·the | 166 | to·the·exact·line·in·your·source·code.·(Just·remember·to·comma-separate·the |
| 167 | strings·in·the·list,·otherwise·Erlang·will·concatenate·the·string·fragments·as | 167 | strings·in·the·list,·otherwise·Erlang·will·concatenate·the·string·fragments·as |
| 168 | if·they·were·a·single·string.)</p><h3·id="module-metavariable-syntax"·class="section-heading"> | 168 | if·they·were·a·single·string.)</p><h3·id="module-metavariable-syntax"·class="section-heading"> |
| 169 | ··<a·href="#module-metavariable-syntax"·class="hover-link"> | 169 | ··<a·href="#module-metavariable-syntax"·class="hover-link"> |
| 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 170 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 171 | ··</a> | 171 | ··</a> |
| Offset 180, 73 lines modified | Offset 180, 73 lines modified | ||
| 180 | note·that·globs·only·matter·for·matching;·when·doing·substitutions,·a·non-glob | 180 | note·that·globs·only·matter·for·matching;·when·doing·substitutions,·a·non-glob |
| 181 | variable·can·be·used·to·inject·a·sequence·of·elements,·and·vice·versa.)</p><p>If·the·name·after·the·prefix·and·any·lift·and·glob·markers·is·<code·class="inline">_</code>·or·<code·class="inline">0</code>,·the | 181 | variable·can·be·used·to·inject·a·sequence·of·elements,·and·vice·versa.)</p><p>If·the·name·after·the·prefix·and·any·lift·and·glob·markers·is·<code·class="inline">_</code>·or·<code·class="inline">0</code>,·the |
| 182 | variable·is·treated·as·an·anonymous·catch-all·pattern·in·matches.·For·example, | 182 | variable·is·treated·as·an·anonymous·catch-all·pattern·in·matches.·For·example, |
| 183 | <code·class="inline">_@_</code>,·<code·class="inline">_@@_</code>,·<code·class="inline">_@__</code>,·or·even·<code·class="inline">_@__@_</code>.</p><p>Finally,·if·the·name·without·any·prefixes·or·lift/glob·markers·begins·with·an | 183 | <code·class="inline">_@_</code>,·<code·class="inline">_@@_</code>,·<code·class="inline">_@__</code>,·or·even·<code·class="inline">_@__@_</code>.</p><p>Finally,·if·the·name·without·any·prefixes·or·lift/glob·markers·begins·with·an |
| 184 | uppercase·character,·as·in·<code·class="inline">_@Foo</code>·or·<code·class="inline">_@_@Foo</code>,·it·will·become·a·variable·on | 184 | uppercase·character,·as·in·<code·class="inline">_@Foo</code>·or·<code·class="inline">_@_@Foo</code>,·it·will·become·a·variable·on |
| 185 | the·Erlang·level,·and·can·be·used·to·easily·deconstruct·and·construct·syntax | 185 | the·Erlang·level,·and·can·be·used·to·easily·deconstruct·and·construct·syntax |
| 186 | trees:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Input</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 186 | trees:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Input</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 187 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 187 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="8964956195-1">(</span><span·class="s">"{foo,·_@Number}"</span><span·class="p"·data-group-id="8964956195-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·c[·...·truncated·by·diffoscope;·len:·139,·SHA:·bd2e936dda95d0b965c8084f551937a7310694edf6d487959b1396260743d8ef·...·]-2">)</span><span·class="p">;</span><span·class="w"> |
| 188 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>We·refer·to·these·as·"automatic·metavariables".·If·in·addition·the·name·ends | 188 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>We·refer·to·these·as·"automatic·metavariables".·If·in·addition·the·name·ends |
| 189 | with·<code·class="inline">@</code>,·as·in·<code·class="inline">_@Foo@</code>,·the·value·of·the·variable·as·an·Erlang·term·will·be | 189 | with·<code·class="inline">@</code>,·as·in·<code·class="inline">_@Foo@</code>,·the·value·of·the·variable·as·an·Erlang·term·will·be |
| 190 | automatically·converted·to·the·corresponding·abstract·syntax·tree·when·used·to | 190 | automatically·converted·to·the·corresponding·abstract·syntax·tree·when·used·to |
| 191 | construct·a·larger·tree.·For·example,·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bar</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 191 | construct·a·larger·tree.·For·example,·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Bar</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="3069611942-1">{</span><span·class="ss">bar</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">42</span><span·class="p"·data-group-id="3069611942-1">}</span><span·class="p">,</span><span·class="w"> |
| 192 | </span><span·class="n">Foo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 192 | </span><span·class="n">Foo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="3069611942-2">(</span><span·class="s">"{foo,·_@Bar@}"</span><span·class="p"·data-group-id="3069611942-2">)</span></code></pre><p>(where·Bar·is·just·some·term,·not·a·syntax·tree)·the·result·<code·class="inline">Foo</code>·will·be·a |
| 193 | syntax·tree·representing·<code·class="inline">{foo,·{bar,·42}}</code>.·This·avoids·the·need·for·temporary | 193 | syntax·tree·representing·<code·class="inline">{foo,·{bar,·42}}</code>.·This·avoids·the·need·for·temporary |
| 194 | variables·in·order·to·inject·data,·as·in</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TmpBar</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_syntax</span><span·class="p">:</span><span·class="nf">abstract</span><span·class="p"·data-group-id="6 | 194 | variables·in·order·to·inject·data,·as·in</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">TmpBar</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_syntax</span><span·class="p">:</span><span·class="nf">abstract</span><span·class="p"·data-group-id="2685084070-1">(</span><span·class="n">Bar</span><span·class="p"·data-group-id="2685084070-1">)</span><span·class="p">,</span><span·class="w"> |
| 195 | </span><span·class="n">Foo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="6 | 195 | </span><span·class="n">Foo</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="2685084070-2">(</span><span·class="s">"{foo,·_@TmpBar}"</span><span·class="p"·data-group-id="2685084070-2">)</span></code></pre><p>If·the·context·requires·an·integer·rather·than·a·variable,·an·atom,·or·a·string, |
| 196 | you·cannot·use·the·uppercase·convention·to·mark·an·automatic·metavariable. | 196 | you·cannot·use·the·uppercase·convention·to·mark·an·automatic·metavariable. |
| 197 | Instead,·if·the·integer·(without·the·<code·class="inline">909</code>-prefix·and·lift/glob·markers)·ends | 197 | Instead,·if·the·integer·(without·the·<code·class="inline">909</code>-prefix·and·lift/glob·markers)·ends |
| 198 | in·a·<code·class="inline">9</code>,·the·integer·will·become·an·Erlang-level·variable·prefixed·with·<code·class="inline">Q</code>, | 198 | in·a·<code·class="inline">9</code>,·the·integer·will·become·an·Erlang-level·variable·prefixed·with·<code·class="inline">Q</code>, |
| 199 | and·if·it·ends·with·<code·class="inline">99</code>·it·will·also·be·automatically·abstracted.·For·example, | 199 | and·if·it·ends·with·<code·class="inline">99</code>·it·will·also·be·automatically·abstracted.·For·example, |
| 200 | the·following·will·increment·the·arity·of·the·exported·function·f:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Form</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 200 | the·following·will·increment·the·arity·of·the·exported·function·f:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="k">case</span><span·class="w">·</span><span·class="n">Form</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 201 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="2 | 201 | ····</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="7248521193-1">(</span><span·class="s">"-export([f/90919])."</span><span·class="p"·data-group-id="7248521193-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ········</span><span·class="n">Q2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_syntax</span><span·class="p">:</span><span·class="nf">concrete</span><span·class="p"·data-group-id="2 | 202 | ········</span><span·class="n">Q2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">erl_syntax</span><span·class="p">:</span><span·class="nf">concrete</span><span·class="p"·data-group-id="7248521193-2">(</span><span·class="n">Q1</span><span·class="p"·data-group-id="7248521193-2">)</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 203 | ········</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="2 | 203 | ········</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="7248521193-3">(</span><span·class="s">"-export([f/909299])."</span><span·class="p"·data-group-id="7248521193-3">)</span><span·class="p">;</span><span·class="w"> |
| 204 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h3·id="module-when-to-use-the-various-forms-of-metavariables"·class="section-heading"> | 204 | ····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h3·id="module-when-to-use-the-various-forms-of-metavariables"·class="section-heading"> |
| 205 | ··<a·href="#module-when-to-use-the-various-forms-of-metavariables"·class="hover-link"> | 205 | ··<a·href="#module-when-to-use-the-various-forms-of-metavariables"·class="hover-link"> |
| 206 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 206 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 207 | ··</a> | 207 | ··</a> |
| 208 | ··<span·class="text">When·to·use·the·various·forms·of·metavariables</span> | 208 | ··<span·class="text">When·to·use·the·various·forms·of·metavariables</span> |
| 209 | </h3> | 209 | </h3> |
| 210 | <p>Merl·can·only·parse·a·fragment·of·text·if·it·follows·the·basic·syntactical·rules | 210 | <p>Merl·can·only·parse·a·fragment·of·text·if·it·follows·the·basic·syntactical·rules |
| 211 | of·Erlang.·In·most·places,·a·normal·Erlang·variable·can·be·used·as·metavariable, | 211 | of·Erlang.·In·most·places,·a·normal·Erlang·variable·can·be·used·as·metavariable, |
| 212 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 212 | for·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="5242525222-1">(</span><span·class="s">"f(_@Arg)"</span><span·class="p"·data-group-id="5242525222-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Expr</span></code></pre><p>but·if·you·want·to·match·on·something·like·the·name·of·a·function,·you·have·to |
| 213 | use·an·atom·as·metavariable:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 213 | use·an·atom·as·metavariable:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="1182379183-1">(</span><span·class="s">"'@Name'()·->·_@@_."</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Function</span></code></pre><p>(note·the·anonymous·glob·variable·<code·class="inline">_@@_</code>·to·ignore·the·function·body).</p><p>In·some·contexts,·only·a·string·or·an·integer·is·allowed.·For·example,·the |
| 214 | directive·<code·class="inline">-file(Name,·Line)</code>·requires·that·<code·class="inline">Name</code>·is·a·string·literal·and | 214 | directive·<code·class="inline">-file(Name,·Line)</code>·requires·that·<code·class="inline">Name</code>·is·a·string·literal·and |
| 215 | <code·class="inline">Line</code>·an·integer·literal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 215 | <code·class="inline">Line</code>·an·integer·literal:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9461241732-1">(</span><span·class="s">"-file(\"'@File\",·9090)."</span><span·class="p"·data-group-id="9461241732-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class=[·...·truncated·by·diffoscope;·len:·174,·SHA:·7420da389c8683685156607cc16b9596edbbac8532596a5073155578d7e535fa·...·]-2">)</span><span·class="p">)</span><span·class="p">.</span></code></pre><p>This·will·extract·the·string·literal·<code·class="inline">"foo.erl"</code>·into·the·variable·<code·class="inline">Foo</code>.·Note |
| 216 | the·use·of·the·anonymous·variable·<code·class="inline">9090</code>·to·ignore·the·line·number.·To·match·and | 216 | the·use·of·the·anonymous·variable·<code·class="inline">9090</code>·to·ignore·the·line·number.·To·match·and |
| 217 | also·bind·a·metavariable·that·must·be·an·integer·literal,·we·can·use·the | 217 | also·bind·a·metavariable·that·must·be·an·integer·literal,·we·can·use·the |
| 218 | convention·of·ending·the·integer·with·a·9,·turning·it·into·a·Q-prefixed·variable | 218 | convention·of·ending·the·integer·with·a·9,·turning·it·into·a·Q-prefixed·variable |
| 219 | on·the·Erlang·level·(see·the·previous·section).</p><h4>Globs</h4><p>Whenever·you·want·to·match·out·a·number·of·elements·in·a·sequence·(zero·or·more) | 219 | on·the·Erlang·level·(see·the·previous·section).</p><h4>Globs</h4><p>Whenever·you·want·to·match·out·a·number·of·elements·in·a·sequence·(zero·or·more) |
| 220 | rather·than·a·fixed·set·of·elements,·you·need·to·use·a·glob.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 220 | rather·than·a·fixed·set·of·elements,·you·need·to·use·a·glob.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="5901635501-1">(</span><span·class="s">"{_@@Elements}"</span><span·class="p"·data-group-id="5901635501-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="[·...·truncated·by·diffoscope;·len:·358,·SHA:·43f9d15f3cd57dd9835212e4edc2e0648093bf23312df916b5c719760b25dbae·...·]-2">)</span></code></pre><p>will·bind·Elements·to·the·list·of·individual·syntax·trees·representing·the·atoms |
| 221 | <code·class="inline">a</code>,·<code·class="inline">b</code>,·and·<code·class="inline">c</code>.·This·can·also·be·used·with·static·prefix·and·suffix·elements | 221 | <code·class="inline">a</code>,·<code·class="inline">b</code>,·and·<code·class="inline">c</code>.·This·can·also·be·used·with·static·prefix·and·suffix·elements |
| 222 | in·the·sequence.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="7906743882-1">(</span><span·class="s">"{a,·b,·_@@Elements}"</span><span·class="p"·data-group-id="7906743882-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="7906743882-2">(</span><span·class="p"·data-group-id="7906743882-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">d</span><span·class="p"·data-group-id="7906743882-3">}</span><span·class="p"·data-group-id="7906743882-2">)</span></code></pre><p>will·bind·Elements·to·the·list·of·the·<code·class="inline">c</code>·and·<code·class="inline">d</code>·subtrees,·and</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="8085879057-1">(</span><span·class="s">"{_@@Elements,·c,·d}"</span><span·class="p"·data-group-id="8085879057-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="8085879057-2">(</span><span·class="p"·data-group-id="8085879057-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">d</span><span·class="p"·data-group-id="8085879057-3">}</span><span·class="p"·data-group-id="8085879057-2">)</span></code></pre><p>will·bind·Elements·to·the·list·of·the·<code·class="inline">a</code>·and·<code·class="inline">b</code>·subtrees.·You·can·even·use | ||
| 223 | 222 | in·the·sequence.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="8174145978-1">(</span><span·class="s">"{a,·b,·_@@Elements}"</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·1720,·SHA:·b40a3ae6b886e444de67d79d3c453d9a30c7c63f9f41418afdca9276c02afece·...·] | |
| 223 | plain·metavariables·in·the·prefix·or·suffix:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9570228405-1">(</span><span·class="s">"{_@First,·_@@Rest}"</span><span·class="p"·data-group-id="9570228405-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9570228405-2">(</span><span·class="p"·data-group-id="9570228405-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p"·data-group-id="9570228405-3">}</span><span·class="p"·data-group-id="9570228405-2">)</span></code></pre><p>or</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9729055324-1">(</span><span·class="s">"{_@@_,·_@Last}"</span><span·class="p"·data-group-id="9729055324-1">)</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="9729055324-2">(</span><span·class="p"·data-group-id="9729055324-3">{</span><span·class="ss">a</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">b</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">c</span><span·class="p"·data-group-id="9729055324-3">}</span><span·class="p"·data-group-id="9729055324-2">)</span></code></pre><p>(ignoring·all·but·the·last·element).·However,·you·cannot·have·two·globs·as·part | ||
| 224 | of·the·same·sequence.</p><h4>Lifted·metavariables</h4><p>In·some·cases,·the·Erlang·syntax·rules·make·it·impossible·to·place·a | 224 | of·the·same·sequence.</p><h4>Lifted·metavariables</h4><p>In·some·cases,·the·Erlang·syntax·rules·make·it·impossible·to·place·a |
| 225 | metavariable·directly·where·you·would·like·it.·For·example,·you·cannot·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 225 | metavariable·directly·where·you·would·like·it.·For·example,·you·cannot·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="2952360805-1">(</span><span·class="s">"-export([_@@Name])."</span><span·class="p"·data-group-id="2952360805-1">)</span></code></pre><p>to·match·out·all·name/arity·pairs·in·the·export·list,·or·to·insert·a·list·of |
| 226 | exports·in·a·declaration,·because·the·Erlang·parser·only·allows·elements·on·the | 226 | exports·in·a·declaration,·because·the·Erlang·parser·only·allows·elements·on·the |
| 227 | form·<code·class="inline">A/I</code>·(where·<code·class="inline">A</code>·is·an·atom·and·<code·class="inline">I</code>·an·integer)·in·the·export·list.·A | 227 | form·<code·class="inline">A/I</code>·(where·<code·class="inline">A</code>·is·an·atom·and·<code·class="inline">I</code>·an·integer)·in·the·export·list.·A |
| 228 | variable·like·the·above·is·not·allowed,·but·neither·is·a·single·atom·or·integer, | 228 | variable·like·the·above·is·not·allowed,·but·neither·is·a·single·atom·or·integer, |
| 229 | so·<code·class="inline">'@@Name'</code>·or·<code·class="inline">909919</code>·would·not·work·either.</p><p>What·you·have·to·do·in·such·cases·is·to·write·your·metavariable·in·a | 229 | so·<code·class="inline">'@@Name'</code>·or·<code·class="inline">909919</code>·would·not·work·either.</p><p>What·you·have·to·do·in·such·cases·is·to·write·your·metavariable·in·a |
| 230 | syntactically·valid·position,·and·use·lifting·markers·to·denote·where·it·should | 230 | syntactically·valid·position,·and·use·lifting·markers·to·denote·where·it·should |
| 231 | really·apply,·as·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="4 | 231 | really·apply,·as·in:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="4562601970-1">(</span><span·class="s">"-export(['@_@Name'/0])."</span><span·class="p"·data-group-id="4562601970-1">)</span></code></pre><p>This·causes·the·variable·to·be·lifted·(after·parsing)·to·the·next·higher·level |
| 232 | in·the·syntax·tree,·replacing·that·entire·subtree.·In·this·case,·the | 232 | in·the·syntax·tree,·replacing·that·entire·subtree.·In·this·case,·the |
| 233 | <code·class="inline">'@_@Name'/0</code>·will·be·replaced·with·<code·class="inline">'@@Name'</code>,·and·the·<code·class="inline">/0</code>·part·was·just·used | 233 | <code·class="inline">'@_@Name'/0</code>·will·be·replaced·with·<code·class="inline">'@@Name'</code>,·and·the·<code·class="inline">/0</code>·part·was·just·used |
| 234 | as·dummy·notation·and·will·be·discarded.</p><p>You·may·even·need·to·apply·lifting·more·than·once.·To·match·the·entire·export | 234 | as·dummy·notation·and·will·be·discarded.</p><p>You·may·even·need·to·apply·lifting·more·than·once.·To·match·the·entire·export |
| 235 | list·as·a·single·syntax·tree,·you·can·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id=" | 235 | list·as·a·single·syntax·tree,·you·can·write:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">?</span><span·class="n">Q</span><span·class="p"·data-group-id="1619890205-1">(</span><span·class="s">"-export(['@__Name'/0])."</span><span·class="p"·data-group-id="1619890205-1">)</span></code></pre><p>using·two·underscores,·but·with·no·glob·marker·this·time.·This·will·make·the |
| 236 | entire·<code·class="inline">['@__Name'/0]</code>·part·be·replaced·with·<code·class="inline">'@Name'</code>.</p><p>Sometimes,·the·tree·structure·of·a·code·fragment·is·not·very·obvious,·and·parts | 236 | entire·<code·class="inline">['@__Name'/0]</code>·part·be·replaced·with·<code·class="inline">'@Name'</code>.</p><p>Sometimes,·the·tree·structure·of·a·code·fragment·is·not·very·obvious,·and·parts |
| 237 | of·the·structure·may·be·invisible·when·printed·as·source·code.·For·instance,·a | 237 | of·the·structure·may·be·invisible·when·printed·as·source·code.·For·instance,·a |
| 238 | simple·function·definition·like·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">zero</span><span·class="p"·data-group-id=" | 238 | simple·function·definition·like·the·following:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">zero</span><span·class="p"·data-group-id="1015115156-1">(</span><span·class="p"·data-group-id="1015115156-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="mi">0</span><span·class="p">.</span></code></pre><p>consists·of·the·name·(the·atom·<code·class="inline">zero</code>),·and·a·list·of·clauses·containing·the |
| 239 | single·clause·<code·class="inline">()·->·0</code>.·The·clause·consists·of·an·argument·list·(empty),·a | 239 | single·clause·<code·class="inline">()·->·0</code>.·The·clause·consists·of·an·argument·list·(empty),·a |
| 240 | guard·(empty),·and·a·body·(which·is·always·a·list·of·expressions)·containing·the | 240 | guard·(empty),·and·a·body·(which·is·always·a·list·of·expressions)·containing·the |
| 241 | single·expression·<code·class="inline">0</code>.·This·means·that·to·match·out·the·name·and·the·list·of | 241 | single·expression·<code·class="inline">0</code>.·This·means·that·to·match·out·the·name·and·the·list·of |
| 242 | clauses·of·any·function,·you'll·need·to·use·a·pattern·like | 242 | clauses·of·any·function,·you'll·need·to·use·a·pattern·like |
| 243 | <code·class="inline">?Q("'@Name'()·->·_@_@Body.")</code>,·using·a·dummy·clause·whose·body·is·a·glob·lifted | 243 | <code·class="inline">?Q("'@Name'()·->·_@_@Body.")</code>,·using·a·dummy·clause·whose·body·is·a·glob·lifted |
| 244 | one·level.</p><p>To·visualize·the·structure·of·a·syntax·tree,·you·can·use·the·function | 244 | one·level.</p><p>To·visualize·the·structure·of·a·syntax·tree,·you·can·use·the·function |
| 245 | <code·class="inline">merl:show(T)</code>,·which·prints·a·summary.·For·example,·entering</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">merl</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id=" | 245 | <code·class="inline">merl:show(T)</code>,·which·prints·a·summary.·For·example,·entering</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">merl</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id="3740707799-1">(</span><span·class="nc">merl</span><span·class="p">:</span><span·class="nf">quote</span><span·class="p"·data-group-id="3740707799-2">(</span><span·class="s">"inc(X,·Y)·when·Y·>·0·->·X·+·Y."</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·65,·SHA:·24ddf40e9b476165e60ba06d8d1a754bb8001391b49386f491d63d17fa4b0715·...·]-1">)</span></code></pre><p>in·the·Erlang·shell·will·print·the·following·(where·the·<code·class="inline">+</code>·signs·separate |
| 246 | groups·of·subtrees·on·the·same·level):</p><pre><code·class="text">function:·inc(X,·Y)·when·...·->·X·+·Y. | 246 | groups·of·subtrees·on·the·same·level):</p><pre><code·class="text">function:·inc(X,·Y)·when·...·->·X·+·Y. |
| 247 | ··atom:·inc | 247 | ··atom:·inc |
| 248 | ··+ | 248 | ··+ |
| 249 | ··clause:·(X,·Y)·when·...·->·X·+·Y | 249 | ··clause:·(X,·Y)·when·...·->·X·+·Y |
| 250 | ····variable:·X | 250 | ····variable:·X |
| 251 | ····variable:·Y | 251 | ····variable:·Y |
| 252 | ····+ | 252 | ····+ |
| Offset 1698, 15 lines modified | Offset 1698, 15 lines modified | ||
| 1698 | ······<p·class="built-using"> | 1698 | ······<p·class="built-using"> |
| 1699 | ········Built·using | 1699 | ········Built·using |
| 1700 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1700 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1701 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1701 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1702 | ······</p> | 1702 | ······</p> |
| 1703 | <p>Copyright·©·1996-202 | 1703 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1704 | ····</footer> | 1704 | ····</footer> |
| 1705 | ··</div> | 1705 | ··</div> |
| 1706 | </main> | 1706 | </main> |
| 1707 | </div> | 1707 | </div> |
| 1708 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1708 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| Max diff block lines reached; 28/43785 bytes (0.06%) of diff not shown. | |||
| Offset 152, 15 lines modified | Offset 152, 15 lines modified | ||
| 152 | ······<p·class="built-using"> | 152 | ······<p·class="built-using"> |
| 153 | ········Built·using | 153 | ········Built·using |
| 154 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 154 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 155 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 155 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 156 | ······</p> | 156 | ······</p> |
| 157 | <p>Copyright·©·1996-202 | 157 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 158 | ····</footer> | 158 | ····</footer> |
| 159 | ··</div> | 159 | ··</div> |
| 160 | </main> | 160 | </main> |
| 161 | </div> | 161 | </div> |
| 162 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 162 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 163 | ··<script> | 163 | ··<script> |
| 164 | ··let·initialized·=·false; | 164 | ··let·initialized·=·false; |
| Offset 918, 15 lines modified | Offset 918, 15 lines modified | ||
| 918 | ······<p·class="built-using"> | 918 | ······<p·class="built-using"> |
| 919 | ········Built·using | 919 | ········Built·using |
| 920 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 920 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 921 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 921 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 922 | ······</p> | 922 | ······</p> |
| 923 | <p>Copyright·©·1996-202 | 923 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 924 | ····</footer> | 924 | ····</footer> |
| 925 | ··</div> | 925 | ··</div> |
| 926 | </main> | 926 | </main> |
| 927 | </div> | 927 | </div> |
| 928 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 928 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 929 | ··<script> | 929 | ··<script> |
| 930 | ··let·initialized·=·false; | 930 | ··let·initialized·=·false; |
| Offset 1122, 15 lines modified | Offset 1122, 15 lines modified | ||
| 1122 | ······<p·class="built-using"> | 1122 | ······<p·class="built-using"> |
| 1123 | ········Built·using | 1123 | ········Built·using |
| 1124 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1124 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1125 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1125 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1126 | ······</p> | 1126 | ······</p> |
| 1127 | <p>Copyright·©·1996-202 | 1127 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1128 | ····</footer> | 1128 | ····</footer> |
| 1129 | ··</div> | 1129 | ··</div> |
| 1130 | </main> | 1130 | </main> |
| 1131 | </div> | 1131 | </div> |
| 1132 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1132 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1133 | ··<script> | 1133 | ··<script> |
| 1134 | ··let·initialized·=·false; | 1134 | ··let·initialized·=·false; |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | ······<p·class="built-using"> | 137 | ······<p·class="built-using"> |
| 138 | ········Built·using | 138 | ········Built·using |
| 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 141 | ······</p> | 141 | ······</p> |
| 142 | <p>Copyright·©·1996-202 | 142 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 143 | ····</footer> | 143 | ····</footer> |
| 144 | ··</div> | 144 | ··</div> |
| 145 | </main> | 145 | </main> |
| 146 | </div> | 146 | </div> |
| 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 148 | ··<script> | 148 | ··<script> |
| 149 | ··let·initialized·=·false; | 149 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 190, 15 lines modified | Offset 190, 15 lines modified | ||
| 190 | ······<p·class="built-using"> | 190 | ······<p·class="built-using"> |
| 191 | ········Built·using | 191 | ········Built·using |
| 192 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 192 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 193 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 193 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 194 | ······</p> | 194 | ······</p> |
| 195 | <p>Copyright·©·1996-202 | 195 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 196 | ····</footer> | 196 | ····</footer> |
| 197 | ··</div> | 197 | ··</div> |
| 198 | </main> | 198 | </main> |
| 199 | </div> | 199 | </div> |
| 200 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 200 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 201 | ··<script> | 201 | ··<script> |
| 202 | ··let·initialized·=·false; | 202 | ··let·initialized·=·false; |
| Offset 124, 17 lines modified | Offset 124, 17 lines modified | ||
| 124 | ····<span>Examples</span> | 124 | ····<span>Examples</span> |
| 125 | ··</h1> | 125 | ··</h1> |
| 126 | <p>The·<a·href="tftp.html#start/1">start/1</a>·function·starts·a·daemon·process·listening·for·UDP | 126 | <p>The·<a·href="tftp.html#start/1">start/1</a>·function·starts·a·daemon·process·listening·for·UDP |
| 127 | packets·on·a·port.·When·it·receives·a·request·for·read·or·write,·it·spawns·a | 127 | packets·on·a·port.·When·it·receives·a·request·for·read·or·write,·it·spawns·a |
| 128 | temporary·server·process·handling·the·transfer.</p><p>This·is·a·simple·example·of·starting·the·TFTP·server·and·reading·the·content·of | 128 | temporary·server·process·handling·the·transfer.</p><p>This·is·a·simple·example·of·starting·the·TFTP·server·and·reading·the·content·of |
| 129 | a·sample·file·using·the·TFTP·client.</p><p><em>Step·1.</em>·Create·a·sample·file·to·be·used·for·the·transfer:</p><pre><code·class="text">······$·echo·"Erlang/OTP·21"·>·file.txt</code></pre><p><em>Step·2.</em>·Start·the·TFTP·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id=" | 129 | a·sample·file·using·the·TFTP·client.</p><p><em>Step·1.</em>·Create·a·sample·file·to·be·used·for·the·transfer:</p><pre><code·class="text">······$·echo·"Erlang/OTP·21"·>·file.txt</code></pre><p><em>Step·2.</em>·Start·the·TFTP·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">······</span><span·class="mi">1</span><span·class="o">></span><span·class="w">·</span><span·class="p"·data-group-id="0892169765-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pid</span><span·class="p"·data-group-id="0892169765-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cla[·...·truncated·by·diffoscope;·len:·483,·SHA:·de850ed647e82c3a76c936b7cd201e30d009ae5c6cf56bcad0761d9d61fa7e03·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 130 | ······</span><span·class="p"·data-group-id=" | 130 | ······</span><span·class="p"·data-group-id="0892169765-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.65</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="0892169765-5">}</span>[·...·truncated·by·diffoscope;·len:·896,·SHA:·a0de20757d09b7a4b54249eab3f412375a52423a939c4ffd41c3a26dde066572·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 131 | ······</span><span·class="p"·data-group-id=" | 131 | ······</span><span·class="p"·data-group-id="4612740808-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="4612740808-5"><<</span><span·class="s">"Erlang/OTP·21\n"</span><span·class="p"·data-group-id="4612740808-5">>></span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·90d44fb9a30c7746bb1d6d9685219b6b6bcb1ce3dd6c756e5674cb83b0e9ad3e·...·]-4">}</span></code></pre> |
| 132 | </div> | 132 | </div> |
| 133 | <div·class="bottom-actions"·id="bottom-actions"> | 133 | <div·class="bottom-actions"·id="bottom-actions"> |
| 134 | ··<div·class="bottom-actions-item"> | 134 | ··<div·class="bottom-actions-item"> |
| 135 | ······<a·href="introduction.html"·class="bottom-actions-button"·rel="prev"> | 135 | ······<a·href="introduction.html"·class="bottom-actions-button"·rel="prev"> |
| 136 | ········<span·class="subheader"> | 136 | ········<span·class="subheader"> |
| Offset 168, 15 lines modified | Offset 168, 15 lines modified | ||
| 168 | ······<p·class="built-using"> | 168 | ······<p·class="built-using"> |
| 169 | ········Built·using | 169 | ········Built·using |
| 170 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 170 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 171 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 171 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 172 | ······</p> | 172 | ······</p> |
| 173 | <p>Copyright·©·1996-202 | 173 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 174 | ····</footer> | 174 | ····</footer> |
| 175 | ··</div> | 175 | ··</div> |
| 176 | </main> | 176 | </main> |
| 177 | </div> | 177 | </div> |
| 178 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 178 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 179 | ··<script> | 179 | ··<script> |
| 180 | ··let·initialized·=·false; | 180 | ··let·initialized·=·false; |
| Offset 185, 15 lines modified | Offset 185, 15 lines modified | ||
| 185 | ······<p·class="built-using"> | 185 | ······<p·class="built-using"> |
| 186 | ········Built·using | 186 | ········Built·using |
| 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 187 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 188 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 189 | ······</p> | 189 | ······</p> |
| 190 | <p>Copyright·©·1996-202 | 190 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 191 | ····</footer> | 191 | ····</footer> |
| 192 | ··</div> | 192 | ··</div> |
| 193 | </main> | 193 | </main> |
| 194 | </div> | 194 | </div> |
| 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 195 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 196 | ··<script> | 196 | ··<script> |
| 197 | ··let·initialized·=·false; | 197 | ··let·initialized·=·false; |
| Offset 308, 15 lines modified | Offset 308, 15 lines modified | ||
| 308 | ······<p·class="built-using"> | 308 | ······<p·class="built-using"> |
| 309 | ········Built·using | 309 | ········Built·using |
| 310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 312 | ······</p> | 312 | ······</p> |
| 313 | <p>Copyright·©·1996-202 | 313 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 314 | ····</footer> | 314 | ····</footer> |
| 315 | ··</div> | 315 | ··</div> |
| 316 | </main> | 316 | </main> |
| 317 | </div> | 317 | </div> |
| 318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 319 | ··<script> | 319 | ··<script> |
| 320 | ··let·initialized·=·false; | 320 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 130, 15 lines modified | Offset 130, 15 lines modified | ||
| 130 | ····<section·id="moduledoc"> | 130 | ····<section·id="moduledoc"> |
| 131 | <p>Trivial·FTP.</p><p>Interface·module·for·the·<code·class="inline">tftp</code>·application.</p><h2·id="module-overwiew"·class="section-heading"> | 131 | <p>Trivial·FTP.</p><p>Interface·module·for·the·<code·class="inline">tftp</code>·application.</p><h2·id="module-overwiew"·class="section-heading"> |
| 132 | ··<a·href="#module-overwiew"·class="hover-link"> | 132 | ··<a·href="#module-overwiew"·class="hover-link"> |
| 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 133 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 134 | ··</a> | 134 | ··</a> |
| 135 | ··<span·class="text">Overwiew</span> | 135 | ··<span·class="text">Overwiew</span> |
| 136 | </h2> | 136 | </h2> |
| 137 | <p>This·is·a·complete·implementation·of·the·following·IETF·standards:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">1350</span><span·class="p">,</span><span·class="w">·</span><span·class="n">The</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Protocol</span><span·class="w">·</span><span·class="p"·data-group-id=" | 137 | <p>This·is·a·complete·implementation·of·the·following·IETF·standards:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">1350</span><span·class="p">,</span><span·class="w">·</span><span·class="n">The</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Protocol</span><span·class="w">·</span><span·class="p"·data-group-id="4453199708-1">(</span><span·class="ss">revision</span><span·class="w">·</span><span·class="mi">2</span><span·class="p"·data-group-id="4453199708-1">)</span><span·class="p">.</span><span·class="w"> |
| 138 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2347</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Option</span><span·class="w">·</span><span·class="n">Extension</span><span·class="p">.</span><span·class="w"> | 138 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2347</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Option</span><span·class="w">·</span><span·class="n">Extension</span><span·class="p">.</span><span·class="w"> |
| 139 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2348</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Blocksize</span><span·class="w">·</span><span·class="n">Option</span><span·class="p">.</span><span·class="w"> | 139 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2348</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Blocksize</span><span·class="w">·</span><span·class="n">Option</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2349</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Timeout</span><span·class="w">·</span><span·class="n">Interval</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">Transfer</span><span·class="w">·</span><span·class="n">Size</span><span·class="w">·</span><span·class="n">Options</span><span·class="p">.</span></code></pre><p>The·only·feature·that·not·is·implemented·in·this·release·is | 140 | </span><span·class="n">RFC</span><span·class="w">·</span><span·class="mi">2349</span><span·class="p">,</span><span·class="w">·</span><span·class="n">TFTP</span><span·class="w">·</span><span·class="n">Timeout</span><span·class="w">·</span><span·class="n">Interval</span><span·class="w">·</span><span·class="ow">and</span><span·class="w">·</span><span·class="n">Transfer</span><span·class="w">·</span><span·class="n">Size</span><span·class="w">·</span><span·class="n">Options</span><span·class="p">.</span></code></pre><p>The·only·feature·that·not·is·implemented·in·this·release·is |
| 141 | the·"netascii"·transfer·mode.</p><p>The·<a·href="#start/1">start</a>·function·starts·a·daemon·process·which,·listens | 141 | the·"netascii"·transfer·mode.</p><p>The·<a·href="#start/1">start</a>·function·starts·a·daemon·process·which,·listens |
| 142 | for·UDP·packets·on·a·port.·When·it·receives·a·request·for·read·or | 142 | for·UDP·packets·on·a·port.·When·it·receives·a·request·for·read·or |
| 143 | write·it·spawns·a·temporary·server·process·which·handles·the·actual | 143 | write·it·spawns·a·temporary·server·process·which·handles·the·actual |
| 144 | transfer·of·the·file.·On·the·client·side·the | 144 | transfer·of·the·file.·On·the·client·side·the |
| Offset 930, 15 lines modified | Offset 930, 15 lines modified | ||
| 930 | ······<p·class="built-using"> | 930 | ······<p·class="built-using"> |
| 931 | ········Built·using | 931 | ········Built·using |
| 932 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 932 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 933 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 933 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 934 | ······</p> | 934 | ······</p> |
| 935 | <p>Copyright·©·1996-202 | 935 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 936 | ····</footer> | 936 | ····</footer> |
| 937 | ··</div> | 937 | ··</div> |
| 938 | </main> | 938 | </main> |
| 939 | </div> | 939 | </div> |
| 940 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 940 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 941 | ··<script> | 941 | ··<script> |
| 942 | ··let·initialized·=·false; | 942 | ··let·initialized·=·false; |
| Offset 301, 15 lines modified | Offset 301, 15 lines modified | ||
| 301 | ······<p·class="built-using"> | 301 | ······<p·class="built-using"> |
| 302 | ········Built·using | 302 | ········Built·using |
| 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 303 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 304 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 305 | ······</p> | 305 | ······</p> |
| 306 | <p>Copyright·©·1996-202 | 306 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 307 | ····</footer> | 307 | ····</footer> |
| 308 | ··</div> | 308 | ··</div> |
| 309 | </main> | 309 | </main> |
| 310 | </div> | 310 | </div> |
| 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 311 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 312 | ··<script> | 312 | ··<script> |
| 313 | ··let·initialized·=·false; | 313 | ··let·initialized·=·false; |
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 256, 15 lines modified | Offset 256, 15 lines modified | ||
| 256 | ······<p·class="built-using"> | 256 | ······<p·class="built-using"> |
| 257 | ········Built·using | 257 | ········Built·using |
| 258 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 258 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 259 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 259 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 260 | ······</p> | 260 | ······</p> |
| 261 | <p>Copyright·©·1996-202 | 261 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 262 | ····</footer> | 262 | ····</footer> |
| 263 | ··</div> | 263 | ··</div> |
| 264 | </main> | 264 | </main> |
| 265 | </div> | 265 | </div> |
| 266 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 266 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 267 | ··<script> | 267 | ··<script> |
| 268 | ··let·initialized·=·false; | 268 | ··let·initialized·=·false; |
| Offset 1507, 15 lines modified | Offset 1507, 15 lines modified | ||
| 1507 | ······</div> | 1507 | ······</div> |
| 1508 | <p>Analyzes·one·or·more·modules·as·specified·by·<code·class="inline">Arg</code>.</p><p>If·<code·class="inline">Arg</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>,·this | 1508 | <p>Analyzes·one·or·more·modules·as·specified·by·<code·class="inline">Arg</code>.</p><p>If·<code·class="inline">Arg</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>,·this |
| 1509 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·Arg,·function)</code></a>.</p><p>If·<code·class="inline">Arg</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·this | 1509 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·Arg,·function)</code></a>.</p><p>If·<code·class="inline">Arg</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·this |
| 1510 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·coverage,·Arg)</code></a>.</p><p>Otherwise·<code·class="inline">Arg</code>·is·assumed·to·be·a·module·name,·and·this·call·is·equivalent | 1510 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·coverage,·Arg)</code></a>.</p><p>Otherwise·<code·class="inline">Arg</code>·is·assumed·to·be·a·module·name,·and·this·call·is·equivalent |
| 1511 | to·<a·href="#analyse/3"><code·class="inline">analyse(Arg,·coverage,·function)</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·whose·name·overlaps·with·one·the·values·in | 1511 | to·<a·href="#analyse/3"><code·class="inline">analyse(Arg,·coverage,·function)</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·whose·name·overlaps·with·one·the·values·in |
| 1512 | <a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>·or·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·the·module | 1512 | <a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>·or·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·the·module |
| 1513 | name·has·to·be·in·a·list.·For·example,·to·analyze·a·module·named·<code·class="inline">calls</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 1513 | name·has·to·be·in·a·list.·For·example,·to·analyze·a·module·named·<code·class="inline">calls</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="9608944527-1">(</span><span·class="p"·data-group-id="9608944527-2">[</span><span·class="ss">calls</span><span·class="p"·data-group-id="9608944527-2">]</span><span·class="p"·data-group-id="9608944527-1">)</span><span·class="p">.</span></code></pre></section> |
| 1514 | ··</section> | 1514 | ··</section> |
| 1515 | </section> | 1515 | </section> |
| 1516 | <section·class="detail"·id="analyse/2"> | 1516 | <section·class="detail"·id="analyse/2"> |
| 1517 | ··<div·class="detail-header"> | 1517 | ··<div·class="detail-header"> |
| 1518 | ····<a·href="#analyse/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1518 | ····<a·href="#analyse/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1519 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1519 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1547, 15 lines modified | Offset 1547, 15 lines modified | ||
| 1547 | <p>Analyzes·one·or·more·modules·as·specified·by·<code·class="inline">Arg1</code>·and·<code·class="inline">Arg2</code>.</p><p>If·<code·class="inline">Arg1</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>·and | 1547 | <p>Analyzes·one·or·more·modules·as·specified·by·<code·class="inline">Arg1</code>·and·<code·class="inline">Arg2</code>.</p><p>If·<code·class="inline">Arg1</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>·and |
| 1548 | <code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·this | 1548 | <code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·this |
| 1549 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·Arg1,·Arg2)</code></a>.</p><p>If·<code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>, | 1549 | call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse('_',·Arg1,·Arg2)</code></a>.</p><p>If·<code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>, |
| 1550 | <code·class="inline">Arg1</code>·is·assumed·to·be·a·module·and·this·call·is·equivalent·to | 1550 | <code·class="inline">Arg1</code>·is·assumed·to·be·a·module·and·this·call·is·equivalent·to |
| 1551 | <a·href="#analyse/3"><code·class="inline">analyse(Arg1,·Arg2,·function)</code></a>.</p><p>If·<code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·<code·class="inline">Arg1</code>·is | 1551 | <a·href="#analyse/3"><code·class="inline">analyse(Arg1,·Arg2,·function)</code></a>.</p><p>If·<code·class="inline">Arg2</code>·is·one·of·the·values·in·<a·href="#t:level/0"><code·class="inline">level()</code></a>,·<code·class="inline">Arg1</code>·is |
| 1552 | assumed·to·be·a·module·and·this·call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse(Arg1,·coverage,·Arg2)</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·whose·name·overlaps·with·one·of·the·values·in | 1552 | assumed·to·be·a·module·and·this·call·is·equivalent·to·<a·href="#analyse/3"><code·class="inline">analyse(Arg1,·coverage,·Arg2)</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·whose·name·overlaps·with·one·of·the·values·in |
| 1553 | <a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>,·the·module·name·needs·to·be·in·a | 1553 | <a·href="#t:analysis/0"><code·class="inline">analysis()</code></a>,·the·module·name·needs·to·be·in·a |
| 1554 | list.·For·example,·to·analyze·a·module·named·<code·class="inline">calls</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 1554 | list.·For·example,·to·analyze·a·module·named·<code·class="inline">calls</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="7328636639-1">(</span><span·class="p"·data-group-id="7328636639-2">[</span><span·class="ss">calls</span><span·class="p"·data-group-id="7328636639-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">function</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·bddf5be5a7691957898000754e53c2863d50aaeaf518eb34a702a5df03d61d59·...·]-1">)</span><span·class="p">.</span></code></pre></section> |
| 1555 | ··</section> | 1555 | ··</section> |
| 1556 | </section> | 1556 | </section> |
| 1557 | <section·class="detail"·id="analyse/3"> | 1557 | <section·class="detail"·id="analyse/3"> |
| 1558 | ··<div·class="detail-header"> | 1558 | ··<div·class="detail-header"> |
| 1559 | ····<a·href="#analyse/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1559 | ····<a·href="#analyse/3"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1560 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1560 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 1650, 15 lines modified | Offset 1650, 15 lines modified | ||
| 1650 | ······</div> | 1650 | ······</div> |
| 1651 | <p>If·<code·class="inline">Arg</code>·is·a·list·of·<a·href="#t:analyse_option/0"><code·class="inline">analyse_option()</code></a> | 1651 | <p>If·<code·class="inline">Arg</code>·is·a·list·of·<a·href="#t:analyse_option/0"><code·class="inline">analyse_option()</code></a> |
| 1652 | options,·this·call·is·equivalent·to·<a·href="#analyse_to_file/2"><code·class="inline">analyse_to_file('_',·Arg)</code></a>.</p><p>Otherwise·<code·class="inline">Arg</code>·is·assumed·to·be·a·module,·and·this·call·is·equivalent·to | 1652 | options,·this·call·is·equivalent·to·<a·href="#analyse_to_file/2"><code·class="inline">analyse_to_file('_',·Arg)</code></a>.</p><p>Otherwise·<code·class="inline">Arg</code>·is·assumed·to·be·a·module,·and·this·call·is·equivalent·to |
| 1653 | <a·href="#analyse_to_file/2"><code·class="inline">analyse_to_file(Arg,·[])</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·of·the·name·<code·class="inline">html</code>·(which·overlaps·with·an·option | 1653 | <a·href="#analyse_to_file/2"><code·class="inline">analyse_to_file(Arg,·[])</code></a>.</p><section·role="note"·class="admonition·info"><h4·class="admonition-title·info">Note</h4><p>To·analyze·a·module·of·the·name·<code·class="inline">html</code>·(which·overlaps·with·an·option |
| 1654 | in·<a·href="#t:analyse_option/0"><code·class="inline">analyse_option()</code></a>),·it·is·necessary·to | 1654 | in·<a·href="#t:analyse_option/0"><code·class="inline">analyse_option()</code></a>),·it·is·necessary·to |
| 1655 | use·<a·href="#analyse_to_file/2"><code·class="inline">cover:analyse_to_file/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse_to_file</span><span·class="p"·data-group-id=" | 1655 | use·<a·href="#analyse_to_file/2"><code·class="inline">cover:analyse_to_file/2</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse_to_file</span><span·class="p"·data-group-id="5000242171-1">(</span><span·class="p"·data-group-id="5000242171-2">[</span><span·class="ss">html</span><span·class="p"·data-group-id="5000242171-2">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="5000242171-3">[</span[·...·truncated·by·diffoscope;·len:·95,·SHA:·53524f8f020af74f3bff729e6ceac9bb9e5abe64adcede84f61734ce7700ac0a·...·]-1">)</span><span·class="p">.</span></code></pre></section> |
| 1656 | ··</section> | 1656 | ··</section> |
| 1657 | </section> | 1657 | </section> |
| 1658 | <section·class="detail"·id="analyse_to_file/2"> | 1658 | <section·class="detail"·id="analyse_to_file/2"> |
| 1659 | ··<div·class="detail-header"> | 1659 | ··<div·class="detail-header"> |
| 1660 | ····<a·href="#analyse_to_file/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> | 1660 | ····<a·href="#analyse_to_file/2"·class="detail-link"·data-no-tooltip·aria-label="Link·to·this·function"> |
| 1661 | ······<i·class="ri-link-m"·aria-hidden="true"></i> | 1661 | ······<i·class="ri-link-m"·aria-hidden="true"></i> |
| Offset 2583, 15 lines modified | Offset 2583, 15 lines modified | ||
| 2583 | ······<p·class="built-using"> | 2583 | ······<p·class="built-using"> |
| 2584 | ········Built·using | 2584 | ········Built·using |
| 2585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2585 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2586 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2587 | ······</p> | 2587 | ······</p> |
| 2588 | <p>Copyright·©·1996-202 | 2588 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2589 | ····</footer> | 2589 | ····</footer> |
| 2590 | ··</div> | 2590 | ··</div> |
| 2591 | </main> | 2591 | </main> |
| 2592 | </div> | 2592 | </div> |
| 2593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2593 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2594 | ··<script> | 2594 | ··<script> |
| 2595 | ··let·initialized·=·false; | 2595 | ··let·initialized·=·false; |
| Offset 142, 89 lines modified | Offset 142, 89 lines modified | ||
| 142 | </h2> | 142 | </h2> |
| 143 | <h3·id="example"·class="section-heading"> | 143 | <h3·id="example"·class="section-heading"> |
| 144 | ··<a·href="#example"·class="hover-link"> | 144 | ··<a·href="#example"·class="hover-link"> |
| 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 145 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 146 | ··</a> | 146 | ··</a> |
| 147 | ··<span·class="text">Example</span> | 147 | ··<span·class="text">Example</span> |
| 148 | </h3> | 148 | </h3> |
| 149 | <p>Assume·that·a·test·case·for·the·following·program·should·be·verified:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5 | 149 | <p>Assume·that·a·test·case·for·the·following·program·should·be·verified:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0546597730-1">(</span><span·class="ss">channel</span><span·class="p"·data-group-id="0546597730-1">)</span><span·class="p">.</span><span·class="w"> |
| 150 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="5 | 150 | </span><span·class="p">-</span><span·class="na">behaviour</span><span·class="p"·data-group-id="0546597730-2">(</span><span·class="ss">gen_server</span><span·class="p"·data-group-id="0546597730-2">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="w"> | 151 | </span><span·class="w"> |
| 152 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 152 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0546597730-3">(</span><span·class="p"·data-group-id="0546597730-4">[</span><span·class="ss">start_link</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="ss">stop</span><span·class="p">/</span><span·class="mi">0</sp[·...·truncated·by·diffoscope;·len:·97,·SHA:·cb475c61a90c08599f5a27390474e4f47af11ff2cd9c8a7b7ae89b7d09b6e43a·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 153 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0546597730-5">(</span><span·class="p"·data-group-id="0546597730-6">[</span><span·class="ss">alloc</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="ss">free</span><span·class="p">/</span><span·class="mi">1</span><s[·...·truncated·by·diffoscope;·len:·92,·SHA:·50da85b06b4c6bf6460c21d0ae1e8405efc3b82593664ee6e3df96aed283d4d5·...·]-5">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·client·interface</span><span·class="w"> |
| 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5 | 154 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0546597730-7">(</span><span·class="p"·data-group-id="0546597730-8">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</s[·...·truncated·by·diffoscope;·len:·204,·SHA:·ce66ad3b2c6aa2393ed8705ed8727d1b4e56e4d322224b4e9ee0bbf9b90629a6·...·]-7">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·callback·functions</span><span·class="w"> |
| 155 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 155 | </span><span·class="nf">start_link</span><span·class="p"·data-group-id="0546597730-9">(</span><span·class="p"·data-group-id="0546597730-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 156 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="5 | 156 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="0546597730-10">(</span><span·class="p"·data-group-id="0546597730-11">{</span><span·class="ss">local</span><span·class="p">,</span><span·class="ss">channel</span><span·class="p"·data-group-id="0546597730-11">}</span><span·class="p">,</span><span·class="w">·[·...·truncated·by·diffoscope;·len:·391,·SHA:·c331acda5448c5cffdc02dd611f9e5eed6c4a4898378f724c089d2c64a7ec675·...·]-10">)</span><span·class="p">.</span><span·class="w"> |
| 157 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="5 | 157 | </span><span·class="nf">stop</span><span·class="p"·data-group-id="0546597730-14">(</span><span·class="p"·data-group-id="0546597730-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5 | 158 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0546597730-15">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">stop</span><span·class="p"·data-group-id="0546597730-15">)</span><span·class="p">.</span><span·class="w"> |
| 159 | </span><span·class="c1">%%%-Client·interface·functions-------------------------------------------</span><span·class="w"> | 159 | </span><span·class="c1">%%%-Client·interface·functions-------------------------------------------</span><span·class="w"> |
| 160 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="5 | 160 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="0546597730-16">(</span><span·class="p"·data-group-id="0546597730-16">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 161 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5 | 161 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0546597730-17">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">alloc</span><span·class="p"·data-group-id="0546597730-17">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="nf">free</span><span·class="p"·data-group-id="5 | 162 | </span><span·class="nf">free</span><span·class="p"·data-group-id="0546597730-18">(</span><span·class="n">Channel</span><span·class="p"·data-group-id="0546597730-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 163 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="5 | 163 | ····</span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="0546597730-19">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="0546597730-20">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="n">Channel</span><span·class="p"·da[·...·truncated·by·diffoscope;·len:·77,·SHA:·e1708df182a6ae95acebea84fbf1d3e937329fd5ec6379481683162c82b5d74e·...·]-19">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="c1">%%%-gen_server·callback·functions----------------------------------------</span><span·class="w"> | 164 | </span><span·class="c1">%%%-gen_server·callback·functions----------------------------------------</span><span·class="w"> |
| 165 | </span><span·class="nf">init</span><span·class="p"·data-group-id="5 | 165 | </span><span·class="nf">init</span><span·class="p"·data-group-id="0546597730-21">(</span><span·class="p">_</span><span·class="n">Arg</span><span·class="p"·data-group-id="0546597730-21">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 166 | ····</span><span·class="p"·data-group-id="5 | 166 | ····</span><span·class="p"·data-group-id="0546597730-22">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="nf">channels</span><span·class="p"·data-group-id="0546597730-23">(</span><span·class="p"·data-group-id="0546597730-23">)</span><span·class="p"·data-group-id="0546597730-22">}</span><span·class="p">.</span><span·class="w"> |
| 167 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5 | 167 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="0546597730-24">(</span><span·class="ss">stop</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Client</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Channels</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·506c16af173b728f4f8d37353c570df1c01503c9ba2d35cf385a98d02e89b39f·...·]-24">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ····</span><span·class="p"·data-group-id="5 | 168 | ····</span><span·class="p"·data-group-id="0546597730-25">{</span><span·class="ss">stop</span><span·class="p">,</span><span·class="ss">normal</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-25">}</span><span·class="p">;</span><span·class="w"> |
| 169 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5 | 169 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="0546597730-26">(</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Client</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Channels</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·17,·SHA:·799bd0d2ce04f6b581ee1d16293b1e407f92428af57ce936e67132679d278b43·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 170 | ····</span><span·class="p"·data-group-id="5 | 170 | ····</span><span·class="p"·data-group-id="0546597730-27">{</span><span·class="n">Ch</span><span·class="p">,</span><span·class="n">Channels2</span><span·class="p"·data-group-id="0546597730-27">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">alloc</sp[·...·truncated·by·diffoscope;·len:·129,·SHA:·a9a78163c3cad21c561c4ae72a3102e1361c88e5badc31f493f61105c5e681fe·...·]-28">)</span><span·class="p">,</span><span·class="w"> |
| 171 | ····</span><span·class="p"·data-group-id="5 | 171 | ····</span><span·class="p"·data-group-id="0546597730-29">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="p"·data-group-id="0546597730-30">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Ch</span><span·class="p"·data-group-id="0546597730-30">}</sp[·...·truncated·by·diffoscope;·len:·100,·SHA:·7f76fea258558779efea33a2db651a8ad3d60deab1373c2332dccfd64b11b81a·...·]-29">}</span><span·class="p">;</span><span·class="w"> |
| 172 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="5 | 172 | </span><span·class="nf">handle_call</span><span·class="p"·data-group-id="0546597730-31">(</span><span·class="p"·data-group-id="0546597730-32">{</span><span·class="ss">free</span><span·class="p">,</span><span·class="n">Channel</span><span·class="p"·data-group-id="0546597730-32">}</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·178,·SHA:·ea1c4254f22e5e895ebd64c0a0e107619b4c48c56e1ad978d8997fbb7a1c5d8b·...·]-31">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 173 | ····</span><span·class="n">Channels2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="5 | 173 | ····</span><span·class="n">Channels2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">free</span><span·class="p"·data-group-id="0546597730-33">(</span><span·class="n">Channel</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-33">)</span><span·class="p">,</span><span·class="w"> |
| 174 | ····</span><span·class="p"·data-group-id="5 | 174 | ····</span><span·class="p"·data-group-id="0546597730-34">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Channels2</span><span·class="p"·data-group-id="0546597730-34">}</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="5 | 175 | </span><span·class="nf">terminate</span><span·class="p"·data-group-id="0546597730-35">(</span><span·class="p">_</span><span·class="n">Reason</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-35">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> | 176 | ····</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 177 | </span><span·class="c1">%%%-Internal·functions---------------------------------------------------</span><span·class="w"> | 177 | </span><span·class="c1">%%%-Internal·functions---------------------------------------------------</span><span·class="w"> |
| 178 | </span><span·class="nf">channels</span><span·class="p"·data-group-id="5 | 178 | </span><span·class="nf">channels</span><span·class="p"·data-group-id="0546597730-36">(</span><span·class="p"·data-group-id="0546597730-36">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ····</span><span·class="p"·data-group-id="5 | 179 | ····</span><span·class="p"·data-group-id="0546597730-37">[</span><span·class="ss">ch1</span><span·class="p">,</span><span·class="ss">ch2</span><span·class="p">,</span><span·class="ss">ch3</span><span·class="p"·data-group-id="0546597730-37">]</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="5 | 180 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="0546597730-38">(</span><span·class="p"·data-group-id="0546597730-39">[</span><span·class="n">Channel</span><span·class="p">|</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-39">]</span><span·class="p"·data-group-id="054659773[·...·truncated·by·diffoscope;·len:·1,·SHA:·5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9·...·]-38">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="p"·data-group-id="5 | 181 | ····</span><span·class="p"·data-group-id="0546597730-40">{</span><span·class="n">Channel</span><span·class="p">,</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-40">}</span><span·class="p">;</span><span·class="w"> |
| 182 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="5 | 182 | </span><span·class="nf">alloc</span><span·class="p"·data-group-id="0546597730-41">(</span><span·class="p"·data-group-id="0546597730-42">[</span><span·class="p"·data-group-id="0546597730-42">]</span><span·class="p"·data-group-id="0546597730-41">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 183 | ····</span><span·class="ss">false</span><span·class="p">.</span><span·class="w"> | 183 | ····</span><span·class="ss">false</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="nf">free</span><span·class="p"·data-group-id="5 | 184 | </span><span·class="nf">free</span><span·class="p"·data-group-id="0546597730-43">(</span><span·class="n">Channel</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-43">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 185 | ····</span><span·class="p"·data-group-id="5 | 185 | ····</span><span·class="p"·data-group-id="0546597730-44">[</span><span·class="n">Channel</span><span·class="p">|</span><span·class="n">Channels</span><span·class="p"·data-group-id="0546597730-44">]</span><span·class="p">.</span></code></pre><p>The·test·case·is·implemented·as·follows:</p><pre><code[·...·truncated·by·diffoscope;·len:·214,·SHA:·6c7f402b18e11bdcc74f5439ed3b8652b00b4e7447e414ef074973c589e8c789·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 186 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 186 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="4675776919-2">(</span><span·class="p"·data-group-id="4675776919-3">[</span><span·class="ss">s</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="4675776919-3">]</span><span·class="p"·data-group-id="4675776919-2">)</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="nf">s</span><span·class="p"·data-group-id=" | 187 | </span><span·class="nf">s</span><span·class="p"·data-group-id="4675776919-4">(</span><span·class="p"·data-group-id="4675776919-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 188 | ····</span><span·class="p"·data-group-id=" | 188 | ····</span><span·class="p"·data-group-id="4675776919-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Pid</span><span·class="p"·data-group-id="4675776919-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><s[·...·truncated·by·diffoscope;·len:·150,·SHA:·6ab3fcea347abe6159442743fca33ad4e7fdfeb13b84e064fe397e9395fa9382·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 189 | ····</span><span·class="p"·data-group-id=" | 189 | ····</span><span·class="p"·data-group-id="4675776919-7">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">Ch1</span><span·class="p"·data-group-id="4675776919-7">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><s[·...·truncated·by·diffoscope;·len:·145,·SHA:·a6ea1723a8b98b854e51a7e02ca424d8629d36e748d24c31f74696aeb53477eb·...·]-8">)</span><span·class="p">,</span><span·class="w"> |
| 190 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><span·class="p">:</span><span·class="nf">free</span><span·class="p"·data-group-id=" | 190 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><span·class="p">:</span><span·class="nf">free</span><span·class="p"·data-group-id="4675776919-9">(</span><span·class="n">Ch1</span><span·class="p"·data-group-id="4675776919-9">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">channel</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4675776919-10">(</span><span·class="p"·data-group-id="4675776919-10">)</span><span·class="p">.</span></code></pre><h3·id="preparation"·class="section-heading"> |
| 192 | ··<a·href="#preparation"·class="hover-link"> | 192 | ··<a·href="#preparation"·class="hover-link"> |
| 193 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 193 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 194 | ··</a> | 194 | ··</a> |
| 195 | ··<span·class="text">Preparation</span> | 195 | ··<span·class="text">Preparation</span> |
| 196 | </h3> | 196 | </h3> |
| 197 | <p>First·of·all,·Cover·must·be·started.·This·spawns·a·process·which·owns·the·Cover | 197 | <p>First·of·all,·Cover·must·be·started.·This·spawns·a·process·which·owns·the·Cover |
| 198 | database·where·all·coverage·data·will·be·stored.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 198 | database·where·all·coverage·data·will·be·stored.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="1173432251-1">(</span><span·class="p"·data-group-id="1173432251-1">)</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="p"·data-group-id=" | 199 | </span><span·class="p"·data-group-id="1173432251-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.90</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="1173432251-2">}</span></code></pre><p>To·include·other·nodes·in·the·coverage·analysis,·use |
| 200 | <a·href="cover.html#start/1"><code·class="inline">cover:start/1</code></a>.·All·cover-compiled·modules·will·then·be·loaded·on·all | 200 | <a·href="cover.html#start/1"><code·class="inline">cover:start/1</code></a>.·All·cover-compiled·modules·will·then·be·loaded·on·all |
| 201 | nodes,·and·data·from·all·nodes·will·be·summed·up·when·analysing.·For | 201 | nodes,·and·data·from·all·nodes·will·be·summed·up·when·analysing.·For |
| 202 | simplicity·this·example·only·involves·the·current·node.</p><p>Before·any·analysis·can·take·place,·the·involved·modules·must·be | 202 | simplicity·this·example·only·involves·the·current·node.</p><p>Before·any·analysis·can·take·place,·the·involved·modules·must·be |
| 203 | <em>cover-compiled</em>.·This·means·that·some·extra·information·is·added·to | 203 | <em>cover-compiled</em>.·This·means·that·some·extra·information·is·added·to |
| 204 | the·module·before·beging·compiled·into·a·binary·and | 204 | the·module·before·beging·compiled·into·a·binary·and |
| 205 | <a·href="cover_chapter.html#loading">loaded</a>.··The·source·file·of·the·module·is | 205 | <a·href="cover_chapter.html#loading">loaded</a>.··The·source·file·of·the·module·is |
| 206 | not·affected·and·no·<code·class="inline">.beam</code>·file·is·created.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">compile_module</span><span·class="p"·data-group-id=" | 206 | not·affected·and·no·<code·class="inline">.beam</code>·file·is·created.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">compile_module</span><span·class="p"·data-group-id="1773550298-1">(</span><span·class="ss">channel</span><span·class="p"·data-group-id="1773550298-1">)</span><span·class="p">.</span><span·class="w"> |
| 207 | </span><span·class="p"·data-group-id=" | 207 | </span><span·class="p"·data-group-id="1773550298-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">channel</span><span·class="p"·data-group-id="1773550298-2">}</span></code></pre><p>Each·time·a·function·in·the·cover-compiled·module·<code·class="inline">channel</code>·is·called, |
| 208 | information·about·the·call·will·be·added·to·the·Cover·database.·Run·the·test | 208 | information·about·the·call·will·be·added·to·the·Cover·database.·Run·the·test |
| 209 | case:</p><pre><code·class="text">3>·test:s(). | 209 | case:</p><pre><code·class="text">3>·test:s(). |
| 210 | ok</code></pre><p>Cover·analysis·is·performed·by·examining·the·contents·of·the·Cover·database.·The | 210 | ok</code></pre><p>Cover·analysis·is·performed·by·examining·the·contents·of·the·Cover·database.·The |
| 211 | output·is·determined·by·two·parameters,·<code·class="inline">Level</code>·and·<code·class="inline">Analysis</code>.·<code·class="inline">Analysis</code>·is | 211 | output·is·determined·by·two·parameters,·<code·class="inline">Level</code>·and·<code·class="inline">Analysis</code>.·<code·class="inline">Analysis</code>·is |
| 212 | either·<code·class="inline">coverage</code>·or·<code·class="inline">calls</code>·and·determines·the·type·of·the·analysis.·<code·class="inline">Level</code>·is | 212 | either·<code·class="inline">coverage</code>·or·<code·class="inline">calls</code>·and·determines·the·type·of·the·analysis.·<code·class="inline">Level</code>·is |
| 213 | either·<code·class="inline">module</code>,·<code·class="inline">function</code>,·<code·class="inline">clause</code>,·or·<code·class="inline">line</code>·and·determines·the·level·of·the | 213 | either·<code·class="inline">module</code>,·<code·class="inline">function</code>,·<code·class="inline">clause</code>,·or·<code·class="inline">line</code>·and·determines·the·level·of·the |
| 214 | analysis.</p><h3·id="coverage-analysis"·class="section-heading"> | 214 | analysis.</p><h3·id="coverage-analysis"·class="section-heading"> |
| Offset 234, 200 lines modified | Offset 234, 200 lines modified | ||
| 234 | ··<span·class="text">Coverage·Analysis</span> | 234 | ··<span·class="text">Coverage·Analysis</span> |
| 235 | </h3> | 235 | </h3> |
| 236 | <p>Analysis·of·type·<code·class="inline">coverage</code>·is·used·to·find·out·how·much·of·the·code·has·been | 236 | <p>Analysis·of·type·<code·class="inline">coverage</code>·is·used·to·find·out·how·much·of·the·code·has·been |
| 237 | executed·and·how·much·has·not·been·executed.·Coverage·is·represented·by·a·tuple | 237 | executed·and·how·much·has·not·been·executed.·Coverage·is·represented·by·a·tuple |
| 238 | <code·class="inline">{Cov,NotCov}</code>,·where·<code·class="inline">Cov</code>·is·the·number·of·executable·lines·that·have·been | 238 | <code·class="inline">{Cov,NotCov}</code>,·where·<code·class="inline">Cov</code>·is·the·number·of·executable·lines·that·have·been |
| 239 | executed·at·least·once·and·<code·class="inline">NotCov</code>·is·the·number·of·executable·lines·that·have | 239 | executed·at·least·once·and·<code·class="inline">NotCov</code>·is·the·number·of·executable·lines·that·have |
| 240 | not·been·executed.</p><p>If·the·analysis·is·made·on·module·level,·the·result·is·given·for·the·entire | 240 | not·been·executed.</p><p>If·the·analysis·is·made·on·module·level,·the·result·is·given·for·the·entire |
| 241 | module·as·a·tuple·<code·class="inline">{Module,{Cov,NotCov}}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 241 | module·as·a·tuple·<code·class="inline">{Module,{Cov,NotCov}}</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="6453162572-1">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coverage</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">module</span><span·class="p"·data-group-id="6453162572-1">)</span><span·class="p">.</span><span·class="w"> |
| 242 | </span><span·class="p"·data-group-id=" | 242 | </span><span·class="p"·data-group-id="6453162572-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="6453162572-3">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="p"·data-group-id="6453162572-4">{</span><span·class="mi">14</sp[·...·truncated·by·diffoscope;·len:·199,·SHA:·0e3d4202c6c29afb5937ce7ce73d46831d72ff5460e1bbef0d8729e8e5d4695d·...·]-2">}</span></code></pre><p>For·<code·class="inline">channel</code>,·the·result·shows·that·14·lines·in·the·module·are·covered·but·one |
| 243 | line·is·not·covered.</p><p>If·the·analysis·is·made·on·function·level,·the·result·is·given·as·a·list·of | 243 | line·is·not·covered.</p><p>If·the·analysis·is·made·on·function·level,·the·result·is·given·as·a·list·of |
| 244 | tuples·<code·class="inline">{Function,{Cov,NotCov}}</code>,·one·for·each·function·in·the·module.·A | 244 | tuples·<code·class="inline">{Function,{Cov,NotCov}}</code>,·one·for·each·function·in·the·module.·A |
| 245 | function·is·specified·by·its·module·name,·function·name·and·arity:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3 | 245 | function·is·specified·by·its·module·name,·function·name·and·arity:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">5>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="7391286274-1">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coverage</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">function</span><span·class="p"·data-group-id="7391286274-1">)</span><span·class="p">.</span><span·class="w"> |
| 246 | </span><span·class="p"·data-group-id="3 | 246 | </span><span·class="p"·data-group-id="7391286274-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="7391286274-3">[</span><span·class="p"·data-group-id="7391286274-4">{</span><span·class="p"·data-group-id="7391286274-5">{</span><span·class="ss">channel<[·...·truncated·by·diffoscope;·len:·411,·SHA:·93dc8e03e8b5ebc727d6fa40b3be08d85568bb8429d795fc752e2b3b53f53bc3·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 247 | ·····</span><span·class="p"·data-group-id="3 | 247 | ·····</span><span·class="p"·data-group-id="7391286274-7">{</span><span·class="p"·data-group-id="7391286274-8">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">stop</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="7391286274-8">}</s[·...·truncated·by·diffoscope;·len:·249,·SHA:·5e9c07a97260799ffd2ed2a734506b14571f3755957e64cb5a21f36c34fcd710·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 248 | ·····</span><span·class="p"·data-group-id="3 | 248 | ·····</span><span·class="p"·data-group-id="7391286274-10">{</span><span·class="p"·data-group-id="7391286274-11">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="7391286274-11">[·...·truncated·by·diffoscope;·len:·255,·SHA:·9bb8816eeb2746ae18e49c843009de1e92c3211d458ba8be68d28a2c7d5a5adc·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 249 | ·····</span><span·class="p"·data-group-id="3 | 249 | ·····</span><span·class="p"·data-group-id="7391286274-13">{</span><span·class="p"·data-group-id="7391286274-14">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">free</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7391286274-14">}[·...·truncated·by·diffoscope;·len:·254,·SHA:·7880496d3d0f23d4d20707d14f3e5ce616979ba4e3f87f527392aaf3f34cf21e·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ·····</span><span·class="p"·data-group-id="3 | 250 | ·····</span><span·class="p"·data-group-id="7391286274-16">{</span><span·class="p"·data-group-id="7391286274-17">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">init</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7391286274-17">}[·...·truncated·by·diffoscope;·len:·254,·SHA:·aa7c7763e71b8ad0d849ba33820673c4e82a6a0c74855ce55cfcc8ef75d04f8c·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 251 | ·····</span><span·class="p"·data-group-id="3 | 251 | ·····</span><span·class="p"·data-group-id="7391286274-19">{</span><span·class="p"·data-group-id="7391286274-20">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">handle_call</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="739128627[·...·truncated·by·diffoscope;·len:·261,·SHA:·863615748aa910c085c6231faa34a255c443975f2339716e0b0270062efa46cf·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 252 | ·····</span><span·class="p"·data-group-id="3 | 252 | ·····</span><span·class="p"·data-group-id="7391286274-22">{</span><span·class="p"·data-group-id="7391286274-23">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">terminate</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7391286274-[·...·truncated·by·diffoscope;·len:·259,·SHA:·81f7f03b447d20b9fde8dcb74527a2ff2fce09f1d8be6ad7d2ce9df3277e32c0·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 253 | ·····</span><span·class="p"·data-group-id="3 | 253 | ·····</span><span·class="p"·data-group-id="7391286274-25">{</span><span·class="p"·data-group-id="7391286274-26">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">channels</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="7391286274-2[·...·truncated·by·diffoscope;·len:·258,·SHA:·10ead43ecbcb9bcd6b302b27960001126d7b203e41b3420d8dc4ae9932841146·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ·····</span><span·class="p"·data-group-id="3 | 254 | ·····</span><span·class="p"·data-group-id="7391286274-28">{</span><span·class="p"·data-group-id="7391286274-29">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7391286274-29">[·...·truncated·by·diffoscope;·len:·255,·SHA:·f60930807a33b62c9d95db3e2c0d925f346a18d41ba9f4c0f8df4073ab9e420d·...·]-28">}</span><span·class="p">,</span><span·class="w"> |
| 255 | ·····</span><span·class="p"·data-group-id="3 | 255 | ·····</span><span·class="p"·data-group-id="7391286274-31">{</span><span·class="p"·data-group-id="7391286274-32">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">free</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7391286274-32">}[·...·truncated·by·diffoscope;·len:·361,·SHA:·8d1a488c250e50533c9a4221b218bf069e2a658434190989c0a11322ca51b227·...·]-2">}</span></code></pre><p>For·<code·class="inline">channel</code>,·the·result·shows·that·the·uncovered·line·is·in·the·function |
| 256 | <code·class="inline">channel:alloc/1</code>.</p><p>If·the·analysis·is·made·on·clause·level,·the·result·is·given·as·a·list·of·tuples | 256 | <code·class="inline">channel:alloc/1</code>.</p><p>If·the·analysis·is·made·on·clause·level,·the·result·is·given·as·a·list·of·tuples |
| 257 | <code·class="inline">{Clause,{Cov,NotCov}}</code>,·one·for·each·function·clause·in·the·module.·A·clause·is | 257 | <code·class="inline">{Clause,{Cov,NotCov}}</code>,·one·for·each·function·clause·in·the·module.·A·clause·is |
| 258 | specified·by·its·module·name,·function·name,·arity·and·position·within·the | 258 | specified·by·its·module·name,·function·name,·arity·and·position·within·the |
| 259 | function·definition:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 259 | function·definition:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">6>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="0030019777-1">(</span><span·class="ss">channel</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coverage</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">clause</span><span·class="p"·data-group-id="0030019777-1">)</span><span·class="p">.</span><span·class="w"> |
| 260 | </span><span·class="p"·data-group-id=" | 260 | </span><span·class="p"·data-group-id="0030019777-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="0030019777-3">[</span><span·class="p"·data-group-id="0030019777-4">{</span><span·class="p"·data-group-id="0030019777-5">{</span><span·class="ss">channel<[·...·truncated·by·diffoscope;·len:·460,·SHA:·5d9db6357ae4197c3201047831c63d8fe044f5605707cd06626cee1633ebbdee·...·]-4">}</span><span·class="p">,</span><span·class="w"> |
| 261 | ·····</span><span·class="p"·data-group-id=" | 261 | ·····</span><span·class="p"·data-group-id="0030019777-7">{</span><span·class="p"·data-group-id="0030019777-8">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">stop</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span>[·...·truncated·by·diffoscope;·len:·298,·SHA:·3f0a6d668ba1fdfc7854bc9c54e46ef1ef35adf9750ae8ed84fa5442f84e2355·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 262 | ·····</span><span·class="p"·data-group-id=" | 262 | ·····</span><span·class="p"·data-group-id="0030019777-10">{</span><span·class="p"·data-group-id="0030019777-11">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</sp[·...·truncated·by·diffoscope;·len:·304,·SHA:·79a38b228cd5eb1cd9018549040fc1804e0a2dedce2b73c29966e9f3ac096dca·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 263 | ·····</span><span·class="p"·data-group-id=" | 263 | ·····</span><span·class="p"·data-group-id="0030019777-13">{</span><span·class="p"·data-group-id="0030019777-14">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">free</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">1</spa[·...·truncated·by·diffoscope;·len:·303,·SHA:·1d528a36f3106c9ac830757e16f7324f77d762a568856d3535ffd620c3604f04·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 264 | ·····</span><span·class="p"·data-group-id=" | 264 | ·····</span><span·class="p"·data-group-id="0030019777-16">{</span><span·class="p"·data-group-id="0030019777-17">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">init</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">1</spa[·...·truncated·by·diffoscope;·len:·303,·SHA:·253b180e8463a6befb7fb98d90fea1cc2cf86f8ef35fdc035abfdb0f37d834e7·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ·····</span><span·class="p"·data-group-id=" | 265 | ·····</span><span·class="p"·data-group-id="0030019777-19">{</span><span·class="p"·data-group-id="0030019777-20">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">handle_call</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·310,·SHA:·81f3b184f50a4885de8fe52a1614ea83a6e916793fe0f0c1fbf570705f09b170·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 266 | ·····</span><span·class="p"·data-group-id=" | 266 | ·····</span><span·class="p"·data-group-id="0030019777-22">{</span><span·class="p"·data-group-id="0030019777-23">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">handle_call</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·310,·SHA:·629d34230ec25f845488fbb9668c72bd6919c8ba19a3537d996e763ad299a647·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 267 | ·····</span><span·class="p"·data-group-id=" | 267 | ·····</span><span·class="p"·data-group-id="0030019777-25">{</span><span·class="p"·data-group-id="0030019777-26">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">handle_call</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·310,·SHA:·056edb2f828671eaa534bbb12474e0a8b3a3a47168d6a2204e165c466c1d3201·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 268 | ·····</span><span·class="p"·data-group-id=" | 268 | ·····</span><span·class="p"·data-group-id="0030019777-28">{</span><span·class="p"·data-group-id="0030019777-29">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">terminate</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="mi">1[·...·truncated·by·diffoscope;·len:·308,·SHA:·87daaeb63bf0a2de3a95cf43539971df247b7c1fe1b74bd2d24784af0ad1b1e9·...·]-28">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ·····</span><span·class="p"·data-group-id=" | 269 | ·····</span><span·class="p"·data-group-id="0030019777-31">{</span><span·class="p"·data-group-id="0030019777-32">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">channels</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1<[·...·truncated·by·diffoscope;·len:·307,·SHA:·e22d4391d20fcd13ab2d11cd5b2b395ca95c7b7ce36876e3f380672225235679·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 270 | ·····</span><span·class="p"·data-group-id=" | 270 | ·····</span><span·class="p"·data-group-id="0030019777-34">{</span><span·class="p"·data-group-id="0030019777-35">{</span><span·class="ss">channel</span><span·class="p">,</span><span·class="ss">alloc</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">1</sp[·...·truncated·by·diffoscope;·len:·304,·SHA:·3683866ab0f6adcb1cc886b255f9d979dcb6bc05cab7ae9420e35c3336d9ebf8·...·]-34">}</span><span·class="p">,</span><span·class="w"> |
| Max diff block lines reached; 106741/177500 bytes (60.14%) of diff not shown. | |||
| Offset 574, 15 lines modified | Offset 574, 15 lines modified | ||
| 574 | ······<div·class="specs"> | 574 | ······<div·class="specs"> |
| 575 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·analyse(Mod,·Limit)·->·ModAnalysis·::·<a·href="#t:mod_analysis/0">mod_analysis</a>() | 575 | ··········<pre·translate="no"><span·class="attribute">-spec</span>·analyse(Mod,·Limit)·->·ModAnalysis·::·<a·href="#t:mod_analysis/0">mod_analysis</a>() |
| 576 | ·················when·Mod·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>(),·Limit·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> | 576 | ·················when·Mod·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:module/0">module</a>(),·Limit·::·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#t:non_neg_integer/0">non_neg_integer</a>().</pre> |
| 577 | ······</div> | 577 | ······</div> |
| 578 | <p>Collects·and·analyses·all·call·counters·for·module·<code·class="inline">Module</code>.</p><p>This·function·returns:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 578 | <p>Collects·and·analyses·all·call·counters·for·module·<code·class="inline">Module</code>.</p><p>This·function·returns:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7925234998-1">{</span><span·class="n">Module</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ModuleCount</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FuncAnalysisList</span><span·class="p"·data-group-id="79252[·...·truncated·by·diffoscope;·len:·651,·SHA:·8efa71fe66ee7114c2e07fd6ade0c1e1aa15ad92f937b6f3bd878a23025b4d8d·...·]-1">}</span></code></pre><p>If·call·counters·are·still·running·while·<code·class="inline">analyse/0,1,2</code>·is·executing,·the·result |
| 579 | could·be·inconsistent.·This·happens·if·the·process·executing·<code·class="inline">analyse/0,1,2</code> | 579 | could·be·inconsistent.·This·happens·if·the·process·executing·<code·class="inline">analyse/0,1,2</code> |
| 580 | is·scheduled·out·so·some·other·process·can·increment·the·counters·that·are | 580 | is·scheduled·out·so·some·other·process·can·increment·the·counters·that·are |
| 581 | being·analysed.·Calling·<a·href="#pause/0"><code·class="inline">pause()</code></a>·before·analysing·takes·care·of | 581 | being·analysed.·Calling·<a·href="#pause/0"><code·class="inline">pause()</code></a>·before·analysing·takes·care·of |
| 582 | that·problem.</p><p>All·functions·with·a·<code·class="inline">FuncCallCount</code>·lower·than·<code·class="inline">Limit</code>·are·excluded·from | 582 | that·problem.</p><p>All·functions·with·a·<code·class="inline">FuncCallCount</code>·lower·than·<code·class="inline">Limit</code>·are·excluded·from |
| 583 | <code·class="inline">FuncAnalysisList</code>.·They·are·still·included·in·<code·class="inline">ModCallCount</code>,·though.</p> | 583 | <code·class="inline">FuncAnalysisList</code>.·They·are·still·included·in·<code·class="inline">ModCallCount</code>,·though.</p> |
| 584 | ··</section> | 584 | ··</section> |
| 585 | </section> | 585 | </section> |
| Offset 1063, 15 lines modified | Offset 1063, 15 lines modified | ||
| 1063 | ······<p·class="built-using"> | 1063 | ······<p·class="built-using"> |
| 1064 | ········Built·using | 1064 | ········Built·using |
| 1065 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1065 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1066 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1066 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1067 | ······</p> | 1067 | ······</p> |
| 1068 | <p>Copyright·©·1996-202 | 1068 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1069 | ····</footer> | 1069 | ····</footer> |
| 1070 | ··</div> | 1070 | ··</div> |
| 1071 | </main> | 1071 | </main> |
| 1072 | </div> | 1072 | </div> |
| 1073 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1073 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1074 | ··<script> | 1074 | ··<script> |
| 1075 | ··let·initialized·=·false; | 1075 | ··let·initialized·=·false; |
| Offset 152, 130 lines modified | Offset 152, 130 lines modified | ||
| 152 | no·trace·message·has·to·be·generated.·Some·measurements·indicates·performance | 152 | no·trace·message·has·to·be·generated.·Some·measurements·indicates·performance |
| 153 | degradations·in·the·vicinity·of·10·percent.</p><p>The·following·sections·show·some·examples·of·profiling·with·<a·href="cprof.html"><code·class="inline">cprof</code></a>.</p><h2·id="example-background-work"·class="section-heading"> | 153 | degradations·in·the·vicinity·of·10·percent.</p><p>The·following·sections·show·some·examples·of·profiling·with·<a·href="cprof.html"><code·class="inline">cprof</code></a>.</p><h2·id="example-background-work"·class="section-heading"> |
| 154 | ··<a·href="#example-background-work"·class="hover-link"> | 154 | ··<a·href="#example-background-work"·class="hover-link"> |
| 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 155 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 156 | ··</a> | 156 | ··</a> |
| 157 | ··<span·class="text">Example:·Background·work</span> | 157 | ··<span·class="text">Example:·Background·work</span> |
| 158 | </h2> | 158 | </h2> |
| 159 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="4 | 159 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="4578783674-1">(</span><span·class="p"·data-group-id="4578783674-1">)</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">pause</span><span·class="p"·data-group-id="4578783674-2">(</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·1539d4a26e04ddbefffca9c2e9ff177faebaa11f6b14181e2cd230331efc6f88·...·]-2">)</span><span·class="p">.</span><span·class="w">·</span><span·class="c1">%·Stop·counters·just·after·start</span><span·class="w"> |
| 160 | </span><span·class="mi">8492</span><span·class="gp·unselectable"> | 160 | </span><span·class="mi">8492</span><span·class="gp·unselectable"> |
| 161 | 2>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="4 | 161 | 2>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="4578783674-3">(</span><span·class="p"·data-group-id="4578783674-3">)</span><span·class="p">.</span><span·class="w"> |
| 162 | </span><span·class="p"·data-group-id="4 | 162 | </span><span·class="p"·data-group-id="4578783674-4">{</span><span·class="mi">539</span><span·class="p">,</span><span·class="w"> |
| 163 | ·</span><span·class="p"·data-group-id="4 | 163 | ·</span><span·class="p"·data-group-id="4578783674-5">[</span><span·class="p"·data-group-id="4578783674-6">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="mi">155</span><span·class="p">,</span><span·class="w"> |
| 164 | ·········</span><span·class="p"·data-group-id="4 | 164 | ·········</span><span·class="p"·data-group-id="4578783674-7">[</span><span·class="p"·data-group-id="4578783674-8">{</span><span·class="p"·data-group-id="4578783674-9">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">prep_check</span><span·class="p">,</span><span·class="mi">1[·...·truncated·by·diffoscope;·len:·151,·SHA:·5829b92a706cc89d68736a0f0b489bceadb58a0e8b71c5dbdabfd6f4a6cc5c83·...·]-8">}</span><span·class="p">,</span><span·class="w"> |
| 165 | ··········</span><span·class="p"·data-group-id="4 | 165 | ··········</span><span·class="p"·data-group-id="4578783674-10">{</span><span·class="p"·data-group-id="4578783674-11">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">used_records</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4578783674-[·...·truncated·by·diffoscope;·len:·103,·SHA:·ffcd3993cbde0c5266bb4d0d0bc6abcb0fdc82ab438c05ca0d3d19ee9b1f7346·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 166 | ··········</span><span·class="p"·data-group-id="4 | 166 | ··········</span><span·class="p"·data-group-id="4578783674-12">{</span><span·class="p"·data-group-id="4578783674-13">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">used_records</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4578783674-[·...·truncated·by·diffoscope;·len:·103,·SHA:·55ed77e01405ae451fe0cd033443c77846e8f2c77ee9a5120f9725af85ff8338·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 167 | ··········</span><span·class="p"·data-group-id="4 | 167 | ··········</span><span·class="p"·data-group-id="4578783674-14">{</span><span·class="p"·data-group-id="4578783674-15">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">used_record_defs</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4578783[·...·truncated·by·diffoscope;·len:·106,·SHA:·ede2df1d71a2be1ddf5455a2e7de1c4a5f61fd73a20fe3afe64099498eeeceb9·...·]-14">}</span><span·class="p">,</span><span·class="w"> |
| 168 | ··········</span><span·class="p"·data-group-id="4 | 168 | ··········</span><span·class="p"·data-group-id="4578783674-16">{</span><span·class="p"·data-group-id="4578783674-17">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">record_defs</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4578783674-1[·...·truncated·by·diffoscope;·len:·101,·SHA:·f57bbeaa0eaa697bcc1c7cd1ef43067b98da7820400183928b87edcaf1b33fb6·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 169 | ··········</span><span·class="p"·data-group-id="4 | 169 | ··········</span><span·class="p"·data-group-id="4578783674-18">{</span><span·class="p"·data-group-id="4578783674-19">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">record_bindings</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="45787836[·...·truncated·by·diffoscope;·len:·105,·SHA:·d2b662c7039ef0aad56ad583b5233a689e84f74b75f3c0595f86c456c9c71d7a·...·]-18">}</span><span·class="p">,</span><span·class="w"> |
| 170 | ··········</span><span·class="p"·data-group-id="4 | 170 | ··········</span><span·class="p"·data-group-id="4578783674-20">{</span><span·class="p"·data-group-id="4578783674-21">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">exprs</span><span·class="p">,</span><span·class="mi">7</span><span·class="p"·data-group-id="4578783674-21">}</[·...·truncated·by·diffoscope;·len:·95,·SHA:·5836b14ec5e45b1a94056c20fa9aeb957dc5c0e4d60e0161816f5c89a671838d·...·]-20">}</span><span·class="p">,</span><span·class="w"> |
| 171 | ··········</span><span·class="p"·data-group-id="4 | 171 | ··········</span><span·class="p"·data-group-id="4578783674-22">{</span><span·class="p"·data-group-id="4578783674-23">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">expr</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="4578783674-23">}</s[·...·truncated·by·diffoscope;·len:·94,·SHA:·07bac0dc288346ba242151efd15602fc2bdb32c00892debb3f8db8fbd3971cdc·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 172 | ··········</span><span·class="p"·data-group-id="4 | 172 | ··········</span><span·class="p"·data-group-id="4578783674-24">{</span><span·class="p"·data-group-id="4578783674-25">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">expand_records</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="457878367[·...·truncated·by·diffoscope;·len:·104,·SHA:·81ed231dda3b4b1d1dd720e75833c0d457841799348765a1df98c4edf8fa562c·...·]-24">}</span><span·class="p">,</span><span·class="w"> |
| 173 | ··········</span><span·class="p"·data-group-id="4 | 173 | ··········</span><span·class="p"·data-group-id="4578783674-26">{</span><span·class="p"·data-group-id="4578783674-27">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">check_command</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4578783674[·...·truncated·by·diffoscope;·len:·103,·SHA:·3553da3c812d16bd8f2d20deb46a8f8f4ec6323c4c1d88a561bda1591e13692b·...·]-26">}</span><span·class="p">,</span><span·class="w"> |
| 174 | ··········</span><span·class="p"·data-group-id="4 | 174 | ··········</span><span·class="p"·data-group-id="4578783674-28">{</span><span·class="p"·data-group-id="4578783674-29">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">apply_fun</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4578783674-29"[·...·truncated·by·diffoscope;·len:·99,·SHA:·672c95a04329a05bbbc2963146a8041d67ec8c09489fee97dbb10eb9361ca187·...·]-28">}</span><span·class="p">,</span><span·class="w"> |
| 175 | ··········</span><span·class="p"·data-group-id="4 | 175 | ··········</span><span·class="p"·data-group-id="4578783674-30">{</span><span·class="p"·data-group-id="4578783674-31">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">'-exprs/7-lc$^0/1-0-'</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·119,·SHA:·82bb6f13e4c5030060c6576bf01353ae3816df89b67a1d54d5e3c2e95b71ec6a·...·]-30">}</span><span·class="p">,</span><span·class="w"> |
| 176 | ··········</span><span·class="p"·data-group-id="4 | 176 | ··········</span><span·class="p"·data-group-id="4578783674-32">{</span><span·class="p"·data-group-id="4578783674-33">{</span><span·class="ss">shell</span><span·class="p">,</span><span·class="ss">'-eval_loop/3-fun-0-'</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·226,·SHA:·56fe2552d2206aa932ad66acc741fc30ffe3a41840922cef038d5ded36a9655d·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 177 | ··</span><span·class="c1">%%·Information·about·many·modules·omitted.</span><span·class="w"> | 177 | ··</span><span·class="c1">%%·Information·about·many·modules·omitted.</span><span·class="w"> |
| 178 | ·····················</span><span·class="p">.</span><span·class="w"> | 178 | ·····················</span><span·class="p">.</span><span·class="w"> |
| 179 | ·····················</span><span·class="p">.</span><span·class="w"> | 179 | ·····················</span><span·class="p">.</span><span·class="w"> |
| 180 | ·····················</span><span·class="p">.</span><span·class="w"> | 180 | ·····················</span><span·class="p">.</span><span·class="w"> |
| 181 | ··</span><span·class="c1">%%·Here·is·the·last·part.</span><span·class="w"> | 181 | ··</span><span·class="c1">%%·Here·is·the·last·part.</span><span·class="w"> |
| 182 | ··</span><span·class="p"·data-group-id="4 | 182 | ··</span><span·class="p"·data-group-id="4578783674-34">{</span><span·class="ss">erts_internal</span><span·class="p">,</span><span·class="mi">2</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-35">[</span><span·class="p"·data-group-id="4578783674-36">{</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·437,·SHA:·e147af4ec8c3b345268d1046d69f7771d40701009ac05b0c907e24b78025f39e·...·]-34">}</span><span·class="p">,</span><span·class="w"> |
| 183 | ··</span><span·class="p"·data-group-id="4681754371-38">{</span><span·class="ss">otp_internal</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4681754371-39">[</span><span·class="p"·data-group-id="4681754371-40">{</span><span·class="p"·data-group-id="4681754371-41">{</span><span·class="ss">otp_internal</span><span·class="p">,</span><span·class="ss">obsolete</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4681754371-41">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4681754371-40">}</span><span·class="p"·data-group-id="4681754371-39">]</span><span·class="p"·data-group-id="4681754371-38">}</span><span·class="p">,</span><span·class="w"> | ||
| 184 | ··</span><span·class="p"·data-group-id="4681754371-42">{</span><span·class="ss">maps</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4681754371-43">[</span><span·class="p"·data-group-id="4681754371-44">{</span><span·class="p"·data-group-id="4681754371-45">{</span><span·class="ss">maps</span><span·class="p">,</span><span·class="ss">from_list</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4681754371-45">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4681754371-44">}</span><span·class="p"·data-group-id="4681754371-43">]</span><span·class="p"·data-group-id="4681754371-42">}</span><span·class="p">,</span><span·class="w"> | ||
| 185 | ··</span><span·class="p"·data-group-id="4681754371-46">{</span><span·class="ss">erl_internal</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4681754371-47">[</span><span·class="p"·data-group-id="4681754371-48">{</span><span·class="p"·data-group-id="4681754371-49">{</span><span·class="ss">erl_internal</span><span·class="p">,</span><span·class="ss">bif</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4681754371-49">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4681754371-48">}</span><span·class="p"·data-group-id="4681754371-47">]</span><span·class="p"·data-group-id="4681754371-46">}</span><span·class="p"·data-group-id="4681754371-5">]</span><span·class="p"·data-group-id="4681754371-4">}</span><span·class="gp·unselectable"> | ||
| 186 | 3>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="4681754371-50">(</span><span·class="ss">cprof</span><span·class="p"·data-group-id="4681754371-50">)</span><span·class="p">.</span><span·class="w"> | ||
| 187 | </span><span·class="p"·data-group-id="4 | 183 | ··</span><span·class="p"·data-group-id="4578783674-38">{</span><span·class="ss">otp_internal</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-39">[</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·522,·SHA:·b4b51714ae97718d87860bdd82a09198488933cdc0d51eb808c9a77812c35aca·...·]"> |
| 184 | ··</span><span·class="p"·data-group-id="4578783674-42">{</span><span·class="ss">maps</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-43">[</span><span·class="p"·data-group-id="4578783674-44">{</span><span·class="p"·data-group-id="4578783674-45">{</span><span·class="ss">maps</span><span·class="p">,</span><span·class="ss">from_list</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4578783674-45">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4578783674-44">}</span><span·class="p"·data-group-id="4578783674-43">]</span><span·class="p"·data-group-id="4578783674-42">}</span><span·class="p">,</span><span·class="w"> | ||
| 185 | ··</span><span·class="p"·data-group-id="4578783674-46">{</span><span·class="ss">erl_internal</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-47">[</span><span·class="p"·data-group-id="4578783674-48">{</span><span·class="p"·data-group-id="4578783674-49">{</span><span·class="ss">erl_internal</span><span·class="p">,</span><span·class="ss">bif</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="4578783674-49">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4578783674-48">}</span><span·class="p"·data-group-id="4578783674-47">]</span><span·class="p"·data-group-id="4578783674-46">}</span><span·class="p"·data-group-id="4578783674-5">]</span><span·class="p"·data-group-id="4578783674-4">}</span><span·class="gp·unselectable"> | ||
| 186 | 3>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="4578783674-50">(</span><span·class="ss">cprof</span><span·class="p"·data-group-id="4578783674-50">)</span><span·class="p">.</span><span·class="w"> | ||
| 187 | </span><span·class="p"·data-group-id="4578783674-51">{</span><span·class="ss">cprof</span><span·class="p">,</span><span·class="mi">3</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-52">[</span><span·class="p"·data-group-id="4578783674-53">{</span><span·class="p"·data-group-id="4578783674-54">{</span><span·class="ss">cprof</span><span·class="p">,</span><span·class="ss">tr</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4578783674-54">}</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="4578783674-53">}</span><span·class="p">,</span><span·class="p"·data-group-id="4578783674-55">{</span><span·class="p"·data-group-id="4578783674-56">{</span><span·class="ss">cprof</span><span·class="p">,</span><span·class="ss">pause</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="4578783674-56">}</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="4578783674-55">}</span><span·class="p"·data-group-id="4578783674-52">]</span><span·class="p"·data-group-id="4578783674-51">}</span><span·class="gp·unselectable"> | ||
| 188 | 4>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4 | 188 | 4>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="4578783674-57">(</span><span·class="p"·data-group-id="4578783674-57">)</span><span·class="p">.</span><span·class="w"> |
| 189 | </span><span·class="mi">8586</span></code></pre><p>The·example·showed·some·of·the·background·work·that·the·shell·performs·just·to | 189 | </span><span·class="mi">8586</span></code></pre><p>The·example·showed·some·of·the·background·work·that·the·shell·performs·just·to |
| 190 | interpret·the·first·command·line.</p><p>What·is·captured·in·this·example·is·the·part·of·the·work·the·shell·does·while | 190 | interpret·the·first·command·line.</p><p>What·is·captured·in·this·example·is·the·part·of·the·work·the·shell·does·while |
| 191 | interpreting·the·command·line·that·occurs·between·the·actual·calls·to | 191 | interpreting·the·command·line·that·occurs·between·the·actual·calls·to |
| 192 | <a·href="cprof.html#start/0"><code·class="inline">cprof:start()</code></a>·and·<a·href="cprof.html#analyse/1"><code·class="inline">cprof:analyse()</code></a>.</p><h2·id="example-one-module"·class="section-heading"> | 192 | <a·href="cprof.html#start/0"><code·class="inline">cprof:start()</code></a>·and·<a·href="cprof.html#analyse/1"><code·class="inline">cprof:analyse()</code></a>.</p><h2·id="example-one-module"·class="section-heading"> |
| 193 | ··<a·href="#example-one-module"·class="hover-link"> | 193 | ··<a·href="#example-one-module"·class="hover-link"> |
| 194 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 194 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 195 | ··</a> | 195 | ··</a> |
| 196 | ··<span·class="text">Example:·One·module</span> | 196 | ··<span·class="text">Example:·One·module</span> |
| 197 | </h2> | 197 | </h2> |
| 198 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 198 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="5955311356-1">(</span><span·class="p"·data-group-id="5955311356-1">)</span><span·class="p">,</span><span·class="n">R</span><span·class="o">=</span><span·class="nc">calendar</span><span·class="p">:</span><span·class="nf">day_of_the_week</span><span·class="p[·...·truncated·by·diffoscope;·len:·419,·SHA:·3384f22bb90bd49dafa1037b95dd64ccc8fa8d7183da75ad2aee022b68da4cbd·...·]-3">)</span><span·class="p">,</span><span·class="n">R</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="mi">1</span><span·class="gp·unselectable"> | 199 | </span><span·class="mi">1</span><span·class="gp·unselectable"> |
| 200 | 2>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 200 | 2>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="5955311356-4">(</span><span·class="ss">calendar</span><span·class="p"·data-group-id="5955311356-4">)</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="p"·data-group-id=" | 201 | </span><span·class="p"·data-group-id="5955311356-5">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="mi">9</span><span·class="p">,</span><span·class="w"> |
| 202 | ··········</span><span·class="p"·data-group-id=" | 202 | ··········</span><span·class="p"·data-group-id="5955311356-6">[</span><span·class="p"·data-group-id="5955311356-7">{</span><span·class="p"·data-group-id="5955311356-8">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">last_day_of_the_month1</span><span·class="p">,</span><s[·...·truncated·by·diffoscope;·len:·166,·SHA:·07841932b1dad6f26bcf8b52553ba1a367978bdfc64ceaa49dd589f27e8c1d2a·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 203 | ···········</span><span·class="p"·data-group-id=" | 203 | ···········</span><span·class="p"·data-group-id="5955311356-9">{</span><span·class="p"·data-group-id="5955311356-10">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">last_day_of_the_month</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·114,·SHA:·8429788c32db0b0748ffa0e7d319189e31cf9df3027f34f7be00db0abb96c538·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 204 | ···········</span><span·class="p"·data-group-id=" | 204 | ···········</span><span·class="p"·data-group-id="5955311356-11">{</span><span·class="p"·data-group-id="5955311356-12">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">is_leap_year1</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="595531[·...·truncated·by·diffoscope;·len:·107,·SHA:·b2d81bc479809be92186eccdfa287bc36fa35b80b2ab6d498913c2ff3277ed42·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 205 | ···········</span><span·class="p"·data-group-id=" | 205 | ···········</span><span·class="p"·data-group-id="5955311356-13">{</span><span·class="p"·data-group-id="5955311356-14">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">is_leap_year</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="5955311[·...·truncated·by·diffoscope;·len:·106,·SHA:·cef8ede59a42a9c220c845f27200d61ab1b6b21ecc24409af09b63b328890ec7·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 206 | ···········</span><span·class="p"·data-group-id=" | 206 | ···········</span><span·class="p"·data-group-id="5955311356-15">{</span><span·class="p"·data-group-id="5955311356-16">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">dy</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="5955311356-16">}<[·...·truncated·by·diffoscope;·len:·96,·SHA:·5465637fd9c20a2a8202e0b44c1c7491b1bd110b7f2c0b507f270bb56765fe9c·...·]-15">}</span><span·class="p">,</span><span·class="w"> |
| 207 | ···········</span><span·class="p"·data-group-id=" | 207 | ···········</span><span·class="p"·data-group-id="5955311356-17">{</span><span·class="p"·data-group-id="5955311356-18">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">dm</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="5955311356-18">}<[·...·truncated·by·diffoscope;·len:·96,·SHA:·5465637fd9c20a2a8202e0b44c1c7491b1bd110b7f2c0b507f270bb56765fe9c·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 208 | ···········</span><span·class="p"·data-group-id=" | 208 | ···········</span><span·class="p"·data-group-id="5955311356-19">{</span><span·class="p"·data-group-id="5955311356-20">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">df</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="5955311356-20">}<[·...·truncated·by·diffoscope;·len:·96,·SHA:·5465637fd9c20a2a8202e0b44c1c7491b1bd110b7f2c0b507f270bb56765fe9c·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 209 | ···········</span><span·class="p"·data-group-id=" | 209 | ···········</span><span·class="p"·data-group-id="5955311356-21">{</span><span·class="p"·data-group-id="5955311356-22">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">day_of_the_week</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="5955[·...·truncated·by·diffoscope;·len:·109,·SHA:·b51b78c7816c02e8f67591927df8714e71239edd217b1aae69942c05130d7108·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 210 | ···········</span><span·class="p"·data-group-id=" | 210 | ···········</span><span·class="p"·data-group-id="5955311356-23">{</span><span·class="p"·data-group-id="5955311356-24">{</span><span·class="ss">calendar</span><span·class="p">,</span><span·class="ss">date_to_gregorian_days</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·223,·SHA:·14c5e49ad87e6e7539c1e8c31819c3497877563232fb242900d34ffb268223f7·...·]-5">}</span><span·class="gp·unselectable"> |
| 211 | 3>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 211 | 3>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="5955311356-25">(</span><span·class="p"·data-group-id="5955311356-25">)</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="mi">8648</span></code></pre><p>The·example·tells·us·that·"Aktiebolaget·LM·Ericsson·&·Co"·was·registered·on·a | 212 | </span><span·class="mi">8648</span></code></pre><p>The·example·tells·us·that·"Aktiebolaget·LM·Ericsson·&·Co"·was·registered·on·a |
| 213 | Monday·(since·the·return·value·of·the·first·command·is·1),·and·that·the | 213 | Monday·(since·the·return·value·of·the·first·command·is·1),·and·that·the |
| 214 | <code·class="inline">calendar</code>·module·needed·9·function·calls·to·calculate·that.</p><p>Using·<code·class="inline">cprof:analyse()</code>·in·this·example·also·shows·approximately·the·same | 214 | <code·class="inline">calendar</code>·module·needed·9·function·calls·to·calculate·that.</p><p>Using·<code·class="inline">cprof:analyse()</code>·in·this·example·also·shows·approximately·the·same |
| 215 | background·work·as·in·the·first·example.</p><h2·id="example-in-the-code"·class="section-heading"> | 215 | background·work·as·in·the·first·example.</p><h2·id="example-in-the-code"·class="section-heading"> |
| 216 | ··<a·href="#example-in-the-code"·class="hover-link"> | 216 | ··<a·href="#example-in-the-code"·class="hover-link"> |
| 217 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 217 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 218 | ··</a> | 218 | ··</a> |
| 219 | ··<span·class="text">Example:·In·the·code</span> | 219 | ··<span·class="text">Example:·In·the·code</span> |
| 220 | </h2> | 220 | </h2> |
| 221 | <p>Write·a·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="2130507955-1">(</span><span·class="ss">sort</span><span·class="p"·data-group-id="2130507955-1">)</span><span·class="p">.</span><span·class="w"> | ||
| 222 | < | 221 | <p>Write·a·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8759148142-1">(</span><span·class="ss">sort</span><span·class="p"·data-group-id="8759148142-1">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8759148142-2">(</span><span·class="p"·data-group-id="8759148142-3">[</span><span·class="ss">do</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="8759148142-3">]</span><span·class="p"·data-group-id="8759148142-2">)</span><span·class="p">.</span><span·class="w"> | ||
| 223 | </span><span·class="nf">do</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nf">do</span><span·class="p"·data-group-id="8759148142-4">(</span><span·class="n">N</span><span·class="p"·data-group-id="8759148142-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 224 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">stop</span><span·class="p"·data-group-id="8759148142-5">(</span><span·class="p"·data-group-id="8759148142-5">)</span><span·class="p">,</span><span·class="w"> |
| 225 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 225 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="8759148142-6">(</span><span·class="p"·data-group-id="8759148142-6">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ····</span><span·class="nf">do</span><span·class="p"·data-group-id=" | 226 | ····</span><span·class="nf">do</span><span·class="p"·data-group-id="8759148142-7">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8759148142-8">[</span><span·class="p"·data-group-id="8759148142-8">]</span><span·class="p"·data-group-id="8759148142-7">)</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="nf">do</span><span·class="p"·data-group-id=" | 227 | </span><span·class="nf">do</span><span·class="p"·data-group-id="8759148142-9">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="8759148142-9">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">sort</span><span·class="p"·data-group-id=" | 228 | ····</span><span·class="n">R</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">sort</span><span·class="p"·data-group-id="8759148142-10">(</span><span·class="n">L</span><span·class="p"·data-group-id="8759148142-10">)</span><span·class="p">,</span><span·class="w"> |
| 229 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">pause</span><span·class="p"·data-group-id=" | 229 | ····</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">pause</span><span·class="p"·data-group-id="8759148142-11">(</span><span·class="p"·data-group-id="8759148142-11">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ····</span><span·class="n">R</span><span·class="p">;</span><span·class="w"> | 230 | ····</span><span·class="n">R</span><span·class="p">;</span><span·class="w"> |
| 231 | </span><span·class="nf">do</span><span·class="p"·data-group-id=" | 231 | </span><span·class="nf">do</span><span·class="p"·data-group-id="8759148142-12">(</span><span·class="n">N</span><span·class="p">,</span><span·class="w">·</span><span·class="n">L</span><span·class="p"·data-group-id="8759148142-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="nf">do</span><span·class="p"·data-group-id=" | 232 | ····</span><span·class="nf">do</span><span·class="p"·data-group-id="8759148142-13">(</span><span·class="n">N</span><span·class="o">-</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8759148142-14">[</span><span·class="nc">rand</span><span·class="p">:</span><span·[·...·truncated·by·diffoscope;·len:·717,·SHA:·326c6e7dca76189202594ba05dffede71b47a69f79f8574c9217d8a7dd15ef77·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="p"·data-group-id=" | 233 | </span><span·class="p"·data-group-id="3653131545-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">sort</span><span·class="p"·data-group-id="3653131545-2">}</span><span·class="gp·unselectable"> |
| 234 | 2>·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">seed</span><span·class="p"·data-group-id=" | 234 | 2>·</span><span·class="nc">rand</span><span·class="p">:</span><span·class="nf">seed</span><span·class="p"·data-group-id="3653131545-3">(</span><span·class="ss">default</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">42</span><span·class="p"·data-group-id="3653131545-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 235 | </span><span·class="ss">ok</span><span·class="p">.</span><span·class="gp·unselectable"> | 235 | </span><span·class="ss">ok</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 236 | 3>·</span><span·class="nc">sort</span><span·class="p">:</span><span·class="nf">do</span><span·class="p"·data-group-id=" | 236 | 3>·</span><span·class="nc">sort</span><span·class="p">:</span><span·class="nf">do</span><span·class="p"·data-group-id="3653131545-4">(</span><span·class="mi">1000</span><span·class="p"·data-group-id="3653131545-4">)</span><span·class="p">.</span><span·class="w"> |
| 237 | </span><span·class="p"·data-group-id=" | 237 | </span><span·class="p"·data-group-id="3653131545-5">[</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">0</span><span·class="p">,</span><span·class="mi">1</span><span·class="p">,</span><span·class="mi">1</span><span·class="[·...·truncated·by·diffoscope;·len:·1300,·SHA:·d370a583898d913776058787ee5a804390b92b5ea6f3a44f9f48a7e7f35fe5fe·...·]-5">]</span><span·class="gp·unselectable"> |
| 238 | 4>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 238 | 4>·</span><span·class="nc">cprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3653131545-6">(</span><span·class="p"·data-group-id="3653131545-6">)</span><span·class="p">.</span><span·class="w"> |
| 239 | </span><span·class="p"·data-group-id=" | 239 | </span><span·class="p"·data-group-id="3653131545-7">{</span><span·class="mi">13180</span><span·class="p">,</span><span·class="w"> |
| 240 | ·</span><span·class="p"·data-group-id=" | 240 | ·</span><span·class="p"·data-group-id="3653131545-8">[</span><span·class="p"·data-group-id="3653131545-9">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="mi">6173</span><span·class="p">,</span><span·class="w"> |
| 241 | ·········</span><span·class="p"·data-group-id=" | 241 | ·········</span><span·class="p"·data-group-id="3653131545-10">[</span><span·class="p"·data-group-id="3653131545-11">{</span><span·class="p"·data-group-id="3653131545-12">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge3_1</span><span·class="p">,</span><span·class="mi[·...·truncated·by·diffoscope;·len:·157,·SHA:·f49776d4f21a1223a36cd4f8ed6343012965da287ee5ae5b059af5ae9274aaf0·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 242 | ··········</span><span·class="p"·data-group-id=" | 242 | ··········</span><span·class="p"·data-group-id="3653131545-13">{</span><span·class="p"·data-group-id="3653131545-14">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge3_2</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-14[·...·truncated·by·diffoscope;·len:·102,·SHA:·82d149fa2a1ef6cc237297b4c025db4562453d02e09029026d041bff14bc1e15·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 243 | ··········</span><span·class="p"·data-group-id=" | 243 | ··········</span><span·class="p"·data-group-id="3653131545-15">{</span><span·class="p"·data-group-id="3653131545-16">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">split_1</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="3653131545-16">[·...·truncated·by·diffoscope;·len:·100,·SHA:·8682b87a7afca88c5c4f466e595f42b22b5e9411450688ac7c09084737c614f9·...·]-15">}</span><span·class="p">,</span><span·class="w"> |
| 244 | ··········</span><span·class="p"·data-group-id=" | 244 | ··········</span><span·class="p"·data-group-id="3653131545-17">{</span><span·class="p"·data-group-id="3653131545-18">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge3_1</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-18"[·...·truncated·by·diffoscope;·len:·101,·SHA:·f4a12a4d40a696746cef9c5b194e99578463b3ce5b1b358d4ee91f91aa5f08e4·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 245 | ··········</span><span·class="p"·data-group-id=" | 245 | ··········</span><span·class="p"·data-group-id="3653131545-19">{</span><span·class="p"·data-group-id="3653131545-20">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge3_2</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-20"[·...·truncated·by·diffoscope;·len:·101,·SHA:·a1d5c25011588859a4b48707cf1aba6df7a1df7d4dc1e855d815ab9a41c5166d·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 246 | ··········</span><span·class="p"·data-group-id=" | 246 | ··········</span><span·class="p"·data-group-id="3653131545-21">{</span><span·class="p"·data-group-id="3653131545-22">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge3_12_3</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545[·...·truncated·by·diffoscope;·len:·105,·SHA:·c04183e95a8fe4898d132a4da930065934052d99b7ecbd755e42d23939d06fba·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 247 | ··········</span><span·class="p"·data-group-id=" | 247 | ··········</span><span·class="p"·data-group-id="3653131545-23">{</span><span·class="p"·data-group-id="3653131545-24">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">split_1_1</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-24[·...·truncated·by·diffoscope;·len:·102,·SHA:·d7775173e2592f5e6eef7a360f641fbd7c2b56ef88045a21a51c9818824e5b67·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 248 | ··········</span><span·class="p"·data-group-id=" | 248 | ··········</span><span·class="p"·data-group-id="3653131545-25">{</span><span·class="p"·data-group-id="3653131545-26">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge3_12_3</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-[·...·truncated·by·diffoscope;·len:·104,·SHA:·48ddce20c5909089ffdd1e6fb872cb42a7e291b5176dec53bf2bada722a21d0f·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 249 | ··········</span><span·class="p"·data-group-id=" | 249 | ··········</span><span·class="p"·data-group-id="3653131545-27">{</span><span·class="p"·data-group-id="3653131545-28">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge3_21_3</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545[·...·truncated·by·diffoscope;·len:·105,·SHA:·9ac12cf14848c2e71e26583c3514f4d354d36f639bbe9207ea767866160841d3·...·]-27">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ··········</span><span·class="p"·data-group-id=" | 250 | ··········</span><span·class="p"·data-group-id="3653131545-29">{</span><span·class="p"·data-group-id="3653131545-30">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge3_21_3</span><span·class="p">,</span><span·class="mi">6</span><span·class="p"·data-group-id="3653131545-[·...·truncated·by·diffoscope;·len:·104,·SHA:·218081c45abcec1f27f1e4109f6f3eb96fa0e3ac045dd1222af5111283465d12·...·]-29">}</span><span·class="p">,</span><span·class="w"> |
| 251 | ··········</span><span·class="p"·data-group-id=" | 251 | ··········</span><span·class="p"·data-group-id="3653131545-31">{</span><span·class="p"·data-group-id="3653131545-32">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge2_1</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="3653131545-32"[·...·truncated·by·diffoscope;·len:·101,·SHA:·7266421d1dd10e8fbeebd82d6c7473354908c79af6e41a1709c771bb314fbeb0·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 252 | ··········</span><span·class="p"·data-group-id=" | 252 | ··········</span><span·class="p"·data-group-id="3653131545-33">{</span><span·class="p"·data-group-id="3653131545-34">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">merge2_2</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="3653131545-34"[·...·truncated·by·diffoscope;·len:·101,·SHA:·dd3dcd92bb058197b71c58e0edcf9476ed4a80c81d16e3b00f0ff6b7613474f0·...·]-33">}</span><span·class="p">,</span><span·class="w"> |
| 253 | ··········</span><span·class="p"·data-group-id=" | 253 | ··········</span><span·class="p"·data-group-id="3653131545-35">{</span><span·class="p"·data-group-id="3653131545-36">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">reverse</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3653131545-36">[·...·truncated·by·diffoscope;·len:·100,·SHA:·5cc59460a1596987e54bb0bdcdf297228cf05c79b375751c8c28413d4ab094be·...·]-35">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ··········</span><span·class="p"·data-group-id=" | 254 | ··········</span><span·class="p"·data-group-id="3653131545-37">{</span><span·class="p"·data-group-id="3653131545-38">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge2_2</span><span·class="p">,</span><span·class="mi">5</span><span·class="p"·data-group-id="3653131545-38[·...·truncated·by·diffoscope;·len:·101,·SHA:·71b8beca591a1d71c227c0c6dd8102dec04f974d6f3e9e431845b8966edf5409·...·]-37">}</span><span·class="p">,</span><span·class="w"> |
| 255 | ··········</span><span·class="p"·data-group-id=" | 255 | ··········</span><span·class="p"·data-group-id="3653131545-39">{</span><span·class="p"·data-group-id="3653131545-40">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmergel</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3653131545-40">[·...·truncated·by·diffoscope;·len:·99,·SHA:·3b60b4851b74e590e41ac5ec4d272314a37cc47876b505d02364c9e79ac2b196·...·]-39">}</span><span·class="p">,</span><span·class="w"> |
| 256 | ··········</span><span·class="p"·data-group-id=" | 256 | ··········</span><span·class="p"·data-group-id="3653131545-41">{</span><span·class="p"·data-group-id="3653131545-42">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">rmerge2_1</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="3653131545-42[·...·truncated·by·diffoscope;·len:·101,·SHA:·ec06ec799a256f84145cb0efb60099869edb2a7af1dd341c9c8d10ec16cf771e·...·]-41">}</span><span·class="p">,</span><span·class="w"> |
| 257 | ··········</span><span·class="p"·data-group-id=" | 257 | ··········</span><span·class="p"·data-group-id="3653131545-43">{</span><span·class="p"·data-group-id="3653131545-44">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">mergel</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3653131545-44">}[·...·truncated·by·diffoscope;·len:·98,·SHA:·c9c762ad98ffab8dffaa344ddc341bc1b26f9903bda81d903f3883eabc5a2092·...·]-43">}</span><span·class="p">,</span><span·class="w"> |
| 258 | ··········</span><span·class="p"·data-group-id=" | 258 | ··········</span><span·class="p"·data-group-id="3653131545-45">{</span><span·class="p"·data-group-id="3653131545-46">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">keyfind</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="3653131545-46">[·...·truncated·by·diffoscope;·len:·98,·SHA:·72d03500a3de9c3b5261250af7a1dac8bd13f44390b074e6f433a65fc3c50310·...·]-45">}</span><span·class="p">,</span><span·class="w"> |
| 259 | ··········</span><span·class="p"·data-group-id=" | 259 | ··········</span><span·class="p"·data-group-id="3653131545-47">{</span><span·class="p"·data-group-id="3653131545-48">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">sort</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="3653131545-48">}</[·...·truncated·by·diffoscope;·len:·203,·SHA:·2e8b2f030b1da8575cb384e6d09003bfff56fbace9a8584bcfec4d5ab68f38f7·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 260 | ··</span><span·class="p"·data-group-id=" | 260 | ··</span><span·class="p"·data-group-id="3653131545-49">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="mi">5000</span><span·class="p">,</span><span·class="w"> |
| 261 | ········</span><span·class="p"·data-group-id=" | 261 | ········</span><span·class="p"·data-group-id="3653131545-50">[</span><span·class="p"·data-group-id="3653131545-51">{</span><span·class="p"·data-group-id="3653131545-52">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="ss">uniform_s</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·156,·SHA:·6dde88a957f87882d85231d043fa0b85b3e9b7b61236e6c08cb17a10d63ed1fb·...·]-51">}</span><span·class="p">,</span><span·class="w"> |
| 262 | ·········</span><span·class="p"·data-group-id=" | 262 | ·········</span><span·class="p"·data-group-id="3653131545-53">{</span><span·class="p"·data-group-id="3653131545-54">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="ss">uniform</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="3653131545-54">}[·...·truncated·by·diffoscope;·len:·100,·SHA:·778e670ddc943bf90a06f7dd77ed021741937195b9f1b0c6021736ed8625751b·...·]-53">}</span><span·class="p">,</span><span·class="w"> |
| 263 | ·········</span><span·class="p"·data-group-id=" | 263 | ·········</span><span·class="p"·data-group-id="3653131545-55">{</span><span·class="p"·data-group-id="3653131545-56">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="ss">seed_put</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="3653131545-56">[·...·truncated·by·diffoscope;·len:·101,·SHA:·1573a40ef20fa7cc54db9a1c5b5a82297e728b236643653788a6a92cc4cb3a15·...·]-55">}</span><span·class="p">,</span><span·class="w"> |
| 264 | ·········</span><span·class="p"·data-group-id=" | 264 | ·········</span><span·class="p"·data-group-id="3653131545-57">{</span><span·class="p"·data-group-id="3653131545-58">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="ss">seed_get</span><span·class="p">,</span><span·class="mi">0</span><span·class="p"·data-group-id="3653131545-58">[·...·truncated·by·diffoscope;·len:·101,·SHA:·1573a40ef20fa7cc54db9a1c5b5a82297e728b236643653788a6a92cc4cb3a15·...·]-57">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ·········</span><span·class="p"·data-group-id=" | 265 | ·········</span><span·class="p"·data-group-id="3653131545-59">{</span><span·class="p"·data-group-id="3653131545-60">{</span><span·class="ss">rand</span><span·class="p">,</span><span·class="ss">exsss_uniform</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3653131545[·...·truncated·by·diffoscope;·len:·214,·SHA:·a50e9a273313eda229ece24e4f7f079c5f0c9417e76e2ea13b23b990bf75e44a·...·]-49">}</span><span·class="p">,</span><span·class="w"> |
| 266 | ··</span><span·class="p"·data-group-id=" | 266 | ··</span><span·class="p"·data-group-id="3653131545-61">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="mi">1004</span><span·class="p">,</span><span·class="w"> |
| 267 | ··········</span><span·class="p"·data-group-id=" | 267 | ··········</span><span·class="p"·data-group-id="3653131545-62">[</span><span·class="p"·data-group-id="3653131545-63">{</span><span·class="p"·data-group-id="3653131545-64">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="nb">put</span><span·class="p">,</span><span·class="mi">2</[·...·truncated·by·diffoscope;·len:·152,·SHA:·6d9af89dfa22d7df2bf39c061d7039d187b2f1d17bf9ad5dda0f28918db7af1b·...·]-63">}</span><span·class="p">,</span><span·class="w"> |
| 268 | ···········</span><span·class="p"·data-group-id=" | 268 | ···········</span><span·class="p"·data-group-id="3653131545-65">{</span><span·class="p"·data-group-id="3653131545-66">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="nb">trace_pattern</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="36531315[·...·truncated·by·diffoscope;·len:·105,·SHA:·1b63c438794477113e7ccf76cc3fa78ea9c06bb9f44dbd7c776f630008ed67a7·...·]-65">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ···········</span><span·class="p"·data-group-id="6692729843-67">{</span><span·class="p"·data-group-id="6692729843-68">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="ss">ensure_tracer_module_loaded</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6692729843-68">}</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6692729843-67">}</span><span·class="p"·data-group-id="6692729843-62">]</span><span·class="p"·data-group-id="6692729843-61">}</span><span·class="p">,</span><span·class="w"> | ||
| 270 | ··</span><span·class="p"·data-group-id="6692729843-69">{</span><span·class="ss">sort</span><span·class="p">,</span><span·class="mi">1001</span><span·class="p">,</span><span·class="p"·data-group-id="6692729843-70">[</span><span·class="p"·data-group-id="6692729843-71">{</span><span·class="p"·data-group-id="6692729843-72">{</span><span·class="ss">sort</span><span·class="p">,</span><span·class="ss">do</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="6692729843-72">}</span><span·class="p">,</span><span·class="mi">1001</span><span·class="p"·data-group-id="6692729843-71">}</span><span·class="p"·data-group-id="6692729843-70">]</span><span·class="p"·data-group-id="6692729843-69">}</span><span·class="p">,</span><span·class="w"> | ||
| 271 | ··</span><span·class="p"·data-group-id=" | 269 | ···········</span><span·class="p"·data-group-id="3653131545-67">{</span><span·class="p"·data-group-id="3653131545-68">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="ss">ensure_tracer_module_loaded</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·325,·SHA:·1fe6c848fe79da9b800618a95f5e3101f5d851c3c54e9e539319b13d42a949c8·...·]"> |
| Max diff block lines reached; 1117/85618 bytes (1.30%) of diff not shown. | |||
| Offset 971, 15 lines modified | Offset 971, 15 lines modified | ||
| 971 | ······<p·class="built-using"> | 971 | ······<p·class="built-using"> |
| 972 | ········Built·using | 972 | ········Built·using |
| 973 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 973 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 974 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 974 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 975 | ······</p> | 975 | ······</p> |
| 976 | <p>Copyright·©·1996-202 | 976 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 977 | ····</footer> | 977 | ····</footer> |
| 978 | ··</div> | 978 | ··</div> |
| 979 | </main> | 979 | </main> |
| 980 | </div> | 980 | </div> |
| 981 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 981 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 982 | ··<script> | 982 | ··<script> |
| 983 | ··let·initialized·=·false; | 983 | ··let·initialized·=·false; |
| Offset 207, 31 lines modified | Offset 207, 31 lines modified | ||
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Edit·-·Alignment</span> | 209 | ··<span·class="text">Edit·-·Alignment</span> |
| 210 | </h2> | 210 | </h2> |
| 211 | <ul><li>··<em><code·class="inline">C-c·C-a</code></em>·(<code·class="inline">align-current</code>)·-·aligns·comments,·arrows,·assignments, | 211 | <ul><li>··<em><code·class="inline">C-c·C-a</code></em>·(<code·class="inline">align-current</code>)·-·aligns·comments,·arrows,·assignments, |
| 212 | and·type·annotations·around·the·cursor.</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Example</span><span·class="p">:</span><span·class="w"> | 212 | and·type·annotations·around·the·cursor.</li></ul><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Example</span><span·class="p">:</span><span·class="w"> |
| 213 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 213 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-1">(</span><span·class="n">L</span><span·class="p"·data-group-id="1935145182-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-2">(</span><[·...·truncated·by·diffoscope;·len:·137,·SHA:·4dcf8251c58819831bdd02ee372e772ea822ea46e237a48c12a42d7329faae00·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 214 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 214 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-3">(</span><span·class="p"·data-group-id="1935145182-4">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="1935145182-4">]</span><span·class="p">,</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·462,·SHA:·760acd0fe66226a96bee3719b25c5f5c986029551c3cf51a150276344a29ccc7·...·]-5">)</span><span·class="p">;</span><span·class="w">··</span><span·class="c1">%·recurse</span><span·class="w"> |
| 215 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 215 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-6">(</span><span·class="p"·data-group-id="1935145182-7">[</span><span·class="p"·data-group-id="1935145182-7">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sum</span><span·class="p"·data-group-id="1935145182-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Sum</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%·base·case</span><span·class="w"> |
| 216 | </span><span·class="w"> | 216 | </span><span·class="w"> |
| 217 | </span><span·class="p">-</span><span·class="na">record</span><span·class="w">·</span><span·class="p"·data-group-id=" | 217 | </span><span·class="p">-</span><span·class="na">record</span><span·class="w">·</span><span·class="p"·data-group-id="1935145182-8">{</span><span·class="w">·</span><span·class="ss">two</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="1935145182-9">(</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·4328e688b886719ae9b89c7ba32fc3d5f44ac5adde38afa938b9ed0d53d72df7·...·]-9">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·hello</span><span·class="w"> |
| 218 | ··········</span><span·class="ss">three</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 218 | ··········</span><span·class="ss">three</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="1935145182-10">(</span><span·class="p"·data-group-id="1935145182-10">)</span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%·there</span><span·class="w"> |
| 219 | ··········</span><span·class="ss">four</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 219 | ··········</span><span·class="ss">four</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="1935145182-11">(</span><span·class="p"·data-group-id="1935145182-11">)</span><span·class="w">·</span><span·class="p"·data-group-id="1935145182-8">}</span><span·class="p">.</span><span·class="w"> |
| 220 | </span><span·class="nc">becomes</span><span·class="p">:</span><span·class="w"> | 220 | </span><span·class="nc">becomes</span><span·class="p">:</span><span·class="w"> |
| 221 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 221 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-12">(</span><span·class="n">L</span><span·class="p"·data-group-id="1935145182-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-13">(</spa[·...·truncated·by·diffoscope;·len:·140,·SHA:·c709925e8d2417d760c5b4c318f1a09dfd48bedbf53ace07781377da7f92c264·...·]-13">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 222 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-14">(</span><span·class="p"·data-group-id="1935145182-15">[</span><span·class="n">H</span><span·class="p">|</span><span·class="n">T</span><span·class="p"·data-group-id="1935145182-15">]</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·467,·SHA:·a6c173c5b25e9a2b4d91bd9ca7227913118f10f06c71f4d1f84b58ff8bff9882·...·]-16">)</span><span·class="p">;</span><span·class="w">·</span><span·class="c1">%·recurse</span><span·class="w"> |
| 223 | </span><span·class="nf">sum</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nf">sum</span><span·class="p"·data-group-id="1935145182-17">(</span><span·class="p"·data-group-id="1935145182-18">[</span><span·class="p"·data-group-id="1935145182-18">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Sum</span><span·class="p"·data-group-id="1935145182-17">)</span><span·class="w">····</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Sum</span><span·class="p">.</span><span·class="w">·············</span><span·class="c1">%·base·case</span><span·class="w"> |
| 224 | </span><span·class="w"> | 224 | </span><span·class="w"> |
| 225 | </span><span·class="p">-</span><span·class="na">record</span><span·class="w">·</span><span·class="p"·data-group-id=" | 225 | </span><span·class="p">-</span><span·class="na">record</span><span·class="w">·</span><span·class="p"·data-group-id="1935145182-19">{</span><span·class="w">·</span><span·class="ss">two</span><span·class="w">···········</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="1935145182-20">(</[·...·truncated·by·diffoscope;·len:·46,·SHA:·15527942b625c6158a200dd4f53fc1661dc2d616161657d1cbd8e4ec0f850c8d·...·]-20">)</span><span·class="p">,</span><span·class="w">····</span><span·class="c1">%·hello</span><span·class="w"> |
| 226 | ··········</span><span·class="ss">three</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id=" | 226 | ··········</span><span·class="ss">three</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">hello</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">string</span><span·class="p"·data-group-id="1935145182-21">(</span><span·class="p"·data-group-id="1935145182-21">)</span><span·class="p">,</span><span·class="w">·</span><span·class="c1">%·there</span><span·class="w"> |
| 227 | ··········</span><span·class="ss">four</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">····</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id=" | 227 | ··········</span><span·class="ss">four</span><span·class="w">··</span><span·class="o">=</span><span·class="w">·</span><span·class="mi">42</span><span·class="w">····</span><span·class="p">:</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">int</span><span·class="p"·data-group-id="1935145182-22">(</span><span·class="p"·data-group-id="1935145182-22">)</span><span·class="w">·</span><span·class="p"·data-group-id="1935145182-19">}</span><span·class="p">.</span></code></pre><h2·id="syntax-highlighting"·class="section-heading"> |
| 228 | ··<a·href="#syntax-highlighting"·class="hover-link"> | 228 | ··<a·href="#syntax-highlighting"·class="hover-link"> |
| 229 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 229 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 230 | ··</a> | 230 | ··</a> |
| 231 | ··<span·class="text">Syntax·highlighting</span> | 231 | ··<span·class="text">Syntax·highlighting</span> |
| 232 | </h2> | 232 | </h2> |
| 233 | <p>The·syntax·highlighting·can·be·activated·from·the·Erlang·menu.·There·are·four | 233 | <p>The·syntax·highlighting·can·be·activated·from·the·Erlang·menu.·There·are·four |
| 234 | different·alternatives:</p><ul><li>··Off:·Normal·black·and·white·display.</li><li>··Level·1:·Function·headers,·reserved·words,·comments,·strings,·quoted·atoms, | 234 | different·alternatives:</p><ul><li>··Off:·Normal·black·and·white·display.</li><li>··Level·1:·Function·headers,·reserved·words,·comments,·strings,·quoted·atoms, |
| Offset 351, 15 lines modified | Offset 351, 15 lines modified | ||
| 351 | ······<p·class="built-using"> | 351 | ······<p·class="built-using"> |
| 352 | ········Built·using | 352 | ········Built·using |
| 353 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 353 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 354 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 354 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 355 | ······</p> | 355 | ······</p> |
| 356 | <p>Copyright·©·1996-202 | 356 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 357 | ····</footer> | 357 | ····</footer> |
| 358 | ··</div> | 358 | ··</div> |
| 359 | </main> | 359 | </main> |
| 360 | </div> | 360 | </div> |
| 361 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 361 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 362 | ··<script> | 362 | ··<script> |
| 363 | ··let·initialized·=·false; | 363 | ··let·initialized·=·false; |
| Offset 327, 15 lines modified | Offset 327, 15 lines modified | ||
| 327 | ······<p·class="built-using"> | 327 | ······<p·class="built-using"> |
| 328 | ········Built·using | 328 | ········Built·using |
| 329 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 329 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 330 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 330 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 331 | ······</p> | 331 | ······</p> |
| 332 | <p>Copyright·©·1996-202 | 332 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 333 | ····</footer> | 333 | ····</footer> |
| 334 | ··</div> | 334 | ··</div> |
| 335 | </main> | 335 | </main> |
| 336 | </div> | 336 | </div> |
| 337 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 337 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 338 | ··<script> | 338 | ··<script> |
| 339 | ··let·initialized·=·false; | 339 | ··let·initialized·=·false; |
| Offset 171, 69 lines modified | Offset 171, 69 lines modified | ||
| 171 | </h2> | 171 | </h2> |
| 172 | <p>This·section·describes·the·output·format·of·the·<a·href="#analyse/1"><code·class="inline">analyse/1</code></a>·function.</p><p>The·format·is·parsable·with·the·standard·Erlang·parsing·tools | 172 | <p>This·section·describes·the·output·format·of·the·<a·href="#analyse/1"><code·class="inline">analyse/1</code></a>·function.</p><p>The·format·is·parsable·with·the·standard·Erlang·parsing·tools |
| 173 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_scan.html"><code·class="inline">erl_scan</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_parse.html"><code·class="inline">erl_parse</code></a>,·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>,·or·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#read/2"><code·class="inline">io:read/2</code></a>.·The | 173 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_scan.html"><code·class="inline">erl_scan</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/erl_parse.html"><code·class="inline">erl_parse</code></a>,·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#consult/1"><code·class="inline">file:consult/1</code></a>,·or·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/io.html#read/2"><code·class="inline">io:read/2</code></a>.·The |
| 174 | parse·format·is·not·described·here·—·it·should·be·easy·enough·for·the | 174 | parse·format·is·not·described·here·—·it·should·be·easy·enough·for·the |
| 175 | interested·reader·to·try·it·out.·Note·that·some·flags·to | 175 | interested·reader·to·try·it·out.·Note·that·some·flags·to |
| 176 | <a·href="#analyse/1"><code·class="inline">analyse/1</code></a>·will·affect·the·format.</p><p>The·following·example·was·run·on·Erlang/OTP·R8·on·Solaris·8;·all·OTP | 176 | <a·href="#analyse/1"><code·class="inline">analyse/1</code></a>·will·affect·the·format.</p><p>The·following·example·was·run·on·Erlang/OTP·R8·on·Solaris·8;·all·OTP |
| 177 | internals·in·this·example·are·version·dependent.</p><p>As·an·example,·we·will·use·the·following·function,·which·is·a | 177 | internals·in·this·example·are·version·dependent.</p><p>As·an·example,·we·will·use·the·following·function,·which·is·a |
| 178 | slightly·modified·benchmark·function·from·module·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 178 | slightly·modified·benchmark·function·from·module·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html"><code·class="inline">file</code></a>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7257935702-1">(</span><span·class="ss">foo</span><span·class="p"·data-group-id="7257935702-1">)</span><span·class="p">.</span><span·class="w"> |
| 179 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 179 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7257935702-2">(</span><span·class="p"·data-group-id="7257935702-3">[</span><span·class="ss">create_file_slow</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="7257935702-3">]</span><span·class="p"·data-group-id="72579357[·...·truncated·by·diffoscope;·len:·2,·SHA:·a953f09a1b6b6725b81956e9ad0b1eb49e3ad40004c04307ef8af6246a054116·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 180 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-4">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="7257935702-4">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·145,·SHA:·78fb4fa1ad44ee839aacda11f0b7f437a3a61855a32d6577548e8811f05f49a4·...·]-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">>=</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 181 | ····</span><span·class="p"·data-group-id=" | 181 | ····</span><span·class="p"·data-group-id="7257935702-6">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FD</span><span·class="p"·data-group-id="7257935702-6">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 182 | ········</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id=" | 182 | ········</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">open</span><span·class="p"·data-group-id="7257935702-7">(</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7257935702-8">[</span><span·class="ss">raw</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">write</span><s[·...·truncated·by·diffoscope;·len:·255,·SHA:·b30dc543619420e83ed01b1dc41c1807daccd5fbfc47e654fc5463824c18d185·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 183 | ····</span><span·class="k">if</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">256</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 183 | ····</span><span·class="k">if</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">></span><span·class="w">·</span><span·class="mi">256</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 184 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 184 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="7257935702-9">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w"> |
| 185 | ····························</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id=" | 185 | ····························</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="7257935702-10">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="7257935702-11">(</span><span·class="n">X</span><span·class="p"·data-group-id="7257935702-11">)</span><span·class="w">·</span><span·class="p">-></spa[·...·truncated·by·diffoscope;·len:·258,·SHA:·6499632c4426749f8cea5aa43b12b02b69aadb04ceb69265c6139b2fb44c9bb3·...·]-12">>></span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 186 | ····························</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id=" | 186 | ····························</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">seq</span><span·class="p"·data-group-id="7257935702-13">(</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">255</span><span·class="p"·data-group-id="7257935702-13">)</span><span·class="p"·data-group-id="7257935702-10">)</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·16,·SHA:·d38a227e3776e27b50c8398e0c41eb350286c8858c44757a12b9df713cff56df·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 187 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 187 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-14">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">256</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="7257935702-14">)</span><span·class="p">;</span><span·class="w"> |
| 188 | ·······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 188 | ·······</span><span·class="ss">true</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 189 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 189 | ············</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-15">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="7257935702-15">)</span><span·class="w"> |
| 190 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 190 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id=" | 191 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">close</span><span·class="p"·data-group-id="7257935702-16">(</span><span·class="n">FD</span><span·class="p"·data-group-id="7257935702-16">)</span><span·class="p">.</span><span·class="w"> |
| 192 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 192 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-17">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p"·data-group-id="7257935702-17">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 193 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 194 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 194 | </span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-18">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="7257935702-18">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 195 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id=" | 195 | ····</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">file</span><span·class="p">:</span><span·class="nf">write</span><span·class="p"·data-group-id="7257935702-19">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7257935702-20"><<</span><span·class="n">M</span><span·class="p">:</span><span·class="mi">32</span><span·class="o">/</span><[·...·truncated·by·diffoscope;·len:·133,·SHA:·d7ff6a9dd02004fe68e3c1748a4b3a08d13842471b99dcf4bfedc0a3bd737c62·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 196 | ····</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id=" | 196 | ····</span><span·class="nf">create_file_slow</span><span·class="p"·data-group-id="7257935702-21">(</span><span·class="n">FD</span><span·class="p">,</span><span·class="w">·</span><span·class="n">M</span><span·class="o">+</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"[·...·truncated·by·diffoscope;·len:·772,·SHA:·e3d098d9f24292ec16789598c2febe3089fa4afee063fc7d0b9154f8657d59d3·...·]-1">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 197 | 2>·</span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 197 | 2>·</span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="6159905102-3">(</span><span·class="p"·data-group-id="6159905102-3">)</span><span·class="p">.</span><span·class="gp·unselectable"> |
| 198 | 3>·</span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 198 | 3>·</span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="6159905102-4">(</span><span·class="p"·data-group-id="6159905102-4">)</span><span·class="p">.</span></code></pre><p>The·printout·starts·with:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·Analysis·results:</span><span·class="w"> |
| 199 | </span><span·class="p"·data-group-id=" | 199 | </span><span·class="p"·data-group-id="6696857304-1">{</span><span·class="w">··</span><span·class="ss">analysis_options</span><span·class="p">,</span><span·class="w"> |
| 200 | ·</span><span·class="p"·data-group-id=" | 200 | ·</span><span·class="p"·data-group-id="6696857304-2">[</span><span·class="p"·data-group-id="6696857304-3">{</span><span·class="ss">callers</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="6696857304-3">}</span><span·class="p">,</span><span·class="w"> |
| 201 | ··</span><span·class="p"·data-group-id=" | 201 | ··</span><span·class="p"·data-group-id="6696857304-4">{</span><span·class="ss">sort</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">acc</span><span·class="p"·data-group-id="6696857304-4">}</span><span·class="p">,</span><span·class="w"> |
| 202 | ··</span><span·class="p"·data-group-id=" | 202 | ··</span><span·class="p"·data-group-id="6696857304-5">{</span><span·class="ss">totals</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·class="p"·data-group-id="6696857304-5">}</span><span·class="p">,</span><span·class="w"> |
| 203 | ··</span><span·class="p"·data-group-id=" | 203 | ··</span><span·class="p"·data-group-id="6696857304-6">{</span><span·class="ss">details</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">true</span><span·class="p"·data-group-id="6696857304-6">}</span><span·class="p"·data-group-id="6696857304-2">]</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·8846ddcb629be801f700b5f47d586e70d1d8c1443eae418b15ede7bc01944717·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="c1">%·······································CNT·······ACC·······OWN</span><span·class="w"> | 204 | </span><span·class="c1">%·······································CNT·······ACC·······OWN</span><span·class="w"> |
| 205 | </span><span·class="p"·data-group-id=" | 205 | </span><span·class="p"·data-group-id="6696857304-7">[</span><span·class="p"·data-group-id="6696857304-8">{</span><span·class="w">·</span><span·class="ss">totals</span><span·class="p">,</span><span·class="w">·····························</span><span·class="mi">9627</span><span·class="p">,</span[·...·truncated·by·diffoscope;·len:·231,·SHA:·08d40204d099d40a9475d58a021d230e95fb2754b7626f8a8a8f2c0ddc6b5b84·...·]-7">]</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%%%</span></code></pre><p>The·<code·class="inline">CNT</code>·column·shows·the·total·number·of·function·calls·that·was·found·in·the |
| 206 | trace.·In·the·<code·class="inline">ACC</code>·column·is·the·total·time·of·the·trace·from·first·timestamp·to | 206 | trace.·In·the·<code·class="inline">ACC</code>·column·is·the·total·time·of·the·trace·from·first·timestamp·to |
| 207 | last.·And·in·the·<code·class="inline">OWN</code>·column·is·the·sum·of·the·execution·time·in·functions·found | 207 | last.·And·in·the·<code·class="inline">OWN</code>·column·is·the·sum·of·the·execution·time·in·functions·found |
| 208 | in·the·trace,·not·including·called·functions.·In·this·case·it·is·very·close·to | 208 | in·the·trace,·not·including·called·functions.·In·this·case·it·is·very·close·to |
| 209 | the·<code·class="inline">ACC</code>·time·since·the·emulator·had·practically·nothing·to·do·except | 209 | the·<code·class="inline">ACC</code>·time·since·the·emulator·had·practically·nothing·to·do·except |
| 210 | executing·our·test·program.</p><p>All·time·values·in·the·printout·are·in·milliseconds.</p><p>The·printout·continues:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·······································CNT·······ACC·······OWN</span><span·class="w"> | 210 | executing·our·test·program.</p><p>All·time·values·in·the·printout·are·in·milliseconds.</p><p>The·printout·continues:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%·······································CNT·······ACC·······OWN</span><span·class="w"> |
| 211 | </span><span·class="p"·data-group-id=" | 211 | </span><span·class="p"·data-group-id="3716305766-1">[</span><span·class="p"·data-group-id="3716305766-2">{</span><span·class="w">·</span><span·class="s">"<0.28.0>"</span><span·class="p">,</span><span·class="w">·························</span><span·class="mi">9627</span><span·cl[·...·truncated·by·diffoscope;·len:·223,·SHA:·88bdd7c03fea289e8852d2da98cb35c67c3cb693fad836ce1daa8064cec59c3d·...·]-1">]</span><span·class="p">.</span><span·class="w">···</span><span·class="c1">%%</span></code></pre><p>This·is·the·printout·header·of·one·process.·The·printout·contains·only·this·one |
| 212 | process·since·we·called·<a·href="#apply/3"><code·class="inline">fprof:apply/3</code></a>·that·traces·only·the·current·process. | 212 | process·since·we·called·<a·href="#apply/3"><code·class="inline">fprof:apply/3</code></a>·that·traces·only·the·current·process. |
| 213 | Therefore·the·<code·class="inline">CNT</code>·and·<code·class="inline">OWN</code>·columns·perfectly·matches·the·totals·above.·The·<code·class="inline">ACC</code> | 213 | Therefore·the·<code·class="inline">CNT</code>·and·<code·class="inline">OWN</code>·columns·perfectly·matches·the·totals·above.·The·<code·class="inline">ACC</code> |
| 214 | column·is·undefined·since·summing·the·<code·class="inline">ACC</code>·times·of·all·calls·in·the·process | 214 | column·is·undefined·since·summing·the·<code·class="inline">ACC</code>·times·of·all·calls·in·the·process |
| 215 | makes·no·sense·—·one·would·get·something·like·the·<code·class="inline">ACC</code>·value·from·totals·above | 215 | makes·no·sense·—·one·would·get·something·like·the·<code·class="inline">ACC</code>·value·from·totals·above |
| 216 | multiplied·by·the·average·depth·of·the·call·stack.</p><p>All·paragraphs·up·to·the·next·process·header·only·concerns·function·calls·within | 216 | multiplied·by·the·average·depth·of·the·call·stack.</p><p>All·paragraphs·up·to·the·next·process·header·only·concerns·function·calls·within |
| 217 | this·process.</p><p>Now·we·come·to·something·more·interesting:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 217 | this·process.</p><p>Now·we·come·to·something·more·interesting:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0566074530-1">{</span><span·class="p"·data-group-id="0566074530-2">[</span><span·class="p"·data-group-id="0566074530-3">{</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="w">·····························</span><span·class="mi">0<[·...·truncated·by·diffoscope;·len:·260,·SHA:·40553f664140e1c10fc28c9578726f27338a6bfed62895c93f8b267b983237de·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 218 | ·</span><span·class="p"·data-group-id=" | 218 | ·</span><span·class="p"·data-group-id="0566074530-4">{</span><span·class="w">·</span><span·class="p"·data-group-id="0566074530-5">{</span><span·class="ss">fprof</span><span·class="p">,</span><span·class="ss">apply_start_stop</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"[·...·truncated·by·diffoscope;·len:·323,·SHA:·d0c04d5f4c33817099646ae82991f87a3b2cb38716622f80215c769ba6211b8f·...·]-4">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 219 | ·</span><span·class="p"·data-group-id=" | 219 | ·</span><span·class="p"·data-group-id="0566074530-6">[</span><span·class="p"·data-group-id="0566074530-7">{</span><span·class="p"·data-group-id="0566074530-8">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·352,·SHA:·ed681ef5a014582756f60afb71be92be6a85b7c3c086513a937d70b2b0f7391b·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 220 | ··</span><span·class="p"·data-group-id=" | 220 | ··</span><span·class="p"·data-group-id="0566074530-9">{</span><span·class="ss">suspend</span><span·class="p">,</span><span·class="w">·······························</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">····</span><span·class="mf">0.000</span><span·class="p">,</s[·...·truncated·by·diffoscope;·len:·207,·SHA:·2e8c8a2a0279efbea3ead9a8c9e37e54783ace1d1525e02da6695d9ed49aee5b·...·]-1">}</span><span·class="p">.</span><span·class="w"> |
| 221 | </span><span·class="p"·data-group-id=" | 221 | </span><span·class="p"·data-group-id="0566074530-10">{</span><span·class="p"·data-group-id="0566074530-11">[</span><span·class="p"·data-group-id="0566074530-12">{</span><span·class="p"·data-group-id="0566074530-13">{</span><span·class="ss">fprof</span><span·class="p">,</span><span·class="ss">a[·...·truncated·by·diffoscope;·len:·464,·SHA:·64898d2d991fb8334979b67a2bac3417aadc085ad957081a9ae2203cbdf9482b·...·]-11">]</span><span·class="p">,</span><span·class="w"> |
| 222 | ·</span><span·class="p"·data-group-id=" | 222 | ·</span><span·class="p"·data-group-id="0566074530-14">{</span><span·class="w">·</span><span·class="p"·data-group-id="0566074530-15">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"[·...·truncated·by·diffoscope;·len:·326,·SHA:·ff024c7ef371b72ebd4944d86387201bbee47c5e43ac346891608afecdb908c4·...·]-14">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 223 | ·</span><span·class="p"·data-group-id=" | 223 | ·</span><span·class="p"·data-group-id="0566074530-16">[</span><span·class="p"·data-group-id="0566074530-17">{</span><span·class="p"·data-group-id="0566074530-18">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">close</span><span·class="p">,</span><span·class="mi">1</[·...·truncated·by·diffoscope;·len:·356,·SHA:·c8df52982c604858fd1bceccf6a6795d2394c404ece85f686bbc7a17a0c8034b·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 224 | ··</span><span·class="p"·data-group-id=" | 224 | ··</span><span·class="p"·data-group-id="0566074530-19">{</span><span·class="p"·data-group-id="0566074530-20">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="05660745[·...·truncated·by·diffoscope;·len:·302,·SHA:·f98318eb44f550762b2f1f8b5dcee7c86a3dc4d81e83b2709a1fd3e2db9d68f6·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 225 | ··</span><span·class="p"·data-group-id=" | 225 | ··</span><span·class="p"·data-group-id="0566074530-21">{</span><span·class="p"·data-group-id="0566074530-22">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">open</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0566074530-22">}</s[·...·truncated·by·diffoscope;·len:·302,·SHA:·18de993846756adc525fe691ce047c044cfe1da6f53ff4b158614c665d2462d1·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 226 | ··</span><span·class="p"·data-group-id=" | 226 | ··</span><span·class="p"·data-group-id="0566074530-23">{</span><span·class="p"·data-group-id="0566074530-24">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">map</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0566074530-24">}</s[·...·truncated·by·diffoscope;·len:·302,·SHA:·8d1fa153aed8995659e77d1bb43ba75704043b12ce4bbca3bff60f789350a841·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 227 | ··</span><span·class="p"·data-group-id=" | 227 | ··</span><span·class="p"·data-group-id="0566074530-25">{</span><span·class="p"·data-group-id="0566074530-26">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">seq</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0566074530-26">}</s[·...·truncated·by·diffoscope;·len:·302,·SHA:·6ee74160e09e0eaf2612e4e4a797cccdbcaf56793e197590b046ade224e30110·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 228 | ··</span><span·class="p"·data-group-id=" | 228 | ··</span><span·class="p"·data-group-id="0566074530-27">{</span><span·class="p"·data-group-id="0566074530-28">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="0566074530-28">}</[·...·truncated·by·diffoscope;·len:·410,·SHA:·57019c1a805ada7d2ff7e0773208c994a2292827dcea9a1910aac976bf839461·...·]-10">}</span><span·class="p">.</span></code></pre><p>The·printout·consists·of·one·paragraph·per·called·function.·The·function |
| 229 | <em>marked</em>·with·<code·class="inline">%</code>·is·the·one·the·paragraph·concerns·—·<code·class="inline">foo:create_file_slow/2</code>. | 229 | <em>marked</em>·with·<code·class="inline">%</code>·is·the·one·the·paragraph·concerns·—·<code·class="inline">foo:create_file_slow/2</code>. |
| 230 | Above·the·marked·function·are·the·<em>calling</em>·functions·—·those·that·has·called | 230 | Above·the·marked·function·are·the·<em>calling</em>·functions·—·those·that·has·called |
| 231 | the·marked,·and·below·are·those·<em>called</em>·by·the·marked·function.</p><p>The·paragraphs·are·per·default·sorted·in·descending·order·of·the·<code·class="inline">ACC</code>·column·for | 231 | the·marked,·and·below·are·those·<em>called</em>·by·the·marked·function.</p><p>The·paragraphs·are·per·default·sorted·in·descending·order·of·the·<code·class="inline">ACC</code>·column·for |
| 232 | the·marked·function.·The·calling·list·and·called·list·within·one·paragraph·are | 232 | the·marked·function.·The·calling·list·and·called·list·within·one·paragraph·are |
| 233 | also·per·default·sorted·in·descending·order·of·their·<code·class="inline">ACC</code>·column.</p><p>The·columns·are:</p><ul><li><code·class="inline">CNT</code>·-·the·number·of·times·the·function·has·been·called</li><li><code·class="inline">ACC</code>·-·the·time·spent·in·the·function·including·called·functions</li><li><code·class="inline">OWN</code>·-·the·time·spent·in·the·function·not·including·called·functions</li></ul><p>The·rows·for·the·<em>calling</em>·functions·contain·statistics·for·the·<em>marked</em> | 233 | also·per·default·sorted·in·descending·order·of·their·<code·class="inline">ACC</code>·column.</p><p>The·columns·are:</p><ul><li><code·class="inline">CNT</code>·-·the·number·of·times·the·function·has·been·called</li><li><code·class="inline">ACC</code>·-·the·time·spent·in·the·function·including·called·functions</li><li><code·class="inline">OWN</code>·-·the·time·spent·in·the·function·not·including·called·functions</li></ul><p>The·rows·for·the·<em>calling</em>·functions·contain·statistics·for·the·<em>marked</em> |
| 234 | function·with·the·constraint·that·only·the·occasions·when·a·call·was·made·from | 234 | function·with·the·constraint·that·only·the·occasions·when·a·call·was·made·from |
| 235 | the·<em>row's</em>·function·to·the·<em>marked</em>·function·are·accounted·for.</p><p>The·row·for·the·<em>marked</em>·function·simply·contains·the·sum·of·all·<em>calling</em>·rows.</p><p>The·rows·for·the·<em>called</em>·functions·contains·statistics·for·the·<em>row's</em>·function | 235 | the·<em>row's</em>·function·to·the·<em>marked</em>·function·are·accounted·for.</p><p>The·row·for·the·<em>marked</em>·function·simply·contains·the·sum·of·all·<em>calling</em>·rows.</p><p>The·rows·for·the·<em>called</em>·functions·contains·statistics·for·the·<em>row's</em>·function |
| Offset 242, 109 lines modified | Offset 242, 109 lines modified | ||
| 242 | execution.·It·spent·most·of·its·time·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#close/1"><code·class="inline">file:close/1</code></a>.·The·function | 242 | execution.·It·spent·most·of·its·time·in·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#close/1"><code·class="inline">file:close/1</code></a>.·The·function |
| 243 | <code·class="inline">foo:create_file_slow/3</code>·that·writes·3/4·of·the·file·contents·is·the·second | 243 | <code·class="inline">foo:create_file_slow/3</code>·that·writes·3/4·of·the·file·contents·is·the·second |
| 244 | biggest·time·thief.</p><p>We·also·see·that·the·call·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>·that·writes·1/4·of·the·file·contents | 244 | biggest·time·thief.</p><p>We·also·see·that·the·call·to·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>·that·writes·1/4·of·the·file·contents |
| 245 | takes·very·little·time·in·itself.·What·takes·time·is·to·build·the·data | 245 | takes·very·little·time·in·itself.·What·takes·time·is·to·build·the·data |
| 246 | (<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#seq/2"><code·class="inline">lists:seq/2</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#map/2"><code·class="inline">lists:map/2</code></a>).</p><p>The·function·<code·class="inline">undefined</code>·that·has·called·<code·class="inline">fprof:apply_start_stop/4</code>·is·an | 246 | (<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#seq/2"><code·class="inline">lists:seq/2</code></a>·and·<a·href="../../../../lib/stdlib-6.2.2.1/doc/html/lists.html#map/2"><code·class="inline">lists:map/2</code></a>).</p><p>The·function·<code·class="inline">undefined</code>·that·has·called·<code·class="inline">fprof:apply_start_stop/4</code>·is·an |
| 247 | unknown·function·because·that·call·was·not·recorded·in·the·trace.·It·was·only | 247 | unknown·function·because·that·call·was·not·recorded·in·the·trace.·It·was·only |
| 248 | recorded·that·the·execution·returned·from·<code·class="inline">fprof:apply_start_stop/4</code>·to·some | 248 | recorded·that·the·execution·returned·from·<code·class="inline">fprof:apply_start_stop/4</code>·to·some |
| 249 | other·function·above·in·the·call·stack,·or·that·the·process·exited·from·there.</p><p>Let·us·continue·down·the·printout·to·find:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 249 | other·function·above·in·the·call·stack,·or·that·the·process·exited·from·there.</p><p>Let·us·continue·down·the·printout·to·find:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6447980582-1">{</span><span·class="p"·data-group-id="6447980582-2">[</span><span·class="p"·data-group-id="6447980582-3">{</span><span·class="p"·data-group-id="6447980582-4">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_[·...·truncated·by·diffoscope;·len:·405,·SHA:·6836347e5d2ab928d08b8cd9c9bb4627d4aca1550f62f516103549e73ccaedac·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 250 | ··</span><span·class="p"·data-group-id=" | 250 | ··</span><span·class="p"·data-group-id="6447980582-5">{</span><span·class="p"·data-group-id="6447980582-6">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="6447980582[·...·truncated·by·diffoscope;·len:·352,·SHA:·1902097682fd687cd4b2970b8fd37b24807b84e0a531da45035bd2c27ab9ff15·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 251 | ·</span><span·class="p"·data-group-id=" | 251 | ·</span><span·class="p"·data-group-id="6447980582-7">{</span><span·class="w">·</span><span·class="p"·data-group-id="6447980582-8">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·323,·SHA:·869f1d02297718714fa44f51915b9942e2d105915497153369c12a9e5887f189·...·]-7">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 252 | ·</span><span·class="p"·data-group-id=" | 252 | ·</span><span·class="p"·data-group-id="6447980582-9">[</span><span·class="p"·data-group-id="6447980582-10">{</span><span·class="p"·data-group-id="6447980582-11">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi">2</s[·...·truncated·by·diffoscope;·len:·355,·SHA:·14eda911b469525a90d938a1724006eede6caa30cadbd84ad1bd2c369ab1d597·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 253 | ··</span><span·class="p"·data-group-id=" | 253 | ··</span><span·class="p"·data-group-id="6447980582-12">{</span><span·class="ss">suspend</span><span·class="p">,</span><span·class="w">······························</span><span·class="mi">57</span><span·class="p">,</span><span·class="w">····</span><span·class="mf">6.041</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·102,·SHA:·e7a4da9d71c07064df7ae0e38a231da1447ae0ea7833899a62674ce556f6d88c·...·]-12">}</span><span·class="p">,</span><span·class="w"> |
| 254 | ··</span><span·class="p"·data-group-id=" | 254 | ··</span><span·class="p"·data-group-id="6447980582-13">{</span><span·class="p"·data-group-id="6447980582-14">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="64479805[·...·truncated·by·diffoscope;·len:·409,·SHA:·067f15b6b4341ffdfaf96802c300c3f513443b655f5eb4626c93e1f53afbedb9·...·]-1">}</span><span·class="p">.</span></code></pre><p>If·you·compare·with·the·code·you·will·see·there·also·that |
| 255 | <code·class="inline">foo:create_file_slow/3</code>·was·called·only·from·<code·class="inline">foo:create_file_slow/2</code>·and | 255 | <code·class="inline">foo:create_file_slow/3</code>·was·called·only·from·<code·class="inline">foo:create_file_slow/2</code>·and |
| 256 | itself,·and·called·only·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>,·note·the·number·of·calls·to | 256 | itself,·and·called·only·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>,·note·the·number·of·calls·to |
| 257 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>.·But·here·we·see·that·<code·class="inline">suspend</code>·was·called·a·few·times.·This·is·a | 257 | <a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>.·But·here·we·see·that·<code·class="inline">suspend</code>·was·called·a·few·times.·This·is·a |
| 258 | pseudo·function·that·indicates·that·the·process·was·suspended·while·executing·in | 258 | pseudo·function·that·indicates·that·the·process·was·suspended·while·executing·in |
| 259 | <code·class="inline">foo:create_file_slow/3</code>,·and·since·there·is·no·<code·class="inline">receive</code>·or·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#yield/0"><code·class="inline">erlang:yield/0</code></a>·in | 259 | <code·class="inline">foo:create_file_slow/3</code>,·and·since·there·is·no·<code·class="inline">receive</code>·or·<a·href="../../../../erts-15.2.7/doc/html/erlang.html#yield/0"><code·class="inline">erlang:yield/0</code></a>·in |
| 260 | the·code,·it·must·be·Erlang·scheduling·suspensions,·or·the·trace·file·driver | 260 | the·code,·it·must·be·Erlang·scheduling·suspensions,·or·the·trace·file·driver |
| 261 | compensating·for·large·file·write·operations·(these·are·regarded·as·a·schedule | 261 | compensating·for·large·file·write·operations·(these·are·regarded·as·a·schedule |
| 262 | out·followed·by·a·schedule·in·to·the·same·process).</p><p>Let·us·find·the·<code·class="inline">suspend</code>·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7 | 262 | out·followed·by·a·schedule·in·to·the·same·process).</p><p>Let·us·find·the·<code·class="inline">suspend</code>·entry:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7223666109-1">{</span><span·class="p"·data-group-id="7223666109-2">[</span><span·class="p"·data-group-id="7223666109-3">{</span><span·class="p"·data-group-id="7223666109-4">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">write</[·...·truncated·by·diffoscope;·len:·404,·SHA:·57462038dab90e3e78c33155522c162e0662ee8cf5a9a021bb894afb6b496afa·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 263 | ··</span><span·class="p"·data-group-id="7 | 263 | ··</span><span·class="p"·data-group-id="7223666109-5">{</span><span·class="p"·data-group-id="7223666109-6">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="7223666109-[·...·truncated·by·diffoscope;·len:·298,·SHA:·f2642f5ca7a4e0b4770363111f4955d2ff6919ee5edd86349c187c4ba390a513·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 264 | ··</span><span·class="p"·data-group-id="7 | 264 | ··</span><span·class="p"·data-group-id="7223666109-7">{</span><span·class="p"·data-group-id="7223666109-8">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">drv_command</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="7223666109[·...·truncated·by·diffoscope;·len:·298,·SHA:·3496bc979a27601ccad5b6fa74840b567f23f3598ae0e3f10d4db60d36f2aea1·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 265 | ··</span><span·class="p"·data-group-id="7 | 265 | ··</span><span·class="p"·data-group-id="7223666109-9">{</span><span·class="p"·data-group-id="7223666109-10">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">drv_get_response</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7223[·...·truncated·by·diffoscope;·len:·300,·SHA:·c0127eec76296cd8c3259dc615fc420db160338fa4c92a203d7723fc7540b55f·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 266 | ··</span><span·class="p"·data-group-id="7 | 266 | ··</span><span·class="p"·data-group-id="7223666109-11">{</span><span·class="p"·data-group-id="7223666109-12">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">map</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7223666109-12">}</sp[·...·truncated·by·diffoscope;·len:·301,·SHA:·e0d5f035e746947515f32dcba2e4d0fae12ede4bf03c8cff8e6b97cddf8e5933·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 267 | ··</span><span·class="p"·data-group-id="7 | 267 | ··</span><span·class="p"·data-group-id="7223666109-13">{</span><span·class="p"·data-group-id="7223666109-14">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7223666109-14"[·...·truncated·by·diffoscope;·len:·301,·SHA:·509eeffebfce4960947af214e54d83e48af80a52f2d5bc24470bce91760f642d·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 268 | ··</span><span·class="p"·data-group-id="7 | 268 | ··</span><span·class="p"·data-group-id="7223666109-15">{</span><span·class="p"·data-group-id="7223666109-16">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="nb">port_command</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7223666109[·...·truncated·by·diffoscope;·len:·301,·SHA:·748ba85b367268f7ae7d53b0d1f2d688a5d507b180586079bbe36796ac913bda·...·]-15">}</span><span·class="p">,</span><span·class="w"> |
| 269 | ··</span><span·class="p"·data-group-id="7 | 269 | ··</span><span·class="p"·data-group-id="7223666109-17">{</span><span·class="p"·data-group-id="7223666109-18">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">drv_command</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="72236661[·...·truncated·by·diffoscope;·len:·301,·SHA:·d29ae03dadbf364862a57014406f2253d6672e7961c1b0908b25a9899a0075d2·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 270 | ··</span><span·class="p"·data-group-id="7 | 270 | ··</span><span·class="p"·data-group-id="7223666109-19">{</span><span·class="p"·data-group-id="7223666109-20">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">translate_response</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="7[·...·truncated·by·diffoscope;·len:·301,·SHA:·015648338e19e83e8bb394eef7095d9e5575dd967b8503fddd2b7c5cf3d38a8a·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 271 | ··</span><span·class="p"·data-group-id="7 | 271 | ··</span><span·class="p"·data-group-id="7223666109-21">{</span><span·class="p"·data-group-id="7223666109-22">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">'-drv_command/2-fun-0-'</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·311,·SHA:·d55570ae02e4fe0b2c258923e46ebbc337ae86135021b3a6775aa59d1662da2b·...·]-21">}</span><span·class="p">,</span><span·class="w"> |
| 272 | ··</span><span·class="p"·data-group-id="7 | 272 | ··</span><span·class="p"·data-group-id="7223666109-23">{</span><span·class="p"·data-group-id="7223666109-24">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">seq</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="7223666109-24">}</sp[·...·truncated·by·diffoscope;·len:·301,·SHA:·1827c989e51d4babcb62247001025a19a7965d9bb95bb22f399c4e49fc702383·...·]-23">}</span><span·class="p">,</span><span·class="w"> |
| 273 | ··</span><span·class="p"·data-group-id="7 | 273 | ··</span><span·class="p"·data-group-id="7223666109-25">{</span><span·class="p"·data-group-id="7223666109-26">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">'-create_file_slow/2-fun-0-'</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·310,·SHA:·1e75eec6ca0feae825708a7eaf7ef37ab342ceed88179fcca0585088eb2d6351·...·]-25">}</span><span·class="p">,</span><span·class="w"> |
| 274 | ··</span><span·class="p"·data-group-id="7 | 274 | ··</span><span·class="p"·data-group-id="7223666109-27">{</span><span·class="p"·data-group-id="7223666109-28">{</span><span·class="ss">erlang</span><span·class="p">,</span><span·class="nb">bump_reductions</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="7223666[·...·truncated·by·diffoscope;·len:·301,·SHA:·6cbf37a2470d1f0a37b982f4c7567e1e50362fa28d8905c1fec899f9cf67b4d7·...·]-27">}</span><span·class="p">,</span><span·class="w"> |
| 275 | ··</span><span·class="p"·data-group-id="7 | 275 | ··</span><span·class="p"·data-group-id="7223666109-29">{</span><span·class="p"·data-group-id="7223666109-30">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">open_int_setopts</span><span·class="p">,</span><span·class="mi">3</span><span·class="p"·data-group-id="722[·...·truncated·by·diffoscope;·len:·301,·SHA:·af4372d6eca409beafd26a6ef88d8dbfe4820cdc63bab00a37e9c571657ee437·...·]-29">}</span><span·class="p">,</span><span·class="w"> |
| 276 | ··</span><span·class="p"·data-group-id="7 | 276 | ··</span><span·class="p"·data-group-id="7223666109-31">{</span><span·class="p"·data-group-id="7223666109-32">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">i32</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="7223666109-32">}[·...·truncated·by·diffoscope;·len:·301,·SHA:·188ccc9c3fd0a804dd83e3c1f9191ea7dd1ffb9f00b353561b1300463b307fa8·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 277 | ··</span><span·class="p"·data-group-id="7 | 277 | ··</span><span·class="p"·data-group-id="7223666109-33">{</span><span·class="p"·data-group-id="7223666109-34">{</span><span·class="ss">fprof</span><span·class="p">,</span><span·class="ss">apply_start_stop</span><span·class="p">,</span><span·class="mi">4</span><span·class="p"·data-group-id="7223666[·...·truncated·by·diffoscope;·len:·355,·SHA:·8c33a6c448b7fc424724b4d5bf9d02710cd5d99178edab91329bd987ab4c78f9·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 278 | ·</span><span·class="p"·data-group-id="7 | 278 | ·</span><span·class="p"·data-group-id="7223666109-35">{</span><span·class="w">·</span><span·class="ss">suspend</span><span·class="p">,</span><span·class="w">·····························</span><span·class="mi">299</span><span·class="p">,</span><span·class="w">···</span><span·class="mf">32.002</s[·...·truncated·by·diffoscope;·len:·125,·SHA:·934af01dc30fe29b9428700bc2394364b2d85b28685ab122549f04189c214255·...·]-35">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 279 | ·</span><span·class="p"·data-group-id="7 | 279 | ·</span><span·class="p"·data-group-id="7223666109-36">[</span><span·class="w">·</span><span·class="p"·data-group-id="7223666109-36">]</span><span·class="p"·data-group-id="7223666109-1">}</span><span·class="p">.</span></code></pre><p>We·find·no·particularly·long·suspend·times,·so·no·function·seems·to·have·waited |
| 280 | in·a·receive·statement.·Actually,·<code·class="inline">prim_file:drv_command/4</code>·contains·a·receive | 280 | in·a·receive·statement.·Actually,·<code·class="inline">prim_file:drv_command/4</code>·contains·a·receive |
| 281 | statement,·but·in·this·test·program,·the·message·lies·in·the·process·receive | 281 | statement,·but·in·this·test·program,·the·message·lies·in·the·process·receive |
| 282 | buffer·when·the·receive·statement·is·entered.·We·also·see·that·the·total·suspend | 282 | buffer·when·the·receive·statement·is·entered.·We·also·see·that·the·total·suspend |
| 283 | time·for·the·test·run·is·small.</p><p>The·<code·class="inline">suspend</code>·pseudo·function·has·an·<code·class="inline">OWN</code>·time·of·zero.·This·is·to·prevent | 283 | time·for·the·test·run·is·small.</p><p>The·<code·class="inline">suspend</code>·pseudo·function·has·an·<code·class="inline">OWN</code>·time·of·zero.·This·is·to·prevent |
| 284 | the·process·total·<code·class="inline">OWN</code>·time·from·including·time·in·suspension.·Whether·suspend | 284 | the·process·total·<code·class="inline">OWN</code>·time·from·including·time·in·suspension.·Whether·suspend |
| 285 | time·is·really·<code·class="inline">ACC</code>·or·<code·class="inline">OWN</code>·time·is·more·of·a·philosophical·question.</p><p>Now·we·look·at·another·interesting·pseudo·function,·<code·class="inline">garbage_collect</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 285 | time·is·really·<code·class="inline">ACC</code>·or·<code·class="inline">OWN</code>·time·is·more·of·a·philosophical·question.</p><p>Now·we·look·at·another·interesting·pseudo·function,·<code·class="inline">garbage_collect</code>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5204644451-1">{</span><span·class="p"·data-group-id="5204644451-2">[</span><span·class="p"·data-group-id="5204644451-3">{</span><span·class="p"·data-group-id="5204644451-4">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">d[·...·truncated·by·diffoscope;·len:·405,·SHA:·a48aa56776bc305f5bece2164549642bff874c70b7e6dcbf3e0955eb1ec8c7ff·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 286 | ··</span><span·class="p"·data-group-id=" | 286 | ··</span><span·class="p"·data-group-id="5204644451-5">{</span><span·class="p"·data-group-id="5204644451-6">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="5204644451-6">}[·...·truncated·by·diffoscope;·len:·299,·SHA:·fa8a2f67257c54242cc68b1867d0a89b3cc153086a4d878de719472a0392de16·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 287 | ··</span><span·class="p"·data-group-id=" | 287 | ··</span><span·class="p"·data-group-id="5204644451-7">{</span><span·class="p"·data-group-id="5204644451-8">{</span><span·class="ss">lists</span><span·class="p">,</span><span·class="ss">map</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="5204644451-8">}</span[·...·truncated·by·diffoscope;·len:·352,·SHA:·a4c7e39b3bc15fd48cfad38fe8f8d5137313145a272f7889f7001f6c88da3ce2·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 288 | ·</span><span·class="p"·data-group-id=" | 288 | ·</span><span·class="p"·data-group-id="5204644451-9">{</span><span·class="w">·</span><span·class="nb">garbage_collect</span><span·class="p">,</span><span·class="w">······················</span><span·class="mi">43</span><span·class="p">,</span><span·class="w">····</span><span·class="mf">1.760</s[·...·truncated·by·diffoscope;·len:·125,·SHA:·c97fa2c882217fb91e8bd0d70607beb15f7a437626dfae6e7ed2ab72f19116e3·...·]-9">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 289 | ·</span><span·class="p"·data-group-id=" | 289 | ·</span><span·class="p"·data-group-id="5204644451-10">[</span><span·class="w">·</span><span·class="p"·data-group-id="5204644451-10">]</span><span·class="p"·data-group-id="5204644451-1">}</span><span·class="p">.</span></code></pre><p>Here·we·see·that·no·function·stands·out,·which·is·very·normal.</p><p>The·<code·class="inline">garbage_collect</code>·pseudo·function·has·not·an·<code·class="inline">OWN</code>·time·of·zero·like |
| 290 | <code·class="inline">suspend</code>,·instead·it·is·equal·to·the·<code·class="inline">ACC</code>·time.</p><p>Garbage·collection·often·occurs·while·a·process·is·suspended,·but·<code·class="inline">fprof</code>·hides | 290 | <code·class="inline">suspend</code>,·instead·it·is·equal·to·the·<code·class="inline">ACC</code>·time.</p><p>Garbage·collection·often·occurs·while·a·process·is·suspended,·but·<code·class="inline">fprof</code>·hides |
| 291 | this·fact·by·pretending·that·the·suspended·function·was·first·unsuspended·and | 291 | this·fact·by·pretending·that·the·suspended·function·was·first·unsuspended·and |
| 292 | then·garbage·collected.·Otherwise·the·printout·would·show·<code·class="inline">garbage_collect</code> | 292 | then·garbage·collected.·Otherwise·the·printout·would·show·<code·class="inline">garbage_collect</code> |
| 293 | being·called·from·<code·class="inline">suspend</code>,·but·not·which·function·that·might·have·caused·the | 293 | being·called·from·<code·class="inline">suspend</code>,·but·not·which·function·that·might·have·caused·the |
| 294 | garbage·collection.</p><p>Let·us·now·get·back·to·the·test·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 294 | garbage·collection.</p><p>Let·us·now·get·back·to·the·test·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="3610390803-1">{</span><span·class="p"·data-group-id="3610390803-2">[</span><span·class="p"·data-group-id="3610390803-3">{</span><span·class="p"·data-group-id="3610390803-4">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_[·...·truncated·by·diffoscope;·len:·405,·SHA:·99ddb50cf1b49cdb75d7972afdeb62538e865388e5e21848655389d45e7d95a2·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 295 | ··</span><span·class="p"·data-group-id=" | 295 | ··</span><span·class="p"·data-group-id="3610390803-5">{</span><span·class="p"·data-group-id="3610390803-6">{</span><span·class="ss">foo</span><span·class="p">,</span><span·class="ss">create_file_slow</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-id="3610390803[·...·truncated·by·diffoscope;·len:·352,·SHA:·572b63a36932a17b196e99e2899fd469b7eed81ae05771f5ab96d09647c33c4e·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 296 | ·</span><span·class="p"·data-group-id=" | 296 | ·</span><span·class="p"·data-group-id="3610390803-7">{</span><span·class="w">·</span><span·class="p"·data-group-id="3610390803-8">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi">2</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·323,·SHA:·c626f9c643807e6e4b5d9bc4204e1feae3eafa1deef84cb4d43a6125ae419a7a·...·]-7">}</span><span·class="p">,</span><span·class="w">·····</span><span·class="c1">%</span><span·class="w"> |
| 297 | ·</span><span·class="p"·data-group-id=" | 297 | ·</span><span·class="p"·data-group-id="3610390803-9">[</span><span·class="p"·data-group-id="3610390803-10">{</span><span·class="p"·data-group-id="3610390803-11">{</span><span·class="ss">prim_file</span><span·class="p">,</span><span·class="ss">write</span><span·class="p">,</span><span·class="mi"[·...·truncated·by·diffoscope;·len:·355,·SHA:·d528a10eb926464e6842ef8c056a1d416f4ca7ebe9da7c298760eff02ac490d9·...·]-10">}</span><span·class="p">,</span><span·class="w"> |
| 298 | ··</span><span·class="p"·data-group-id=" | 298 | ··</span><span·class="p"·data-group-id="3610390803-12">{</span><span·class="ss">suspend</span><span·class="p">,</span><span·class="w">······························</span><span·class="mi">53</span><span·class="p">,</span><span·class="w">····</span><span·class="mf">6.281</span><span·class="p">,</[·...·truncated·by·diffoscope;·len:·209,·SHA:·2d5d39c30b290daedec6ac26056a6623685abb0e854118f261b275dacce4e7be·...·]-1">}</span><span·class="p">.</span></code></pre><p>Not·unexpectedly,·we·see·that·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/file.html#write/2"><code·class="inline">file:write/2</code></a>·was·called·from |
| Max diff block lines reached; 46069/139459 bytes (33.03%) of diff not shown. | |||
| Offset 172, 18 lines modified | Offset 172, 18 lines modified | ||
| 172 | ··<a·href="#immediate-profiling"·class="hover-link"> | 172 | ··<a·href="#immediate-profiling"·class="hover-link"> |
| 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 173 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 174 | ··</a> | 174 | ··</a> |
| 175 | ··<span·class="text">Immediate·profiling</span> | 175 | ··<span·class="text">Immediate·profiling</span> |
| 176 | </h2> | 176 | </h2> |
| 177 | <p>It·is·also·possible·to·trace·immediately·into·the·profiling·process·that·creates | 177 | <p>It·is·also·possible·to·trace·immediately·into·the·profiling·process·that·creates |
| 178 | the·raw·profile·data,·that·is·to·short·circuit·the·tracing·and·profiling·steps | 178 | the·raw·profile·data,·that·is·to·short·circuit·the·tracing·and·profiling·steps |
| 179 | so·that·the·filesystem·is·not·used·for·tracing.</p><p>Do·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 179 | so·that·the·filesystem·is·not·used·for·tracing.</p><p>Do·something·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="6871216538-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tracer</span><span·class="p"·data-group-id="6871216538-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·[·...·truncated·by·diffoscope;·len:·201,·SHA:·2cc27f2299e7b6deba48e40c49d79558fb80d2c70591001bb80df79acd9a161b·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 180 | </span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id=" | 180 | </span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id="6871216538-3">(</span><span·class="p"·data-group-id="6871216538-4">[</span><span·class="ss">start</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6871216538-5">{</span><span·class="ss">tracer</span><span·class="p">,</sp[·...·truncated·by·diffoscope;·len:·203,·SHA:·b7eb8bcdff4de01ef448d779780be3c91513339fbc33fd8ae9faa0714ad7316e·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 181 | </span><span·class="c1">%%·Run·code·to·profile</span><span·class="w"> | 181 | </span><span·class="c1">%%·Run·code·to·profile</span><span·class="w"> |
| 182 | </span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id=" | 182 | </span><span·class="nc">fprof</span><span·class="p">:</span><span·class="nf">trace</span><span·class="p"·data-group-id="6871216538-6">(</span><span·class="ss">stop</span><span·class="p"·data-group-id="6871216538-6">)</span><span·class="p">;</span></code></pre><p>This·puts·less·load·on·the·filesystem,·but·much·more·load·on·the·Erlang·runtime |
| 183 | system.</p> | 183 | system.</p> |
| 184 | </div> | 184 | </div> |
| 185 | <div·class="bottom-actions"·id="bottom-actions"> | 185 | <div·class="bottom-actions"·id="bottom-actions"> |
| 186 | ··<div·class="bottom-actions-item"> | 186 | ··<div·class="bottom-actions-item"> |
| 187 | ······<a·href="erlang_mode_chapter.html"·class="bottom-actions-button"·rel="prev"> | 187 | ······<a·href="erlang_mode_chapter.html"·class="bottom-actions-button"·rel="prev"> |
| Offset 227, 15 lines modified | Offset 227, 15 lines modified | ||
| 227 | ······<p·class="built-using"> | 227 | ······<p·class="built-using"> |
| 228 | ········Built·using | 228 | ········Built·using |
| 229 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 229 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 230 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 230 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 231 | ······</p> | 231 | ······</p> |
| 232 | <p>Copyright·©·1996-202 | 232 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 233 | ····</footer> | 233 | ····</footer> |
| 234 | ··</div> | 234 | ··</div> |
| 235 | </main> | 235 | </main> |
| 236 | </div> | 236 | </div> |
| 237 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 237 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 238 | ··<script> | 238 | ··<script> |
| 239 | ··let·initialized·=·false; | 239 | ··let·initialized·=·false; |
| Offset 1777, 15 lines modified | Offset 1777, 15 lines modified | ||
| 1777 | ······<p·class="built-using"> | 1777 | ······<p·class="built-using"> |
| 1778 | ········Built·using | 1778 | ········Built·using |
| 1779 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1779 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1780 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1780 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1781 | ······</p> | 1781 | ······</p> |
| 1782 | <p>Copyright·©·1996-202 | 1782 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1783 | ····</footer> | 1783 | ····</footer> |
| 1784 | ··</div> | 1784 | ··</div> |
| 1785 | </main> | 1785 | </main> |
| 1786 | </div> | 1786 | </div> |
| 1787 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1787 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1788 | ··<script> | 1788 | ··<script> |
| 1789 | ··let·initialized·=·false; | 1789 | ··let·initialized·=·false; |
| Offset 229, 28 lines modified | Offset 229, 28 lines modified | ||
| 229 | ··<nonode@nohost.104.0>····5140··········0.7782········108 | 229 | ··<nonode@nohost.104.0>····5140··········0.7782········108 |
| 230 | ok</code></pre><h2·id="example-with-mnesia-transaction-benchmark"·class="section-heading"> | 230 | ok</code></pre><h2·id="example-with-mnesia-transaction-benchmark"·class="section-heading"> |
| 231 | ··<a·href="#example-with-mnesia-transaction-benchmark"·class="hover-link"> | 231 | ··<a·href="#example-with-mnesia-transaction-benchmark"·class="hover-link"> |
| 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 232 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 233 | ··</a> | 233 | ··</a> |
| 234 | ··<span·class="text">Example·with·Mnesia·Transaction·Benchmark</span> | 234 | ··<span·class="text">Example·with·Mnesia·Transaction·Benchmark</span> |
| 235 | </h2> | 235 | </h2> |
| 236 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="67 | 236 | <p>From·the·Erlang·shell:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Erlang</span><span·class="o">/</span><span·class="n">OTP</span><span·class="w">·</span><span·class="mi">27</span><span·class="w">·</span><span·class="p"·data-group-id="6747904940-1">[</span><span·class="ss">erts</span><span·class="o">-</span><span·class="mf">15.0</span><span·class="p"·data-group-id="6747904940-1">]</span><span·class="w">·</span><span·class="p"·data-group-id="6747904940-2">[</span><span·class="mi">64</span>[·...·truncated·by·diffoscope;·len:·1285,·SHA:·ccae40cdf1038c8bef896d2ff68db00d10f7d883a551c1dc91d6685324ce9304·...·]-7">]</span><span·class="w"> |
| 237 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="67 | 237 | </span><span·class="n">Eshell</span><span·class="w">·</span><span·class="n">V15</span><span·class="p">.</span><span·class="mi">0</span><span·class="w">·</span><span·class="p"·data-group-id="6747904940-8">(</span><span·class="ss">press</span><span·class="w">·</span><span·class="n">Ctrl</span><span·class="o">+</span><span·class="n">G</span><span·class="w">·</span><span·class="ss">to</span><span·class="w">·</span><span·class="ss">abort</span><span[·...·truncated·by·diffoscope;·len:·397,·SHA:·6f0cc66a4182ba5fb4171bd1f76c62d5bfdfcaa667328a939f6cd42587c9e1d7·...·]-8">)</span><span·class="gp·unselectable"> |
| 238 | 1>·</span><span·class="n">Conf</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="67 | 238 | 1>·</span><span·class="n">Conf</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="6747904940-10">[</span><span·class="p"·data-group-id="6747904940-11">{</span><span·class="ss">db_nodes</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="6747904940-12">[</span><span·class="nf">node</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·1153,·SHA:·42c3b3e5c4d4dd476b2640ae8b91ce918f9f157321f54f13a7119f0205f3228a·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 239 | ····</span><span·class="p"·data-group-id="67 | 239 | ····</span><span·class="p"·data-group-id="6747904940-20">{</span><span·class="ss">n_drivers_per_node</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">10</span><span·class="p"·data-group-id="6747904940-20">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·463,·SHA:·7f8d8194d808939317fa449e9964f77af22cf312fbb6cb1742733818f447d334·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 240 | ····</span><span·class="p"·data-group-id="67 | 240 | ····</span><span·class="p"·data-group-id="6747904940-23">{</span><span·class="ss">replica_type</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ram_copies</span><span·class="p"·data-group-id="6747904940-23">}</span><span·class="p">,</span><span·class="w">·</span><span·class="p"[·...·truncated·by·diffoscope;·len:·517,·SHA:·48af19fae1ba91d7abfeda028fa614a3f6d4d4a572c1686adee1a2aba46f86c8·...·]-10">]</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w"> |
| 241 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 241 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 242 | 2>·</span><span·class="nc">mnesia_tpcb</span><span·class="p">:</span><span·class="nf">init</span><span·class="p"·data-group-id="67 | 242 | 2>·</span><span·class="nc">mnesia_tpcb</span><span·class="p">:</span><span·class="nf">init</span><span·class="p"·data-group-id="6747904940-26">(</span><span·class="p"·data-group-id="6747904940-27">[</span><span·class="p"·data-group-id="6747904940-28">{</span><span·class="ss">use_running_mnesia</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">false</span><span·cl[·...·truncated·by·diffoscope;·len:·192,·SHA:·a0cf3805e95a7e4065f008390585c7c88b322627d0803a8811a473e1e0ac4282·...·]-26">)</span><span·class="p">.</span><span·class="w"> |
| 243 | ····</span><span·class="p">.</span><span·class="w"> | 243 | ····</span><span·class="p">.</span><span·class="w"> |
| 244 | ····</span><span·class="p">.</span><span·class="w"> | 244 | ····</span><span·class="p">.</span><span·class="w"> |
| 245 | ····</span><span·class="p">.</span><span·class="w"> | 245 | ····</span><span·class="p">.</span><span·class="w"> |
| 246 | </span><span·class="ss">ignore</span></code></pre><p>Initial·configuring·of·the·benchmark·is·done.·It·is·time·to·profile·the·actual | 246 | </span><span·class="ss">ignore</span></code></pre><p>Initial·configuring·of·the·benchmark·is·done.·It·is·time·to·profile·the·actual |
| 247 | Mnesia·benchmark:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">lcnt</span><span·class="p">:</span><span·class="nf">apply</span><span·class="p"·data-group-id=" | 247 | Mnesia·benchmark:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="nc">lcnt</span><span·class="p">:</span><span·class="nf">apply</span><span·class="p"·data-group-id="5994137952-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="5994137952-2">(</span><span·class="p"·data-group-id="5994137952-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·836,·SHA:·2ea14d40112e5f7c8dd866f0e33cfa30582d786f9880b2a4bd91f69ff57b02b2·...·]-7">{</span><span·class="ss">use_running_mnesia</span><span·class="p">,</span><span·class="w"> |
| 248 | ····</span><span·class="ss">true</span><span·class="p"·data-group-id=" | 248 | ····</span><span·class="ss">true</span><span·class="p"·data-group-id="5994137952-7">}</span><span·class="p">|</span><span·class="n">Conf</span><span·class="p"·data-group-id="5994137952-6">]</span><span·class="p"·data-group-id="5994137952-5">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tps</span><sp[·...·truncated·by·diffoscope;·len:·138,·SHA:·7d7f1b0846b266023581cbbc44af314561d233fa5f628c098014d832024a0d53·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 249 | ······</span><span·class="p">.</span><span·class="w"> | 249 | ······</span><span·class="p">.</span><span·class="w"> |
| 250 | ······</span><span·class="p">.</span><span·class="w"> | 250 | ······</span><span·class="p">.</span><span·class="w"> |
| 251 | ······</span><span·class="p">.</span><span·class="w"> | 251 | ······</span><span·class="p">.</span><span·class="w"> |
| 252 | </span><span·class="mf">50204.666666666664</span></code></pre><p>The·benchmark·runs·for·60·seconds·(followed·by·verification·and | 252 | </span><span·class="mf">50204.666666666664</span></code></pre><p>The·benchmark·runs·for·60·seconds·(followed·by·verification·and |
| 253 | analysis),·and·then·returns·the·number·of·transactions·per·seconds.</p><pre><code·class="text">4>·lcnt:swap_pid_keys(). | 253 | analysis),·and·then·returns·the·number·of·transactions·per·seconds.</p><pre><code·class="text">4>·lcnt:swap_pid_keys(). |
| 254 | ok | 254 | ok |
| 255 | 5>·lcnt:conflicts(). | 255 | 5>·lcnt:conflicts(). |
| Offset 346, 71 lines modified | Offset 346, 71 lines modified | ||
| 346 | problematic·if·they·begin·to·have·conflicts·even·if·it·is·not·shown·in·a | 346 | problematic·if·they·begin·to·have·conflicts·even·if·it·is·not·shown·in·a |
| 347 | particular·test.</p><h2·id="the-big-bang-benchmark"·class="section-heading"> | 347 | particular·test.</p><h2·id="the-big-bang-benchmark"·class="section-heading"> |
| 348 | ··<a·href="#the-big-bang-benchmark"·class="hover-link"> | 348 | ··<a·href="#the-big-bang-benchmark"·class="hover-link"> |
| 349 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 349 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 350 | ··</a> | 350 | ··</a> |
| 351 | ··<span·class="text">The·Big·Bang·Benchmark</span> | 351 | ··<span·class="text">The·Big·Bang·Benchmark</span> |
| 352 | </h2> | 352 | </h2> |
| 353 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9 | 353 | <pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9880861943-1">(</span><span·class="ss">big</span><span·class="p"·data-group-id="9880861943-1">)</span><span·class="p">.</span><span·class="w"> |
| 354 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9 | 354 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9880861943-2">(</span><span·class="p"·data-group-id="9880861943-3">[</span><span·class="ss">bang</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="9880861943-3">]</span><span·class="p"·data-group-id="9880861943-2">)</span><span·class="p">.</span><span·class="w"> |
| 355 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 355 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-4">(</span><span·class="p"·data-group-id="9880861943-5">[</span><span·class="p"·data-group-id="9880861943-5">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-6">[</span><span·class="p"·data-group-i[·...·truncated·by·diffoscope;·len:·142,·SHA:·2c0de88e01cf0349d2e60dac91a6111d9770adc1e6b73f6d92a6aefbe4f42219·...·]-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 356 | ····</span><span·class="k">receive</span><span·class="w"> | 356 | ····</span><span·class="k">receive</span><span·class="w"> |
| 357 | » </span><span·class="p"·data-group-id="9 | 357 | » </span><span·class="p"·data-group-id="9880861943-7">{</span><span·class="ss">procs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Procs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReportTo</span><span·class="p"·data-group-id="9880861943-7">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 358 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 358 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-8">(</span><span·class="n">Procs</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-9">[</span><span·class="p"·data-group-id="9880861943-9">]</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·67,·SHA:·3e34cb9895399258d1dfdbf99e6d40b3a333f50e04561fa72b01de3e80d13b2f·...·]-8">)</span><span·class="w"> |
| 359 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 359 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 360 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 360 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-10">(</span><span·class="p"·data-group-id="9880861943-11">[</span><span·class="p"·data-group-id="9880861943-11">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-12">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·148,·SHA:·083f15d5e9cd31a534d55de69ea5eba48d688c3b74fc6e0b43c8060e5022d996·...·]-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 361 | ····</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 361 | ····</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-13">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p"·data-group-id="9880861943-13">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·405,·SHA:·e1f671f7852ae5048da602db1e8efc057fce3beedd64c9dd338b389cc8b85e55·...·]-14">}</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 362 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 362 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-16">(</span><span·class="p"·data-group-id="9880861943-17">[</span><span·class="p"·data-group-id="9880861943-17">]</span><span·class="p">,</span><span·class="p"·data-group-id="9880861943-18">[</span><span·class="p"·data-group-id="9880861943-18">]<[·...·truncated·by·diffoscope;·len:·100,·SHA:·878fda09f87b26e36a401e4637ba637840e3b6b9f4cc01ff99e4a14bb00f177b·...·]-16">)</span><span·class="p">;</span><span·class="w"> |
| 363 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 363 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-19">(</span><span·class="p"·data-group-id="9880861943-20">[</span><span·class="p"·data-group-id="9880861943-20">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-21">[</span><span·class="p"·data-gro[·...·truncated·by·diffoscope;·len:·150,·SHA:·d42dd2e2db7da07b42ca9075946b9347da4f3f1e18bb364dd329bb7759318d15·...·]-19">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 364 | ····</span><span·class="n">ReportTo</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 364 | ····</span><span·class="n">ReportTo</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-22">{</span><span·class="ss">done</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9880861943-23">(</span><span·class="p"·data-group-id="9880861943-23">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·524fd2dbfc7237c5f97a57e49e4985cc2c2d9e142d838ce5c1440b6b98fb7c70·...·]-22">}</span><span·class="p">,</span><span·class="w"> |
| 365 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9010595145-24">(</span><span·class="p"·data-group-id="9010595145-25">[</span><span·class="p"·data-group-id="9010595145-25">]</span><span·class="p">,</span><span·class="p"·data-group-id="9010595145-26">[</span><span·class="p"·data-group-id="9010595145-26">]</span><span·class="p">,</span><span·class="ss">false</span><span·class="p"·data-group-id="9010595145-24">)</span><span·class="p">;</span><span·class="w"> | ||
| 366 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 365 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-24">(</span><span·class="p"·data-group-id="9880861943-25">[</span><span·class="p"·data-group-id="9880861943-25">]</span><span·class="p">,</span><span·class="p"·data-group-id[·...·truncated·by·diffoscope;·len:·202,·SHA:·f7558e9c6b1a4bbea87d44c9db1d512eed1e6b90eba14ac66a6736f1e0af54ca·...·];</span><span·class="w"> |
| 366 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-27">(</span><span·class="p"·data-group-id="9880861943-28">[</span><span·class="p"·data-group-id="9880861943-28">]</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-29">[</span><span·class="n">Po</span><span·class="p">|</span><span·class="n">Pos</span><span·class="p"·data-group-id="9880861943-29">]</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">Pongers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReportTo</span><span·class="p"·data-group-id="9880861943-27">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 367 | ····</span><span·class="k">receive</span><span·class="w"> | 367 | ····</span><span·class="k">receive</span><span·class="w"> |
| 368 | » </span><span·class="p"·data-group-id="9 | 368 | » </span><span·class="p"·data-group-id="9880861943-30">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p"·data-group-id="9880861943-30">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 369 | » ····</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 369 | » ····</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-31">{</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9880861943-32">(</span><span·class="p"·data-group-id="9880861943-32">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·524fd2dbfc7237c5f97a57e49e4985cc2c2d9e142d838ce5c1440b6b98fb7c70·...·]-31">}</span><span·class="p">,</span><span·class="w"> |
| 370 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 370 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-33">(</span><span·class="p"·data-group-id="9880861943-34">[</span><span·class="p"·data-group-id="9880861943-34">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pongers</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·72,·SHA:·11f19ed8ac4d571b3d60f8c8b421de5fe5243cdcce645acff01c75c120059f02·...·]-33">)</span><span·class="p">;</span><span·class="w"> |
| 371 | » </span><span·class="p"·data-group-id="9 | 371 | » </span><span·class="p"·data-group-id="9880861943-35">{</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Po</span><span·class="p"·data-group-id="9880861943-35">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 372 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 372 | » ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-36">(</span><span·class="p"·data-group-id="9880861943-37">[</span><span·class="p"·data-group-id="9880861943-37">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pos</span><span·class="p">,</span><span·class="w">·</span><spa[·...·truncated·by·diffoscope;·len:·68,·SHA:·89ebbe5f9d2e046ff1891106d770af77c80ca8d60fb38a1e994a1ea938ba546c·...·]-36">)</span><span·class="w"> |
| 373 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> | 373 | ····</span><span·class="k">end</span><span·class="p">;</span><span·class="w"> |
| 374 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9010595145-38">(</span><span·class="p"·data-group-id="9010595145-39">[</span><span·class="n">Pi</span><span·class="p">|</span><span·class="n">Pis</span><span·class="p"·data-group-id="9010595145-39">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Pongers</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReportTo</span><span·class="p"·data-group-id="9010595145-38">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 375 | 374 | </span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-38">(</span><span·class="p"·data-group-id="9880861943-39">[</span><span·class="n">Pi</span><span·class="p">|</span><span·class="n">Pis</span><span·class="p"·data-group-id="98808[·...·truncated·by·diffoscope;·len:·274,·SHA:·3dab0125c90d947c5d0cd8d186e3823b29fec21c7244b866f59541f4972cff6a·...·]</span><span·class="w"> | |
| 375 | ····</span><span·class="k">receive</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-40">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="n">From</span><span·class="p"·data-group-id="9880861943-40">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">From</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-41">{</span><span·class="ss">pong</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9880861943-42">(</span><span·class="p"·data-group-id="9880861943-42">)</span><span·class="p"·data-group-id="9880861943-41">}</span><span·class="w"> | ||
| 376 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> | 376 | ····</span><span·class="k">after</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="w"> |
| 377 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 377 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 378 | ····</span><span·class="n">Pi</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 378 | ····</span><span·class="n">Pi</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-43">{</span><span·class="ss">ping</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9880861943-44">(</span><span·class="p"·data-group-id="9880861943-44">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·524fd2dbfc7237c5f97a57e49e4985cc2c2d9e142d838ce5c1440b6b98fb7c70·...·]-43">}</span><span·class="p">,</span><span·class="w"> |
| 379 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9 | 379 | ····</span><span·class="nf">pinger</span><span·class="p"·data-group-id="9880861943-45">(</span><span·class="n">Pis</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-46">[</span><span·class="n">Pi</span><span·class="p">|</span><span·class="n">Pongers</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·147,·SHA:·b7d0d46c7a4e1e07c66b489ca444f10c4350b8ceebb6c94875e655d151ace7db·...·]-45">)</span><span·class="p">.</span><span·class="w"> |
| 380 | </span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9 | 380 | </span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9880861943-47">(</span><span·class="n">N</span><span·class="p"·data-group-id="9880861943-47">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="n">N</span><span·class="w">·</span><span·class="o">=<</span><span·class="w">·</span><span·class="mi">0</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 381 | ····</span><span·class="p"·data-group-id="9 | 381 | ····</span><span·class="p"·data-group-id="9880861943-48">[</span><span·class="p"·data-group-id="9880861943-48">]</span><span·class="p">;</span><span·class="w"> |
| 382 | </span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9 | 382 | </span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9880861943-49">(</span><span·class="n">N</span><span·class="p"·data-group-id="9880861943-49">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 383 | ····</span><span·class="p"·data-group-id="9 | 383 | ····</span><span·class="p"·data-group-id="9880861943-50">[</span><span·class="nf">spawn_link</span><span·class="p"·data-group-id="9880861943-51">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-52">(</span><span·class="p"·data-group-id="9880861943[·...·truncated·by·diffoscope;·len:·952,·SHA:·eac607400d7715079906717bf57efda2bc18dc27c7cf02f5d190a87d14577005·...·]-50">]</span><span·class="p">.</span><span·class="w"> |
| 384 | </span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9 | 384 | </span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9880861943-57">(</span><span·class="p"·data-group-id="9880861943-58">[</span><span·class="p"·data-group-id="9880861943-58">]</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9880861943-57">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 385 | ····</span><span·class="n">Msg</span><span·class="p">;</span><span·class="w"> | 385 | ····</span><span·class="n">Msg</span><span·class="p">;</span><span·class="w"> |
| 386 | </span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9 | 386 | </span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9880861943-59">(</span><span·class="p"·data-group-id="9880861943-60">[</span><span·class="n">P</span><span·class="p">|</span><span·class="n">Ps</span><span·class="p"·data-group-id="9880861943-60">]</span><span·class="p">,</span><span·class="w">·</span><span[·...·truncated·by·diffoscope;·len:·62,·SHA:·6c9d0a21858662315d848070fc9447a44c747b1b103235f54bbffd8743179aab·...·]-59">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 387 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w"> | 387 | ····</span><span·class="n">P</span><span·class="w">·</span><span·class="o">!</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p">,</span><span·class="w"> |
| 388 | ····</span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9 | 388 | ····</span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9880861943-61">(</span><span·class="n">Ps</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9880861943-61">)</span><span·class="p">.</span><span·class="w"> |
| 389 | </span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9 | 389 | </span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9880861943-62">(</span><span·class="p"·data-group-id="9880861943-63">[</span><span·class="p"·data-group-id="9880861943-63">]</span><span·class="p"·data-group-id="9880861943-62">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 390 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> | 390 | ····</span><span·class="ss">ok</span><span·class="p">;</span><span·class="w"> |
| 391 | </span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9 | 391 | </span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9880861943-64">(</span><span·class="p"·data-group-id="9880861943-65">[</span><span·class="n">M</span><span·class="p">|</span><span·class="n">Ms</span><span·class="p"·data-group-id="9880861943-65">]</span><span·class="p"·data-group-id="9880861943-64">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 392 | ····</span><span·class="k">receive</span><span·class="w"> | 392 | ····</span><span·class="k">receive</span><span·class="w"> |
| 393 | » </span><span·class="n">M</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 393 | » </span><span·class="n">M</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 394 | » ····</span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9 | 394 | » ····</span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9880861943-66">(</span><span·class="n">Ms</span><span·class="p"·data-group-id="9880861943-66">)</span><span·class="w"> |
| 395 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> | 395 | ····</span><span·class="k">end</span><span·class="p">.</span><span·class="w"> |
| 396 | </span><span·class="nf">bang</span><span·class="p"·data-group-id="9 | 396 | </span><span·class="nf">bang</span><span·class="p"·data-group-id="9880861943-67">(</span><span·class="n">N</span><span·class="p"·data-group-id="9880861943-67">)</span><span·class="w">·</span><span·class="k">when</span><span·class="w">·</span><span·class="nf">integer</span><span·class="p"·data-group-id="9880861943-68">(</s[·...·truncated·by·diffoscope;·len:·69,·SHA:·ce655a69394be27442e23dbc8bb88c462f1d204bb8ef49191cb0907c1509f407·...·]-68">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 397 | ····</span><span·class="n">Procs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9 | 397 | ····</span><span·class="n">Procs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">spawn_procs</span><span·class="p"·data-group-id="9880861943-69">(</span><span·class="n">N</span><span·class="p"·data-group-id="9880861943-69">)</span><span·class="p">,</span><span·class="w"> |
| 398 | ····</span><span·class="n">RMsgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="9 | 398 | ····</span><span·class="n">RMsgs</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">map</span><span·class="p"·data-group-id="9880861943-70">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-71">(</span><span·class="n">P</span><span·class="p"·data-group-id="9880861943-71">)</span><span·class="w">·</span><span·class="p">-></span[·...·truncated·by·diffoscope;·len:·400,·SHA:·27f7bb776f3ebdd2e97b5216823b9557c106df86ae46870646089e02ede6f1cc·...·]-70">)</span><span·class="p">,</span><span·class="w"> |
| 399 | ····</span><span·class="n">Start</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">now</span><span·class="p"·data-group-id="9 | 399 | ····</span><span·class="n">Start</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">now</span><span·class="p"·data-group-id="9880861943-73">(</span><span·class="p"·data-group-id="9880861943-73">)</span><span·class="p">,</span><span·class="w"> |
| 400 | ····</span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9 | 400 | ····</span><span·class="nf">send_procs</span><span·class="p"·data-group-id="9880861943-74">(</span><span·class="n">Procs</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-75">{</span><span·class="ss">procs</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Procs</span[·...·truncated·by·diffoscope;·len:·280,·SHA:·d00110a8de5f7f107cc08833c780d1f2d8fb91eaa195dbfd230328a90e5244c7·...·]-74">)</span><span·class="p">,</span><span·class="w"> |
| 401 | ····</span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9 | 401 | ····</span><span·class="nf">receive_msgs</span><span·class="p"·data-group-id="9880861943-77">(</span><span·class="n">RMsgs</span><span·class="p"·data-group-id="9880861943-77">)</span><span·class="p">,</span><span·class="w"> |
| 402 | ····</span><span·class="n">Stop</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">now</span><span·class="p"·data-group-id="9 | 402 | ····</span><span·class="n">Stop</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">now</span><span·class="p"·data-group-id="9880861943-78">(</span><span·class="p"·data-group-id="9880861943-78">)</span><span·class="p">,</span><span·class="w"> |
| 403 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id="9 | 403 | ····</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foreach</span><span·class="p"·data-group-id="9880861943-79">(</span><span·class="nf">fun</span><span·class="w">·</span><span·class="p"·data-group-id="9880861943-80">(</span><span·class="n">P</span><span·class="p"·data-group-id="9880861943-80">)</span><span·class="w">·</span><span·class="p">-></span[·...·truncated·by·diffoscope;·len:·430,·SHA:·78fb9419eda7183cce335baa4414d45707cd04f97c911293bcb1e6d0d3048313·...·]-79">)</span><span·class="p">,</span><span·class="w"> |
| 404 | ····</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">now_diff</span><span·class="p"·data-group-id="9 | 404 | ····</span><span·class="nc">timer</span><span·class="p">:</span><span·class="nf">now_diff</span><span·class="p"·data-group-id="9880861943-82">(</span><span·class="n">Stop</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Start</span><span·class="p"·data-group-id="9880861943-82">)</span><span·class="p">.</span></code></pre><h2·id="see-also"·class="section-heading"> |
| 405 | ··<a·href="#see-also"·class="hover-link"> | 405 | ··<a·href="#see-also"·class="hover-link"> |
| 406 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 406 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 407 | ··</a> | 407 | ··</a> |
| 408 | ··<span·class="text">See·Also</span> | 408 | ··<span·class="text">See·Also</span> |
| 409 | </h2> | 409 | </h2> |
| 410 | <p><a·href="lcnt.html">LCNT·Reference·Manual</a></p> | 410 | <p><a·href="lcnt.html">LCNT·Reference·Manual</a></p> |
| 411 | </div> | 411 | </div> |
| Offset 459, 15 lines modified | Offset 459, 15 lines modified | ||
| 459 | ······<p·class="built-using"> | 459 | ······<p·class="built-using"> |
| 460 | ········Built·using | 460 | ········Built·using |
| 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 463 | ······</p> | 463 | ······</p> |
| 464 | <p>Copyright·©·1996-202 | 464 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 465 | ····</footer> | 465 | ····</footer> |
| 466 | ··</div> | 466 | ··</div> |
| 467 | </main> | 467 | </main> |
| 468 | </div> | 468 | </div> |
| 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 470 | ··<script> | 470 | ··<script> |
| 471 | ··let·initialized·=·false; | 471 | ··let·initialized·=·false; |
| Offset 138, 16 lines modified | Offset 138, 16 lines modified | ||
| 138 | <p><a·href="#all/1"><code·class="inline">make:all/0,1</code></a>·and·<a·href="#files/2"><code·class="inline">make:files/1,2</code></a>·first·looks·for | 138 | <p><a·href="#all/1"><code·class="inline">make:all/0,1</code></a>·and·<a·href="#files/2"><code·class="inline">make:files/1,2</code></a>·first·looks·for |
| 139 | <code·class="inline">{emake,·Emake}</code>·in·options,·then·in·the·current·working·directory·for·a·file | 139 | <code·class="inline">{emake,·Emake}</code>·in·options,·then·in·the·current·working·directory·for·a·file |
| 140 | named·<code·class="inline">Emakefile</code>.·If·present·<code·class="inline">Emake</code>·should·contain·elements·like·this:</p><pre><code·class="text">Modules. | 140 | named·<code·class="inline">Emakefile</code>.·If·present·<code·class="inline">Emake</code>·should·contain·elements·like·this:</p><pre><code·class="text">Modules. |
| 141 | {Modules,Options}.</code></pre><p><code·class="inline">Modules</code>·is·an·atom·or·a·list·of·atoms.·It·can·be</p><ul><li>a·module·name,·for·exmaple,··<code·class="inline">file1</code></li><li>a·module·name·in·another·directory,·for·exmaple,·<code·class="inline">'../foo/file3'</code></li><li>a·set·of·modules·specified·with·a·wildcards,·for·exmaple,·<code·class="inline">'file*'</code></li><li>a·wildcard·indicating·all·modules·in·current·directory,·that·is:·<code·class="inline">'*'</code></li><li>a·list·of·any·of·the·above,·for·exmaple,·<code·class="inline">['file*','../foo/file3','File4']</code></li></ul><p><code·class="inline">Options</code>·is·a·list·of·compiler·options.</p><p><code·class="inline">Emakefile</code>·is·read·from·top·to·bottom.·If·a·module·matches·more·than·one·entry, | 141 | {Modules,Options}.</code></pre><p><code·class="inline">Modules</code>·is·an·atom·or·a·list·of·atoms.·It·can·be</p><ul><li>a·module·name,·for·exmaple,··<code·class="inline">file1</code></li><li>a·module·name·in·another·directory,·for·exmaple,·<code·class="inline">'../foo/file3'</code></li><li>a·set·of·modules·specified·with·a·wildcards,·for·exmaple,·<code·class="inline">'file*'</code></li><li>a·wildcard·indicating·all·modules·in·current·directory,·that·is:·<code·class="inline">'*'</code></li><li>a·list·of·any·of·the·above,·for·exmaple,·<code·class="inline">['file*','../foo/file3','File4']</code></li></ul><p><code·class="inline">Options</code>·is·a·list·of·compiler·options.</p><p><code·class="inline">Emakefile</code>·is·read·from·top·to·bottom.·If·a·module·matches·more·than·one·entry, |
| 142 | the·first·match·is·used.·For·example,·the·following·<code·class="inline">Emakefile</code>·means·that | 142 | the·first·match·is·used.·For·example,·the·following·<code·class="inline">Emakefile</code>·means·that |
| 143 | <code·class="inline">file1</code>·should·be·compiled·with·the·options·<code·class="inline">[debug_info,{i,"../foo"}]</code>,·while | 143 | <code·class="inline">file1</code>·should·be·compiled·with·the·options·<code·class="inline">[debug_info,{i,"../foo"}]</code>,·while |
| 144 | all·other·files·in·the·current·directory·should·be·compiled·with·only·the | 144 | all·other·files·in·the·current·directory·should·be·compiled·with·only·the |
| 145 | <code·class="inline">debug_info</code>·flag.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5272912925-1">{</span><span·class="ss">'file1'</span><span·class="p">,</span><span·class="p"·data-group-id="5272912925-2">[</span><span·class="ss">debug_info</span><span·class="p">,</span><span·class="p"·data-group-id="5272912925-3">{</span><span·class="ss">i</span><span·class="p">,</span><span·class="s">"../foo"</span><span·class="p"·data-group-id="5272912925-3">}</span><span·class="p"·data-group-id="5272912925-2">]</span><span·class="p"·data-group-id="5272912925-1">}</span><span·class="p">.</span><span·class="w"> | ||
| 146 | < | 145 | <code·class="inline">debug_info</code>·flag.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="7666663160-1">{</span><span·class="ss">'file1'</span><span·class="p">,</span><span·class="p"·data-group-id="7666663160-2">[·...·truncated·by·diffoscope;·len:·406,·SHA:·813b76a48bac9a31fd371bdf2d23f80d251741538a4580e6aa18e36b7a0a4bcb·...·]"> |
| 146 | </span><span·class="p"·data-group-id="7666663160-4">{</span><span·class="ss">'*'</span><span·class="p">,</span><span·class="p"·data-group-id="7666663160-5">[</span><span·class="ss">debug_info</span><span·class="p"·data-group-id="7666663160-5">]</span><span·class="p"·data-group-id="7666663160-4">}</span><span·class="p">.</span></code></pre><h2·id="module-see-also"·class="section-heading"> | ||
| 147 | ··<a·href="#module-see-also"·class="hover-link"> | 147 | ··<a·href="#module-see-also"·class="hover-link"> |
| 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 148 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 149 | ··</a> | 149 | ··</a> |
| 150 | ··<span·class="text">See·Also</span> | 150 | ··<span·class="text">See·Also</span> |
| 151 | </h2> | 151 | </h2> |
| 152 | <p><a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html">The·Compiler·Application</a></p> | 152 | <p><a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html">The·Compiler·Application</a></p> |
| 153 | ····</section> | 153 | ····</section> |
| Offset 378, 15 lines modified | Offset 378, 15 lines modified | ||
| 378 | ······<p·class="built-using"> | 378 | ······<p·class="built-using"> |
| 379 | ········Built·using | 379 | ········Built·using |
| 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 382 | ······</p> | 382 | ······</p> |
| 383 | <p>Copyright·©·1996-202 | 383 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 384 | ····</footer> | 384 | ····</footer> |
| 385 | ··</div> | 385 | ··</div> |
| 386 | </main> | 386 | </main> |
| 387 | </div> | 387 | </div> |
| 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 389 | ··<script> | 389 | ··<script> |
| 390 | ··let·initialized·=·false; | 390 | ··let·initialized·=·false; |
| Offset 163, 51 lines modified | Offset 163, 51 lines modified | ||
| 163 | </h2> | 163 | </h2> |
| 164 | <h3·id="fixed-bugs-and-malfunctions-2"·class="section-heading"> | 164 | <h3·id="fixed-bugs-and-malfunctions-2"·class="section-heading"> |
| 165 | ··<a·href="#fixed-bugs-and-malfunctions-2"·class="hover-link"> | 165 | ··<a·href="#fixed-bugs-and-malfunctions-2"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> | 168 | ··<span·class="text">Fixed·Bugs·and·Malfunctions</span> |
| 169 | </h3> | 169 | </h3> |
| 170 | <ul><li><p>Dialyzer·warnings·due·to·type·specs·added·in·<a·href="../../../../lib/runtime_tools-2.1.1/doc/html/dbg.html"><code·class="inline">dbg</code></a>·have·been·eliminated.</p><p>Own·Id:·OTP-18860</p></li><li><p>In·Erlang/OTP·26,·doing·a·<a·href="cover.html"><code·class="inline">cover</code></a>·analysis·on·the·<code·class="inline">line</code>·level·would·return·multiple·entries·for·lines·on·which·multiple·functions·were·defined.</p><p>For·example,·consider·this·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 170 | <ul><li><p>Dialyzer·warnings·due·to·type·specs·added·in·<a·href="../../../../lib/runtime_tools-2.1.1/doc/html/dbg.html"><code·class="inline">dbg</code></a>·have·been·eliminated.</p><p>Own·Id:·OTP-18860</p></li><li><p>In·Erlang/OTP·26,·doing·a·<a·href="cover.html"><code·class="inline">cover</code></a>·analysis·on·the·<code·class="inline">line</code>·level·would·return·multiple·entries·for·lines·on·which·multiple·functions·were·defined.</p><p>For·example,·consider·this·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="5118944580-1">(</span><span·class="ss">foo</span><span·class="p"·data-group-id="5118944580-1">)</span><span·class="p">.</span><span·class="w"> |
| 171 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 171 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="5118944580-2">(</span><span·class="p"·data-group-id="5118944580-3">[</span><span·class="ss">bar</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">baz</span><span·class="p">/</span><span·[·...·truncated·by·diffoscope;·len:·113,·SHA:·7858421b707c5bb6f65c4df9bf123dbfe5c3a8f42504680dd2b2c1a31ab323da·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 172 | </span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 172 | </span><span·class="nf">bar</span><span·class="p"·data-group-id="5118944580-4">(</span><span·class="p"·data-group-id="5118944580-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">.</span><span·class="w">·</span><span·class="nf">baz</span><spa[·...·truncated·by·diffoscope;·len:·90,·SHA:·b54dd60ae49681c87c3945d59c299807417f00a88791d7ddd93b82c522851e90·...·]-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="ss">not_ok</span><span·class="p">.</span></code></pre><p>In·Erlang/OTP·26,·analysing·on·the·<code·class="inline">line</code>·level·would·return·two·entries |
| 173 | for·line·4:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">compile_module</span><span·class="p"·data-group-id=" | 173 | for·line·4:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">compile_module</span><span·class="p"·data-group-id="3125185276-1">(</span><span·class="ss">foo</span><span·class="p"·data-group-id="3125185276-1">)</span><span·class="p">.</span><span·class="w"> |
| 174 | </span><span·class="p"·data-group-id=" | 174 | </span><span·class="p"·data-group-id="3125185276-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">foo</span><span·class="p"·data-group-id="3125185276-2">}</span><span·class="gp·unselectable"> |
| 175 | 2>·</span><span·class="nc">foo</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 175 | 2>·</span><span·class="nc">foo</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="3125185276-3">(</span><span·class="p"·data-group-id="3125185276-3">)</span><span·class="p">.</span><span·class="w"> |
| 176 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 176 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 177 | 3>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 177 | 3>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3125185276-4">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coverage</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">line</span><span·class="p"·data-group-id="3125185276-4">)</span><span·class="p">.</span><span·class="w"> |
| 178 | </span><span·class="p"·data-group-id=" | 178 | </span><span·class="p"·data-group-id="3125185276-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3125185276-6">[</span><span·class="p"·data-group-id="3125185276-7">{</span><span·class="p"·data-group-id="3125185276-8">{</span><span·class="ss">foo</spa[·...·truncated·by·diffoscope;·len:·977,·SHA:·ca179cf946b3da3f656633bae33cf10e162ac88762d09ff3d14c671fc87c7d9e·...·]-5">}</span><span·class="gp·unselectable"> |
| 179 | 4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 179 | 4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3125185276-13">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">calls</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">line</span><span·class="p"·data-group-id="3125185276-13">)</span><span·class="p">.</span><span·class="w"> |
| 180 | </span><span·class="p"·data-group-id=" | 180 | </span><span·class="p"·data-group-id="3125185276-14">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3125185276-15">[</span><span·class="p"·data-group-id="3125185276-16">{</span><span·class="p"·data-group-id="3125185276-17">{</span><span·class="ss">foo<[·...·truncated·by·diffoscope;·len:·1071,·SHA:·4d784a51a3f117b73e5f128b060932190fc442a66119d033ab0ab5e32d5859de·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 181 | </span><span·class="p"·data-group-id=" | 181 | </span><span·class="p"·data-group-id="3918305267-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">foo</span><span·class="p"·data-group-id="3918305267-2">}</span><span·class="gp·unselectable"> |
| 182 | 2>·</span><span·class="nc">foo</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id=" | 182 | 2>·</span><span·class="nc">foo</span><span·class="p">:</span><span·class="nf">bar</span><span·class="p"·data-group-id="3918305267-3">(</span><span·class="p"·data-group-id="3918305267-3">)</span><span·class="p">.</span><span·class="w"> |
| 183 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 183 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 184 | 3>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 184 | 3>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3918305267-4">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">coverage</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">line</span><span·class="p"·data-group-id="3918305267-4">)</span><span·class="p">.</span><span·class="w"> |
| 185 | </span><span·class="p"·data-group-id=" | 185 | </span><span·class="p"·data-group-id="3918305267-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3918305267-6">[</span><span·class="p"·data-group-id="3918305267-7">{</span><span·class="p"·data-group-id="3918305267-8">{</span><span·class="ss">foo</spa[·...·truncated·by·diffoscope;·len:·455,·SHA:·724bda147edb1e2233086bca006ccb49d2e37308a05da8db47ef3aa9cd46b2df·...·]-5">}</span><span·class="gp·unselectable"> |
| 186 | 4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id=" | 186 | 4>·</span><span·class="nc">cover</span><span·class="p">:</span><span·class="nf">analyse</span><span·class="p"·data-group-id="3918305267-10">(</span><span·class="ss">foo</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">calls</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">line</span><span·class="p"·data-group-id="3918305267-10">)</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="p"·data-group-id=" | 187 | </span><span·class="p"·data-group-id="3918305267-11">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="3918305267-12">[</span><span·class="p"·data-group-id="3918305267-13">{</span><span·class="p"·data-group-id="3918305267-14">{</span><span·class="ss">foo<[·...·truncated·by·diffoscope;·len:·307,·SHA:·6c13a2d045fc2cb8e7d331b35e990b3037b7816dba5d28d551ee6b90c1dd4abe·...·]-11">}</span></code></pre><p>Own·Id:·OTP-18998·Aux·Id:·<a·href="https://github.com/erlang/otp/issues/8159"·title="">GH-8159</a>,·<a·href="https://github.com/erlang/otp/pull/8182"·title="">PR-8182</a></p></li><li><p>Fixed·align·command·in·emacs·mode.</p><p>Own·Id:·OTP-19026·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8155"·title="">PR-8155</a></p></li></ul><h3·id="improvements-and-new-features-1"·class="section-heading"> |
| 188 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> | 188 | ··<a·href="#improvements-and-new-features-1"·class="hover-link"> |
| 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 189 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 190 | ··</a> | 190 | ··</a> |
| 191 | ··<span·class="text">Improvements·and·New·Features</span> | 191 | ··<span·class="text">Improvements·and·New·Features</span> |
| 192 | </h3> | 192 | </h3> |
| 193 | <ul><li><p>Triple-Quoted·Strings·has·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0064">EEP·64</a>.·See·<a·href="../../../../doc/system/data_types.html#string">String</a>·in·the·Reference·Manual.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">""</span><span·class="s">" | 193 | <ul><li><p>Triple-Quoted·Strings·has·been·implemented·as·per·<a·href="https://www.erlang.org/eeps/eep-0064">EEP·64</a>.·See·<a·href="../../../../doc/system/data_types.html#string">String</a>·in·the·Reference·Manual.</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">""</span><span·class="s">" |
| 194 | ···a | 194 | ···a |
| 195 | ···b | 195 | ···b |
| 196 | ···c | 196 | ···c |
| 197 | ···"</span><span·class="s">""</span><span·class="p">.</span><span·class="w"> | 197 | ···"</span><span·class="s">""</span><span·class="p">.</span><span·class="w"> |
| 198 | </span><span·class="s">"a\nb\nc"</span></code></pre><p>Adjacent·string·literals·without·intervening·white·space·is·now·a·syntax·error,·to·avoid·possible·confusion·with·triple-quoted·strings.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">"abc"</span><span·class="s">"xyz"</span><span·class="p">.</span><span·class="w"> | 198 | </span><span·class="s">"a\nb\nc"</span></code></pre><p>Adjacent·string·literals·without·intervening·white·space·is·now·a·syntax·error,·to·avoid·possible·confusion·with·triple-quoted·strings.·For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="s">"abc"</span><span·class="s">"xyz"</span><span·class="p">.</span><span·class="w"> |
| 199 | </span><span·class="s">"xyz"</span><span·class="p">.</span><span·class="w"> | 199 | </span><span·class="s">"xyz"</span><span·class="p">.</span><span·class="w"> |
| 200 | </span><span·class="gt">*·1:6:·adjacent·string·literals·without·intervening·white·space</span></code></pre><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18750·Aux·Id:·OTP-18746,·<a·href="https://github.com/erlang/otp/pull/7313"·title="">PR-7313</a>,·<a·href="https://github.com/erlang/otp/pull/7451"·title="">PR-7451</a></p></li><li><p>There·is·a·new·tool·<a·href="tprof.html"><code·class="inline">tprof</code></a>,·which·combines·the·functionality·of·<a·href="eprof.html"><code·class="inline">eprof</code></a>·and·<a·href="cprof.html"><code·class="inline">cprof</code></a>·under·one·interface·and·adds·heap·profiling.·It·also·has·functionality·to·help·with·profiling·process·hierarchies.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 200 | </span><span·class="gt">*·1:6:·adjacent·string·literals·without·intervening·white·space</span></code></pre><p><strong><em>·POTENTIAL·INCOMPATIBILITY·</em></strong></p><p>Own·Id:·OTP-18750·Aux·Id:·OTP-18746,·<a·href="https://github.com/erlang/otp/pull/7313"·title="">PR-7313</a>,·<a·href="https://github.com/erlang/otp/pull/7451"·title="">PR-7451</a></p></li><li><p>There·is·a·new·tool·<a·href="tprof.html"><code·class="inline">tprof</code></a>,·which·combines·the·functionality·of·<a·href="eprof.html"><code·class="inline">eprof</code></a>·and·<a·href="cprof.html"><code·class="inline">cprof</code></a>·under·one·interface·and·adds·heap·profiling.·It·also·has·functionality·to·help·with·profiling·process·hierarchies.</p><p><em>Example</em>:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="9246241395-1">(</span><span·class="ss">lists</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">seq</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9246241395-2">[</span><span·class="mi">1</span><spa[·...·truncated·by·diffoscope;·len:·458,·SHA:·1ccaea5784a16503e2b1e449c211c1626a0b4f568d239cb629ea919b4523b5da·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 201 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.92</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> | 201 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.92</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> |
| 202 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 202 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="9246241395-4">[</span><span·class="w">·····</span><span·class="c1">%]</span><span·class="w"> |
| 203 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id=" | 203 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id="9246241395-5">[</span><span·class="mf">100.00</span><span·class="p"·data-group-id="9246241395-5">]</span><span·class="w"> |
| 204 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id=" | 204 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id="9246241395-6">[</span><span·class="w">·</span><span·class="mf">100.0</span><span·class="p"·data-group-id="9246241395-6">]</span><span·class="w"> |
| 205 | </span><span·class="ss">ok</span></code></pre><p>Own·Id:·OTP-18756·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6639"·title="">PR-6639</a></p></li><li><p>Native·coverage·support·has·been·implemented·in·the·JIT.·It·will··automatically·be·used·by·the·<a·href="cover.html"><code·class="inline">cover</code></a>·tool·to·reduce·the·execution·overhead·when·running·cover-compiled·code.</p><p>There·are·also·new·APIs·to·support·native·coverage·without·using·the·<code·class="inline">cover</code>·tool.</p><p>To·instrument·code·for·native·coverage·it·must·be·compiled·with·the·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#line_coverage"><code·class="inline">line_coverage</code></a>·option.</p><p>To·enable·native·coverage·in·the·runtime·system,·start·it·like·so:</p><pre><code·class="text">$·erl·+JPcover·true</code></pre><p>There·are·also·the·following·new·functions·for·supporting·native·coverage:</p><ul><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#coverage_support/0"><code·class="inline">code:coverage_support/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage/2"><code·class="inline">code:get_coverage/2</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#reset_coverage/1"><code·class="inline">code:reset_coverage/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/0"><code·class="inline">code:get_coverage_mode/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/1"><code·class="inline">code:get_coverage_mode/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#set_coverage_mode/1"><code·class="inline">code:set_coverage_mode/1</code></a></li></ul><p>Own·Id:·OTP-18856·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7856"·title="">PR-7856</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Improved·the·align·command·in·emacs·mode.</p><p>Own·Id:·OTP-19080·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8288"·title="">PR-8288</a></p></li></ul><h2·id="tools-3-6"·class="section-heading"> | 205 | </span><span·class="ss">ok</span></code></pre><p>Own·Id:·OTP-18756·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/6639"·title="">PR-6639</a></p></li><li><p>Native·coverage·support·has·been·implemented·in·the·JIT.·It·will··automatically·be·used·by·the·<a·href="cover.html"><code·class="inline">cover</code></a>·tool·to·reduce·the·execution·overhead·when·running·cover-compiled·code.</p><p>There·are·also·new·APIs·to·support·native·coverage·without·using·the·<code·class="inline">cover</code>·tool.</p><p>To·instrument·code·for·native·coverage·it·must·be·compiled·with·the·<a·href="../../../../lib/compiler-8.6.1/doc/html/compile.html#line_coverage"><code·class="inline">line_coverage</code></a>·option.</p><p>To·enable·native·coverage·in·the·runtime·system,·start·it·like·so:</p><pre><code·class="text">$·erl·+JPcover·true</code></pre><p>There·are·also·the·following·new·functions·for·supporting·native·coverage:</p><ul><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#coverage_support/0"><code·class="inline">code:coverage_support/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage/2"><code·class="inline">code:get_coverage/2</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#reset_coverage/1"><code·class="inline">code:reset_coverage/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/0"><code·class="inline">code:get_coverage_mode/0</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#get_coverage_mode/1"><code·class="inline">code:get_coverage_mode/1</code></a></li><li><a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#set_coverage_mode/1"><code·class="inline">code:set_coverage_mode/1</code></a></li></ul><p>Own·Id:·OTP-18856·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/7856"·title="">PR-7856</a></p></li><li><p>The·documentation·has·been·migrated·to·use·Markdown·and·ExDoc.</p><p>Own·Id:·OTP-18955·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8026"·title="">PR-8026</a></p></li><li><p>Improved·the·align·command·in·emacs·mode.</p><p>Own·Id:·OTP-19080·Aux·Id:·<a·href="https://github.com/erlang/otp/pull/8288"·title="">PR-8288</a></p></li></ul><h2·id="tools-3-6"·class="section-heading"> |
| 206 | ··<a·href="#tools-3-6"·class="hover-link"> | 206 | ··<a·href="#tools-3-6"·class="hover-link"> |
| 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 207 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 208 | ··</a> | 208 | ··</a> |
| 209 | ··<span·class="text">Tools·3.6</span> | 209 | ··<span·class="text">Tools·3.6</span> |
| 210 | </h2> | 210 | </h2> |
| 211 | <h3·id="improvements-and-new-features-2"·class="section-heading"> | 211 | <h3·id="improvements-and-new-features-2"·class="section-heading"> |
| Offset 1528, 15 lines modified | Offset 1528, 15 lines modified | ||
| 1528 | ······<p·class="built-using"> | 1528 | ······<p·class="built-using"> |
| 1529 | ········Built·using | 1529 | ········Built·using |
| 1530 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1530 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1531 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1531 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1532 | ······</p> | 1532 | ······</p> |
| 1533 | <p>Copyright·©·1996-202 | 1533 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1534 | ····</footer> | 1534 | ····</footer> |
| 1535 | ··</div> | 1535 | ··</div> |
| 1536 | </main> | 1536 | </main> |
| 1537 | </div> | 1537 | </div> |
| 1538 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1538 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1539 | ··<script> | 1539 | ··<script> |
| 1540 | ··let·initialized·=·false; | 1540 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 770, 15 lines modified | Offset 770, 15 lines modified | ||
| 770 | ······<p·class="built-using"> | 770 | ······<p·class="built-using"> |
| 771 | ········Built·using | 771 | ········Built·using |
| 772 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 772 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 773 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 773 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 774 | ······</p> | 774 | ······</p> |
| 775 | <p>Copyright·©·1996-202 | 775 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 776 | ····</footer> | 776 | ····</footer> |
| 777 | ··</div> | 777 | ··</div> |
| 778 | </main> | 778 | </main> |
| 779 | </div> | 779 | </div> |
| 780 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 780 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 781 | ··<script> | 781 | ··<script> |
| 782 | ··let·initialized·=·false; | 782 | ··let·initialized·=·false; |
| Offset 156, 199 lines modified | Offset 156, 199 lines modified | ||
| 156 | The·<code·class="inline">tprof</code>·results·will·probably·be·incorrect·when·the·profiled·code·was | 156 | The·<code·class="inline">tprof</code>·results·will·probably·be·incorrect·when·the·profiled·code·was |
| 157 | reloading·during·a·profiling·session.</p></section><h2·id="module-ad-hoc-profiling"·class="section-heading"> | 157 | reloading·during·a·profiling·session.</p></section><h2·id="module-ad-hoc-profiling"·class="section-heading"> |
| 158 | ··<a·href="#module-ad-hoc-profiling"·class="hover-link"> | 158 | ··<a·href="#module-ad-hoc-profiling"·class="hover-link"> |
| 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 159 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 160 | ··</a> | 160 | ··</a> |
| 161 | ··<span·class="text">Ad-hoc·profiling</span> | 161 | ··<span·class="text">Ad-hoc·profiling</span> |
| 162 | </h2> | 162 | </h2> |
| 163 | <p>Ad-hoc·profiling·is·convenient·for·profiling·a·single·function·call.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 163 | <p>Ad-hoc·profiling·is·convenient·for·profiling·a·single·function·call.</p><p>For·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="8210939757-1">(</span><span·class="ss">lists</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">seq</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="8210939757-2">[</span><span·class="mi">1</span><spa[·...·truncated·by·diffoscope;·len:·458,·SHA:·edde1bc3f287bbd8ac2ca780a01458426356624904ee6cede68c9f90565d7220·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 164 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.92</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> | 164 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.92</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> |
| 165 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 165 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="8210939757-4">[</span><span·class="w">·····</span><span·class="c1">%]</span><span·class="w"> |
| 166 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id=" | 166 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id="8210939757-5">[</span><span·class="mf">100.00</span><span·class="p"·data-group-id="8210939757-5">]</span><span·class="w"> |
| 167 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id=" | 167 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id="8210939757-6">[</span><span·class="w">·</span><span·class="mf">100.0</span><span·class="p"·data-group-id="8210939757-6">]</span><span·class="w"> |
| 168 | </span><span·class="ss">ok</span></code></pre><p>By·default·tracing·is·enabled·for·all·functions·in·all·modules.·When·funs | 168 | </span><span·class="ss">ok</span></code></pre><p>By·default·tracing·is·enabled·for·all·functions·in·all·modules.·When·funs |
| 169 | are·created·in·the·interactive·shell,·parts·of·shell·code·are·also·traced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 169 | are·created·in·the·interactive·shell,·parts·of·shell·code·are·also·traced:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="3508840376-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="3508840376-2">(</span><span·class="p"·data-group-id="3508840376-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">lists</s[·...·truncated·by·diffoscope;·len:·645,·SHA:·bd1ed4a68d2b0986a5d9e6575e71fd3aa6e6ea221658294cf74728136592072c·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 170 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.95</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> | 170 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.95</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> |
| 171 | </span><span·class="n">FUNCTION</span><span·class="w">···················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 171 | </span><span·class="n">FUNCTION</span><span·class="w">···················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-5">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 172 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">do_apply</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">······</span><span·class="mf">3.00</span><span·class="w">··</span><span·class="p"·data-group-id=" | 172 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">do_apply</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">······</span><span·class="mf">3.00</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-6">[</span><span·class="w">·</span><span·class="mf">3.61</span><span·class="p"·data-group-id="3508840376-6">]</span><span·class="w"> |
| 173 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">match_list</span><span·class="p">/</span><span·class="mi">6</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">······</span><span·class="mf">3.00</span><span·class="w">··</span><span·class="p"·data-group-id=" | 173 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">match_list</span><span·class="p">/</span><span·class="mi">6</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">······</span><span·class="mf">3.00</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-7">[</span><span·class="w">·</span><span·class="mf">3.61</span><span·class="p"·data-group-id="3508840376-7">]</span><span·class="w"> |
| 174 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">reverse</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">······</span><span·class="mf">4.00</span><span·class="w">··</span><span·class="p"·data-group-id=" | 174 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">reverse</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">······</span><span·class="mf">4.00</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-8">[</span><span·class="w">·</span><span·class="mf">4.82</span><span·class="p"·data-group-id="3508840376-8">]</span><span·class="w"> |
| 175 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">expr_list</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">···········</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">······</span><span·class="mf">2.33</span><span·class="w">··</span><span·class="p"·data-group-id=" | 175 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">expr_list</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">···········</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">······</span><span·class="mf">2.33</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-9">[</span><span·class="w">·</span><span·class="mf">8.43</span><span·class="p"·data-group-id="3508840376-9">]</span><span·class="w"> |
| 176 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">ret_expr</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">············</span><span·class="mi">4</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">······</span><span·class="mf">4.00</span><span·class="w">··</span><span·class="p"·data-group-id=" | 176 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">ret_expr</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">············</span><span·class="mi">4</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">······</span><span·class="mf">4.00</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-10">[</span><span·class="mf">19.28</span><span·class="p"·data-group-id="3508840376-10">]</span><span·class="w"> |
| 177 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">merge_bindings</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·····</span><span·class="mi">18</span><span·class="w">······</span><span·class="mf">6.00</span><span·class="w">··</span><span·class="p"·data-group-id=" | 177 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">merge_bindings</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·····</span><span·class="mi">18</span><span·class="w">······</span><span·class="mf">6.00</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-11">[</span><span·class="mf">21.69</span><span·class="p"·data-group-id="3508840376-11">]</span><span·class="w"> |
| 178 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···············</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id=" | 178 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···············</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id="3508840376-12">[</span><span·class="mf">38.55</span><span·class="p"·data-group-id="3508840376-12">]</span><span·class="w"> |
| 179 | ·····································</span><span·class="mi">83</span><span·class="w">············</span><span·class="p"·data-group-id=" | 179 | ·····································</span><span·class="mi">83</span><span·class="w">············</span><span·class="p"·data-group-id="3508840376-13">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="3508840376-13">]</span><span·class="w"> |
| 180 | </span><span·class="ss">ok</span></code></pre><p>However,·it·is·possible·to·limit·the·trace·to·specific·functions·or·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 180 | </span><span·class="ss">ok</span></code></pre><p>However,·it·is·possible·to·limit·the·trace·to·specific·functions·or·modules:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="4111708464-1">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="4111708464-2">(</span><span·class="p"·data-group-id="4111708464-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">lists</s[·...·truncated·by·diffoscope;·len:·247,·SHA:·e9a6c96ef98b6faf81973990567f4abb8ecbeff1227947c42902929c6522802c·...·]4-3">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 181 | ·················</span><span·class="p"·data-group-id=" | 181 | ·················</span><span·class="p"·data-group-id="4111708464-4">#{</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">call_memory</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">pattern</span><span·class="w"[·...·truncated·by·diffoscope;·len:·558,·SHA:·3caa2f44b15953e9e5f2ab8fba6ce28b45e4dbd5e484b6eb250e16606af0db5f·...·]4-1">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.98</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> | 182 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.98</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">··</span><span·class="o">--</span><span·class="w">··</span><span·class="mf">100.00</span><span·class="c1">%·of·total·***·</span><span·class="w"> |
| 183 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 183 | </span><span·class="n">FUNCTION</span><span·class="w">··········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="4111708464-7">[</span><span·class="w">·····</span><span·class="c1">%]</span><span·class="w"> |
| 184 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id=" | 184 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·····</span><span·class="mi">32</span><span·class="w">······</span><span·class="mf">6.40</span><span·class="w">··</span><span·class="p"·data-group-id="4111708464-8">[</span><span·class="mf">100.00</span><span·class="p"·data-group-id="4111708464-8">]</span><span·class="w"> |
| 185 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id=" | 185 | ····························</span><span·class="mi">32</span><span·class="w">············</span><span·class="p"·data-group-id="4111708464-9">[</span><span·class="w">·</span><span·class="mf">100.0</span><span·class="p"·data-group-id="4111708464-9">]</span><span·class="w"> |
| 186 | </span><span·class="ss">ok</span></code></pre><p>Ad-hoc·profiling·results·can·be·printed·in·a·few·different·ways.·The·following | 186 | </span><span·class="ss">ok</span></code></pre><p>Ad-hoc·profiling·results·can·be·printed·in·a·few·different·ways.·The·following |
| 187 | examples·use·the·<code·class="inline">test</code>·module·defined·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 187 | examples·use·the·<code·class="inline">test</code>·module·defined·like·this:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="7761169389-1">(</span><span·class="ss">test</span><span·class="p"·data-group-id="7761169389-1">)</span><span·class="p">.</span><span·class="w"> |
| 188 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 188 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="7761169389-2">(</span><span·class="p"·data-group-id="7761169389-3">[</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="p"·data-group-id="7761169389-3">]</span><span·class="p"·data-group-id="7761169389-2">)</span><span·class="p">.</span><span·class="w"> |
| 189 | </span><span·class="nf">test_spawn</span><span·class="p"·data-group-id=" | 189 | </span><span·class="nf">test_spawn</span><span·class="p"·data-group-id="7761169389-4">(</span><span·class="p"·data-group-id="7761169389-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 190 | ····</span><span·class="p"·data-group-id=" | 190 | ····</span><span·class="p"·data-group-id="7761169389-5">{</span><span·class="n">Pid</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p"·data-group-id="7761169389-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·cl[·...·truncated·by·diffoscope;·len:·691,·SHA:·115a35d2049cc389bfc5502e2fb7079c710beee700a3646cdb378d9b20c70afe·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 191 | ····</span><span·class="k">receive</span><span·class="w"> | 191 | ····</span><span·class="k">receive</span><span·class="w"> |
| 192 | ········</span><span·class="p"·data-group-id=" | 192 | ········</span><span·class="p"·data-group-id="7761169389-9">{</span><span·class="ss">'DOWN'</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MRef</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">process</span><span·class="p">,</span><span·class="w">·<[·...·truncated·by·diffoscope;·len:·151,·SHA:·260e9d52c2d92ee77129d18f8ed0b50376110676f804c0ee75f798659202ad03·...·]-9">}</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 193 | ············</span><span·class="ss">done</span><span·class="w"> | 193 | ············</span><span·class="ss">done</span><span·class="w"> |
| 194 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>By·default·per-process·statistics·is·shown:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="429 | 194 | ····</span><span·class="k">end</span><span·class="p">.</span></code></pre><p>By·default·per-process·statistics·is·shown:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="1462950642-1">(</span><span·class="ss">test</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">test_spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1462950642-2">[</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·365,·SHA:·b9978615b103c7da6a4f226b010e31700cd45d255d60e9af20996c5c79160916·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.176</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">23.66</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 195 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.176</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">23.66</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 196 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 196 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-4">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 197 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 197 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-5">[</span><span·class="w">·</span><span·class="mf">9.09</span><span·class="p"·data-group-id="1462950642-5">]</span><span·class="w"> |
| 198 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 198 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-6">[</span><span·class="mf">27.27</span><span·class="p"·data-group-id="1462950642-6">]</span><span·class="w"> |
| 199 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 199 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-7">[</span><span·class="mf">63.64</span><span·class="p"·data-group-id="1462950642-7">]</span><span·class="w"> |
| 200 | ··································</span><span·class="mi">22</span><span·class="w">············</span><span·class="p"·data-group-id="429 | 200 | ··································</span><span·class="mi">22</span><span·class="w">············</span><span·class="p"·data-group-id="1462950642-8">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="1462950642-8">]</span><span·class="w"> |
| 201 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.177</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">76.34</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 201 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.177</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">76.34</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 202 | </span><span·class="n">FUNCTION</span><span·class="w">···········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 202 | </span><span·class="n">FUNCTION</span><span·class="w">···········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-9">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 203 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 203 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-10">[</span><span·class="w">·</span><span·class="mf">9.86</span><span·class="p"·data-group-id="1462950642-10">]</span><span·class="w"> |
| 204 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">·······</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="429 | 204 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">·······</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="1462950642-11">[</span><span·class="mf">90.14</span><span·class="p"·data-group-id="1462950642-11">]</span><span·class="w"> |
| 205 | ·····························</span><span·class="mi">71</span><span·class="w">············</span><span·class="p"·data-group-id="429 | 205 | ·····························</span><span·class="mi">71</span><span·class="w">············</span><span·class="p"·data-group-id="1462950642-12">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="1462950642-12">]</span></code></pre><p>The·following·example·prints·the·combined·memory·allocation·of·all |
| 206 | processes,·sorted·by·the·total·number·of·allocated·words·in·descending | 206 | processes,·sorted·by·the·total·number·of·allocated·words·in·descending |
| 207 | order:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 207 | order:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="3709509235-1">(</span><span·class="ss">test</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">test_spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="3709509235-2">[</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·4cdd03469c16a89d4ae6cb9f5bd1f050678fc896369e5c09edbb0d90c398c0a8·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 208 | ·················</span><span·class="p"·data-group-id=" | 208 | ·················</span><span·class="p"·data-group-id="3709509235-3">#{</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">call_memory</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">report</span><span·class="w">[·...·truncated·by·diffoscope;·len:·560,·SHA:·30ac1c42d06cd738a3285afa439462dcde2789c6938600548d7cafc1d3a3def1·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 209 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 209 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-6">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 210 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">············</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id=" | 210 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">············</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-7">[</span><span·class="mf">68.82</span><span·class="p"·data-group-id="3709509235-7">]</span><span·class="w"> |
| 211 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id=" | 211 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-8">[</span><span·class="mf">15.05</span><span·class="p"·data-group-id="3709509235-8">]</span><span·class="w"> |
| 212 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id=" | 212 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-9">[</span><span·class="w">·</span><span·class="mf">7.53</span><span·class="p"·data-group-id="3709509235-9">]</span><span·class="w"> |
| 213 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id=" | 213 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-10">[</span><span·class="w">·</span><span·class="mf">6.45</span><span·class="p"·data-group-id="3709509235-10">]</span><span·class="w"> |
| 214 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 214 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="3709509235-11">[</span><span·class="w">·</span><span·class="mf">2.15</span><span·class="p"·data-group-id="3709509235-11">]</span><span·class="w"> |
| 215 | ··································</span><span·class="mi">93</span><span·class="w">············</span><span·class="p"·data-group-id=" | 215 | ··································</span><span·class="mi">93</span><span·class="w">············</span><span·class="p"·data-group-id="3709509235-12">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="3709509235-12">]</span></code></pre><p>The·profiling·data·can·also·be·collected·for·further·inspection:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·un[·...·truncated·by·diffoscope;·len:·438,·SHA:·0a65daf52a815d0f740c1736ceb80bfbc42053ca1377fe9bb9114d1955064bb6·...·]-2">(</span><span·class="k">fun</span><span·class="w">·</span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="p">,</span><span·class="w"> |
| 216 | ·······································</span><span·class="p"·data-group-id=" | 216 | ·······································</span><span·class="p"·data-group-id="1996373830-3">#{</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">call_memory</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">report</span><span·class="w">[·...·truncated·by·diffoscope;·len:·184,·SHA:·523875a2949e24a59ab364fec0793ddb0417e54140bb483fd812c03db9799371·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 217 | </span><span·class="o"><</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="o">></span><span·class="gp·unselectable"> | 217 | </span><span·class="o"><</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="o">></span><span·class="gp·unselectable"> |
| 218 | 4>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 218 | 4>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="1996373830-4">(</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">inspect</span><span·class="p"·data-group-id="1996373830-5">(</span><span·class="n">ProfileData</span><span·class="p">,</span><span·class="w">·</span><span·class="ss[·...·truncated·by·diffoscope;·len:·377,·SHA:·6466cb7b747006713aa601e3770815a0802ae364a7d197d0282eb2efbd304236·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 219 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.223</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">23.66</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 219 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.223</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">23.66</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 220 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 220 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-7">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 221 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id=" | 221 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-8">[</span><span·class="mf">63.64</span><span·class="p"·data-group-id="1996373830-8">]</span><span·class="w"> |
| 222 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id=" | 222 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-9">[</span><span·class="mf">27.27</span><span·class="p"·data-group-id="1996373830-9">]</span><span·class="w"> |
| 223 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-10">[</span><span·class="w">·</span><span·class="mf">9.09</span><span·class="p"·data-group-id="1996373830-10">]</span><span·class="w"> |
| 224 | ··································</span><span·class="mi">22</span><span·class="w">············</span><span·class="p"·data-group-id=" | 224 | ··································</span><span·class="mi">22</span><span·class="w">············</span><span·class="p"·data-group-id="1996373830-11">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="1996373830-11">]</span><span·class="w"> |
| 225 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.224</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">76.34</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 225 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.224</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">76.34</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 226 | </span><span·class="n">FUNCTION</span><span·class="w">···········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 226 | </span><span·class="n">FUNCTION</span><span·class="w">···········</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-12">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 227 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">·······</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id=" | 227 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">seq_loop</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">·······</span><span·class="mi">9</span><span·class="w">·····</span><span·class="mi">64</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-13">[</span><span·class="mf">90.14</span><span·class="p"·data-group-id="1996373830-13">]</span><span·class="w"> |
| 228 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id=" | 228 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">apply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">7</span><span·class="w">·········</span><span·class="mi">7</span><span·class="w">··</span><span·class="p"·data-group-id="1996373830-14">[</span><span·class="w">·</span><span·class="mf">9.86</span><span·class="p"·data-group-id="1996373830-14">]</span><span·class="w"> |
| 229 | ·····························</span><span·class="mi">71</span><span·class="w">············</span><span·class="p"·data-group-id=" | 229 | ·····························</span><span·class="mi">71</span><span·class="w">············</span><span·class="p"·data-group-id="1996373830-15">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="1996373830-15">]</span></code></pre><p>Which·processes·that·are·profiled·depends·on·the·profiling·type.</p><ul><li><p><code·class="inline">call_count</code>·(default)·counts·calls·in·all·processes.</p></li><li><p><code·class="inline">call_time</code>·and·<code·class="inline">call_memory</code>·limits·the·profiling·to·the·processes |
| 230 | spawned·from·the·user-provided·function·(using·the·<code·class="inline">set_on_spawn</code> | 230 | spawned·from·the·user-provided·function·(using·the·<code·class="inline">set_on_spawn</code> |
| 231 | option·for·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/trace.html#process/4"><code·class="inline">trace:process/4</code></a>).</p></li></ul><p><code·class="inline">call_time</code>·and·<code·class="inline">call_memory</code>·can·be·restricted·to·profile·a·single·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id=" | 231 | option·for·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/trace.html#process/4"><code·class="inline">trace:process/4</code></a>).</p></li></ul><p><code·class="inline">call_time</code>·and·<code·class="inline">call_memory</code>·can·be·restricted·to·profile·a·single·process:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="9617322558-1">(</span><span·class="ss">test</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">test_spawn</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9617322558-2">[</span><span·class="p"·data-gr[·...·truncated·by·diffoscope;·len:·18,·SHA:·550b64a3d383f85d30fb2801fb67a4197840e44ff0f90ac0c77ff76f77f5a869·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 232 | ·················</span><span·class="p"·data-group-id=" | 232 | ·················</span><span·class="p"·data-group-id="9617322558-3">#{</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">call_memory</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">set_on_spawn</span><span·clas[·...·truncated·by·diffoscope;·len:·189,·SHA:·f162423963d1ca3458070a88052c3a64a55253df5d460f93a1e5e8ee0aa145c8·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 233 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.183</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">100.00</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 233 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.183</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">100.00</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 234 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 234 | </span><span·class="n">FUNCTION</span><span·class="w">················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="9617322558-4">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 235 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 235 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_monitor</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="9617322558-5">[</span><span·class="w">·</span><span·class="mf">9.09</span><span·class="p"·data-group-id="9617322558-5">]</span><span·class="w"> |
| 236 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id=" | 236 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">spawn_opt</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="9617322558-6">[</span><span·class="mf">27.27</span><span·class="p"·data-group-id="9617322558-6">]</span><span·class="w"> |
| 237 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id=" | 237 | </span><span·class="nc">test</span><span·class="p">:</span><span·class="ss">test_spawn</span><span·class="p">/</span><span·class="mi">0</span><span·class="w">···········</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">14</span><span·class="w">········</span><span·class="mi">14</span><span·class="w">··</span><span·class="p"·data-group-id="9617322558-7">[</span><span·class="mf">63.64</span><span·class="p"·data-group-id="9617322558-7">]</span></code></pre><p><a·href=""·id="pg_example"></a></p><p>Erlang·programs·can·perform·expensive·operations·in·other·processes |
| 238 | than·the·original·one.·You·can·include·multiple,·new,·or·even·all | 238 | than·the·original·one.·You·can·include·multiple,·new,·or·even·all |
| 239 | processes·in·the·trace·when·measuring·time·or·memory:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nc">pg</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id=" | 239 | processes·in·the·trace·when·measuring·time·or·memory:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">7>·</span><span·class="nc">pg</span><span·class="p">:</span><span·class="nf">start_link</span><span·class="p"·data-group-id="3558679402-1">(</span><span·class="p"·data-group-id="3558679402-1">)</span><span·class="p">.</span><span·class="w"> |
| 240 | </span><span·class="p"·data-group-id=" | 240 | </span><span·class="p"·data-group-id="3558679402-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.252</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="3558679402-2">}</span><span·class="gp·unselectable"> |
| 241 | 8>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="9287715013-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="9287715013-4">(</span><span·class="p"·data-group-id="9287715013-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">pg</span><span·class="p">:</span><span·class="nf">join</span><span·class="p"·data-group-id="9287715013-5">(</span><span·class="ss">group</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">self</span><span·class="p"·data-group-id="9287715013-6">(</span><span·class="p"·data-group-id="9287715013-6">)</span><span·class="p"·data-group-id="9287715013-5">)</span><span·class="w">·</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | ||
| 242 | 241 | 8>·</span><span·class="nc">tprof</span><span·class="p">:</span><span·class="nf">profile</span><span·class="p"·data-group-id="3558679402-3">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="3558679402-4">(</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·565,·SHA:·f10ea3a9f0c1d4dde146cbfd95bd4d30e34d8a233fb9b04fd2df1484920d49dc·...·]</span><span·class="w"> | |
| 242 | ·················</span><span·class="p"·data-group-id="3558679402-7">#{</span><span·class="ss">type</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="ss">call_memory</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">rootset</span><span·class="w">·</span><span·class="p">=></span><span·class="w">·</span><span·class="p"·data-group-id="3558679402-8">[</span><span·class="ss">pg</span><span·class="p"·data-group-id="3558679402-8">]</span><span·class="p"·data-group-id="3558679402-7">}</span><span·class="p"·data-group-id="3558679402-3">)</span><span·class="p">.</span><span·class="w"> | ||
| 243 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.252</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">52.86</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 243 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.252</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">52.86</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 244 | </span><span·class="n">FUNCTION</span><span·class="w">······················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 244 | </span><span·class="n">FUNCTION</span><span·class="w">······················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-9">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 245 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">leave_local_update_ets</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">·······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 245 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">leave_local_update_ets</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">·······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">2</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-10">[</span><span·class="w">·</span><span·class="mf">1.80</span><span·class="p"·data-group-id="3558679402-10">]</span><span·class="w"> |
| 246 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">reply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 246 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">reply</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-11">[</span><span·class="w">·</span><span·class="mf">2.70</span><span·class="p"·data-group-id="3558679402-11">]</span><span·class="w"> |
| 247 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 247 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-12">[</span><span·class="w">·</span><span·class="mf">2.70</span><span·class="p"·data-group-id="3558679402-12">]</span><span·class="w"> |
| 248 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">try_handle_call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 248 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">try_handle_call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">······</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-13">[</span><span·class="w">·</span><span·class="mf">2.70</span><span·class="p"·data-group-id="3558679402-13">]</span><span·class="w"> |
| 249 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">try_dispatch</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 249 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">try_dispatch</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-14">[</span><span·class="w">·</span><span·class="mf">2.70</span><span·class="p"·data-group-id="3558679402-14">]</span><span·class="w"> |
| 250 | </span><span·class="nc">maps</span><span·class="p">:</span><span·class="ss">iterator</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">···················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 250 | </span><span·class="nc">maps</span><span·class="p">:</span><span·class="ss">iterator</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">···················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-15">[</span><span·class="w">·</span><span·class="mf">3.60</span><span·class="p"·data-group-id="3558679402-15">]</span><span·class="w"> |
| 251 | </span><span·class="nc">maps</span><span·class="p">:</span><span·class="ss">take</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id=" | 251 | </span><span·class="nc">maps</span><span·class="p">:</span><span·class="ss">take</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">·······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">6</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-16">[</span><span·class="w">·</span><span·class="mf">5.41</span><span·class="p"·data-group-id="3558679402-16">]</span><span·class="w"> |
| 252 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join_local_update_ets</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id=" | 252 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join_local_update_ets</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-17">[</span><span·class="w">·</span><span·class="mf">7.21</span><span·class="p"·data-group-id="3558679402-17">]</span><span·class="w"> |
| 253 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id=" | 253 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-18">[</span><span·class="w">·</span><span·class="mf">7.21</span><span·class="p"·data-group-id="3558679402-18">]</span><span·class="w"> |
| 254 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">9</span><span·class="w">·········</span><span·class="mi">9</span><span·class="w">··</span><span·class="p"·data-group-id=" | 254 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">9</span><span·class="w">·········</span><span·class="mi">9</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-19">[</span><span·class="w">·</span><span·class="mf">8.11</span><span·class="p"·data-group-id="3558679402-19">]</span><span·class="w"> |
| 255 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">loop</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">·················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">9</span><span·class="w">·········</span><span·class="mi">4</span><span·class="w">··</span><span·class="p"·data-group-id=" | 255 | </span><span·class="nc">gen_server</span><span·class="p">:</span><span·class="ss">loop</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">·················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">9</span><span·class="w">·········</span><span·class="mi">4</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-20">[</span><span·class="w">·</span><span·class="mf">8.11</span><span·class="p"·data-group-id="3558679402-20">]</span><span·class="w"> |
| 256 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="ss">lookup</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">······················</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">10</span><span·class="w">·········</span><span·class="mi">5</span><span·class="w">··</span><span·class="p"·data-group-id=" | 256 | </span><span·class="nc">ets</span><span·class="p">:</span><span·class="ss">lookup</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">······················</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">10</span><span·class="w">·········</span><span·class="mi">5</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-21">[</span><span·class="w">·</span><span·class="mf">9.01</span><span·class="p"·data-group-id="3558679402-21">]</span><span·class="w"> |
| 257 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join_local</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···················</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">11</span><span·class="w">········</span><span·class="mi">11</span><span·class="w">··</span><span·class="p"·data-group-id=" | 257 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join_local</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···················</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">11</span><span·class="w">········</span><span·class="mi">11</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-22">[</span><span·class="w">·</span><span·class="mf">9.91</span><span·class="p"·data-group-id="3558679402-22">]</span><span·class="w"> |
| 258 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">notify_group</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">·················</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id=" | 258 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">notify_group</span><span·class="p">/</span><span·class="mi">5</span><span·class="w">·················</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-23">[</span><span·class="mf">14.41</span><span·class="p"·data-group-id="3558679402-23">]</span><span·class="w"> |
| 259 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">setelement</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···············</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id=" | 259 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">setelement</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">···············</span><span·class="mi">2</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-24">[</span><span·class="mf">14.41</span><span·class="p"·data-group-id="3558679402-24">]</span><span·class="w"> |
| 260 | ·······································</span><span·class="mi">111</span><span·class="w">············</span><span·class="p"·data-group-id=" | 260 | ·······································</span><span·class="mi">111</span><span·class="w">············</span><span·class="p"·data-group-id="3558679402-25">[</span><span·class="mf">100.0</span><span·class="p"·data-group-id="3558679402-25">]</span><span·class="w"> |
| 261 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.255</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">47.14</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> | 261 | </span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="o">*</span><span·class="w">·</span><span·class="n">Process</span><span·class="w">·</span><span·class="o"><</span><span·class="mf">0.255</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="w">····</span><span·class="o">--</span><span·class="w">·</span><span·class="mf">47.14</span><span·class="w">·</span><span·class="c1">%·of·total·allocations·***</span><span·class="w"> |
| 262 | </span><span·class="n">FUNCTION</span><span·class="w">···················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id=" | 262 | </span><span·class="n">FUNCTION</span><span·class="w">···················</span><span·class="n">CALLS</span><span·class="w">··</span><span·class="n">WORDS</span><span·class="w">··</span><span·class="n">PER</span><span·class="w">·</span><span·class="n">CALL</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-26">[</span><span·class="w">····</span><span·class="c1">%]</span><span·class="w"> |
| 263 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">match_list</span><span·class="p">/</span><span·class="mi">6</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 263 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">match_list</span><span·class="p">/</span><span·class="mi">6</span><span·class="w">··········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-27">[</span><span·class="w">·</span><span·class="mf">3.03</span><span·class="p"·data-group-id="3558679402-27">]</span><span·class="w"> |
| 264 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">···············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 264 | </span><span·class="nc">erlang</span><span·class="p">:</span><span·class="nb">monitor</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">···············</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">3</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-28">[</span><span·class="w">·</span><span·class="mf">3.03</span><span·class="p"·data-group-id="3558679402-28">]</span><span·class="w"> |
| 265 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">reverse</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 265 | </span><span·class="nc">lists</span><span·class="p">:</span><span·class="ss">reverse</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">················</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-29">[</span><span·class="w">·</span><span·class="mf">4.04</span><span·class="p"·data-group-id="3558679402-29">]</span><span·class="w"> |
| 266 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">4</span><span·class="w">··</span><span·class="p"·data-group-id=" | 266 | </span><span·class="nc">pg</span><span·class="p">:</span><span·class="ss">join</span><span·class="p">/</span><span·class="mi">3</span><span·class="w">······················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">4</span><span·class="w">·········</span><span·class="mi">4</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-30">[</span><span·class="w">·</span><span·class="mf">4.04</span><span·class="p"·data-group-id="3558679402-30">]</span><span·class="w"> |
| 267 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">add_bindings</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·········</span><span·class="mi">5</span><span·class="w">··</span><span·class="p"·data-group-id=" | 267 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">add_bindings</span><span·class="p">/</span><span·class="mi">2</span><span·class="w">········</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">5</span><span·class="w">·········</span><span·class="mi">5</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-31">[</span><span·class="w">·</span><span·class="mf">5.05</span><span·class="p"·data-group-id="3558679402-31">]</span><span·class="w"> |
| 268 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">do_apply</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">············</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id=" | 268 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">do_apply</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">············</span><span·class="mi">2</span><span·class="w">······</span><span·class="mi">6</span><span·class="w">·········</span><span·class="mi">3</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-32">[</span><span·class="w">·</span><span·class="mf">6.06</span><span·class="p"·data-group-id="3558679402-32">]</span><span·class="w"> |
| 269 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">·····················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id=" | 269 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">·····················</span><span·class="mi">1</span><span·class="w">······</span><span·class="mi">8</span><span·class="w">·········</span><span·class="mi">8</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-33">[</span><span·class="w">·</span><span·class="mf">8.08</span><span·class="p"·data-group-id="3558679402-33">]</span><span·class="w"> |
| 270 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">expr_list</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">···········</span><span·class="mi">4</span><span·class="w">·····</span><span·class="mi">10</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id=" | 270 | </span><span·class="nc">erl_eval</span><span·class="p">:</span><span·class="ss">expr_list</span><span·class="p">/</span><span·class="mi">7</span><span·class="w">···········</span><span·class="mi">4</span><span·class="w">·····</span><span·class="mi">10</span><span·class="w">·········</span><span·class="mi">2</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-34">[</span><span·class="mf">10.10</span><span·class="p"·data-group-id="3558679402-34">]</span><span·class="w"> |
| 271 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">do_call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">········</span><span·class="mi">16</span><span·class="w">··</span><span·class="p"·data-group-id=" | 271 | </span><span·class="nc">gen</span><span·class="p">:</span><span·class="ss">do_call</span><span·class="p">/</span><span·class="mi">4</span><span·class="w">··················</span><span·class="mi">1</span><span·class="w">·····</span><span·class="mi">16</span><span·class="w">········</span><span·class="mi">16</span><span·class="w">··</span><span·class="p"·data-group-id="3558679402-35">[</span><span·class="mf">16.16</span><span·class="p"·data-group-id="3558679402-35">]</span><span·class="w"> |
| Max diff block lines reached; 54944/160647 bytes (34.20%) of diff not shown. | |||
| Offset 3576, 15 lines modified | Offset 3576, 15 lines modified | ||
| 3576 | ······<p·class="built-using"> | 3576 | ······<p·class="built-using"> |
| 3577 | ········Built·using | 3577 | ········Built·using |
| 3578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3580 | ······</p> | 3580 | ······</p> |
| 3581 | <p>Copyright·©·1996-202 | 3581 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3582 | ····</footer> | 3582 | ····</footer> |
| 3583 | ··</div> | 3583 | ··</div> |
| 3584 | </main> | 3584 | </main> |
| 3585 | </div> | 3585 | </div> |
| 3586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3587 | ··<script> | 3587 | ··<script> |
| 3588 | ··let·initialized·=·false; | 3588 | ··let·initialized·=·false; |
| Offset 136, 69 lines modified | Offset 136, 69 lines modified | ||
| 136 | reading;·not·all·of·the·concepts·used·are·explained,·and·it·is·assumed·that·the | 136 | reading;·not·all·of·the·concepts·used·are·explained,·and·it·is·assumed·that·the |
| 137 | <a·href="xref.html">reference·manual</a>·has·been·at·least·skimmed.</p><h2·id="module-check"·class="section-heading"> | 137 | <a·href="xref.html">reference·manual</a>·has·been·at·least·skimmed.</p><h2·id="module-check"·class="section-heading"> |
| 138 | ··<a·href="#module-check"·class="hover-link"> | 138 | ··<a·href="#module-check"·class="hover-link"> |
| 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 139 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 140 | ··</a> | 140 | ··</a> |
| 141 | ··<span·class="text">Module·Check</span> | 141 | ··<span·class="text">Module·Check</span> |
| 142 | </h2> | 142 | </h2> |
| 143 | <p>Assume·we·want·to·check·the·following·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 143 | <p>Assume·we·want·to·check·the·following·module:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="0802081793-1">(</span><span·class="ss">my_module</span><span·class="p"·data-group-id="0802081793-1">)</span><span·class="p">.</span><span·class="w"> |
| 144 | </span><span·class="w"> | 144 | </span><span·class="w"> |
| 145 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 145 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="0802081793-2">(</span><span·class="p"·data-group-id="0802081793-3">[</span><span·class="ss">t</span><span·class="p">/</span><span·class="mi">1</span><span·class="p"·data-group-id="0802081793-3">]</span><span·class="p"·data-group-id="0802081793-2">)</span><span·class="p">.</span><span·class="w"> |
| 146 | </span><span·class="nf">t</span><span·class="p"·data-group-id=" | 146 | </span><span·class="nf">t</span><span·class="p"·data-group-id="0802081793-4">(</span><span·class="n">A</span><span·class="p"·data-group-id="0802081793-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 147 | ··</span><span·class="nc">my_module</span><span·class="p">:</span><span·class="nf">t2</span><span·class="p"·data-group-id=" | 147 | ··</span><span·class="nc">my_module</span><span·class="p">:</span><span·class="nf">t2</span><span·class="p"·data-group-id="0802081793-5">(</span><span·class="n">A</span><span·class="p"·data-group-id="0802081793-5">)</span><span·class="p">.</span><span·class="w"> |
| 148 | </span><span·class="nf">t2</span><span·class="p"·data-group-id=" | 148 | </span><span·class="nf">t2</span><span·class="p"·data-group-id="0802081793-6">(</span><span·class="p">_</span><span·class="p"·data-group-id="0802081793-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 149 | ··</span><span·class="ss">true</span><span·class="p">.</span></code></pre><p>Cross·reference·data·are·read·from·BEAM·files,·so·the·first·step·when·checking | 149 | ··</span><span·class="ss">true</span><span·class="p">.</span></code></pre><p>Cross·reference·data·are·read·from·BEAM·files,·so·the·first·step·when·checking |
| 150 | an·edited·module·is·to·compile·it:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">c</span><span·class="p"·data-group-id=" | 150 | an·edited·module·is·to·compile·it:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nf">c</span><span·class="p"·data-group-id="3083942748-1">(</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">debug_info</span><span·class="p"·data-group-id="3083942748-1">)</span><span·class="p">.</span><span·class="w"> |
| 151 | </span><span·class="p">.</span><span·class="o">/</span><span·class="ss">my_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">10</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">t2</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">unused</span><span·class="w"> | 151 | </span><span·class="p">.</span><span·class="o">/</span><span·class="ss">my_module</span><span·class="p">.</span><span·class="nc">erl</span><span·class="p">:</span><span·class="mi">10</span><span·class="p">:</span><span·class="w">·</span><span·class="n">Warning</span><span·class="p">:</span><span·class="w">·</span><span·class="ss">function</span><span·class="w">·</span><span·class="ss">t2</span><span·class="p">/</span><span·class="mi">1</span><span·class="w">·</span><span·class="ss">is</span><span·class="w">·</span><span·class="ss">unused</span><span·class="w"> |
| 152 | </span><span·class="p"·data-group-id=" | 152 | </span><span·class="p"·data-group-id="3083942748-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">my_module</span><span·class="p"·data-group-id="3083942748-2">}</span></code></pre><p>The·<code·class="inline">debug_info</code>·option·ensures·that·the·BEAM·file·contains·debug·information, |
| 153 | which·makes·it·possible·to·find·unused·local·functions.</p><p>The·module·can·now·be·checked·for·calls·to | 153 | which·makes·it·possible·to·find·unused·local·functions.</p><p>The·module·can·now·be·checked·for·calls·to |
| 154 | <a·href="xref.html#deprecated_function">deprecated·functions</a>,·calls·to | 154 | <a·href="xref.html#deprecated_function">deprecated·functions</a>,·calls·to |
| 155 | <a·href="xref.html#undefined_function">undefined·functions</a>,·and·for·unused·local | 155 | <a·href="xref.html#undefined_function">undefined·functions</a>,·and·for·unused·local |
| 156 | functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">m</span><span·class="p"·data-group-id=" | 156 | functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">m</span><span·class="p"·data-group-id="7975395456-1">(</span><span·class="ss">my_module</span><span·class="p"·data-group-id="7975395456-1">)</span><span·class="w"> |
| 157 | </span><span·class="p"·data-group-id=" | 157 | </span><span·class="p"·data-group-id="7975395456-2">[</span><span·class="p"·data-group-id="7975395456-3">{</span><span·class="ss">deprecated</span><span·class="p">,</span><span·class="p"·data-group-id="7975395456-4">[</span><span·class="p"·data-group-id="7975395456-4">]</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·24,·SHA:·cb59598a245834adf54f81f126c5cf7ee1cf063476b3bfb0f6b56bf8d70436b0·...·]-3">}</span><span·class="p">,</span><span·class="w"> |
| 158 | ·</span><span·class="p"·data-group-id=" | 158 | ·</span><span·class="p"·data-group-id="7975395456-5">{</span><span·class="ss">undefined</span><span·class="p">,</span><span·class="p"·data-group-id="7975395456-6">[</span><span·class="p"·data-group-id="7975395456-7">{</span><span·class="p"·data-group-id="7975395456-8">{</span><span·class="ss">m[·...·truncated·by·diffoscope;·len:·575,·SHA:·e66e9cf6e0c4198667ecb5c3b5f507efa8e6bae41d93e5a6db96303874c118da·...·]-5">}</span><span·class="p">,</span><span·class="w"> |
| 159 | ·</span><span·class="p"·data-group-id=" | 159 | ·</span><span·class="p"·data-group-id="7975395456-10">{</span><span·class="ss">unused</span><span·class="p">,</span><span·class="p"·data-group-id="7975395456-11">[</span><span·class="p"·data-group-id="7975395456-12">{</span><span·class="ss">my_module</span><span·class="p">,</span><span·class="s[·...·truncated·by·diffoscope;·len:·264,·SHA:·3a0426b98f33a20e516fbb96c67f206977284d5066ea3f04054577f5b620634c·...·]-2">]</span></code></pre><p><code·class="inline">m/1</code>·is·also·suitable·for·checking·that·the·BEAM·file·of·a·module·that·is·about |
| 160 | to·be·loaded·into·a·running·a·system·does·not·call·any·undefined·functions.·In | 160 | to·be·loaded·into·a·running·a·system·does·not·call·any·undefined·functions.·In |
| 161 | either·case,·the·code·path·of·the·code·server·(see·the·module·<code·class="inline">code</code>)·is·used | 161 | either·case,·the·code·path·of·the·code·server·(see·the·module·<code·class="inline">code</code>)·is·used |
| 162 | for·finding·modules·that·export·externally·called·functions·not·exported·by·the | 162 | for·finding·modules·that·export·externally·called·functions·not·exported·by·the |
| 163 | checked·module·itself,·so·called·<a·href="xref.html#library_module">library·modules</a>.</p><h2·id="predefined-analysis"·class="section-heading"> | 163 | checked·module·itself,·so·called·<a·href="xref.html#library_module">library·modules</a>.</p><h2·id="predefined-analysis"·class="section-heading"> |
| 164 | ··<a·href="#predefined-analysis"·class="hover-link"> | 164 | ··<a·href="#predefined-analysis"·class="hover-link"> |
| 165 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 165 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 166 | ··</a> | 166 | ··</a> |
| 167 | ··<span·class="text">Predefined·Analysis</span> | 167 | ··<span·class="text">Predefined·Analysis</span> |
| 168 | </h2> | 168 | </h2> |
| 169 | <p>In·the·last·example·the·module·to·analyze·was·given·as·an·argument·to·<code·class="inline">m/1</code>,·and | 169 | <p>In·the·last·example·the·module·to·analyze·was·given·as·an·argument·to·<code·class="inline">m/1</code>,·and |
| 170 | the·code·path·was·(implicitly)·used·as·<a·href="xref.html#library_path">library·path</a>.·In | 170 | the·code·path·was·(implicitly)·used·as·<a·href="xref.html#library_path">library·path</a>.·In |
| 171 | this·example·an·<a·href="xref.html#xref_server">xref·server</a>·will·be·used,·which·makes·it | 171 | this·example·an·<a·href="xref.html#xref_server">xref·server</a>·will·be·used,·which·makes·it |
| 172 | possible·to·analyze·applications·and·releases,·and·also·to·select·the·library | 172 | possible·to·analyze·applications·and·releases,·and·also·to·select·the·library |
| 173 | path·explicitly.</p><p>Each·Xref·server·is·referred·to·by·a·unique·name.·The·name·is·given·when | 173 | path·explicitly.</p><p>Each·Xref·server·is·referred·to·by·a·unique·name.·The·name·is·given·when |
| 174 | creating·the·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 174 | creating·the·server:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">1>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="1549125352-1">(</span><span·class="ss">s</span><span·class="p"·data-group-id="1549125352-1">)</span><span·class="p">.</span><span·class="w"> |
| 175 | </span><span·class="p"·data-group-id=" | 175 | </span><span·class="p"·data-group-id="1549125352-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="o"><</span><span·class="mf">0.27</span><span·class="p">.</span><span·class="mi">0</span><span·class="o">></span><span·class="p"·data-group-id="1549125352-2">}</span></code></pre><p>Next·the·system·to·be·analyzed·is·added·to·the·Xref·server.·Here·the·system·will |
| 176 | be·OTP,·so·no·library·path·will·be·needed.·Otherwise,·when·analyzing·a·system | 176 | be·OTP,·so·no·library·path·will·be·needed.·Otherwise,·when·analyzing·a·system |
| 177 | that·uses·OTP,·the·OTP·modules·are·typically·made·library·modules·by·setting·the | 177 | that·uses·OTP,·the·OTP·modules·are·typically·made·library·modules·by·setting·the |
| 178 | library·path·to·the·default·OTP·code·path·(or·to·<code·class="inline">code_path</code>,·see·the | 178 | library·path·to·the·default·OTP·code·path·(or·to·<code·class="inline">code_path</code>,·see·the |
| 179 | <a·href="xref.html#code_path">reference·manual</a>).·By·default,·the·names·of·read·BEAM | 179 | <a·href="xref.html#code_path">reference·manual</a>).·By·default,·the·names·of·read·BEAM |
| 180 | files·and·warnings·are·output·when·adding·analyzed·modules,·but·these·messages | 180 | files·and·warnings·are·output·when·adding·analyzed·modules,·but·these·messages |
| 181 | can·be·avoided·by·setting·default·values·of·some·options:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">set_default</span><span·class="p"·data-group-id=" | 181 | can·be·avoided·by·setting·default·values·of·some·options:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">2>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">set_default</span><span·class="p"·data-group-id="1988784678-1">(</span><span·class="ss">s</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="1988784678-2">[</span><span·class="p"·data-group-id="1988784678-3">{</span><span·class="ss">verbose</span><span·class="p">,</span>[·...·truncated·by·diffoscope;·len:·415,·SHA:·239daadb615203d35775d7e4cbf8a3397bfaa94c34c5d03acfc93ebd282d82e0·...·]-1">)</span><span·class="p">.</span><span·class="w"> |
| 182 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> | 182 | </span><span·class="ss">ok</span><span·class="gp·unselectable"> |
| 183 | 3>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">add_release</span><span·class="p"·data-group-id=" | 183 | 3>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">add_release</span><span·class="p"·data-group-id="1988784678-5">(</span><span·class="ss">s</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">lib_dir</span><span·class="p"·data-group-id="1988784678-6">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·326,·SHA:·e4995b79801a9a886586c0e6e06d2ebb39d878053b70e33cafa7df2a2ca8c700·...·]-5">)</span><span·class="p">.</span><span·class="w"> |
| 184 | </span><span·class="p"·data-group-id=" | 184 | </span><span·class="p"·data-group-id="1988784678-8">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="ss">otp</span><span·class="p"·data-group-id="1988784678-8">}</span></code></pre><p><code·class="inline">add_release/3</code>·assumes·that·all·subdirectories·of·the·library·directory |
| 185 | returned·by·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#lib_dir/0"><code·class="inline">code:lib_dir()</code></a>·contain·applications; | 185 | returned·by·<a·href="../../../../lib/kernel-10.2.7.1/doc/html/code.html#lib_dir/0"><code·class="inline">code:lib_dir()</code></a>·contain·applications; |
| 186 | the·effect·is·that·of·reading·all·BEAM·files·for·the·application.</p><p>It·is·now·easy·to·check·the·release·for·calls·to·undefined·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">analyze</span><span·class="p"·data-group-id=" | 186 | the·effect·is·that·of·reading·all·BEAM·files·for·the·application.</p><p>It·is·now·easy·to·check·the·release·for·calls·to·undefined·functions:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">analyze</span><span·class="p"·data-group-id="7566895963-1">(</span><span·class="ss">s</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">undefined_function_calls</span><span·class="p"·data-group-id="7566895963-1">)</span><span·class="p">.</span><span·class="w"> |
| 187 | </span><span·class="p"·data-group-id=" | 187 | </span><span·class="p"·data-group-id="7566895963-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7566895963-3">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="7566[·...·truncated·by·diffoscope;·len:·457,·SHA:·dcafcce69c069c08d2c55d606924e69e56b24ddb1a07e1455552b1aca4b21484·...·]-1">)</span><span·class="p">.</span></code></pre><p>The·check·for·calls·to·undefined·functions·is·an·example·of·a·predefined |
| 188 | analysis,·probably·the·most·useful·one.·Other·examples·are·the·analyses·that | 188 | analysis,·probably·the·most·useful·one.·Other·examples·are·the·analyses·that |
| 189 | find·unused·local·functions,·or·functions·that·call·some·given·functions.·See | 189 | find·unused·local·functions,·or·functions·that·call·some·given·functions.·See |
| 190 | the·<a·href="xref.html#analyze">analyze/2,3</a>·functions·for·a·complete·list·of·predefined | 190 | the·<a·href="xref.html#analyze">analyze/2,3</a>·functions·for·a·complete·list·of·predefined |
| 191 | analyses.</p><p>Each·predefined·analysis·is·a·shorthand·for·a·<a·href="xref.html#query">query</a>,·a | 191 | analyses.</p><p>Each·predefined·analysis·is·a·shorthand·for·a·<a·href="xref.html#query">query</a>,·a |
| 192 | sentence·of·a·tiny·language·providing·cross·reference·data·as·values·of | 192 | sentence·of·a·tiny·language·providing·cross·reference·data·as·values·of |
| 193 | <a·href="xref.html#predefined_variable">predefined·variables</a>.·The·check·for·calls·to | 193 | <a·href="xref.html#predefined_variable">predefined·variables</a>.·The·check·for·calls·to |
| 194 | undefined·functions·can·thus·be·stated·as·a·query:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">q</span><span·class="p"·data-group-id=" | 194 | undefined·functions·can·thus·be·stated·as·a·query:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">4>·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">q</span><span·class="p"·data-group-id="6144078985-1">(</span><span·class="ss">s</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"(XC·-·UC)·||·(XU·-·X·-·B)"</span><span·class="p"·data-group-id="6144078985-1">)</span><span·class="p">.</span><span·class="w"> |
| 195 | </span><span·class="p"·data-group-id=" | 195 | </span><span·class="p"·data-group-id="6144078985-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="p"·data-group-id="6144078985-3">[</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="6144078985-3">]</span><span·[·...·truncated·by·diffoscope;·len:·34,·SHA:·54019c9e1c6df05f4a29a16ecdd2ca6f23e0f512c037d7c279228c1197d83157·...·]5-2">}</span></code></pre><p>The·query·asks·for·the·restriction·of·external·calls·except·the·unresolved·calls |
| 196 | to·calls·to·functions·that·are·externally·used·but·neither·exported·nor·built-in | 196 | to·calls·to·functions·that·are·externally·used·but·neither·exported·nor·built-in |
| 197 | functions·(the·<code·class="inline">||</code>·operator·restricts·the·used·functions·while·the·<code·class="inline">|</code>·operator | 197 | functions·(the·<code·class="inline">||</code>·operator·restricts·the·used·functions·while·the·<code·class="inline">|</code>·operator |
| 198 | restricts·the·calling·functions).·The·<code·class="inline">-</code>·operator·returns·the·difference·of·two | 198 | restricts·the·calling·functions).·The·<code·class="inline">-</code>·operator·returns·the·difference·of·two |
| 199 | sets,·and·the·<code·class="inline">+</code>·operator·to·be·used·below·returns·the·union·of·two·sets.</p><p>The·relationships·between·the·predefined·variables·<code·class="inline">XU</code>,·<code·class="inline">X</code>,·<code·class="inline">B</code>·and·a·few | 199 | sets,·and·the·<code·class="inline">+</code>·operator·to·be·used·below·returns·the·union·of·two·sets.</p><p>The·relationships·between·the·predefined·variables·<code·class="inline">XU</code>,·<code·class="inline">X</code>,·<code·class="inline">B</code>·and·a·few |
| 200 | others·are·worth·elaborating·upon.·The·reference·manual·mentions·two·ways·of | 200 | others·are·worth·elaborating·upon.·The·reference·manual·mentions·two·ways·of |
| 201 | expressing·the·set·of·all·functions,·one·that·focuses·on·how·they·are·defined: | 201 | expressing·the·set·of·all·functions,·one·that·focuses·on·how·they·are·defined: |
| 202 | <code·class="inline">X + L + B + U</code>,·and·one·that·focuses·on·how·they·are·used:·<code·class="inline">UU + LU + XU</code>.·The | 202 | <code·class="inline">X + L + B + U</code>,·and·one·that·focuses·on·how·they·are·used:·<code·class="inline">UU + LU + XU</code>.·The |
| Offset 220, 16 lines modified | Offset 220, 16 lines modified | ||
| 220 | </h2> | 220 | </h2> |
| 221 | <p>The·module·check·and·the·predefined·analyses·are·useful,·but·limited.·Sometimes | 221 | <p>The·module·check·and·the·predefined·analyses·are·useful,·but·limited.·Sometimes |
| 222 | more·flexibility·is·needed,·for·instance·one·might·not·need·to·apply·a·graph | 222 | more·flexibility·is·needed,·for·instance·one·might·not·need·to·apply·a·graph |
| 223 | analysis·on·all·calls,·but·some·subset·will·do·equally·well.·That·flexibility·is | 223 | analysis·on·all·calls,·but·some·subset·will·do·equally·well.·That·flexibility·is |
| 224 | provided·with·a·simple·language.·Below·are·some·expressions·of·the·language·with | 224 | provided·with·a·simple·language.·Below·are·some·expressions·of·the·language·with |
| 225 | comments,·focusing·on·elements·of·the·language·rather·than·providing·useful | 225 | comments,·focusing·on·elements·of·the·language·rather·than·providing·useful |
| 226 | examples.·The·analyzed·system·is·assumed·to·be·OTP,·so·in·order·to·run·the | 226 | examples.·The·analyzed·system·is·assumed·to·be·OTP,·so·in·order·to·run·the |
| 227 | queries,·first·evaluate·these·calls:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="0 | 227 | queries,·first·evaluate·these·calls:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="0105393686-1">(</span><span·class="ss">s</span><span·class="p"·data-group-id="0105393686-1">)</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">add_release</span><span·class="p"·data-group-id="0 | 228 | </span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">add_release</span><span·class="p"·data-group-id="0105393686-2">(</span><span·class="ss">s</span><span·class="p">,</span><span·class="w">·</span><span·class="nc">code</span><span·class="p">:</span><span·class="nf">root_dir</span><span·class="p"·data-group-id="0105393686-3">(</span><span·class="p"·data-grou[·...·truncated·by·diffoscope;·len:·69,·SHA:·56c705eb6bc99cf4a6bb3e5596da59455acc07033c5b66bcff9121200823b67a·...·]-2">)</span><span·class="p">.</span></code></pre><ul><li><p><strong><code·class="inline">xref:q(s,·"(Fun)·xref·:·Mod").</code></strong>·-·All·functions·of·the·<code·class="inline">xref</code>·module.</p></li><li><p><strong><code·class="inline">xref:q(s,·"xref·:·Mod·*·X").</code></strong>·-·All·exported·functions·of·the·<code·class="inline">xref</code> |
| 229 | module.·The·first·operand·of·the·intersection·operator·<code·class="inline">*</code>·is·implicitly | 229 | module.·The·first·operand·of·the·intersection·operator·<code·class="inline">*</code>·is·implicitly |
| 230 | converted·to·the·more·special·type·of·the·second·operand.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(Mod)·tools").</code></strong>·-·All·modules·of·the·Tools·application.</p></li><li><p><strong><code·class="inline">xref:q(s,·'"xref_.*"·:·Mod').</code></strong>·-·All·modules·with·a·name·beginning·with | 230 | converted·to·the·more·special·type·of·the·second·operand.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(Mod)·tools").</code></strong>·-·All·modules·of·the·Tools·application.</p></li><li><p><strong><code·class="inline">xref:q(s,·'"xref_.*"·:·Mod').</code></strong>·-·All·modules·with·a·name·beginning·with |
| 231 | <code·class="inline">xref_</code>.</p></li><li><p><strong><code·class="inline">xref:q(s,·"#·E | X ").</code></strong>·-·Number·of·calls·from·exported·functions.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC || L ").</code></strong>·-·All·external·calls·to·local·functions.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC * LC").</code></strong>·-·All·calls·that·have·both·an·external·and·a·local | 231 | <code·class="inline">xref_</code>.</p></li><li><p><strong><code·class="inline">xref:q(s,·"#·E | X ").</code></strong>·-·Number·of·calls·from·exported·functions.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC || L ").</code></strong>·-·All·external·calls·to·local·functions.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC * LC").</code></strong>·-·All·calls·that·have·both·an·external·and·a·local |
| 232 | version.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(LLin)·(LC·*·XC)").</code></strong>·-·The·lines·where·the·local·calls·of·the | 232 | version.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(LLin)·(LC·*·XC)").</code></strong>·-·The·lines·where·the·local·calls·of·the |
| 233 | last·example·are·made.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(XLin)·(LC·*·XC)").</code></strong>·-·The·lines·where·the·external·calls·of | 233 | last·example·are·made.</p></li><li><p><strong><code·class="inline">xref:q(s,·"(XLin)·(LC·*·XC)").</code></strong>·-·The·lines·where·the·external·calls·of |
| 234 | the·example·before·last·are·made.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC·*·(ME·-·strict·ME)").</code></strong>·-·External·calls·within·some·module.</p></li><li><p><strong><code·class="inline">xref:q(s,·"E ||| kernel").</code></strong>·-·All·calls·within·the·Kernel·application.</p></li><li><p><strong><code·class="inline">xref:q(s,·"closure E | kernel || kernel").</code></strong>·-·All·direct·and·indirect | 234 | the·example·before·last·are·made.</p></li><li><p><strong><code·class="inline">xref:q(s,·"XC·*·(ME·-·strict·ME)").</code></strong>·-·External·calls·within·some·module.</p></li><li><p><strong><code·class="inline">xref:q(s,·"E ||| kernel").</code></strong>·-·All·calls·within·the·Kernel·application.</p></li><li><p><strong><code·class="inline">xref:q(s,·"closure E | kernel || kernel").</code></strong>·-·All·direct·and·indirect |
| 235 | calls·within·the·Kernel·application.·Both·the·calling·and·the·used·functions | 235 | calls·within·the·Kernel·application.·Both·the·calling·and·the·used·functions |
| Offset 264, 26 lines modified | Offset 264, 26 lines modified | ||
| 264 | <code·class="inline">digraph</code>·representation·of·graphs)·has·to·be·explicitly·applied.</p><p>As·an·example·of·analyzing·indirect·calls,·the·following·Erlang·function·tries | 264 | <code·class="inline">digraph</code>·representation·of·graphs)·has·to·be·explicitly·applied.</p><p>As·an·example·of·analyzing·indirect·calls,·the·following·Erlang·function·tries |
| 265 | to·answer·the·question:·if·we·want·to·know·which·modules·are·used·indirectly·by | 265 | to·answer·the·question:·if·we·want·to·know·which·modules·are·used·indirectly·by |
| 266 | some·module(s),·is·it·worth·while·using·the | 266 | some·module(s),·is·it·worth·while·using·the |
| 267 | <a·href="xref.html#call_graph">function·graph</a>·rather·than·the·module·graph?·Recall·that | 267 | <a·href="xref.html#call_graph">function·graph</a>·rather·than·the·module·graph?·Recall·that |
| 268 | a·module·M1·is·said·to·call·a·module·M2·if·there·is·some·function·in·M1·that | 268 | a·module·M1·is·said·to·call·a·module·M2·if·there·is·some·function·in·M1·that |
| 269 | calls·some·function·in·M2.·It·would·be·nice·if·we·could·use·the·much·smaller | 269 | calls·some·function·in·M2.·It·would·be·nice·if·we·could·use·the·much·smaller |
| 270 | module·graph,·since·it·is·available·also·in·the·light·weight | 270 | module·graph,·since·it·is·available·also·in·the·light·weight |
| 271 | <code·class="inline">modules</code><a·href="xref.html#mode">mode</a>·of·Xref·servers.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t</span><span·class="p"·data-group-id="3 | 271 | <code·class="inline">modules</code><a·href="xref.html#mode">mode</a>·of·Xref·servers.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">t</span><span·class="p"·data-group-id="7372888299-1">(</span><span·class="n">S</span><span·class="p"·data-group-id="7372888299-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 272 | ··</span><span·class="p"·data-group-id="3 | 272 | ··</span><span·class="p"·data-group-id="7372888299-2">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="p"·data-group-id="7372888299-2">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class[·...·truncated·by·diffoscope;·len:·285,·SHA:·33fcc7ea4ab3eae45e5847a9cc2dc4a93b82358b9371801839d05afbb7f0f0d5·...·]-3">)</span><span·class="p">,</span><span·class="w"> |
| 273 | ··</span><span·class="p"·data-group-id="3 | 273 | ··</span><span·class="p"·data-group-id="7372888299-4">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ms</span><span·class="p"·data-group-id="7372888299-4">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·270,·SHA:·beda218dfdcfbfab954b218ad6c35913acdf61bc45529765b8e4167b47bccf74·...·]-5">)</span><span·class="p">,</span><span·class="w"> |
| 274 | ··</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="3 | 274 | ··</span><span·class="n">Fun</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7372888299-6">(</span><span·class="n">M</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N</span><span·class="p"·data-group-id="7372888299-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 275 | ······</span><span·class="n">Q</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="3 | 275 | ······</span><span·class="n">Q</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">io_lib</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="7372888299-7">(</span><span·class="s">"#·(Mod)·(Eplus·|·</span><span·class="si">~p</span><span·class="s">·:·Mod)"</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="7372888299-8">[</span><span·class="n">M</span><[·...·truncated·by·diffoscope;·len:·93,·SHA:·781ad1ef808607a68d2c2a38f9a9ced6f6fcf13f303e7d6137f0d6bc20b79fe1·...·]-7">)</span><span·class="p">,</span><span·class="w"> |
| 276 | ······</span><span·class="p"·data-group-id="3 | 276 | ······</span><span·class="p"·data-group-id="7372888299-9">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">N0</span><span·class="p"·data-group-id="7372888299-9">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·clas[·...·truncated·by·diffoscope;·len:·450,·SHA:·8aef5fa3916db8e2fe1cc59935ce7318b4216920b2e39b9640e026d0f5185315·...·]-10">)</span><span·class="p">,</span><span·class="w"> |
| 277 | ······</span><span·class="n">N</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">N0</span><span·class="w"> | 277 | ······</span><span·class="n">N</span><span·class="w">·</span><span·class="o">+</span><span·class="w">·</span><span·class="n">N0</span><span·class="w"> |
| 278 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> | 278 | ····</span><span·class="k">end</span><span·class="p">,</span><span·class="w"> |
| 279 | ··</span><span·class="n">Sum</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="3 | 279 | ··</span><span·class="n">Sum</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">foldl</span><span·class="p"·data-group-id="7372888299-12">(</span><span·class="n">Fun</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">0</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Ms</span><span·class="p"·data-group-id="7372888299-12">)</span><span·class="p">,</span><span·class="w"> |
| 280 | ··</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">forget</span><span·class="p"·data-group-id="3 | 280 | ··</span><span·class="ss">ok</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xref</span><span·class="p">:</span><span·class="nf">forget</span><span·class="p"·data-group-id="7372888299-13">(</span><span·class="n">S</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">'Eplus'</span><span·class="p"·data-group-id="7372888299-13">)</span><span·class="p">,</span><span·class="w"> |
| 281 | ··</span><span·class="p"·data-group-id="3 | 281 | ··</span><span·class="p"·data-group-id="7372888299-14">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Tot</span><span·class="p"·data-group-id="7372888299-14">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·c[·...·truncated·by·diffoscope;·len:·291,·SHA:·c496eb544e85d5d6ee4deec22fad9abad90462054912e1de50d6d0671c7a1105·...·]-15">)</span><span·class="p">,</span><span·class="w"> |
| 282 | ··</span><span·class="mi">100</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="p"·data-group-id="3 | 282 | ··</span><span·class="mi">100</span><span·class="w">·</span><span·class="o">*</span><span·class="w">·</span><span·class="p"·data-group-id="7372888299-16">(</span><span·class="p"·data-group-id="7372888299-17">(</span><span·class="n">Tot</span><span·class="w">·</span><span·class="o">-</span><span·class="w">·</span><span·class="n">Sum</span><span·class="p"·data-group-id="7372888299-17">)</span><[·...·truncated·by·diffoscope;·len:·138,·SHA:·a711ace36da88b59463689e2532fffb1ac202ced24ff23a8a006631e28b7daf4·...·]-16">)</span><span·class="p">.</span></code></pre><p>Comments·on·the·code:</p><ul><li>We·want·to·find·the·reduction·of·the·closure·of·the·function·graph·to·modules. |
| 283 | The·direct·expression·for·doing·that·would·be·<code·class="inline">(Mod) (closure E | AM)</code>,·but | 283 | The·direct·expression·for·doing·that·would·be·<code·class="inline">(Mod) (closure E | AM)</code>,·but |
| 284 | then·we·would·have·to·represent·all·of·the·transitive·closure·of·E·in·memory. | 284 | then·we·would·have·to·represent·all·of·the·transitive·closure·of·E·in·memory. |
| 285 | Instead·the·number·of·indirectly·used·modules·is·found·for·each·analyzed | 285 | Instead·the·number·of·indirectly·used·modules·is·found·for·each·analyzed |
| 286 | module,·and·the·sum·over·all·modules·is·calculated.</li><li>A·user·variable·is·employed·for·holding·the·<code·class="inline">digraph</code>·representation·of·the | 286 | module,·and·the·sum·over·all·modules·is·calculated.</li><li>A·user·variable·is·employed·for·holding·the·<code·class="inline">digraph</code>·representation·of·the |
| 287 | function·graph·for·use·in·many·queries.·The·reason·is·efficiency.·As·opposed | 287 | function·graph·for·use·in·many·queries.·The·reason·is·efficiency.·As·opposed |
| 288 | to·the·<code·class="inline">=</code>·operator,·the·<code·class="inline">:=</code>·operator·saves·a·value·for·subsequent·analyses. | 288 | to·the·<code·class="inline">=</code>·operator,·the·<code·class="inline">:=</code>·operator·saves·a·value·for·subsequent·analyses. |
| 289 | Here·might·be·the·place·to·note·that·equal·subexpressions·within·a·query·are | 289 | Here·might·be·the·place·to·note·that·equal·subexpressions·within·a·query·are |
| Offset 350, 15 lines modified | Offset 350, 15 lines modified | ||
| 350 | ······<p·class="built-using"> | 350 | ······<p·class="built-using"> |
| 351 | ········Built·using | 351 | ········Built·using |
| 352 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 352 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 353 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 353 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 354 | ······</p> | 354 | ······</p> |
| 355 | <p>Copyright·©·1996-202 | 355 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 356 | ····</footer> | 356 | ····</footer> |
| 357 | ··</div> | 357 | ··</div> |
| 358 | </main> | 358 | </main> |
| 359 | </div> | 359 | </div> |
| 360 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 360 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| Max diff block lines reached; 28/42415 bytes (0.07%) of diff not shown. | |||
| Offset 143, 15 lines modified | Offset 143, 15 lines modified | ||
| 143 | ······<p·class="built-using"> | 143 | ······<p·class="built-using"> |
| 144 | ········Built·using | 144 | ········Built·using |
| 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 145 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 146 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 147 | ······</p> | 147 | ······</p> |
| 148 | <p>Copyright·©·1996-202 | 148 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 149 | ····</footer> | 149 | ····</footer> |
| 150 | ··</div> | 150 | ··</div> |
| 151 | </main> | 151 | </main> |
| 152 | </div> | 152 | </div> |
| 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 153 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 154 | ··<script> | 154 | ··<script> |
| 155 | ··let·initialized·=·false; | 155 | ··let·initialized·=·false; |
| Offset 2414, 15 lines modified | Offset 2414, 15 lines modified | ||
| 2414 | ······<p·class="built-using"> | 2414 | ······<p·class="built-using"> |
| 2415 | ········Built·using | 2415 | ········Built·using |
| 2416 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2416 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2417 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2417 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2418 | ······</p> | 2418 | ······</p> |
| 2419 | <p>Copyright·©·1996-202 | 2419 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2420 | ····</footer> | 2420 | ····</footer> |
| 2421 | ··</div> | 2421 | ··</div> |
| 2422 | </main> | 2422 | </main> |
| 2423 | </div> | 2423 | </div> |
| 2424 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2424 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2425 | ··<script> | 2425 | ··<script> |
| 2426 | ··let·initialized·=·false; | 2426 | ··let·initialized·=·false; |
| Offset 157, 21 lines modified | Offset 157, 21 lines modified | ||
| 157 | that·object.·Type·checking·is·done·so·that·a·module·only·operates·on·it's | 157 | that·object.·Type·checking·is·done·so·that·a·module·only·operates·on·it's |
| 158 | objects·or·inherited·classes.</p><p>An·object·is·created·with·<em>new</em>·and·destroyed·with·<em>destroy</em>.·Most·functions·in | 158 | objects·or·inherited·classes.</p><p>An·object·is·created·with·<em>new</em>·and·destroyed·with·<em>destroy</em>.·Most·functions·in |
| 159 | the·classes·are·named·the·same·as·their·C++·counterpart,·except·that·for | 159 | the·classes·are·named·the·same·as·their·C++·counterpart,·except·that·for |
| 160 | convenience,·in·erlang·they·start·with·a·lowercase·letter·and·the·first·argument | 160 | convenience,·in·erlang·they·start·with·a·lowercase·letter·and·the·first·argument |
| 161 | is·the·object·reference.·Optional·arguments·are·last·and·expressed·as·tagged | 161 | is·the·object·reference.·Optional·arguments·are·last·and·expressed·as·tagged |
| 162 | tuples·in·any·order.</p><p>For·example·the·<em>wxWindow</em>·C++·class·is·implemented·in·the·<em>wxWindow</em>·erlang | 162 | tuples·in·any·order.</p><p>For·example·the·<em>wxWindow</em>·C++·class·is·implemented·in·the·<em>wxWindow</em>·erlang |
| 163 | module·and·the·member·<em>wxWindow::CenterOnParent</em>·is·thus | 163 | module·and·the·member·<em>wxWindow::CenterOnParent</em>·is·thus |
| 164 | <em>wxWindow:centerOnParent</em>.·The·following·C++·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="ss">wxWindow</span><span·class="w">·</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">new</span><span·class="w">·</span><span·class="nf">wxWindow</span><span·class="p"·data-group-id=" | 164 | <em>wxWindow:centerOnParent</em>.·The·following·C++·code:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="ss">wxWindow</span><span·class="w">·</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">new</span><span·class="w">·</span><span·class="nf">wxWindow</span><span·class="p"·data-group-id="3572271664-1">(</span><span·class="p"·data-group-id="3572271664-1">)</span><span·class="p">;</span><span·class="w"> |
| 165 | ··</span><span·class="n">MyWin</span><span·class="p">.</span><span·class="n">CenterOnParent</span><span·class="p"·data-group-id=" | 165 | ··</span><span·class="n">MyWin</span><span·class="p">.</span><span·class="n">CenterOnParent</span><span·class="p"·data-group-id="3572271664-2">(</span><span·class="ss">wxVERTICAL</span><span·class="p"·data-group-id="3572271664-2">)</span><span·class="p">;</span><span·class="w"> |
| 166 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 166 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 167 | ··</span><span·class="ss">delete</span><span·class="w">·</span><span·class="n">MyWin</span><span·class="p">;</span></code></pre><p>would·in·erlang·look·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 167 | ··</span><span·class="ss">delete</span><span·class="w">·</span><span·class="n">MyWin</span><span·class="p">;</span></code></pre><p>would·in·erlang·look·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="9884223892-1">(</span><span·class="p"·data-group-id="9884223892-1">)</span><span·class="p">,</span><span·class="w"> |
| 168 | ··</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">centerOnParent</span><span·class="p"·data-group-id=" | 168 | ··</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">centerOnParent</span><span·class="p"·data-group-id="9884223892-2">(</span><span·class="n">MyWin</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9884223892-3">[</span><span·class="p"·data-group-id="9884223892-4">{</span><span·class="ss">dir</span><span·class="p">,</span><[·...·truncated·by·diffoscope;·len:·204,·SHA:·988c56b4afa7d7e1570afaf121b2a1a9b33e3104f7cc200384a544f821005145·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 169 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 170 | ··</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">destroy</span><span·class="p"·data-group-id=" | 170 | ··</span><span·class="nc">wxWindow</span><span·class="p">:</span><span·class="nf">destroy</span><span·class="p"·data-group-id="9884223892-5">(</span><span·class="n">MyWin</span><span·class="p"·data-group-id="9884223892-5">)</span><span·class="p">,</span></code></pre><p>When·you·are·reading·wxWidgets·documentation·or·the·examples,·you·will·notice |
| 171 | that·some·of·the·most·basic·classes·are·missing·in·<em>wx</em>,·they·are·directly | 171 | that·some·of·the·most·basic·classes·are·missing·in·<em>wx</em>,·they·are·directly |
| 172 | mapped·to·corresponding·erlang·terms:</p><ul><li><p><strong><em>wxPoint</em>·is·represented·by·{Xcoord,Ycoord}</strong></p></li><li><p><strong><em>wxSize</em>·is·represented·by·{Width,Height}</strong></p></li><li><p><strong><em>wxRect</em>·is·represented·by·{Xcoord,Ycoord,Width,Height}</strong></p></li><li><p><strong><em>wxColour</em>·is·represented·by·{Red,Green,Blue[,Alpha]}</strong></p></li><li><p><strong><em>wxString</em>·is·represented·by | 172 | mapped·to·corresponding·erlang·terms:</p><ul><li><p><strong><em>wxPoint</em>·is·represented·by·{Xcoord,Ycoord}</strong></p></li><li><p><strong><em>wxSize</em>·is·represented·by·{Width,Height}</strong></p></li><li><p><strong><em>wxRect</em>·is·represented·by·{Xcoord,Ycoord,Width,Height}</strong></p></li><li><p><strong><em>wxColour</em>·is·represented·by·{Red,Green,Blue[,Alpha]}</strong></p></li><li><p><strong><em>wxString</em>·is·represented·by |
| 173 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/unicode.html#t:charlist/0">unicode:charlist()</a></strong></p></li><li><p><strong><em>wxGBPosition</em>·is·represented·by·{Row,Column}</strong></p></li><li><p><strong><em>wxGBSpan</em>·is·represented·by·{RowSpan,ColumnSPan}</strong></p></li><li><p><strong><em>wxGridCellCoords</em>·is·represented·by·{Row,Column}</strong></p></li></ul><p>In·the·places·where·the·erlang·API·differs·from·the·original·one·it·should·be | 173 | <a·href="../../../../lib/stdlib-6.2.2.1/doc/html/unicode.html#t:charlist/0">unicode:charlist()</a></strong></p></li><li><p><strong><em>wxGBPosition</em>·is·represented·by·{Row,Column}</strong></p></li><li><p><strong><em>wxGBSpan</em>·is·represented·by·{RowSpan,ColumnSPan}</strong></p></li><li><p><strong><em>wxGridCellCoords</em>·is·represented·by·{Row,Column}</strong></p></li></ul><p>In·the·places·where·the·erlang·API·differs·from·the·original·one·it·should·be |
| 174 | obvious·from·the·erlang·documentation·which·representation·has·been·used.·E.g. | 174 | obvious·from·the·erlang·documentation·which·representation·has·been·used.·E.g. |
| 175 | the·C++·arrays·and/or·lists·are·sometimes·represented·as·erlang·lists·and | 175 | the·C++·arrays·and/or·lists·are·sometimes·represented·as·erlang·lists·and |
| 176 | sometimes·as·tuples.</p><p>Colours·are·represented·with·{Red,Green,Blue[,Alpha]},·the·Alpha·value·is | 176 | sometimes·as·tuples.</p><p>Colours·are·represented·with·{Red,Green,Blue[,Alpha]},·the·Alpha·value·is |
| 177 | optional·when·used·as·an·argument·to·functions,·but·it·will·always·be·returned | 177 | optional·when·used·as·an·argument·to·functions,·but·it·will·always·be·returned |
| Offset 191, 22 lines modified | Offset 191, 22 lines modified | ||
| 191 | ··<span·class="text">Multiple·processes·and·memory·handling</span> | 191 | ··<span·class="text">Multiple·processes·and·memory·handling</span> |
| 192 | </h2> | 192 | </h2> |
| 193 | <p>The·intention·is·that·each·erlang·application·calls·wx:new()·once·to·setup·it's | 193 | <p>The·intention·is·that·each·erlang·application·calls·wx:new()·once·to·setup·it's |
| 194 | GUI·which·creates·an·environment·and·a·memory·mapping.·To·be·able·to·use·<em>wx</em> | 194 | GUI·which·creates·an·environment·and·a·memory·mapping.·To·be·able·to·use·<em>wx</em> |
| 195 | from·several·processes·in·your·application,·you·must·share·the·environment.·You | 195 | from·several·processes·in·your·application,·you·must·share·the·environment.·You |
| 196 | can·get·the·active·environment·with·<a·href="wx.html#get_env/0"><code·class="inline">wx:get_env/0</code></a>·and·set·it·in·the·new | 196 | can·get·the·active·environment·with·<a·href="wx.html#get_env/0"><code·class="inline">wx:get_env/0</code></a>·and·set·it·in·the·new |
| 197 | processes·with·<a·href="wx.html#set_env/1"><code·class="inline">wx:set_env/1</code></a>.·Two·processes·or·applications·which·have·both | 197 | processes·with·<a·href="wx.html#set_env/1"><code·class="inline">wx:set_env/1</code></a>.·Two·processes·or·applications·which·have·both |
| 198 | called·wx:new()·will·not·be·able·use·each·others·objects.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 198 | called·wx:new()·will·not·be·able·use·each·others·objects.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="2267999385-1">(</span><span·class="p"·data-group-id="2267999385-1">)</span><span·class="p">,</span><span·class="w"> |
| 199 | ··</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxFrame</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 199 | ··</span><span·class="n">MyWin</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxFrame</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="2267999385-2">(</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">null</span><span·class="p"·data-group-id="2267999385-3">(</span><span·class="p"·data-group-id="2267999385-3">)</span><span·class="p">,</span><span·class="w">·</span><s[·...·truncated·by·diffoscope;·len:·309,·SHA:·9aedf7a1594c65961f6444de9a9188c3d3857e3eb40b0cef5c802472112593ab·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 200 | ··</span><span·class="n">Env</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">get_env</span><span·class="p"·data-group-id=" | 200 | ··</span><span·class="n">Env</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">get_env</span><span·class="p"·data-group-id="2267999385-5">(</span><span·class="p"·data-group-id="2267999385-5">)</span><span·class="p">,</span><span·class="w"> |
| 201 | ··</span><span·class="nf">spawn</span><span·class="p"·data-group-id=" | 201 | ··</span><span·class="nf">spawn</span><span·class="p"·data-group-id="2267999385-6">(</span><span·class="nf">fun</span><span·class="p"·data-group-id="2267999385-7">(</span><span·class="p"·data-group-id="2267999385-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 202 | ···········</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">set_env</span><span·class="p"·data-group-id=" | 202 | ···········</span><span·class="nc">wx</span><span·class="p">:</span><span·class="nf">set_env</span><span·class="p"·data-group-id="2267999385-8">(</span><span·class="n">Env</span><span·class="p"·data-group-id="2267999385-8">)</span><span·class="p">,</span><span·class="w"> |
| 203 | ···········</span><span·class="c1">%%·Here·you·can·do·wx·calls·from·your·helper·process.</span><span·class="w"> | 203 | ···········</span><span·class="c1">%%·Here·you·can·do·wx·calls·from·your·helper·process.</span><span·class="w"> |
| 204 | ···········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 204 | ···········</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 205 | ········</span><span·class="k">end</span><span·class="p"·data-group-id=" | 205 | ········</span><span·class="k">end</span><span·class="p"·data-group-id="2267999385-6">)</span><span·class="p">,</span><span·class="w"> |
| 206 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>When·<a·href="wx.html#destroy/0"><code·class="inline">wx:destroy/0</code></a>·is·invoked·or·when·all·processes·in·the·application·have | 206 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><p>When·<a·href="wx.html#destroy/0"><code·class="inline">wx:destroy/0</code></a>·is·invoked·or·when·all·processes·in·the·application·have |
| 207 | died,·the·memory·is·deleted·and·all·windows·created·by·that·application·are | 207 | died,·the·memory·is·deleted·and·all·windows·created·by·that·application·are |
| 208 | closed.</p><p>The·<em>wx</em>·application·never·cleans·or·garbage·collects·memory·as·long·as·the·user | 208 | closed.</p><p>The·<em>wx</em>·application·never·cleans·or·garbage·collects·memory·as·long·as·the·user |
| 209 | application·is·alive.·Most·of·the·objects·are·deleted·when·a·window·is·closed, | 209 | application·is·alive.·Most·of·the·objects·are·deleted·when·a·window·is·closed, |
| 210 | or·at·least·all·the·objects·which·have·a·parent·argument·that·is·non·null.·By | 210 | or·at·least·all·the·objects·which·have·a·parent·argument·that·is·non·null.·By |
| 211 | using·<code·class="inline">wxCLASS:destroy/1</code>·when·possible·you·can·avoid·an·increasing·memory | 211 | using·<code·class="inline">wxCLASS:destroy/1</code>·when·possible·you·can·avoid·an·increasing·memory |
| 212 | usage.·This·is·especially·important·when·<em>wxWidgets</em>·assumes·or·recommends·that | 212 | usage.·This·is·especially·important·when·<em>wxWidgets</em>·assumes·or·recommends·that |
| Offset 304, 15 lines modified | Offset 304, 15 lines modified | ||
| 304 | ······<p·class="built-using"> | 304 | ······<p·class="built-using"> |
| 305 | ········Built·using | 305 | ········Built·using |
| 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 308 | ······</p> | 308 | ······</p> |
| 309 | <p>Copyright·©·1996-202 | 309 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 310 | ····</footer> | 310 | ····</footer> |
| 311 | ··</div> | 311 | ··</div> |
| 312 | </main> | 312 | </main> |
| 313 | </div> | 313 | </div> |
| 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 315 | ··<script> | 315 | ··<script> |
| 316 | ··let·initialized·=·false; | 316 | ··let·initialized·=·false; |
| Offset 39147, 15 lines modified | Offset 39147, 15 lines modified | ||
| 39147 | ······<p·class="built-using"> | 39147 | ······<p·class="built-using"> |
| 39148 | ········Built·using | 39148 | ········Built·using |
| 39149 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 39149 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 39150 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 39150 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 39151 | ······</p> | 39151 | ······</p> |
| 39152 | <p>Copyright·©·1996-202 | 39152 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 39153 | ····</footer> | 39153 | ····</footer> |
| 39154 | ··</div> | 39154 | ··</div> |
| 39155 | </main> | 39155 | </main> |
| 39156 | </div> | 39156 | </div> |
| 39157 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 39157 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 39158 | ··<script> | 39158 | ··<script> |
| 39159 | ··let·initialized·=·false; | 39159 | ··let·initialized·=·false; |
| Offset 1745, 15 lines modified | Offset 1745, 15 lines modified | ||
| 1745 | ······<p·class="built-using"> | 1745 | ······<p·class="built-using"> |
| 1746 | ········Built·using | 1746 | ········Built·using |
| 1747 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1747 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1748 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1748 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1749 | ······</p> | 1749 | ······</p> |
| 1750 | <p>Copyright·©·1996-202 | 1750 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1751 | ····</footer> | 1751 | ····</footer> |
| 1752 | ··</div> | 1752 | ··</div> |
| 1753 | </main> | 1753 | </main> |
| 1754 | </div> | 1754 | </div> |
| 1755 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1755 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1756 | ··<script> | 1756 | ··<script> |
| 1757 | ··let·initialized·=·false; | 1757 | ··let·initialized·=·false; |
| Offset 1078, 15 lines modified | Offset 1078, 15 lines modified | ||
| 1078 | ······<p·class="built-using"> | 1078 | ······<p·class="built-using"> |
| 1079 | ········Built·using | 1079 | ········Built·using |
| 1080 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1080 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1081 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1081 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1082 | ······</p> | 1082 | ······</p> |
| 1083 | <p>Copyright·©·1996-202 | 1083 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1084 | ····</footer> | 1084 | ····</footer> |
| 1085 | ··</div> | 1085 | ··</div> |
| 1086 | </main> | 1086 | </main> |
| 1087 | </div> | 1087 | </div> |
| 1088 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1088 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1089 | ··<script> | 1089 | ··<script> |
| 1090 | ··let·initialized·=·false; | 1090 | ··let·initialized·=·false; |
| Offset 141, 15 lines modified | Offset 141, 15 lines modified | ||
| 141 | ······<p·class="built-using"> | 141 | ······<p·class="built-using"> |
| 142 | ········Built·using | 142 | ········Built·using |
| 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 143 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 144 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 145 | ······</p> | 145 | ······</p> |
| 146 | <p>Copyright·©·1996-202 | 146 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 147 | ····</footer> | 147 | ····</footer> |
| 148 | ··</div> | 148 | ··</div> |
| 149 | </main> | 149 | </main> |
| 150 | </div> | 150 | </div> |
| 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 151 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 152 | ··<script> | 152 | ··<script> |
| 153 | ··let·initialized·=·false; | 153 | ··let·initialized·=·false; |
| Offset 1409, 15 lines modified | Offset 1409, 15 lines modified | ||
| 1409 | ······<p·class="built-using"> | 1409 | ······<p·class="built-using"> |
| 1410 | ········Built·using | 1410 | ········Built·using |
| 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1413 | ······</p> | 1413 | ······</p> |
| 1414 | <p>Copyright·©·1996-202 | 1414 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1415 | ····</footer> | 1415 | ····</footer> |
| 1416 | ··</div> | 1416 | ··</div> |
| 1417 | </main> | 1417 | </main> |
| 1418 | </div> | 1418 | </div> |
| 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1420 | ··<script> | 1420 | ··<script> |
| 1421 | ··let·initialized·=·false; | 1421 | ··let·initialized·=·false; |
| Offset 538, 15 lines modified | Offset 538, 15 lines modified | ||
| 538 | ······<p·class="built-using"> | 538 | ······<p·class="built-using"> |
| 539 | ········Built·using | 539 | ········Built·using |
| 540 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 540 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 541 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 541 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 542 | ······</p> | 542 | ······</p> |
| 543 | <p>Copyright·©·1996-202 | 543 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 544 | ····</footer> | 544 | ····</footer> |
| 545 | ··</div> | 545 | ··</div> |
| 546 | </main> | 546 | </main> |
| 547 | </div> | 547 | </div> |
| 548 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 548 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 549 | ··<script> | 549 | ··<script> |
| 550 | ··let·initialized·=·false; | 550 | ··let·initialized·=·false; |
| Offset 417, 15 lines modified | Offset 417, 15 lines modified | ||
| 417 | ······<p·class="built-using"> | 417 | ······<p·class="built-using"> |
| 418 | ········Built·using | 418 | ········Built·using |
| 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 421 | ······</p> | 421 | ······</p> |
| 422 | <p>Copyright·©·1996-202 | 422 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 423 | ····</footer> | 423 | ····</footer> |
| 424 | ··</div> | 424 | ··</div> |
| 425 | </main> | 425 | </main> |
| 426 | </div> | 426 | </div> |
| 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 428 | ··<script> | 428 | ··<script> |
| 429 | ··let·initialized·=·false; | 429 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 406, 15 lines modified | Offset 406, 15 lines modified | ||
| 406 | ······<p·class="built-using"> | 406 | ······<p·class="built-using"> |
| 407 | ········Built·using | 407 | ········Built·using |
| 408 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 408 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 409 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 409 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 410 | ······</p> | 410 | ······</p> |
| 411 | <p>Copyright·©·1996-202 | 411 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 412 | ····</footer> | 412 | ····</footer> |
| 413 | ··</div> | 413 | ··</div> |
| 414 | </main> | 414 | </main> |
| 415 | </div> | 415 | </div> |
| 416 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 416 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 417 | ··<script> | 417 | ··<script> |
| 418 | ··let·initialized·=·false; | 418 | ··let·initialized·=·false; |
| Offset 455, 15 lines modified | Offset 455, 15 lines modified | ||
| 455 | ······<p·class="built-using"> | 455 | ······<p·class="built-using"> |
| 456 | ········Built·using | 456 | ········Built·using |
| 457 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 457 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 458 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 458 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 459 | ······</p> | 459 | ······</p> |
| 460 | <p>Copyright·©·1996-202 | 460 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 461 | ····</footer> | 461 | ····</footer> |
| 462 | ··</div> | 462 | ··</div> |
| 463 | </main> | 463 | </main> |
| 464 | </div> | 464 | </div> |
| 465 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 465 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 466 | ··<script> | 466 | ··<script> |
| 467 | ··let·initialized·=·false; | 467 | ··let·initialized·=·false; |
| Offset 1409, 15 lines modified | Offset 1409, 15 lines modified | ||
| 1409 | ······<p·class="built-using"> | 1409 | ······<p·class="built-using"> |
| 1410 | ········Built·using | 1410 | ········Built·using |
| 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1413 | ······</p> | 1413 | ······</p> |
| 1414 | <p>Copyright·©·1996-202 | 1414 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1415 | ····</footer> | 1415 | ····</footer> |
| 1416 | ··</div> | 1416 | ··</div> |
| 1417 | </main> | 1417 | </main> |
| 1418 | </div> | 1418 | </div> |
| 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1420 | ··<script> | 1420 | ··<script> |
| 1421 | ··let·initialized·=·false; | 1421 | ··let·initialized·=·false; |
| Offset 784, 15 lines modified | Offset 784, 15 lines modified | ||
| 784 | ······<p·class="built-using"> | 784 | ······<p·class="built-using"> |
| 785 | ········Built·using | 785 | ········Built·using |
| 786 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 786 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 787 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 787 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 788 | ······</p> | 788 | ······</p> |
| 789 | <p>Copyright·©·1996-202 | 789 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 790 | ····</footer> | 790 | ····</footer> |
| 791 | ··</div> | 791 | ··</div> |
| 792 | </main> | 792 | </main> |
| 793 | </div> | 793 | </div> |
| 794 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 794 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 795 | ··<script> | 795 | ··<script> |
| 796 | ··let·initialized·=·false; | 796 | ··let·initialized·=·false; |
| Offset 1365, 15 lines modified | Offset 1365, 15 lines modified | ||
| 1365 | ······<p·class="built-using"> | 1365 | ······<p·class="built-using"> |
| 1366 | ········Built·using | 1366 | ········Built·using |
| 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1369 | ······</p> | 1369 | ······</p> |
| 1370 | <p>Copyright·©·1996-202 | 1370 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1371 | ····</footer> | 1371 | ····</footer> |
| 1372 | ··</div> | 1372 | ··</div> |
| 1373 | </main> | 1373 | </main> |
| 1374 | </div> | 1374 | </div> |
| 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1376 | ··<script> | 1376 | ··<script> |
| 1377 | ··let·initialized·=·false; | 1377 | ··let·initialized·=·false; |
| Offset 537, 15 lines modified | Offset 537, 15 lines modified | ||
| 537 | ······<p·class="built-using"> | 537 | ······<p·class="built-using"> |
| 538 | ········Built·using | 538 | ········Built·using |
| 539 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 539 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 540 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 540 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 541 | ······</p> | 541 | ······</p> |
| 542 | <p>Copyright·©·1996-202 | 542 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 543 | ····</footer> | 543 | ····</footer> |
| 544 | ··</div> | 544 | ··</div> |
| 545 | </main> | 545 | </main> |
| 546 | </div> | 546 | </div> |
| 547 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 547 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 548 | ··<script> | 548 | ··<script> |
| 549 | ··let·initialized·=·false; | 549 | ··let·initialized·=·false; |
| Offset 3891, 15 lines modified | Offset 3891, 15 lines modified | ||
| 3891 | ······<p·class="built-using"> | 3891 | ······<p·class="built-using"> |
| 3892 | ········Built·using | 3892 | ········Built·using |
| 3893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3895 | ······</p> | 3895 | ······</p> |
| 3896 | <p>Copyright·©·1996-202 | 3896 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3897 | ····</footer> | 3897 | ····</footer> |
| 3898 | ··</div> | 3898 | ··</div> |
| 3899 | </main> | 3899 | </main> |
| 3900 | </div> | 3900 | </div> |
| 3901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3902 | ··<script> | 3902 | ··<script> |
| 3903 | ··let·initialized·=·false; | 3903 | ··let·initialized·=·false; |
| Offset 306, 15 lines modified | Offset 306, 15 lines modified | ||
| 306 | ······<p·class="built-using"> | 306 | ······<p·class="built-using"> |
| 307 | ········Built·using | 307 | ········Built·using |
| 308 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 308 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 309 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 309 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 310 | ······</p> | 310 | ······</p> |
| 311 | <p>Copyright·©·1996-202 | 311 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 312 | ····</footer> | 312 | ····</footer> |
| 313 | ··</div> | 313 | ··</div> |
| 314 | </main> | 314 | </main> |
| 315 | </div> | 315 | </div> |
| 316 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 316 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 317 | ··<script> | 317 | ··<script> |
| 318 | ··let·initialized·=·false; | 318 | ··let·initialized·=·false; |
| Offset 451, 15 lines modified | Offset 451, 15 lines modified | ||
| 451 | ······<p·class="built-using"> | 451 | ······<p·class="built-using"> |
| 452 | ········Built·using | 452 | ········Built·using |
| 453 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 453 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 454 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 454 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 455 | ······</p> | 455 | ······</p> |
| 456 | <p>Copyright·©·1996-202 | 456 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 457 | ····</footer> | 457 | ····</footer> |
| 458 | ··</div> | 458 | ··</div> |
| 459 | </main> | 459 | </main> |
| 460 | </div> | 460 | </div> |
| 461 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 461 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 462 | ··<script> | 462 | ··<script> |
| 463 | ··let·initialized·=·false; | 463 | ··let·initialized·=·false; |
| Offset 1317, 15 lines modified | Offset 1317, 15 lines modified | ||
| 1317 | ······<p·class="built-using"> | 1317 | ······<p·class="built-using"> |
| 1318 | ········Built·using | 1318 | ········Built·using |
| 1319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1319 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1320 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1321 | ······</p> | 1321 | ······</p> |
| 1322 | <p>Copyright·©·1996-202 | 1322 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1323 | ····</footer> | 1323 | ····</footer> |
| 1324 | ··</div> | 1324 | ··</div> |
| 1325 | </main> | 1325 | </main> |
| 1326 | </div> | 1326 | </div> |
| 1327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1327 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1328 | ··<script> | 1328 | ··<script> |
| 1329 | ··let·initialized·=·false; | 1329 | ··let·initialized·=·false; |
| Offset 531, 15 lines modified | Offset 531, 15 lines modified | ||
| 531 | ······<p·class="built-using"> | 531 | ······<p·class="built-using"> |
| 532 | ········Built·using | 532 | ········Built·using |
| 533 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 533 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 534 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 534 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 535 | ······</p> | 535 | ······</p> |
| 536 | <p>Copyright·©·1996-202 | 536 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 537 | ····</footer> | 537 | ····</footer> |
| 538 | ··</div> | 538 | ··</div> |
| 539 | </main> | 539 | </main> |
| 540 | </div> | 540 | </div> |
| 541 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 541 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 542 | ··<script> | 542 | ··<script> |
| 543 | ··let·initialized·=·false; | 543 | ··let·initialized·=·false; |
| Offset 418, 15 lines modified | Offset 418, 15 lines modified | ||
| 418 | ······<p·class="built-using"> | 418 | ······<p·class="built-using"> |
| 419 | ········Built·using | 419 | ········Built·using |
| 420 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 420 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 421 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 421 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 422 | ······</p> | 422 | ······</p> |
| 423 | <p>Copyright·©·1996-202 | 423 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 424 | ····</footer> | 424 | ····</footer> |
| 425 | ··</div> | 425 | ··</div> |
| 426 | </main> | 426 | </main> |
| 427 | </div> | 427 | </div> |
| 428 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 428 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 429 | ··<script> | 429 | ··<script> |
| 430 | ··let·initialized·=·false; | 430 | ··let·initialized·=·false; |
| Offset 916, 15 lines modified | Offset 916, 15 lines modified | ||
| 916 | ······<p·class="built-using"> | 916 | ······<p·class="built-using"> |
| 917 | ········Built·using | 917 | ········Built·using |
| 918 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 918 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 919 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 919 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 920 | ······</p> | 920 | ······</p> |
| 921 | <p>Copyright·©·1996-202 | 921 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 922 | ····</footer> | 922 | ····</footer> |
| 923 | ··</div> | 923 | ··</div> |
| 924 | </main> | 924 | </main> |
| 925 | </div> | 925 | </div> |
| 926 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 926 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 927 | ··<script> | 927 | ··<script> |
| 928 | ··let·initialized·=·false; | 928 | ··let·initialized·=·false; |
| Offset 459, 15 lines modified | Offset 459, 15 lines modified | ||
| 459 | ······<p·class="built-using"> | 459 | ······<p·class="built-using"> |
| 460 | ········Built·using | 460 | ········Built·using |
| 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 463 | ······</p> | 463 | ······</p> |
| 464 | <p>Copyright·©·1996-202 | 464 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 465 | ····</footer> | 465 | ····</footer> |
| 466 | ··</div> | 466 | ··</div> |
| 467 | </main> | 467 | </main> |
| 468 | </div> | 468 | </div> |
| 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 470 | ··<script> | 470 | ··<script> |
| 471 | ··let·initialized·=·false; | 471 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 716, 15 lines modified | Offset 716, 15 lines modified | ||
| 716 | ······<p·class="built-using"> | 716 | ······<p·class="built-using"> |
| 717 | ········Built·using | 717 | ········Built·using |
| 718 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 718 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 719 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 719 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 720 | ······</p> | 720 | ······</p> |
| 721 | <p>Copyright·©·1996-202 | 721 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 722 | ····</footer> | 722 | ····</footer> |
| 723 | ··</div> | 723 | ··</div> |
| 724 | </main> | 724 | </main> |
| 725 | </div> | 725 | </div> |
| 726 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 726 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 727 | ··<script> | 727 | ··<script> |
| 728 | ··let·initialized·=·false; | 728 | ··let·initialized·=·false; |
| Offset 549, 15 lines modified | Offset 549, 15 lines modified | ||
| 549 | ······<p·class="built-using"> | 549 | ······<p·class="built-using"> |
| 550 | ········Built·using | 550 | ········Built·using |
| 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 551 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 552 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 553 | ······</p> | 553 | ······</p> |
| 554 | <p>Copyright·©·1996-202 | 554 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 555 | ····</footer> | 555 | ····</footer> |
| 556 | ··</div> | 556 | ··</div> |
| 557 | </main> | 557 | </main> |
| 558 | </div> | 558 | </div> |
| 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 559 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 560 | ··<script> | 560 | ··<script> |
| 561 | ··let·initialized·=·false; | 561 | ··let·initialized·=·false; |
| Offset 394, 15 lines modified | Offset 394, 15 lines modified | ||
| 394 | ······<p·class="built-using"> | 394 | ······<p·class="built-using"> |
| 395 | ········Built·using | 395 | ········Built·using |
| 396 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 396 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 397 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 397 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 398 | ······</p> | 398 | ······</p> |
| 399 | <p>Copyright·©·1996-202 | 399 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 400 | ····</footer> | 400 | ····</footer> |
| 401 | ··</div> | 401 | ··</div> |
| 402 | </main> | 402 | </main> |
| 403 | </div> | 403 | </div> |
| 404 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 404 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 405 | ··<script> | 405 | ··<script> |
| 406 | ··let·initialized·=·false; | 406 | ··let·initialized·=·false; |
| Offset 891, 15 lines modified | Offset 891, 15 lines modified | ||
| 891 | ······<p·class="built-using"> | 891 | ······<p·class="built-using"> |
| 892 | ········Built·using | 892 | ········Built·using |
| 893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 893 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 894 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 895 | ······</p> | 895 | ······</p> |
| 896 | <p>Copyright·©·1996-202 | 896 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 897 | ····</footer> | 897 | ····</footer> |
| 898 | ··</div> | 898 | ··</div> |
| 899 | </main> | 899 | </main> |
| 900 | </div> | 900 | </div> |
| 901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 901 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 902 | ··<script> | 902 | ··<script> |
| 903 | ··let·initialized·=·false; | 903 | ··let·initialized·=·false; |
| Offset 1340, 15 lines modified | Offset 1340, 15 lines modified | ||
| 1340 | ······<p·class="built-using"> | 1340 | ······<p·class="built-using"> |
| 1341 | ········Built·using | 1341 | ········Built·using |
| 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1342 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1343 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1344 | ······</p> | 1344 | ······</p> |
| 1345 | <p>Copyright·©·1996-202 | 1345 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1346 | ····</footer> | 1346 | ····</footer> |
| 1347 | ··</div> | 1347 | ··</div> |
| 1348 | </main> | 1348 | </main> |
| 1349 | </div> | 1349 | </div> |
| 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1350 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1351 | ··<script> | 1351 | ··<script> |
| 1352 | ··let·initialized·=·false; | 1352 | ··let·initialized·=·false; |
| Offset 998, 15 lines modified | Offset 998, 15 lines modified | ||
| 998 | ······<p·class="built-using"> | 998 | ······<p·class="built-using"> |
| 999 | ········Built·using | 999 | ········Built·using |
| 1000 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1000 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1001 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1001 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1002 | ······</p> | 1002 | ······</p> |
| 1003 | <p>Copyright·©·1996-202 | 1003 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1004 | ····</footer> | 1004 | ····</footer> |
| 1005 | ··</div> | 1005 | ··</div> |
| 1006 | </main> | 1006 | </main> |
| 1007 | </div> | 1007 | </div> |
| 1008 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1008 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1009 | ··<script> | 1009 | ··<script> |
| 1010 | ··let·initialized·=·false; | 1010 | ··let·initialized·=·false; |
| Offset 379, 15 lines modified | Offset 379, 15 lines modified | ||
| 379 | ······<p·class="built-using"> | 379 | ······<p·class="built-using"> |
| 380 | ········Built·using | 380 | ········Built·using |
| 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 383 | ······</p> | 383 | ······</p> |
| 384 | <p>Copyright·©·1996-202 | 384 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 385 | ····</footer> | 385 | ····</footer> |
| 386 | ··</div> | 386 | ··</div> |
| 387 | </main> | 387 | </main> |
| 388 | </div> | 388 | </div> |
| 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 390 | ··<script> | 390 | ··<script> |
| 391 | ··let·initialized·=·false; | 391 | ··let·initialized·=·false; |
| Offset 942, 15 lines modified | Offset 942, 15 lines modified | ||
| 942 | ······<p·class="built-using"> | 942 | ······<p·class="built-using"> |
| 943 | ········Built·using | 943 | ········Built·using |
| 944 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 944 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 945 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 945 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 946 | ······</p> | 946 | ······</p> |
| 947 | <p>Copyright·©·1996-202 | 947 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 948 | ····</footer> | 948 | ····</footer> |
| 949 | ··</div> | 949 | ··</div> |
| 950 | </main> | 950 | </main> |
| 951 | </div> | 951 | </div> |
| 952 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 952 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 953 | ··<script> | 953 | ··<script> |
| 954 | ··let·initialized·=·false; | 954 | ··let·initialized·=·false; |
| Offset 745, 15 lines modified | Offset 745, 15 lines modified | ||
| 745 | ······<p·class="built-using"> | 745 | ······<p·class="built-using"> |
| 746 | ········Built·using | 746 | ········Built·using |
| 747 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 747 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 748 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 748 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 749 | ······</p> | 749 | ······</p> |
| 750 | <p>Copyright·©·1996-202 | 750 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 751 | ····</footer> | 751 | ····</footer> |
| 752 | ··</div> | 752 | ··</div> |
| 753 | </main> | 753 | </main> |
| 754 | </div> | 754 | </div> |
| 755 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 755 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 756 | ··<script> | 756 | ··<script> |
| 757 | ··let·initialized·=·false; | 757 | ··let·initialized·=·false; |
| Offset 502, 15 lines modified | Offset 502, 15 lines modified | ||
| 502 | ······<p·class="built-using"> | 502 | ······<p·class="built-using"> |
| 503 | ········Built·using | 503 | ········Built·using |
| 504 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 504 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 505 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 505 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 506 | ······</p> | 506 | ······</p> |
| 507 | <p>Copyright·©·1996-202 | 507 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 508 | ····</footer> | 508 | ····</footer> |
| 509 | ··</div> | 509 | ··</div> |
| 510 | </main> | 510 | </main> |
| 511 | </div> | 511 | </div> |
| 512 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 512 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 513 | ··<script> | 513 | ··<script> |
| 514 | ··let·initialized·=·false; | 514 | ··let·initialized·=·false; |
| Offset 347, 15 lines modified | Offset 347, 15 lines modified | ||
| 347 | ······<p·class="built-using"> | 347 | ······<p·class="built-using"> |
| 348 | ········Built·using | 348 | ········Built·using |
| 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 349 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 350 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 351 | ······</p> | 351 | ······</p> |
| 352 | <p>Copyright·©·1996-202 | 352 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 353 | ····</footer> | 353 | ····</footer> |
| 354 | ··</div> | 354 | ··</div> |
| 355 | </main> | 355 | </main> |
| 356 | </div> | 356 | </div> |
| 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 357 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 358 | ··<script> | 358 | ··<script> |
| 359 | ··let·initialized·=·false; | 359 | ··let·initialized·=·false; |
| Offset 636, 15 lines modified | Offset 636, 15 lines modified | ||
| 636 | ······<p·class="built-using"> | 636 | ······<p·class="built-using"> |
| 637 | ········Built·using | 637 | ········Built·using |
| 638 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 638 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 639 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 639 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 640 | ······</p> | 640 | ······</p> |
| 641 | <p>Copyright·©·1996-202 | 641 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 642 | ····</footer> | 642 | ····</footer> |
| 643 | ··</div> | 643 | ··</div> |
| 644 | </main> | 644 | </main> |
| 645 | </div> | 645 | </div> |
| 646 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 646 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 647 | ··<script> | 647 | ··<script> |
| 648 | ··let·initialized·=·false; | 648 | ··let·initialized·=·false; |
| Offset 1308, 15 lines modified | Offset 1308, 15 lines modified | ||
| 1308 | ······<p·class="built-using"> | 1308 | ······<p·class="built-using"> |
| 1309 | ········Built·using | 1309 | ········Built·using |
| 1310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1312 | ······</p> | 1312 | ······</p> |
| 1313 | <p>Copyright·©·1996-202 | 1313 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1314 | ····</footer> | 1314 | ····</footer> |
| 1315 | ··</div> | 1315 | ··</div> |
| 1316 | </main> | 1316 | </main> |
| 1317 | </div> | 1317 | </div> |
| 1318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1319 | ··<script> | 1319 | ··<script> |
| 1320 | ··let·initialized·=·false; | 1320 | ··let·initialized·=·false; |
| Offset 313, 15 lines modified | Offset 313, 15 lines modified | ||
| 313 | ······<p·class="built-using"> | 313 | ······<p·class="built-using"> |
| 314 | ········Built·using | 314 | ········Built·using |
| 315 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 315 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 316 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 316 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 317 | ······</p> | 317 | ······</p> |
| 318 | <p>Copyright·©·1996-202 | 318 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 319 | ····</footer> | 319 | ····</footer> |
| 320 | ··</div> | 320 | ··</div> |
| 321 | </main> | 321 | </main> |
| 322 | </div> | 322 | </div> |
| 323 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 323 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 324 | ··<script> | 324 | ··<script> |
| 325 | ··let·initialized·=·false; | 325 | ··let·initialized·=·false; |
| Offset 767, 15 lines modified | Offset 767, 15 lines modified | ||
| 767 | ······<p·class="built-using"> | 767 | ······<p·class="built-using"> |
| 768 | ········Built·using | 768 | ········Built·using |
| 769 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 769 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 770 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 770 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 771 | ······</p> | 771 | ······</p> |
| 772 | <p>Copyright·©·1996-202 | 772 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 773 | ····</footer> | 773 | ····</footer> |
| 774 | ··</div> | 774 | ··</div> |
| 775 | </main> | 775 | </main> |
| 776 | </div> | 776 | </div> |
| 777 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 777 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 778 | ··<script> | 778 | ··<script> |
| 779 | ··let·initialized·=·false; | 779 | ··let·initialized·=·false; |
| Offset 296, 15 lines modified | Offset 296, 15 lines modified | ||
| 296 | ······<p·class="built-using"> | 296 | ······<p·class="built-using"> |
| 297 | ········Built·using | 297 | ········Built·using |
| 298 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 298 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 299 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 299 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 300 | ······</p> | 300 | ······</p> |
| 301 | <p>Copyright·©·1996-202 | 301 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 302 | ····</footer> | 302 | ····</footer> |
| 303 | ··</div> | 303 | ··</div> |
| 304 | </main> | 304 | </main> |
| 305 | </div> | 305 | </div> |
| 306 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 306 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 307 | ··<script> | 307 | ··<script> |
| 308 | ··let·initialized·=·false; | 308 | ··let·initialized·=·false; |
| Offset 540, 15 lines modified | Offset 540, 15 lines modified | ||
| 540 | ······<p·class="built-using"> | 540 | ······<p·class="built-using"> |
| 541 | ········Built·using | 541 | ········Built·using |
| 542 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 542 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 543 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 543 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 544 | ······</p> | 544 | ······</p> |
| 545 | <p>Copyright·©·1996-202 | 545 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 546 | ····</footer> | 546 | ····</footer> |
| 547 | ··</div> | 547 | ··</div> |
| 548 | </main> | 548 | </main> |
| 549 | </div> | 549 | </div> |
| 550 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 550 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 551 | ··<script> | 551 | ··<script> |
| 552 | ··let·initialized·=·false; | 552 | ··let·initialized·=·false; |
| Offset 526, 15 lines modified | Offset 526, 15 lines modified | ||
| 526 | ······<p·class="built-using"> | 526 | ······<p·class="built-using"> |
| 527 | ········Built·using | 527 | ········Built·using |
| 528 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 528 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 529 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 529 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 530 | ······</p> | 530 | ······</p> |
| 531 | <p>Copyright·©·1996-202 | 531 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 532 | ····</footer> | 532 | ····</footer> |
| 533 | ··</div> | 533 | ··</div> |
| 534 | </main> | 534 | </main> |
| 535 | </div> | 535 | </div> |
| 536 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 536 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 537 | ··<script> | 537 | ··<script> |
| 538 | ··let·initialized·=·false; | 538 | ··let·initialized·=·false; |
| Offset 497, 15 lines modified | Offset 497, 15 lines modified | ||
| 497 | ······<p·class="built-using"> | 497 | ······<p·class="built-using"> |
| 498 | ········Built·using | 498 | ········Built·using |
| 499 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 499 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 500 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 500 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 501 | ······</p> | 501 | ······</p> |
| 502 | <p>Copyright·©·1996-202 | 502 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 503 | ····</footer> | 503 | ····</footer> |
| 504 | ··</div> | 504 | ··</div> |
| 505 | </main> | 505 | </main> |
| 506 | </div> | 506 | </div> |
| 507 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 507 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 508 | ··<script> | 508 | ··<script> |
| 509 | ··let·initialized·=·false; | 509 | ··let·initialized·=·false; |
| Offset 561, 15 lines modified | Offset 561, 15 lines modified | ||
| 561 | ······<p·class="built-using"> | 561 | ······<p·class="built-using"> |
| 562 | ········Built·using | 562 | ········Built·using |
| 563 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 563 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 564 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 564 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 565 | ······</p> | 565 | ······</p> |
| 566 | <p>Copyright·©·1996-202 | 566 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 567 | ····</footer> | 567 | ····</footer> |
| 568 | ··</div> | 568 | ··</div> |
| 569 | </main> | 569 | </main> |
| 570 | </div> | 570 | </div> |
| 571 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 571 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 572 | ··<script> | 572 | ··<script> |
| 573 | ··let·initialized·=·false; | 573 | ··let·initialized·=·false; |
| Offset 344, 15 lines modified | Offset 344, 15 lines modified | ||
| 344 | ······<p·class="built-using"> | 344 | ······<p·class="built-using"> |
| 345 | ········Built·using | 345 | ········Built·using |
| 346 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 346 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 347 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 347 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 348 | ······</p> | 348 | ······</p> |
| 349 | <p>Copyright·©·1996-202 | 349 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 350 | ····</footer> | 350 | ····</footer> |
| 351 | ··</div> | 351 | ··</div> |
| 352 | </main> | 352 | </main> |
| 353 | </div> | 353 | </div> |
| 354 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 354 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 355 | ··<script> | 355 | ··<script> |
| 356 | ··let·initialized·=·false; | 356 | ··let·initialized·=·false; |
| Offset 1244, 15 lines modified | Offset 1244, 15 lines modified | ||
| 1244 | ······<p·class="built-using"> | 1244 | ······<p·class="built-using"> |
| 1245 | ········Built·using | 1245 | ········Built·using |
| 1246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1246 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1247 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1248 | ······</p> | 1248 | ······</p> |
| 1249 | <p>Copyright·©·1996-202 | 1249 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1250 | ····</footer> | 1250 | ····</footer> |
| 1251 | ··</div> | 1251 | ··</div> |
| 1252 | </main> | 1252 | </main> |
| 1253 | </div> | 1253 | </div> |
| 1254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1254 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1255 | ··<script> | 1255 | ··<script> |
| 1256 | ··let·initialized·=·false; | 1256 | ··let·initialized·=·false; |
| Offset 664, 15 lines modified | Offset 664, 15 lines modified | ||
| 664 | ······<p·class="built-using"> | 664 | ······<p·class="built-using"> |
| 665 | ········Built·using | 665 | ········Built·using |
| 666 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 666 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 667 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 667 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 668 | ······</p> | 668 | ······</p> |
| 669 | <p>Copyright·©·1996-202 | 669 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 670 | ····</footer> | 670 | ····</footer> |
| 671 | ··</div> | 671 | ··</div> |
| 672 | </main> | 672 | </main> |
| 673 | </div> | 673 | </div> |
| 674 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 674 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 675 | ··<script> | 675 | ··<script> |
| 676 | ··let·initialized·=·false; | 676 | ··let·initialized·=·false; |
| Offset 391, 15 lines modified | Offset 391, 15 lines modified | ||
| 391 | ······<p·class="built-using"> | 391 | ······<p·class="built-using"> |
| 392 | ········Built·using | 392 | ········Built·using |
| 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 395 | ······</p> | 395 | ······</p> |
| 396 | <p>Copyright·©·1996-202 | 396 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 397 | ····</footer> | 397 | ····</footer> |
| 398 | ··</div> | 398 | ··</div> |
| 399 | </main> | 399 | </main> |
| 400 | </div> | 400 | </div> |
| 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 402 | ··<script> | 402 | ··<script> |
| 403 | ··let·initialized·=·false; | 403 | ··let·initialized·=·false; |
| Offset 318, 15 lines modified | Offset 318, 15 lines modified | ||
| 318 | ······<p·class="built-using"> | 318 | ······<p·class="built-using"> |
| 319 | ········Built·using | 319 | ········Built·using |
| 320 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 320 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 321 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 321 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 322 | ······</p> | 322 | ······</p> |
| 323 | <p>Copyright·©·1996-202 | 323 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 324 | ····</footer> | 324 | ····</footer> |
| 325 | ··</div> | 325 | ··</div> |
| 326 | </main> | 326 | </main> |
| 327 | </div> | 327 | </div> |
| 328 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 328 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 329 | ··<script> | 329 | ··<script> |
| 330 | ··let·initialized·=·false; | 330 | ··let·initialized·=·false; |
| Offset 1121, 15 lines modified | Offset 1121, 15 lines modified | ||
| 1121 | ······<p·class="built-using"> | 1121 | ······<p·class="built-using"> |
| 1122 | ········Built·using | 1122 | ········Built·using |
| 1123 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1123 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1124 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1124 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1125 | ······</p> | 1125 | ······</p> |
| 1126 | <p>Copyright·©·1996-202 | 1126 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1127 | ····</footer> | 1127 | ····</footer> |
| 1128 | ··</div> | 1128 | ··</div> |
| 1129 | </main> | 1129 | </main> |
| 1130 | </div> | 1130 | </div> |
| 1131 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1131 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1132 | ··<script> | 1132 | ··<script> |
| 1133 | ··let·initialized·=·false; | 1133 | ··let·initialized·=·false; |
| Offset 463, 15 lines modified | Offset 463, 15 lines modified | ||
| 463 | ······<p·class="built-using"> | 463 | ······<p·class="built-using"> |
| 464 | ········Built·using | 464 | ········Built·using |
| 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 467 | ······</p> | 467 | ······</p> |
| 468 | <p>Copyright·©·1996-202 | 468 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 469 | ····</footer> | 469 | ····</footer> |
| 470 | ··</div> | 470 | ··</div> |
| 471 | </main> | 471 | </main> |
| 472 | </div> | 472 | </div> |
| 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 474 | ··<script> | 474 | ··<script> |
| 475 | ··let·initialized·=·false; | 475 | ··let·initialized·=·false; |
| Offset 3866, 15 lines modified | Offset 3866, 15 lines modified | ||
| 3866 | ······<p·class="built-using"> | 3866 | ······<p·class="built-using"> |
| 3867 | ········Built·using | 3867 | ········Built·using |
| 3868 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3868 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3869 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3869 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3870 | ······</p> | 3870 | ······</p> |
| 3871 | <p>Copyright·©·1996-202 | 3871 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3872 | ····</footer> | 3872 | ····</footer> |
| 3873 | ··</div> | 3873 | ··</div> |
| 3874 | </main> | 3874 | </main> |
| 3875 | </div> | 3875 | </div> |
| 3876 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3876 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3877 | ··<script> | 3877 | ··<script> |
| 3878 | ··let·initialized·=·false; | 3878 | ··let·initialized·=·false; |
| Offset 385, 15 lines modified | Offset 385, 15 lines modified | ||
| 385 | ······<p·class="built-using"> | 385 | ······<p·class="built-using"> |
| 386 | ········Built·using | 386 | ········Built·using |
| 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 389 | ······</p> | 389 | ······</p> |
| 390 | <p>Copyright·©·1996-202 | 390 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 391 | ····</footer> | 391 | ····</footer> |
| 392 | ··</div> | 392 | ··</div> |
| 393 | </main> | 393 | </main> |
| 394 | </div> | 394 | </div> |
| 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 396 | ··<script> | 396 | ··<script> |
| 397 | ··let·initialized·=·false; | 397 | ··let·initialized·=·false; |
| Offset 252, 15 lines modified | Offset 252, 15 lines modified | ||
| 252 | ······<p·class="built-using"> | 252 | ······<p·class="built-using"> |
| 253 | ········Built·using | 253 | ········Built·using |
| 254 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 254 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 255 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 255 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 256 | ······</p> | 256 | ······</p> |
| 257 | <p>Copyright·©·1996-202 | 257 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 258 | ····</footer> | 258 | ····</footer> |
| 259 | ··</div> | 259 | ··</div> |
| 260 | </main> | 260 | </main> |
| 261 | </div> | 261 | </div> |
| 262 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 262 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 263 | ··<script> | 263 | ··<script> |
| 264 | ··let·initialized·=·false; | 264 | ··let·initialized·=·false; |
| Offset 336, 15 lines modified | Offset 336, 15 lines modified | ||
| 336 | ······<p·class="built-using"> | 336 | ······<p·class="built-using"> |
| 337 | ········Built·using | 337 | ········Built·using |
| 338 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 338 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 339 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 339 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 340 | ······</p> | 340 | ······</p> |
| 341 | <p>Copyright·©·1996-202 | 341 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 342 | ····</footer> | 342 | ····</footer> |
| 343 | ··</div> | 343 | ··</div> |
| 344 | </main> | 344 | </main> |
| 345 | </div> | 345 | </div> |
| 346 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 346 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 347 | ··<script> | 347 | ··<script> |
| 348 | ··let·initialized·=·false; | 348 | ··let·initialized·=·false; |
| Offset 570, 15 lines modified | Offset 570, 15 lines modified | ||
| 570 | ······<p·class="built-using"> | 570 | ······<p·class="built-using"> |
| 571 | ········Built·using | 571 | ········Built·using |
| 572 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 572 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 573 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 573 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 574 | ······</p> | 574 | ······</p> |
| 575 | <p>Copyright·©·1996-202 | 575 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 576 | ····</footer> | 576 | ····</footer> |
| 577 | ··</div> | 577 | ··</div> |
| 578 | </main> | 578 | </main> |
| 579 | </div> | 579 | </div> |
| 580 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 580 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 581 | ··<script> | 581 | ··<script> |
| 582 | ··let·initialized·=·false; | 582 | ··let·initialized·=·false; |
| Offset 921, 15 lines modified | Offset 921, 15 lines modified | ||
| 921 | ······<p·class="built-using"> | 921 | ······<p·class="built-using"> |
| 922 | ········Built·using | 922 | ········Built·using |
| 923 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 923 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 924 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 924 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 925 | ······</p> | 925 | ······</p> |
| 926 | <p>Copyright·©·1996-202 | 926 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 927 | ····</footer> | 927 | ····</footer> |
| 928 | ··</div> | 928 | ··</div> |
| 929 | </main> | 929 | </main> |
| 930 | </div> | 930 | </div> |
| 931 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 931 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 932 | ··<script> | 932 | ··<script> |
| 933 | ··let·initialized·=·false; | 933 | ··let·initialized·=·false; |
| Offset 515, 15 lines modified | Offset 515, 15 lines modified | ||
| 515 | ······<p·class="built-using"> | 515 | ······<p·class="built-using"> |
| 516 | ········Built·using | 516 | ········Built·using |
| 517 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 517 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 518 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 518 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 519 | ······</p> | 519 | ······</p> |
| 520 | <p>Copyright·©·1996-202 | 520 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 521 | ····</footer> | 521 | ····</footer> |
| 522 | ··</div> | 522 | ··</div> |
| 523 | </main> | 523 | </main> |
| 524 | </div> | 524 | </div> |
| 525 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 525 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 526 | ··<script> | 526 | ··<script> |
| 527 | ··let·initialized·=·false; | 527 | ··let·initialized·=·false; |
| Offset 569, 15 lines modified | Offset 569, 15 lines modified | ||
| 569 | ······<p·class="built-using"> | 569 | ······<p·class="built-using"> |
| 570 | ········Built·using | 570 | ········Built·using |
| 571 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 571 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 572 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 572 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 573 | ······</p> | 573 | ······</p> |
| 574 | <p>Copyright·©·1996-202 | 574 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 575 | ····</footer> | 575 | ····</footer> |
| 576 | ··</div> | 576 | ··</div> |
| 577 | </main> | 577 | </main> |
| 578 | </div> | 578 | </div> |
| 579 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 579 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 580 | ··<script> | 580 | ··<script> |
| 581 | ··let·initialized·=·false; | 581 | ··let·initialized·=·false; |
| Offset 675, 15 lines modified | Offset 675, 15 lines modified | ||
| 675 | ······<p·class="built-using"> | 675 | ······<p·class="built-using"> |
| 676 | ········Built·using | 676 | ········Built·using |
| 677 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 677 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 678 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 678 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 679 | ······</p> | 679 | ······</p> |
| 680 | <p>Copyright·©·1996-202 | 680 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 681 | ····</footer> | 681 | ····</footer> |
| 682 | ··</div> | 682 | ··</div> |
| 683 | </main> | 683 | </main> |
| 684 | </div> | 684 | </div> |
| 685 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 685 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 686 | ··<script> | 686 | ··<script> |
| 687 | ··let·initialized·=·false; | 687 | ··let·initialized·=·false; |
| Offset 289, 15 lines modified | Offset 289, 15 lines modified | ||
| 289 | ······<p·class="built-using"> | 289 | ······<p·class="built-using"> |
| 290 | ········Built·using | 290 | ········Built·using |
| 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 293 | ······</p> | 293 | ······</p> |
| 294 | <p>Copyright·©·1996-202 | 294 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 295 | ····</footer> | 295 | ····</footer> |
| 296 | ··</div> | 296 | ··</div> |
| 297 | </main> | 297 | </main> |
| 298 | </div> | 298 | </div> |
| 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 300 | ··<script> | 300 | ··<script> |
| 301 | ··let·initialized·=·false; | 301 | ··let·initialized·=·false; |
| Offset 420, 15 lines modified | Offset 420, 15 lines modified | ||
| 420 | ······<p·class="built-using"> | 420 | ······<p·class="built-using"> |
| 421 | ········Built·using | 421 | ········Built·using |
| 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 424 | ······</p> | 424 | ······</p> |
| 425 | <p>Copyright·©·1996-202 | 425 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 426 | ····</footer> | 426 | ····</footer> |
| 427 | ··</div> | 427 | ··</div> |
| 428 | </main> | 428 | </main> |
| 429 | </div> | 429 | </div> |
| 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 431 | ··<script> | 431 | ··<script> |
| 432 | ··let·initialized·=·false; | 432 | ··let·initialized·=·false; |
| Offset 346, 15 lines modified | Offset 346, 15 lines modified | ||
| 346 | ······<p·class="built-using"> | 346 | ······<p·class="built-using"> |
| 347 | ········Built·using | 347 | ········Built·using |
| 348 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 348 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 349 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 349 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 350 | ······</p> | 350 | ······</p> |
| 351 | <p>Copyright·©·1996-202 | 351 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 352 | ····</footer> | 352 | ····</footer> |
| 353 | ··</div> | 353 | ··</div> |
| 354 | </main> | 354 | </main> |
| 355 | </div> | 355 | </div> |
| 356 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 356 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 357 | ··<script> | 357 | ··<script> |
| 358 | ··let·initialized·=·false; | 358 | ··let·initialized·=·false; |
| Offset 575, 15 lines modified | Offset 575, 15 lines modified | ||
| 575 | ······<p·class="built-using"> | 575 | ······<p·class="built-using"> |
| 576 | ········Built·using | 576 | ········Built·using |
| 577 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 577 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 578 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 578 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 579 | ······</p> | 579 | ······</p> |
| 580 | <p>Copyright·©·1996-202 | 580 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 581 | ····</footer> | 581 | ····</footer> |
| 582 | ··</div> | 582 | ··</div> |
| 583 | </main> | 583 | </main> |
| 584 | </div> | 584 | </div> |
| 585 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 585 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 586 | ··<script> | 586 | ··<script> |
| 587 | ··let·initialized·=·false; | 587 | ··let·initialized·=·false; |
| Offset 644, 15 lines modified | Offset 644, 15 lines modified | ||
| 644 | ······<p·class="built-using"> | 644 | ······<p·class="built-using"> |
| 645 | ········Built·using | 645 | ········Built·using |
| 646 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 646 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 647 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 647 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 648 | ······</p> | 648 | ······</p> |
| 649 | <p>Copyright·©·1996-202 | 649 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 650 | ····</footer> | 650 | ····</footer> |
| 651 | ··</div> | 651 | ··</div> |
| 652 | </main> | 652 | </main> |
| 653 | </div> | 653 | </div> |
| 654 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 654 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 655 | ··<script> | 655 | ··<script> |
| 656 | ··let·initialized·=·false; | 656 | ··let·initialized·=·false; |
| Offset 379, 15 lines modified | Offset 379, 15 lines modified | ||
| 379 | ······<p·class="built-using"> | 379 | ······<p·class="built-using"> |
| 380 | ········Built·using | 380 | ········Built·using |
| 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 383 | ······</p> | 383 | ······</p> |
| 384 | <p>Copyright·©·1996-202 | 384 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 385 | ····</footer> | 385 | ····</footer> |
| 386 | ··</div> | 386 | ··</div> |
| 387 | </main> | 387 | </main> |
| 388 | </div> | 388 | </div> |
| 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 390 | ··<script> | 390 | ··<script> |
| 391 | ··let·initialized·=·false; | 391 | ··let·initialized·=·false; |
| Offset 902, 15 lines modified | Offset 902, 15 lines modified | ||
| 902 | ······<p·class="built-using"> | 902 | ······<p·class="built-using"> |
| 903 | ········Built·using | 903 | ········Built·using |
| 904 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 904 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 905 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 905 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 906 | ······</p> | 906 | ······</p> |
| 907 | <p>Copyright·©·1996-202 | 907 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 908 | ····</footer> | 908 | ····</footer> |
| 909 | ··</div> | 909 | ··</div> |
| 910 | </main> | 910 | </main> |
| 911 | </div> | 911 | </div> |
| 912 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 912 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 913 | ··<script> | 913 | ··<script> |
| 914 | ··let·initialized·=·false; | 914 | ··let·initialized·=·false; |
| Offset 344, 15 lines modified | Offset 344, 15 lines modified | ||
| 344 | ······<p·class="built-using"> | 344 | ······<p·class="built-using"> |
| 345 | ········Built·using | 345 | ········Built·using |
| 346 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 346 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 347 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 347 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 348 | ······</p> | 348 | ······</p> |
| 349 | <p>Copyright·©·1996-202 | 349 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 350 | ····</footer> | 350 | ····</footer> |
| 351 | ··</div> | 351 | ··</div> |
| 352 | </main> | 352 | </main> |
| 353 | </div> | 353 | </div> |
| 354 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 354 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 355 | ··<script> | 355 | ··<script> |
| 356 | ··let·initialized·=·false; | 356 | ··let·initialized·=·false; |
| Offset 572, 15 lines modified | Offset 572, 15 lines modified | ||
| 572 | ······<p·class="built-using"> | 572 | ······<p·class="built-using"> |
| 573 | ········Built·using | 573 | ········Built·using |
| 574 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 574 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 575 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 575 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 576 | ······</p> | 576 | ······</p> |
| 577 | <p>Copyright·©·1996-202 | 577 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 578 | ····</footer> | 578 | ····</footer> |
| 579 | ··</div> | 579 | ··</div> |
| 580 | </main> | 580 | </main> |
| 581 | </div> | 581 | </div> |
| 582 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 582 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 583 | ··<script> | 583 | ··<script> |
| 584 | ··let·initialized·=·false; | 584 | ··let·initialized·=·false; |
| Offset 560, 15 lines modified | Offset 560, 15 lines modified | ||
| 560 | ······<p·class="built-using"> | 560 | ······<p·class="built-using"> |
| 561 | ········Built·using | 561 | ········Built·using |
| 562 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 562 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 563 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 563 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 564 | ······</p> | 564 | ······</p> |
| 565 | <p>Copyright·©·1996-202 | 565 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 566 | ····</footer> | 566 | ····</footer> |
| 567 | ··</div> | 567 | ··</div> |
| 568 | </main> | 568 | </main> |
| 569 | </div> | 569 | </div> |
| 570 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 570 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 571 | ··<script> | 571 | ··<script> |
| 572 | ··let·initialized·=·false; | 572 | ··let·initialized·=·false; |
| Offset 508, 15 lines modified | Offset 508, 15 lines modified | ||
| 508 | ······<p·class="built-using"> | 508 | ······<p·class="built-using"> |
| 509 | ········Built·using | 509 | ········Built·using |
| 510 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 510 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 511 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 511 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 512 | ······</p> | 512 | ······</p> |
| 513 | <p>Copyright·©·1996-202 | 513 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 514 | ····</footer> | 514 | ····</footer> |
| 515 | ··</div> | 515 | ··</div> |
| 516 | </main> | 516 | </main> |
| 517 | </div> | 517 | </div> |
| 518 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 518 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 519 | ··<script> | 519 | ··<script> |
| 520 | ··let·initialized·=·false; | 520 | ··let·initialized·=·false; |
| Offset 815, 15 lines modified | Offset 815, 15 lines modified | ||
| 815 | ······<p·class="built-using"> | 815 | ······<p·class="built-using"> |
| 816 | ········Built·using | 816 | ········Built·using |
| 817 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 817 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 818 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 818 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 819 | ······</p> | 819 | ······</p> |
| 820 | <p>Copyright·©·1996-202 | 820 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 821 | ····</footer> | 821 | ····</footer> |
| 822 | ··</div> | 822 | ··</div> |
| 823 | </main> | 823 | </main> |
| 824 | </div> | 824 | </div> |
| 825 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 825 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 826 | ··<script> | 826 | ··<script> |
| 827 | ··let·initialized·=·false; | 827 | ··let·initialized·=·false; |
| Offset 352, 15 lines modified | Offset 352, 15 lines modified | ||
| 352 | ······<p·class="built-using"> | 352 | ······<p·class="built-using"> |
| 353 | ········Built·using | 353 | ········Built·using |
| 354 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 354 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 355 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 355 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 356 | ······</p> | 356 | ······</p> |
| 357 | <p>Copyright·©·1996-202 | 357 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 358 | ····</footer> | 358 | ····</footer> |
| 359 | ··</div> | 359 | ··</div> |
| 360 | </main> | 360 | </main> |
| 361 | </div> | 361 | </div> |
| 362 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 362 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 363 | ··<script> | 363 | ··<script> |
| 364 | ··let·initialized·=·false; | 364 | ··let·initialized·=·false; |
| Offset 1157, 15 lines modified | Offset 1157, 15 lines modified | ||
| 1157 | ······<p·class="built-using"> | 1157 | ······<p·class="built-using"> |
| 1158 | ········Built·using | 1158 | ········Built·using |
| 1159 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1159 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1160 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1160 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1161 | ······</p> | 1161 | ······</p> |
| 1162 | <p>Copyright·©·1996-202 | 1162 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1163 | ····</footer> | 1163 | ····</footer> |
| 1164 | ··</div> | 1164 | ··</div> |
| 1165 | </main> | 1165 | </main> |
| 1166 | </div> | 1166 | </div> |
| 1167 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1167 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1168 | ··<script> | 1168 | ··<script> |
| 1169 | ··let·initialized·=·false; | 1169 | ··let·initialized·=·false; |
| Offset 811, 15 lines modified | Offset 811, 15 lines modified | ||
| 811 | ······<p·class="built-using"> | 811 | ······<p·class="built-using"> |
| 812 | ········Built·using | 812 | ········Built·using |
| 813 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 813 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 814 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 814 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 815 | ······</p> | 815 | ······</p> |
| 816 | <p>Copyright·©·1996-202 | 816 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 817 | ····</footer> | 817 | ····</footer> |
| 818 | ··</div> | 818 | ··</div> |
| 819 | </main> | 819 | </main> |
| 820 | </div> | 820 | </div> |
| 821 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 821 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 822 | ··<script> | 822 | ··<script> |
| 823 | ··let·initialized·=·false; | 823 | ··let·initialized·=·false; |
| Offset 420, 15 lines modified | Offset 420, 15 lines modified | ||
| 420 | ······<p·class="built-using"> | 420 | ······<p·class="built-using"> |
| 421 | ········Built·using | 421 | ········Built·using |
| 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 424 | ······</p> | 424 | ······</p> |
| 425 | <p>Copyright·©·1996-202 | 425 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 426 | ····</footer> | 426 | ····</footer> |
| 427 | ··</div> | 427 | ··</div> |
| 428 | </main> | 428 | </main> |
| 429 | </div> | 429 | </div> |
| 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 431 | ··<script> | 431 | ··<script> |
| 432 | ··let·initialized·=·false; | 432 | ··let·initialized·=·false; |
| Offset 637, 15 lines modified | Offset 637, 15 lines modified | ||
| 637 | ······<p·class="built-using"> | 637 | ······<p·class="built-using"> |
| 638 | ········Built·using | 638 | ········Built·using |
| 639 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 639 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 640 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 640 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 641 | ······</p> | 641 | ······</p> |
| 642 | <p>Copyright·©·1996-202 | 642 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 643 | ····</footer> | 643 | ····</footer> |
| 644 | ··</div> | 644 | ··</div> |
| 645 | </main> | 645 | </main> |
| 646 | </div> | 646 | </div> |
| 647 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 647 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 648 | ··<script> | 648 | ··<script> |
| 649 | ··let·initialized·=·false; | 649 | ··let·initialized·=·false; |
| Offset 343, 15 lines modified | Offset 343, 15 lines modified | ||
| 343 | ······<p·class="built-using"> | 343 | ······<p·class="built-using"> |
| 344 | ········Built·using | 344 | ········Built·using |
| 345 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 345 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 346 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 346 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 347 | ······</p> | 347 | ······</p> |
| 348 | <p>Copyright·©·1996-202 | 348 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 349 | ····</footer> | 349 | ····</footer> |
| 350 | ··</div> | 350 | ··</div> |
| 351 | </main> | 351 | </main> |
| 352 | </div> | 352 | </div> |
| 353 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 353 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 354 | ··<script> | 354 | ··<script> |
| 355 | ··let·initialized·=·false; | 355 | ··let·initialized·=·false; |
| Offset 1234, 15 lines modified | Offset 1234, 15 lines modified | ||
| 1234 | ······<p·class="built-using"> | 1234 | ······<p·class="built-using"> |
| 1235 | ········Built·using | 1235 | ········Built·using |
| 1236 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1236 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1237 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1237 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1238 | ······</p> | 1238 | ······</p> |
| 1239 | <p>Copyright·©·1996-202 | 1239 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1240 | ····</footer> | 1240 | ····</footer> |
| 1241 | ··</div> | 1241 | ··</div> |
| 1242 | </main> | 1242 | </main> |
| 1243 | </div> | 1243 | </div> |
| 1244 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1244 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1245 | ··<script> | 1245 | ··<script> |
| 1246 | ··let·initialized·=·false; | 1246 | ··let·initialized·=·false; |
| Offset 218, 15 lines modified | Offset 218, 15 lines modified | ||
| 218 | ······<p·class="built-using"> | 218 | ······<p·class="built-using"> |
| 219 | ········Built·using | 219 | ········Built·using |
| 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 220 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 221 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 222 | ······</p> | 222 | ······</p> |
| 223 | <p>Copyright·©·1996-202 | 223 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 224 | ····</footer> | 224 | ····</footer> |
| 225 | ··</div> | 225 | ··</div> |
| 226 | </main> | 226 | </main> |
| 227 | </div> | 227 | </div> |
| 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 228 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 229 | ··<script> | 229 | ··<script> |
| 230 | ··let·initialized·=·false; | 230 | ··let·initialized·=·false; |
| Offset 428, 15 lines modified | Offset 428, 15 lines modified | ||
| 428 | ······<p·class="built-using"> | 428 | ······<p·class="built-using"> |
| 429 | ········Built·using | 429 | ········Built·using |
| 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 432 | ······</p> | 432 | ······</p> |
| 433 | <p>Copyright·©·1996-202 | 433 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 434 | ····</footer> | 434 | ····</footer> |
| 435 | ··</div> | 435 | ··</div> |
| 436 | </main> | 436 | </main> |
| 437 | </div> | 437 | </div> |
| 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 439 | ··<script> | 439 | ··<script> |
| 440 | ··let·initialized·=·false; | 440 | ··let·initialized·=·false; |
| Offset 524, 15 lines modified | Offset 524, 15 lines modified | ||
| 524 | ······<p·class="built-using"> | 524 | ······<p·class="built-using"> |
| 525 | ········Built·using | 525 | ········Built·using |
| 526 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 526 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 527 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 527 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 528 | ······</p> | 528 | ······</p> |
| 529 | <p>Copyright·©·1996-202 | 529 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 530 | ····</footer> | 530 | ····</footer> |
| 531 | ··</div> | 531 | ··</div> |
| 532 | </main> | 532 | </main> |
| 533 | </div> | 533 | </div> |
| 534 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 534 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 535 | ··<script> | 535 | ··<script> |
| 536 | ··let·initialized·=·false; | 536 | ··let·initialized·=·false; |
| Offset 441, 15 lines modified | Offset 441, 15 lines modified | ||
| 441 | ······<p·class="built-using"> | 441 | ······<p·class="built-using"> |
| 442 | ········Built·using | 442 | ········Built·using |
| 443 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 443 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 444 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 444 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 445 | ······</p> | 445 | ······</p> |
| 446 | <p>Copyright·©·1996-202 | 446 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 447 | ····</footer> | 447 | ····</footer> |
| 448 | ··</div> | 448 | ··</div> |
| 449 | </main> | 449 | </main> |
| 450 | </div> | 450 | </div> |
| 451 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 451 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 452 | ··<script> | 452 | ··<script> |
| 453 | ··let·initialized·=·false; | 453 | ··let·initialized·=·false; |
| Offset 708, 15 lines modified | Offset 708, 15 lines modified | ||
| 708 | ······<p·class="built-using"> | 708 | ······<p·class="built-using"> |
| 709 | ········Built·using | 709 | ········Built·using |
| 710 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 710 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 711 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 711 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 712 | ······</p> | 712 | ······</p> |
| 713 | <p>Copyright·©·1996-202 | 713 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 714 | ····</footer> | 714 | ····</footer> |
| 715 | ··</div> | 715 | ··</div> |
| 716 | </main> | 716 | </main> |
| 717 | </div> | 717 | </div> |
| 718 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 718 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 719 | ··<script> | 719 | ··<script> |
| 720 | ··let·initialized·=·false; | 720 | ··let·initialized·=·false; |
| Offset 1062, 15 lines modified | Offset 1062, 15 lines modified | ||
| 1062 | ······<p·class="built-using"> | 1062 | ······<p·class="built-using"> |
| 1063 | ········Built·using | 1063 | ········Built·using |
| 1064 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1064 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1065 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1065 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1066 | ······</p> | 1066 | ······</p> |
| 1067 | <p>Copyright·©·1996-202 | 1067 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1068 | ····</footer> | 1068 | ····</footer> |
| 1069 | ··</div> | 1069 | ··</div> |
| 1070 | </main> | 1070 | </main> |
| 1071 | </div> | 1071 | </div> |
| 1072 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1072 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1073 | ··<script> | 1073 | ··<script> |
| 1074 | ··let·initialized·=·false; | 1074 | ··let·initialized·=·false; |
| Offset 216, 15 lines modified | Offset 216, 15 lines modified | ||
| 216 | ······<p·class="built-using"> | 216 | ······<p·class="built-using"> |
| 217 | ········Built·using | 217 | ········Built·using |
| 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 220 | ······</p> | 220 | ······</p> |
| 221 | <p>Copyright·©·1996-202 | 221 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 222 | ····</footer> | 222 | ····</footer> |
| 223 | ··</div> | 223 | ··</div> |
| 224 | </main> | 224 | </main> |
| 225 | </div> | 225 | </div> |
| 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 227 | ··<script> | 227 | ··<script> |
| 228 | ··let·initialized·=·false; | 228 | ··let·initialized·=·false; |
| Offset 2119, 15 lines modified | Offset 2119, 15 lines modified | ||
| 2119 | ······<p·class="built-using"> | 2119 | ······<p·class="built-using"> |
| 2120 | ········Built·using | 2120 | ········Built·using |
| 2121 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2121 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2122 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2122 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2123 | ······</p> | 2123 | ······</p> |
| 2124 | <p>Copyright·©·1996-202 | 2124 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2125 | ····</footer> | 2125 | ····</footer> |
| 2126 | ··</div> | 2126 | ··</div> |
| 2127 | </main> | 2127 | </main> |
| 2128 | </div> | 2128 | </div> |
| 2129 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2129 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2130 | ··<script> | 2130 | ··<script> |
| 2131 | ··let·initialized·=·false; | 2131 | ··let·initialized·=·false; |
| Offset 216, 15 lines modified | Offset 216, 15 lines modified | ||
| 216 | ······<p·class="built-using"> | 216 | ······<p·class="built-using"> |
| 217 | ········Built·using | 217 | ········Built·using |
| 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 220 | ······</p> | 220 | ······</p> |
| 221 | <p>Copyright·©·1996-202 | 221 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 222 | ····</footer> | 222 | ····</footer> |
| 223 | ··</div> | 223 | ··</div> |
| 224 | </main> | 224 | </main> |
| 225 | </div> | 225 | </div> |
| 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 227 | ··<script> | 227 | ··<script> |
| 228 | ··let·initialized·=·false; | 228 | ··let·initialized·=·false; |
| Offset 598, 15 lines modified | Offset 598, 15 lines modified | ||
| 598 | ······<p·class="built-using"> | 598 | ······<p·class="built-using"> |
| 599 | ········Built·using | 599 | ········Built·using |
| 600 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 600 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 601 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 601 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 602 | ······</p> | 602 | ······</p> |
| 603 | <p>Copyright·©·1996-202 | 603 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 604 | ····</footer> | 604 | ····</footer> |
| 605 | ··</div> | 605 | ··</div> |
| 606 | </main> | 606 | </main> |
| 607 | </div> | 607 | </div> |
| 608 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 608 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 609 | ··<script> | 609 | ··<script> |
| 610 | ··let·initialized·=·false; | 610 | ··let·initialized·=·false; |
| Offset 686, 15 lines modified | Offset 686, 15 lines modified | ||
| 686 | ······<p·class="built-using"> | 686 | ······<p·class="built-using"> |
| 687 | ········Built·using | 687 | ········Built·using |
| 688 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 688 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 689 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 689 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 690 | ······</p> | 690 | ······</p> |
| 691 | <p>Copyright·©·1996-202 | 691 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 692 | ····</footer> | 692 | ····</footer> |
| 693 | ··</div> | 693 | ··</div> |
| 694 | </main> | 694 | </main> |
| 695 | </div> | 695 | </div> |
| 696 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 696 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 697 | ··<script> | 697 | ··<script> |
| 698 | ··let·initialized·=·false; | 698 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 1124, 15 lines modified | Offset 1124, 15 lines modified | ||
| 1124 | ······<p·class="built-using"> | 1124 | ······<p·class="built-using"> |
| 1125 | ········Built·using | 1125 | ········Built·using |
| 1126 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1126 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1127 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1127 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1128 | ······</p> | 1128 | ······</p> |
| 1129 | <p>Copyright·©·1996-202 | 1129 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1130 | ····</footer> | 1130 | ····</footer> |
| 1131 | ··</div> | 1131 | ··</div> |
| 1132 | </main> | 1132 | </main> |
| 1133 | </div> | 1133 | </div> |
| 1134 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1134 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1135 | ··<script> | 1135 | ··<script> |
| 1136 | ··let·initialized·=·false; | 1136 | ··let·initialized·=·false; |
| Offset 216, 15 lines modified | Offset 216, 15 lines modified | ||
| 216 | ······<p·class="built-using"> | 216 | ······<p·class="built-using"> |
| 217 | ········Built·using | 217 | ········Built·using |
| 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 218 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 219 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 220 | ······</p> | 220 | ······</p> |
| 221 | <p>Copyright·©·1996-202 | 221 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 222 | ····</footer> | 222 | ····</footer> |
| 223 | ··</div> | 223 | ··</div> |
| 224 | </main> | 224 | </main> |
| 225 | </div> | 225 | </div> |
| 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 226 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 227 | ··<script> | 227 | ··<script> |
| 228 | ··let·initialized·=·false; | 228 | ··let·initialized·=·false; |
| Offset 681, 15 lines modified | Offset 681, 15 lines modified | ||
| 681 | ······<p·class="built-using"> | 681 | ······<p·class="built-using"> |
| 682 | ········Built·using | 682 | ········Built·using |
| 683 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 683 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 684 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 684 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 685 | ······</p> | 685 | ······</p> |
| 686 | <p>Copyright·©·1996-202 | 686 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 687 | ····</footer> | 687 | ····</footer> |
| 688 | ··</div> | 688 | ··</div> |
| 689 | </main> | 689 | </main> |
| 690 | </div> | 690 | </div> |
| 691 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 691 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 692 | ··<script> | 692 | ··<script> |
| 693 | ··let·initialized·=·false; | 693 | ··let·initialized·=·false; |
| Offset 8031, 15 lines modified | Offset 8031, 15 lines modified | ||
| 8031 | ······<p·class="built-using"> | 8031 | ······<p·class="built-using"> |
| 8032 | ········Built·using | 8032 | ········Built·using |
| 8033 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 8033 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 8034 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 8034 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 8035 | ······</p> | 8035 | ······</p> |
| 8036 | <p>Copyright·©·1996-202 | 8036 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 8037 | ····</footer> | 8037 | ····</footer> |
| 8038 | ··</div> | 8038 | ··</div> |
| 8039 | </main> | 8039 | </main> |
| 8040 | </div> | 8040 | </div> |
| 8041 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 8041 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 8042 | ··<script> | 8042 | ··<script> |
| 8043 | ··let·initialized·=·false; | 8043 | ··let·initialized·=·false; |
| Offset 1114, 15 lines modified | Offset 1114, 15 lines modified | ||
| 1114 | ······<p·class="built-using"> | 1114 | ······<p·class="built-using"> |
| 1115 | ········Built·using | 1115 | ········Built·using |
| 1116 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1116 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1117 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1117 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1118 | ······</p> | 1118 | ······</p> |
| 1119 | <p>Copyright·©·1996-202 | 1119 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1120 | ····</footer> | 1120 | ····</footer> |
| 1121 | ··</div> | 1121 | ··</div> |
| 1122 | </main> | 1122 | </main> |
| 1123 | </div> | 1123 | </div> |
| 1124 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1124 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1125 | ··<script> | 1125 | ··<script> |
| 1126 | ··let·initialized·=·false; | 1126 | ··let·initialized·=·false; |
| Offset 1045, 15 lines modified | Offset 1045, 15 lines modified | ||
| 1045 | ······<p·class="built-using"> | 1045 | ······<p·class="built-using"> |
| 1046 | ········Built·using | 1046 | ········Built·using |
| 1047 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1047 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1048 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1048 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1049 | ······</p> | 1049 | ······</p> |
| 1050 | <p>Copyright·©·1996-202 | 1050 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1051 | ····</footer> | 1051 | ····</footer> |
| 1052 | ··</div> | 1052 | ··</div> |
| 1053 | </main> | 1053 | </main> |
| 1054 | </div> | 1054 | </div> |
| 1055 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1055 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1056 | ··<script> | 1056 | ··<script> |
| 1057 | ··let·initialized·=·false; | 1057 | ··let·initialized·=·false; |
| Offset 420, 15 lines modified | Offset 420, 15 lines modified | ||
| 420 | ······<p·class="built-using"> | 420 | ······<p·class="built-using"> |
| 421 | ········Built·using | 421 | ········Built·using |
| 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 422 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 423 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 424 | ······</p> | 424 | ······</p> |
| 425 | <p>Copyright·©·1996-202 | 425 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 426 | ····</footer> | 426 | ····</footer> |
| 427 | ··</div> | 427 | ··</div> |
| 428 | </main> | 428 | </main> |
| 429 | </div> | 429 | </div> |
| 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 430 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 431 | ··<script> | 431 | ··<script> |
| 432 | ··let·initialized·=·false; | 432 | ··let·initialized·=·false; |
| Offset 304, 15 lines modified | Offset 304, 15 lines modified | ||
| 304 | ······<p·class="built-using"> | 304 | ······<p·class="built-using"> |
| 305 | ········Built·using | 305 | ········Built·using |
| 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 308 | ······</p> | 308 | ······</p> |
| 309 | <p>Copyright·©·1996-202 | 309 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 310 | ····</footer> | 310 | ····</footer> |
| 311 | ··</div> | 311 | ··</div> |
| 312 | </main> | 312 | </main> |
| 313 | </div> | 313 | </div> |
| 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 315 | ··<script> | 315 | ··<script> |
| 316 | ··let·initialized·=·false; | 316 | ··let·initialized·=·false; |
| Offset 379, 15 lines modified | Offset 379, 15 lines modified | ||
| 379 | ······<p·class="built-using"> | 379 | ······<p·class="built-using"> |
| 380 | ········Built·using | 380 | ········Built·using |
| 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 381 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 382 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 383 | ······</p> | 383 | ······</p> |
| 384 | <p>Copyright·©·1996-202 | 384 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 385 | ····</footer> | 385 | ····</footer> |
| 386 | ··</div> | 386 | ··</div> |
| 387 | </main> | 387 | </main> |
| 388 | </div> | 388 | </div> |
| 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 389 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 390 | ··<script> | 390 | ··<script> |
| 391 | ··let·initialized·=·false; | 391 | ··let·initialized·=·false; |
| Offset 579, 15 lines modified | Offset 579, 15 lines modified | ||
| 579 | ······<p·class="built-using"> | 579 | ······<p·class="built-using"> |
| 580 | ········Built·using | 580 | ········Built·using |
| 581 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 581 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 582 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 582 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 583 | ······</p> | 583 | ······</p> |
| 584 | <p>Copyright·©·1996-202 | 584 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 585 | ····</footer> | 585 | ····</footer> |
| 586 | ··</div> | 586 | ··</div> |
| 587 | </main> | 587 | </main> |
| 588 | </div> | 588 | </div> |
| 589 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 589 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 590 | ··<script> | 590 | ··<script> |
| 591 | ··let·initialized·=·false; | 591 | ··let·initialized·=·false; |
| Offset 380, 15 lines modified | Offset 380, 15 lines modified | ||
| 380 | ······<p·class="built-using"> | 380 | ······<p·class="built-using"> |
| 381 | ········Built·using | 381 | ········Built·using |
| 382 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 382 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 383 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 383 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 384 | ······</p> | 384 | ······</p> |
| 385 | <p>Copyright·©·1996-202 | 385 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 386 | ····</footer> | 386 | ····</footer> |
| 387 | ··</div> | 387 | ··</div> |
| 388 | </main> | 388 | </main> |
| 389 | </div> | 389 | </div> |
| 390 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 390 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 391 | ··<script> | 391 | ··<script> |
| 392 | ··let·initialized·=·false; | 392 | ··let·initialized·=·false; |
| Offset 524, 15 lines modified | Offset 524, 15 lines modified | ||
| 524 | ······<p·class="built-using"> | 524 | ······<p·class="built-using"> |
| 525 | ········Built·using | 525 | ········Built·using |
| 526 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 526 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 527 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 527 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 528 | ······</p> | 528 | ······</p> |
| 529 | <p>Copyright·©·1996-202 | 529 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 530 | ····</footer> | 530 | ····</footer> |
| 531 | ··</div> | 531 | ··</div> |
| 532 | </main> | 532 | </main> |
| 533 | </div> | 533 | </div> |
| 534 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 534 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 535 | ··<script> | 535 | ··<script> |
| 536 | ··let·initialized·=·false; | 536 | ··let·initialized·=·false; |
| Offset 414, 15 lines modified | Offset 414, 15 lines modified | ||
| 414 | ······<p·class="built-using"> | 414 | ······<p·class="built-using"> |
| 415 | ········Built·using | 415 | ········Built·using |
| 416 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 416 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 417 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 417 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 418 | ······</p> | 418 | ······</p> |
| 419 | <p>Copyright·©·1996-202 | 419 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 420 | ····</footer> | 420 | ····</footer> |
| 421 | ··</div> | 421 | ··</div> |
| 422 | </main> | 422 | </main> |
| 423 | </div> | 423 | </div> |
| 424 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 424 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 425 | ··<script> | 425 | ··<script> |
| 426 | ··let·initialized·=·false; | 426 | ··let·initialized·=·false; |
| Offset 304, 15 lines modified | Offset 304, 15 lines modified | ||
| 304 | ······<p·class="built-using"> | 304 | ······<p·class="built-using"> |
| 305 | ········Built·using | 305 | ········Built·using |
| 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 306 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 307 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 308 | ······</p> | 308 | ······</p> |
| 309 | <p>Copyright·©·1996-202 | 309 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 310 | ····</footer> | 310 | ····</footer> |
| 311 | ··</div> | 311 | ··</div> |
| 312 | </main> | 312 | </main> |
| 313 | </div> | 313 | </div> |
| 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 314 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 315 | ··<script> | 315 | ··<script> |
| 316 | ··let·initialized·=·false; | 316 | ··let·initialized·=·false; |
| Offset 329, 15 lines modified | Offset 329, 15 lines modified | ||
| 329 | ······<p·class="built-using"> | 329 | ······<p·class="built-using"> |
| 330 | ········Built·using | 330 | ········Built·using |
| 331 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 331 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 332 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 332 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 333 | ······</p> | 333 | ······</p> |
| 334 | <p>Copyright·©·1996-202 | 334 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 335 | ····</footer> | 335 | ····</footer> |
| 336 | ··</div> | 336 | ··</div> |
| 337 | </main> | 337 | </main> |
| 338 | </div> | 338 | </div> |
| 339 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 339 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 340 | ··<script> | 340 | ··<script> |
| 341 | ··let·initialized·=·false; | 341 | ··let·initialized·=·false; |
| Offset 305, 15 lines modified | Offset 305, 15 lines modified | ||
| 305 | ······<p·class="built-using"> | 305 | ······<p·class="built-using"> |
| 306 | ········Built·using | 306 | ········Built·using |
| 307 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 307 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 308 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 308 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 309 | ······</p> | 309 | ······</p> |
| 310 | <p>Copyright·©·1996-202 | 310 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 311 | ····</footer> | 311 | ····</footer> |
| 312 | ··</div> | 312 | ··</div> |
| 313 | </main> | 313 | </main> |
| 314 | </div> | 314 | </div> |
| 315 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 315 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 316 | ··<script> | 316 | ··<script> |
| 317 | ··let·initialized·=·false; | 317 | ··let·initialized·=·false; |
| Offset 377, 15 lines modified | Offset 377, 15 lines modified | ||
| 377 | ······<p·class="built-using"> | 377 | ······<p·class="built-using"> |
| 378 | ········Built·using | 378 | ········Built·using |
| 379 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 379 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 380 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 380 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 381 | ······</p> | 381 | ······</p> |
| 382 | <p>Copyright·©·1996-202 | 382 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 383 | ····</footer> | 383 | ····</footer> |
| 384 | ··</div> | 384 | ··</div> |
| 385 | </main> | 385 | </main> |
| 386 | </div> | 386 | </div> |
| 387 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 387 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 388 | ··<script> | 388 | ··<script> |
| 389 | ··let·initialized·=·false; | 389 | ··let·initialized·=·false; |
| Offset 617, 15 lines modified | Offset 617, 15 lines modified | ||
| 617 | ······<p·class="built-using"> | 617 | ······<p·class="built-using"> |
| 618 | ········Built·using | 618 | ········Built·using |
| 619 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 619 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 620 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 620 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 621 | ······</p> | 621 | ······</p> |
| 622 | <p>Copyright·©·1996-202 | 622 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 623 | ····</footer> | 623 | ····</footer> |
| 624 | ··</div> | 624 | ··</div> |
| 625 | </main> | 625 | </main> |
| 626 | </div> | 626 | </div> |
| 627 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 627 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 628 | ··<script> | 628 | ··<script> |
| 629 | ··let·initialized·=·false; | 629 | ··let·initialized·=·false; |
| Offset 711, 15 lines modified | Offset 711, 15 lines modified | ||
| 711 | ······<p·class="built-using"> | 711 | ······<p·class="built-using"> |
| 712 | ········Built·using | 712 | ········Built·using |
| 713 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 713 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 714 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 714 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 715 | ······</p> | 715 | ······</p> |
| 716 | <p>Copyright·©·1996-202 | 716 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 717 | ····</footer> | 717 | ····</footer> |
| 718 | ··</div> | 718 | ··</div> |
| 719 | </main> | 719 | </main> |
| 720 | </div> | 720 | </div> |
| 721 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 721 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 722 | ··<script> | 722 | ··<script> |
| 723 | ··let·initialized·=·false; | 723 | ··let·initialized·=·false; |
| Offset 459, 15 lines modified | Offset 459, 15 lines modified | ||
| 459 | ······<p·class="built-using"> | 459 | ······<p·class="built-using"> |
| 460 | ········Built·using | 460 | ········Built·using |
| 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 463 | ······</p> | 463 | ······</p> |
| 464 | <p>Copyright·©·1996-202 | 464 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 465 | ····</footer> | 465 | ····</footer> |
| 466 | ··</div> | 466 | ··</div> |
| 467 | </main> | 467 | </main> |
| 468 | </div> | 468 | </div> |
| 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 470 | ··<script> | 470 | ··<script> |
| 471 | ··let·initialized·=·false; | 471 | ··let·initialized·=·false; |
| Offset 918, 15 lines modified | Offset 918, 15 lines modified | ||
| 918 | ······<p·class="built-using"> | 918 | ······<p·class="built-using"> |
| 919 | ········Built·using | 919 | ········Built·using |
| 920 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 920 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 921 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 921 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 922 | ······</p> | 922 | ······</p> |
| 923 | <p>Copyright·©·1996-202 | 923 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 924 | ····</footer> | 924 | ····</footer> |
| 925 | ··</div> | 925 | ··</div> |
| 926 | </main> | 926 | </main> |
| 927 | </div> | 927 | </div> |
| 928 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 928 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 929 | ··<script> | 929 | ··<script> |
| 930 | ··let·initialized·=·false; | 930 | ··let·initialized·=·false; |
| Offset 345, 15 lines modified | Offset 345, 15 lines modified | ||
| 345 | ······<p·class="built-using"> | 345 | ······<p·class="built-using"> |
| 346 | ········Built·using | 346 | ········Built·using |
| 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 349 | ······</p> | 349 | ······</p> |
| 350 | <p>Copyright·©·1996-202 | 350 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 351 | ····</footer> | 351 | ····</footer> |
| 352 | ··</div> | 352 | ··</div> |
| 353 | </main> | 353 | </main> |
| 354 | </div> | 354 | </div> |
| 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 356 | ··<script> | 356 | ··<script> |
| 357 | ··let·initialized·=·false; | 357 | ··let·initialized·=·false; |
| Offset 1299, 15 lines modified | Offset 1299, 15 lines modified | ||
| 1299 | ······<p·class="built-using"> | 1299 | ······<p·class="built-using"> |
| 1300 | ········Built·using | 1300 | ········Built·using |
| 1301 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1301 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1302 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1302 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1303 | ······</p> | 1303 | ······</p> |
| 1304 | <p>Copyright·©·1996-202 | 1304 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1305 | ····</footer> | 1305 | ····</footer> |
| 1306 | ··</div> | 1306 | ··</div> |
| 1307 | </main> | 1307 | </main> |
| 1308 | </div> | 1308 | </div> |
| 1309 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1309 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1310 | ··<script> | 1310 | ··<script> |
| 1311 | ··let·initialized·=·false; | 1311 | ··let·initialized·=·false; |
| Offset 430, 15 lines modified | Offset 430, 15 lines modified | ||
| 430 | ······<p·class="built-using"> | 430 | ······<p·class="built-using"> |
| 431 | ········Built·using | 431 | ········Built·using |
| 432 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 432 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 433 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 433 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 434 | ······</p> | 434 | ······</p> |
| 435 | <p>Copyright·©·1996-202 | 435 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 436 | ····</footer> | 436 | ····</footer> |
| 437 | ··</div> | 437 | ··</div> |
| 438 | </main> | 438 | </main> |
| 439 | </div> | 439 | </div> |
| 440 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 440 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 441 | ··<script> | 441 | ··<script> |
| 442 | ··let·initialized·=·false; | 442 | ··let·initialized·=·false; |
| Offset 576, 15 lines modified | Offset 576, 15 lines modified | ||
| 576 | ······<p·class="built-using"> | 576 | ······<p·class="built-using"> |
| 577 | ········Built·using | 577 | ········Built·using |
| 578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 578 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 579 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 580 | ······</p> | 580 | ······</p> |
| 581 | <p>Copyright·©·1996-202 | 581 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 582 | ····</footer> | 582 | ····</footer> |
| 583 | ··</div> | 583 | ··</div> |
| 584 | </main> | 584 | </main> |
| 585 | </div> | 585 | </div> |
| 586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 586 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 587 | ··<script> | 587 | ··<script> |
| 588 | ··let·initialized·=·false; | 588 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 521, 15 lines modified | Offset 521, 15 lines modified | ||
| 521 | ······<p·class="built-using"> | 521 | ······<p·class="built-using"> |
| 522 | ········Built·using | 522 | ········Built·using |
| 523 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 523 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 524 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 524 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 525 | ······</p> | 525 | ······</p> |
| 526 | <p>Copyright·©·1996-202 | 526 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 527 | ····</footer> | 527 | ····</footer> |
| 528 | ··</div> | 528 | ··</div> |
| 529 | </main> | 529 | </main> |
| 530 | </div> | 530 | </div> |
| 531 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 531 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 532 | ··<script> | 532 | ··<script> |
| 533 | ··let·initialized·=·false; | 533 | ··let·initialized·=·false; |
| Offset 3681, 15 lines modified | Offset 3681, 15 lines modified | ||
| 3681 | ······<p·class="built-using"> | 3681 | ······<p·class="built-using"> |
| 3682 | ········Built·using | 3682 | ········Built·using |
| 3683 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3683 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3684 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3684 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3685 | ······</p> | 3685 | ······</p> |
| 3686 | <p>Copyright·©·1996-202 | 3686 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3687 | ····</footer> | 3687 | ····</footer> |
| 3688 | ··</div> | 3688 | ··</div> |
| 3689 | </main> | 3689 | </main> |
| 3690 | </div> | 3690 | </div> |
| 3691 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3691 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3692 | ··<script> | 3692 | ··<script> |
| 3693 | ··let·initialized·=·false; | 3693 | ··let·initialized·=·false; |
| Offset 931, 15 lines modified | Offset 931, 15 lines modified | ||
| 931 | ······<p·class="built-using"> | 931 | ······<p·class="built-using"> |
| 932 | ········Built·using | 932 | ········Built·using |
| 933 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 933 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 934 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 934 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 935 | ······</p> | 935 | ······</p> |
| 936 | <p>Copyright·©·1996-202 | 936 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 937 | ····</footer> | 937 | ····</footer> |
| 938 | ··</div> | 938 | ··</div> |
| 939 | </main> | 939 | </main> |
| 940 | </div> | 940 | </div> |
| 941 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 941 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 942 | ··<script> | 942 | ··<script> |
| 943 | ··let·initialized·=·false; | 943 | ··let·initialized·=·false; |
| Offset 288, 15 lines modified | Offset 288, 15 lines modified | ||
| 288 | ······<p·class="built-using"> | 288 | ······<p·class="built-using"> |
| 289 | ········Built·using | 289 | ········Built·using |
| 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 290 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 291 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 292 | ······</p> | 292 | ······</p> |
| 293 | <p>Copyright·©·1996-202 | 293 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 294 | ····</footer> | 294 | ····</footer> |
| 295 | ··</div> | 295 | ··</div> |
| 296 | </main> | 296 | </main> |
| 297 | </div> | 297 | </div> |
| 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 298 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 299 | ··<script> | 299 | ··<script> |
| 300 | ··let·initialized·=·false; | 300 | ··let·initialized·=·false; |
| Offset 823, 15 lines modified | Offset 823, 15 lines modified | ||
| 823 | ······<p·class="built-using"> | 823 | ······<p·class="built-using"> |
| 824 | ········Built·using | 824 | ········Built·using |
| 825 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 825 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 826 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 826 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 827 | ······</p> | 827 | ······</p> |
| 828 | <p>Copyright·©·1996-202 | 828 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 829 | ····</footer> | 829 | ····</footer> |
| 830 | ··</div> | 830 | ··</div> |
| 831 | </main> | 831 | </main> |
| 832 | </div> | 832 | </div> |
| 833 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 833 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 834 | ··<script> | 834 | ··<script> |
| 835 | ··let·initialized·=·false; | 835 | ··let·initialized·=·false; |
| Offset 905, 15 lines modified | Offset 905, 15 lines modified | ||
| 905 | ······<p·class="built-using"> | 905 | ······<p·class="built-using"> |
| 906 | ········Built·using | 906 | ········Built·using |
| 907 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 907 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 908 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 908 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 909 | ······</p> | 909 | ······</p> |
| 910 | <p>Copyright·©·1996-202 | 910 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 911 | ····</footer> | 911 | ····</footer> |
| 912 | ··</div> | 912 | ··</div> |
| 913 | </main> | 913 | </main> |
| 914 | </div> | 914 | </div> |
| 915 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 915 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 916 | ··<script> | 916 | ··<script> |
| 917 | ··let·initialized·=·false; | 917 | ··let·initialized·=·false; |
| Offset 577, 15 lines modified | Offset 577, 15 lines modified | ||
| 577 | ······<p·class="built-using"> | 577 | ······<p·class="built-using"> |
| 578 | ········Built·using | 578 | ········Built·using |
| 579 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 579 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 580 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 580 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 581 | ······</p> | 581 | ······</p> |
| 582 | <p>Copyright·©·1996-202 | 582 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 583 | ····</footer> | 583 | ····</footer> |
| 584 | ··</div> | 584 | ··</div> |
| 585 | </main> | 585 | </main> |
| 586 | </div> | 586 | </div> |
| 587 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 587 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 588 | ··<script> | 588 | ··<script> |
| 589 | ··let·initialized·=·false; | 589 | ··let·initialized·=·false; |
| Offset 793, 15 lines modified | Offset 793, 15 lines modified | ||
| 793 | ······<p·class="built-using"> | 793 | ······<p·class="built-using"> |
| 794 | ········Built·using | 794 | ········Built·using |
| 795 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 795 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 796 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 796 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 797 | ······</p> | 797 | ······</p> |
| 798 | <p>Copyright·©·1996-202 | 798 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 799 | ····</footer> | 799 | ····</footer> |
| 800 | ··</div> | 800 | ··</div> |
| 801 | </main> | 801 | </main> |
| 802 | </div> | 802 | </div> |
| 803 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 803 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 804 | ··<script> | 804 | ··<script> |
| 805 | ··let·initialized·=·false; | 805 | ··let·initialized·=·false; |
| Offset 3108, 15 lines modified | Offset 3108, 15 lines modified | ||
| 3108 | ······<p·class="built-using"> | 3108 | ······<p·class="built-using"> |
| 3109 | ········Built·using | 3109 | ········Built·using |
| 3110 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3110 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3111 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3111 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3112 | ······</p> | 3112 | ······</p> |
| 3113 | <p>Copyright·©·1996-202 | 3113 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3114 | ····</footer> | 3114 | ····</footer> |
| 3115 | ··</div> | 3115 | ··</div> |
| 3116 | </main> | 3116 | </main> |
| 3117 | </div> | 3117 | </div> |
| 3118 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3118 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3119 | ··<script> | 3119 | ··<script> |
| 3120 | ··let·initialized·=·false; | 3120 | ··let·initialized·=·false; |
| Offset 801, 15 lines modified | Offset 801, 15 lines modified | ||
| 801 | ······<p·class="built-using"> | 801 | ······<p·class="built-using"> |
| 802 | ········Built·using | 802 | ········Built·using |
| 803 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 803 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 804 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 804 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 805 | ······</p> | 805 | ······</p> |
| 806 | <p>Copyright·©·1996-202 | 806 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 807 | ····</footer> | 807 | ····</footer> |
| 808 | ··</div> | 808 | ··</div> |
| 809 | </main> | 809 | </main> |
| 810 | </div> | 810 | </div> |
| 811 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 811 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 812 | ··<script> | 812 | ··<script> |
| 813 | ··let·initialized·=·false; | 813 | ··let·initialized·=·false; |
| Offset 1212, 15 lines modified | Offset 1212, 15 lines modified | ||
| 1212 | ······<p·class="built-using"> | 1212 | ······<p·class="built-using"> |
| 1213 | ········Built·using | 1213 | ········Built·using |
| 1214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1214 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1215 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1216 | ······</p> | 1216 | ······</p> |
| 1217 | <p>Copyright·©·1996-202 | 1217 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1218 | ····</footer> | 1218 | ····</footer> |
| 1219 | ··</div> | 1219 | ··</div> |
| 1220 | </main> | 1220 | </main> |
| 1221 | </div> | 1221 | </div> |
| 1222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1222 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1223 | ··<script> | 1223 | ··<script> |
| 1224 | ··let·initialized·=·false; | 1224 | ··let·initialized·=·false; |
| Offset 665, 15 lines modified | Offset 665, 15 lines modified | ||
| 665 | ······<p·class="built-using"> | 665 | ······<p·class="built-using"> |
| 666 | ········Built·using | 666 | ········Built·using |
| 667 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 667 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 668 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 668 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 669 | ······</p> | 669 | ······</p> |
| 670 | <p>Copyright·©·1996-202 | 670 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 671 | ····</footer> | 671 | ····</footer> |
| 672 | ··</div> | 672 | ··</div> |
| 673 | </main> | 673 | </main> |
| 674 | </div> | 674 | </div> |
| 675 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 675 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 676 | ··<script> | 676 | ··<script> |
| 677 | ··let·initialized·=·false; | 677 | ··let·initialized·=·false; |
| Offset 565, 15 lines modified | Offset 565, 15 lines modified | ||
| 565 | ······<p·class="built-using"> | 565 | ······<p·class="built-using"> |
| 566 | ········Built·using | 566 | ········Built·using |
| 567 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 567 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 568 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 568 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 569 | ······</p> | 569 | ······</p> |
| 570 | <p>Copyright·©·1996-202 | 570 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 571 | ····</footer> | 571 | ····</footer> |
| 572 | ··</div> | 572 | ··</div> |
| 573 | </main> | 573 | </main> |
| 574 | </div> | 574 | </div> |
| 575 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 575 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 576 | ··<script> | 576 | ··<script> |
| 577 | ··let·initialized·=·false; | 577 | ··let·initialized·=·false; |
| Offset 1307, 15 lines modified | Offset 1307, 15 lines modified | ||
| 1307 | ······<p·class="built-using"> | 1307 | ······<p·class="built-using"> |
| 1308 | ········Built·using | 1308 | ········Built·using |
| 1309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1311 | ······</p> | 1311 | ······</p> |
| 1312 | <p>Copyright·©·1996-202 | 1312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1313 | ····</footer> | 1313 | ····</footer> |
| 1314 | ··</div> | 1314 | ··</div> |
| 1315 | </main> | 1315 | </main> |
| 1316 | </div> | 1316 | </div> |
| 1317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1318 | ··<script> | 1318 | ··<script> |
| 1319 | ··let·initialized·=·false; | 1319 | ··let·initialized·=·false; |
| Offset 1309, 15 lines modified | Offset 1309, 15 lines modified | ||
| 1309 | ······<p·class="built-using"> | 1309 | ······<p·class="built-using"> |
| 1310 | ········Built·using | 1310 | ········Built·using |
| 1311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1313 | ······</p> | 1313 | ······</p> |
| 1314 | <p>Copyright·©·1996-202 | 1314 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1315 | ····</footer> | 1315 | ····</footer> |
| 1316 | ··</div> | 1316 | ··</div> |
| 1317 | </main> | 1317 | </main> |
| 1318 | </div> | 1318 | </div> |
| 1319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1320 | ··<script> | 1320 | ··<script> |
| 1321 | ··let·initialized·=·false; | 1321 | ··let·initialized·=·false; |
| Offset 307, 15 lines modified | Offset 307, 15 lines modified | ||
| 307 | ······<p·class="built-using"> | 307 | ······<p·class="built-using"> |
| 308 | ········Built·using | 308 | ········Built·using |
| 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 311 | ······</p> | 311 | ······</p> |
| 312 | <p>Copyright·©·1996-202 | 312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 313 | ····</footer> | 313 | ····</footer> |
| 314 | ··</div> | 314 | ··</div> |
| 315 | </main> | 315 | </main> |
| 316 | </div> | 316 | </div> |
| 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 318 | ··<script> | 318 | ··<script> |
| 319 | ··let·initialized·=·false; | 319 | ··let·initialized·=·false; |
| Offset 634, 15 lines modified | Offset 634, 15 lines modified | ||
| 634 | ······<p·class="built-using"> | 634 | ······<p·class="built-using"> |
| 635 | ········Built·using | 635 | ········Built·using |
| 636 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 636 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 637 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 637 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 638 | ······</p> | 638 | ······</p> |
| 639 | <p>Copyright·©·1996-202 | 639 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 640 | ····</footer> | 640 | ····</footer> |
| 641 | ··</div> | 641 | ··</div> |
| 642 | </main> | 642 | </main> |
| 643 | </div> | 643 | </div> |
| 644 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 644 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 645 | ··<script> | 645 | ··<script> |
| 646 | ··let·initialized·=·false; | 646 | ··let·initialized·=·false; |
| Offset 391, 15 lines modified | Offset 391, 15 lines modified | ||
| 391 | ······<p·class="built-using"> | 391 | ······<p·class="built-using"> |
| 392 | ········Built·using | 392 | ········Built·using |
| 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 393 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 394 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 395 | ······</p> | 395 | ······</p> |
| 396 | <p>Copyright·©·1996-202 | 396 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 397 | ····</footer> | 397 | ····</footer> |
| 398 | ··</div> | 398 | ··</div> |
| 399 | </main> | 399 | </main> |
| 400 | </div> | 400 | </div> |
| 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 401 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 402 | ··<script> | 402 | ··<script> |
| 403 | ··let·initialized·=·false; | 403 | ··let·initialized·=·false; |
| Offset 794, 15 lines modified | Offset 794, 15 lines modified | ||
| 794 | ······<p·class="built-using"> | 794 | ······<p·class="built-using"> |
| 795 | ········Built·using | 795 | ········Built·using |
| 796 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 796 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 797 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 797 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 798 | ······</p> | 798 | ······</p> |
| 799 | <p>Copyright·©·1996-202 | 799 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 800 | ····</footer> | 800 | ····</footer> |
| 801 | ··</div> | 801 | ··</div> |
| 802 | </main> | 802 | </main> |
| 803 | </div> | 803 | </div> |
| 804 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 804 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 805 | ··<script> | 805 | ··<script> |
| 806 | ··let·initialized·=·false; | 806 | ··let·initialized·=·false; |
| Offset 456, 15 lines modified | Offset 456, 15 lines modified | ||
| 456 | ······<p·class="built-using"> | 456 | ······<p·class="built-using"> |
| 457 | ········Built·using | 457 | ········Built·using |
| 458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 458 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 459 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 460 | ······</p> | 460 | ······</p> |
| 461 | <p>Copyright·©·1996-202 | 461 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 462 | ····</footer> | 462 | ····</footer> |
| 463 | ··</div> | 463 | ··</div> |
| 464 | </main> | 464 | </main> |
| 465 | </div> | 465 | </div> |
| 466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 466 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 467 | ··<script> | 467 | ··<script> |
| 468 | ··let·initialized·=·false; | 468 | ··let·initialized·=·false; |
| Offset 291, 15 lines modified | Offset 291, 15 lines modified | ||
| 291 | ······<p·class="built-using"> | 291 | ······<p·class="built-using"> |
| 292 | ········Built·using | 292 | ········Built·using |
| 293 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 293 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 294 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 294 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 295 | ······</p> | 295 | ······</p> |
| 296 | <p>Copyright·©·1996-202 | 296 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 297 | ····</footer> | 297 | ····</footer> |
| 298 | ··</div> | 298 | ··</div> |
| 299 | </main> | 299 | </main> |
| 300 | </div> | 300 | </div> |
| 301 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 301 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 302 | ··<script> | 302 | ··<script> |
| 303 | ··let·initialized·=·false; | 303 | ··let·initialized·=·false; |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 2140, 15 lines modified | Offset 2140, 15 lines modified | ||
| 2140 | ······<p·class="built-using"> | 2140 | ······<p·class="built-using"> |
| 2141 | ········Built·using | 2141 | ········Built·using |
| 2142 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2142 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2143 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2143 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2144 | ······</p> | 2144 | ······</p> |
| 2145 | <p>Copyright·©·1996-202 | 2145 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2146 | ····</footer> | 2146 | ····</footer> |
| 2147 | ··</div> | 2147 | ··</div> |
| 2148 | </main> | 2148 | </main> |
| 2149 | </div> | 2149 | </div> |
| 2150 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2150 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2151 | ··<script> | 2151 | ··<script> |
| 2152 | ··let·initialized·=·false; | 2152 | ··let·initialized·=·false; |
| Offset 1390, 15 lines modified | Offset 1390, 15 lines modified | ||
| 1390 | ······<p·class="built-using"> | 1390 | ······<p·class="built-using"> |
| 1391 | ········Built·using | 1391 | ········Built·using |
| 1392 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1392 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1393 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1393 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1394 | ······</p> | 1394 | ······</p> |
| 1395 | <p>Copyright·©·1996-202 | 1395 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1396 | ····</footer> | 1396 | ····</footer> |
| 1397 | ··</div> | 1397 | ··</div> |
| 1398 | </main> | 1398 | </main> |
| 1399 | </div> | 1399 | </div> |
| 1400 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1400 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1401 | ··<script> | 1401 | ··<script> |
| 1402 | ··let·initialized·=·false; | 1402 | ··let·initialized·=·false; |
| Offset 428, 15 lines modified | Offset 428, 15 lines modified | ||
| 428 | ······<p·class="built-using"> | 428 | ······<p·class="built-using"> |
| 429 | ········Built·using | 429 | ········Built·using |
| 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 430 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 431 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 432 | ······</p> | 432 | ······</p> |
| 433 | <p>Copyright·©·1996-202 | 433 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 434 | ····</footer> | 434 | ····</footer> |
| 435 | ··</div> | 435 | ··</div> |
| 436 | </main> | 436 | </main> |
| 437 | </div> | 437 | </div> |
| 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 438 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 439 | ··<script> | 439 | ··<script> |
| 440 | ··let·initialized·=·false; | 440 | ··let·initialized·=·false; |
| Offset 1365, 15 lines modified | Offset 1365, 15 lines modified | ||
| 1365 | ······<p·class="built-using"> | 1365 | ······<p·class="built-using"> |
| 1366 | ········Built·using | 1366 | ········Built·using |
| 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1367 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1368 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1369 | ······</p> | 1369 | ······</p> |
| 1370 | <p>Copyright·©·1996-202 | 1370 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1371 | ····</footer> | 1371 | ····</footer> |
| 1372 | ··</div> | 1372 | ··</div> |
| 1373 | </main> | 1373 | </main> |
| 1374 | </div> | 1374 | </div> |
| 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1375 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1376 | ··<script> | 1376 | ··<script> |
| 1377 | ··let·initialized·=·false; | 1377 | ··let·initialized·=·false; |
| Offset 385, 15 lines modified | Offset 385, 15 lines modified | ||
| 385 | ······<p·class="built-using"> | 385 | ······<p·class="built-using"> |
| 386 | ········Built·using | 386 | ········Built·using |
| 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 389 | ······</p> | 389 | ······</p> |
| 390 | <p>Copyright·©·1996-202 | 390 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 391 | ····</footer> | 391 | ····</footer> |
| 392 | ··</div> | 392 | ··</div> |
| 393 | </main> | 393 | </main> |
| 394 | </div> | 394 | </div> |
| 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 396 | ··<script> | 396 | ··<script> |
| 397 | ··let·initialized·=·false; | 397 | ··let·initialized·=·false; |
| Offset 480, 15 lines modified | Offset 480, 15 lines modified | ||
| 480 | ······<p·class="built-using"> | 480 | ······<p·class="built-using"> |
| 481 | ········Built·using | 481 | ········Built·using |
| 482 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 482 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 483 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 483 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 484 | ······</p> | 484 | ······</p> |
| 485 | <p>Copyright·©·1996-202 | 485 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 486 | ····</footer> | 486 | ····</footer> |
| 487 | ··</div> | 487 | ··</div> |
| 488 | </main> | 488 | </main> |
| 489 | </div> | 489 | </div> |
| 490 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 490 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 491 | ··<script> | 491 | ··<script> |
| 492 | ··let·initialized·=·false; | 492 | ··let·initialized·=·false; |
| Offset 307, 15 lines modified | Offset 307, 15 lines modified | ||
| 307 | ······<p·class="built-using"> | 307 | ······<p·class="built-using"> |
| 308 | ········Built·using | 308 | ········Built·using |
| 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 311 | ······</p> | 311 | ······</p> |
| 312 | <p>Copyright·©·1996-202 | 312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 313 | ····</footer> | 313 | ····</footer> |
| 314 | ··</div> | 314 | ··</div> |
| 315 | </main> | 315 | </main> |
| 316 | </div> | 316 | </div> |
| 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 318 | ··<script> | 318 | ··<script> |
| 319 | ··let·initialized·=·false; | 319 | ··let·initialized·=·false; |
| Offset 345, 15 lines modified | Offset 345, 15 lines modified | ||
| 345 | ······<p·class="built-using"> | 345 | ······<p·class="built-using"> |
| 346 | ········Built·using | 346 | ········Built·using |
| 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 347 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 348 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 349 | ······</p> | 349 | ······</p> |
| 350 | <p>Copyright·©·1996-202 | 350 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 351 | ····</footer> | 351 | ····</footer> |
| 352 | ··</div> | 352 | ··</div> |
| 353 | </main> | 353 | </main> |
| 354 | </div> | 354 | </div> |
| 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 355 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 356 | ··<script> | 356 | ··<script> |
| 357 | ··let·initialized·=·false; | 357 | ··let·initialized·=·false; |
| Offset 293, 15 lines modified | Offset 293, 15 lines modified | ||
| 293 | ······<p·class="built-using"> | 293 | ······<p·class="built-using"> |
| 294 | ········Built·using | 294 | ········Built·using |
| 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 297 | ······</p> | 297 | ······</p> |
| 298 | <p>Copyright·©·1996-202 | 298 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 299 | ····</footer> | 299 | ····</footer> |
| 300 | ··</div> | 300 | ··</div> |
| 301 | </main> | 301 | </main> |
| 302 | </div> | 302 | </div> |
| 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 304 | ··<script> | 304 | ··<script> |
| 305 | ··let·initialized·=·false; | 305 | ··let·initialized·=·false; |
| Offset 1982, 15 lines modified | Offset 1982, 15 lines modified | ||
| 1982 | ······<p·class="built-using"> | 1982 | ······<p·class="built-using"> |
| 1983 | ········Built·using | 1983 | ········Built·using |
| 1984 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1984 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1985 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1985 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1986 | ······</p> | 1986 | ······</p> |
| 1987 | <p>Copyright·©·1996-202 | 1987 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1988 | ····</footer> | 1988 | ····</footer> |
| 1989 | ··</div> | 1989 | ··</div> |
| 1990 | </main> | 1990 | </main> |
| 1991 | </div> | 1991 | </div> |
| 1992 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1992 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1993 | ··<script> | 1993 | ··<script> |
| 1994 | ··let·initialized·=·false; | 1994 | ··let·initialized·=·false; |
| Offset 383, 15 lines modified | Offset 383, 15 lines modified | ||
| 383 | ······<p·class="built-using"> | 383 | ······<p·class="built-using"> |
| 384 | ········Built·using | 384 | ········Built·using |
| 385 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 385 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 386 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 386 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 387 | ······</p> | 387 | ······</p> |
| 388 | <p>Copyright·©·1996-202 | 388 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 389 | ····</footer> | 389 | ····</footer> |
| 390 | ··</div> | 390 | ··</div> |
| 391 | </main> | 391 | </main> |
| 392 | </div> | 392 | </div> |
| 393 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 393 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 394 | ··<script> | 394 | ··<script> |
| 395 | ··let·initialized·=·false; | 395 | ··let·initialized·=·false; |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 604, 15 lines modified | Offset 604, 15 lines modified | ||
| 604 | ······<p·class="built-using"> | 604 | ······<p·class="built-using"> |
| 605 | ········Built·using | 605 | ········Built·using |
| 606 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 606 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 607 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 607 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 608 | ······</p> | 608 | ······</p> |
| 609 | <p>Copyright·©·1996-202 | 609 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 610 | ····</footer> | 610 | ····</footer> |
| 611 | ··</div> | 611 | ··</div> |
| 612 | </main> | 612 | </main> |
| 613 | </div> | 613 | </div> |
| 614 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 614 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 615 | ··<script> | 615 | ··<script> |
| 616 | ··let·initialized·=·false; | 616 | ··let·initialized·=·false; |
| Offset 819, 15 lines modified | Offset 819, 15 lines modified | ||
| 819 | ······<p·class="built-using"> | 819 | ······<p·class="built-using"> |
| 820 | ········Built·using | 820 | ········Built·using |
| 821 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 821 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 822 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 822 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 823 | ······</p> | 823 | ······</p> |
| 824 | <p>Copyright·©·1996-202 | 824 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 825 | ····</footer> | 825 | ····</footer> |
| 826 | ··</div> | 826 | ··</div> |
| 827 | </main> | 827 | </main> |
| 828 | </div> | 828 | </div> |
| 829 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 829 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 830 | ··<script> | 830 | ··<script> |
| 831 | ··let·initialized·=·false; | 831 | ··let·initialized·=·false; |
| Offset 897, 15 lines modified | Offset 897, 15 lines modified | ||
| 897 | ······<p·class="built-using"> | 897 | ······<p·class="built-using"> |
| 898 | ········Built·using | 898 | ········Built·using |
| 899 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 899 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 900 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 900 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 901 | ······</p> | 901 | ······</p> |
| 902 | <p>Copyright·©·1996-202 | 902 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 903 | ····</footer> | 903 | ····</footer> |
| 904 | ··</div> | 904 | ··</div> |
| 905 | </main> | 905 | </main> |
| 906 | </div> | 906 | </div> |
| 907 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 907 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 908 | ··<script> | 908 | ··<script> |
| 909 | ··let·initialized·=·false; | 909 | ··let·initialized·=·false; |
| Offset 348, 15 lines modified | Offset 348, 15 lines modified | ||
| 348 | ······<p·class="built-using"> | 348 | ······<p·class="built-using"> |
| 349 | ········Built·using | 349 | ········Built·using |
| 350 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 350 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 351 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 351 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 352 | ······</p> | 352 | ······</p> |
| 353 | <p>Copyright·©·1996-202 | 353 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 354 | ····</footer> | 354 | ····</footer> |
| 355 | ··</div> | 355 | ··</div> |
| 356 | </main> | 356 | </main> |
| 357 | </div> | 357 | </div> |
| 358 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 358 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 359 | ··<script> | 359 | ··<script> |
| 360 | ··let·initialized·=·false; | 360 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 423, 15 lines modified | Offset 423, 15 lines modified | ||
| 423 | ······<p·class="built-using"> | 423 | ······<p·class="built-using"> |
| 424 | ········Built·using | 424 | ········Built·using |
| 425 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 425 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 426 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 426 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 427 | ······</p> | 427 | ······</p> |
| 428 | <p>Copyright·©·1996-202 | 428 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 429 | ····</footer> | 429 | ····</footer> |
| 430 | ··</div> | 430 | ··</div> |
| 431 | </main> | 431 | </main> |
| 432 | </div> | 432 | </div> |
| 433 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 433 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 434 | ··<script> | 434 | ··<script> |
| 435 | ··let·initialized·=·false; | 435 | ··let·initialized·=·false; |
| Offset 1409, 15 lines modified | Offset 1409, 15 lines modified | ||
| 1409 | ······<p·class="built-using"> | 1409 | ······<p·class="built-using"> |
| 1410 | ········Built·using | 1410 | ········Built·using |
| 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1411 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1412 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1413 | ······</p> | 1413 | ······</p> |
| 1414 | <p>Copyright·©·1996-202 | 1414 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1415 | ····</footer> | 1415 | ····</footer> |
| 1416 | ··</div> | 1416 | ··</div> |
| 1417 | </main> | 1417 | </main> |
| 1418 | </div> | 1418 | </div> |
| 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1419 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1420 | ··<script> | 1420 | ··<script> |
| 1421 | ··let·initialized·=·false; | 1421 | ··let·initialized·=·false; |
| Offset 310, 15 lines modified | Offset 310, 15 lines modified | ||
| 310 | ······<p·class="built-using"> | 310 | ······<p·class="built-using"> |
| 311 | ········Built·using | 311 | ········Built·using |
| 312 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 312 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 313 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 313 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 314 | ······</p> | 314 | ······</p> |
| 315 | <p>Copyright·©·1996-202 | 315 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 316 | ····</footer> | 316 | ····</footer> |
| 317 | ··</div> | 317 | ··</div> |
| 318 | </main> | 318 | </main> |
| 319 | </div> | 319 | </div> |
| 320 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 320 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 321 | ··<script> | 321 | ··<script> |
| 322 | ··let·initialized·=·false; | 322 | ··let·initialized·=·false; |
| Offset 297, 15 lines modified | Offset 297, 15 lines modified | ||
| 297 | ······<p·class="built-using"> | 297 | ······<p·class="built-using"> |
| 298 | ········Built·using | 298 | ········Built·using |
| 299 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 299 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 300 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 300 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 301 | ······</p> | 301 | ······</p> |
| 302 | <p>Copyright·©·1996-202 | 302 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 303 | ····</footer> | 303 | ····</footer> |
| 304 | ··</div> | 304 | ··</div> |
| 305 | </main> | 305 | </main> |
| 306 | </div> | 306 | </div> |
| 307 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 307 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 308 | ··<script> | 308 | ··<script> |
| 309 | ··let·initialized·=·false; | 309 | ··let·initialized·=·false; |
| Offset 605, 15 lines modified | Offset 605, 15 lines modified | ||
| 605 | ······<p·class="built-using"> | 605 | ······<p·class="built-using"> |
| 606 | ········Built·using | 606 | ········Built·using |
| 607 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 607 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 608 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 608 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 609 | ······</p> | 609 | ······</p> |
| 610 | <p>Copyright·©·1996-202 | 610 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 611 | ····</footer> | 611 | ····</footer> |
| 612 | ··</div> | 612 | ··</div> |
| 613 | </main> | 613 | </main> |
| 614 | </div> | 614 | </div> |
| 615 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 615 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 616 | ··<script> | 616 | ··<script> |
| 617 | ··let·initialized·=·false; | 617 | ··let·initialized·=·false; |
| Offset 372, 15 lines modified | Offset 372, 15 lines modified | ||
| 372 | ······<p·class="built-using"> | 372 | ······<p·class="built-using"> |
| 373 | ········Built·using | 373 | ········Built·using |
| 374 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 374 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 375 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 375 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 376 | ······</p> | 376 | ······</p> |
| 377 | <p>Copyright·©·1996-202 | 377 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 378 | ····</footer> | 378 | ····</footer> |
| 379 | ··</div> | 379 | ··</div> |
| 380 | </main> | 380 | </main> |
| 381 | </div> | 381 | </div> |
| 382 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 382 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 383 | ··<script> | 383 | ··<script> |
| 384 | ··let·initialized·=·false; | 384 | ··let·initialized·=·false; |
| Offset 469, 15 lines modified | Offset 469, 15 lines modified | ||
| 469 | ······<p·class="built-using"> | 469 | ······<p·class="built-using"> |
| 470 | ········Built·using | 470 | ········Built·using |
| 471 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 471 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 472 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 472 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 473 | ······</p> | 473 | ······</p> |
| 474 | <p>Copyright·©·1996-202 | 474 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 475 | ····</footer> | 475 | ····</footer> |
| 476 | ··</div> | 476 | ··</div> |
| 477 | </main> | 477 | </main> |
| 478 | </div> | 478 | </div> |
| 479 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 479 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 480 | ··<script> | 480 | ··<script> |
| 481 | ··let·initialized·=·false; | 481 | ··let·initialized·=·false; |
| Offset 349, 15 lines modified | Offset 349, 15 lines modified | ||
| 349 | ······<p·class="built-using"> | 349 | ······<p·class="built-using"> |
| 350 | ········Built·using | 350 | ········Built·using |
| 351 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 351 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 352 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 352 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 353 | ······</p> | 353 | ······</p> |
| 354 | <p>Copyright·©·1996-202 | 354 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 355 | ····</footer> | 355 | ····</footer> |
| 356 | ··</div> | 356 | ··</div> |
| 357 | </main> | 357 | </main> |
| 358 | </div> | 358 | </div> |
| 359 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 359 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 360 | ··<script> | 360 | ··<script> |
| 361 | ··let·initialized·=·false; | 361 | ··let·initialized·=·false; |
| Offset 824, 15 lines modified | Offset 824, 15 lines modified | ||
| 824 | ······<p·class="built-using"> | 824 | ······<p·class="built-using"> |
| 825 | ········Built·using | 825 | ········Built·using |
| 826 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 826 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 827 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 827 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 828 | ······</p> | 828 | ······</p> |
| 829 | <p>Copyright·©·1996-202 | 829 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 830 | ····</footer> | 830 | ····</footer> |
| 831 | ··</div> | 831 | ··</div> |
| 832 | </main> | 832 | </main> |
| 833 | </div> | 833 | </div> |
| 834 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 834 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 835 | ··<script> | 835 | ··<script> |
| 836 | ··let·initialized·=·false; | 836 | ··let·initialized·=·false; |
| Offset 754, 15 lines modified | Offset 754, 15 lines modified | ||
| 754 | ······<p·class="built-using"> | 754 | ······<p·class="built-using"> |
| 755 | ········Built·using | 755 | ········Built·using |
| 756 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 756 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 757 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 757 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 758 | ······</p> | 758 | ······</p> |
| 759 | <p>Copyright·©·1996-202 | 759 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 760 | ····</footer> | 760 | ····</footer> |
| 761 | ··</div> | 761 | ··</div> |
| 762 | </main> | 762 | </main> |
| 763 | </div> | 763 | </div> |
| 764 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 764 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 765 | ··<script> | 765 | ··<script> |
| 766 | ··let·initialized·=·false; | 766 | ··let·initialized·=·false; |
| Offset 489, 15 lines modified | Offset 489, 15 lines modified | ||
| 489 | ······<p·class="built-using"> | 489 | ······<p·class="built-using"> |
| 490 | ········Built·using | 490 | ········Built·using |
| 491 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 491 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 492 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 492 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 493 | ······</p> | 493 | ······</p> |
| 494 | <p>Copyright·©·1996-202 | 494 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 495 | ····</footer> | 495 | ····</footer> |
| 496 | ··</div> | 496 | ··</div> |
| 497 | </main> | 497 | </main> |
| 498 | </div> | 498 | </div> |
| 499 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 499 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 500 | ··<script> | 500 | ··<script> |
| 501 | ··let·initialized·=·false; | 501 | ··let·initialized·=·false; |
| Offset 504, 15 lines modified | Offset 504, 15 lines modified | ||
| 504 | ······<p·class="built-using"> | 504 | ······<p·class="built-using"> |
| 505 | ········Built·using | 505 | ········Built·using |
| 506 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 506 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 507 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 507 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 508 | ······</p> | 508 | ······</p> |
| 509 | <p>Copyright·©·1996-202 | 509 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 510 | ····</footer> | 510 | ····</footer> |
| 511 | ··</div> | 511 | ··</div> |
| 512 | </main> | 512 | </main> |
| 513 | </div> | 513 | </div> |
| 514 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 514 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 515 | ··<script> | 515 | ··<script> |
| 516 | ··let·initialized·=·false; | 516 | ··let·initialized·=·false; |
| Offset 342, 15 lines modified | Offset 342, 15 lines modified | ||
| 342 | ······<p·class="built-using"> | 342 | ······<p·class="built-using"> |
| 343 | ········Built·using | 343 | ········Built·using |
| 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 344 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 345 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 346 | ······</p> | 346 | ······</p> |
| 347 | <p>Copyright·©·1996-202 | 347 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 348 | ····</footer> | 348 | ····</footer> |
| 349 | ··</div> | 349 | ··</div> |
| 350 | </main> | 350 | </main> |
| 351 | </div> | 351 | </div> |
| 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 352 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 353 | ··<script> | 353 | ··<script> |
| 354 | ··let·initialized·=·false; | 354 | ··let·initialized·=·false; |
| Offset 215, 15 lines modified | Offset 215, 15 lines modified | ||
| 215 | ······<p·class="built-using"> | 215 | ······<p·class="built-using"> |
| 216 | ········Built·using | 216 | ········Built·using |
| 217 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 217 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 218 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 218 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 219 | ······</p> | 219 | ······</p> |
| 220 | <p>Copyright·©·1996-202 | 220 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 221 | ····</footer> | 221 | ····</footer> |
| 222 | ··</div> | 222 | ··</div> |
| 223 | </main> | 223 | </main> |
| 224 | </div> | 224 | </div> |
| 225 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 225 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 226 | ··<script> | 226 | ··<script> |
| 227 | ··let·initialized·=·false; | 227 | ··let·initialized·=·false; |
| Offset 499, 15 lines modified | Offset 499, 15 lines modified | ||
| 499 | ······<p·class="built-using"> | 499 | ······<p·class="built-using"> |
| 500 | ········Built·using | 500 | ········Built·using |
| 501 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 501 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 502 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 502 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 503 | ······</p> | 503 | ······</p> |
| 504 | <p>Copyright·©·1996-202 | 504 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 505 | ····</footer> | 505 | ····</footer> |
| 506 | ··</div> | 506 | ··</div> |
| 507 | </main> | 507 | </main> |
| 508 | </div> | 508 | </div> |
| 509 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 509 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 510 | ··<script> | 510 | ··<script> |
| 511 | ··let·initialized·=·false; | 511 | ··let·initialized·=·false; |
| Offset 500, 15 lines modified | Offset 500, 15 lines modified | ||
| 500 | ······<p·class="built-using"> | 500 | ······<p·class="built-using"> |
| 501 | ········Built·using | 501 | ········Built·using |
| 502 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 502 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 503 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 503 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 504 | ······</p> | 504 | ······</p> |
| 505 | <p>Copyright·©·1996-202 | 505 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 506 | ····</footer> | 506 | ····</footer> |
| 507 | ··</div> | 507 | ··</div> |
| 508 | </main> | 508 | </main> |
| 509 | </div> | 509 | </div> |
| 510 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 510 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 511 | ··<script> | 511 | ··<script> |
| 512 | ··let·initialized·=·false; | 512 | ··let·initialized·=·false; |
| Offset 1035, 15 lines modified | Offset 1035, 15 lines modified | ||
| 1035 | ······<p·class="built-using"> | 1035 | ······<p·class="built-using"> |
| 1036 | ········Built·using | 1036 | ········Built·using |
| 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1039 | ······</p> | 1039 | ······</p> |
| 1040 | <p>Copyright·©·1996-202 | 1040 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1041 | ····</footer> | 1041 | ····</footer> |
| 1042 | ··</div> | 1042 | ··</div> |
| 1043 | </main> | 1043 | </main> |
| 1044 | </div> | 1044 | </div> |
| 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1046 | ··<script> | 1046 | ··<script> |
| 1047 | ··let·initialized·=·false; | 1047 | ··let·initialized·=·false; |
| Offset 417, 15 lines modified | Offset 417, 15 lines modified | ||
| 417 | ······<p·class="built-using"> | 417 | ······<p·class="built-using"> |
| 418 | ········Built·using | 418 | ········Built·using |
| 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 421 | ······</p> | 421 | ······</p> |
| 422 | <p>Copyright·©·1996-202 | 422 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 423 | ····</footer> | 423 | ····</footer> |
| 424 | ··</div> | 424 | ··</div> |
| 425 | </main> | 425 | </main> |
| 426 | </div> | 426 | </div> |
| 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 428 | ··<script> | 428 | ··<script> |
| 429 | ··let·initialized·=·false; | 429 | ··let·initialized·=·false; |
| Offset 1210, 15 lines modified | Offset 1210, 15 lines modified | ||
| 1210 | ······<p·class="built-using"> | 1210 | ······<p·class="built-using"> |
| 1211 | ········Built·using | 1211 | ········Built·using |
| 1212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1212 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1213 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1214 | ······</p> | 1214 | ······</p> |
| 1215 | <p>Copyright·©·1996-202 | 1215 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1216 | ····</footer> | 1216 | ····</footer> |
| 1217 | ··</div> | 1217 | ··</div> |
| 1218 | </main> | 1218 | </main> |
| 1219 | </div> | 1219 | </div> |
| 1220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1220 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1221 | ··<script> | 1221 | ··<script> |
| 1222 | ··let·initialized·=·false; | 1222 | ··let·initialized·=·false; |
| Offset 987, 15 lines modified | Offset 987, 15 lines modified | ||
| 987 | ······<p·class="built-using"> | 987 | ······<p·class="built-using"> |
| 988 | ········Built·using | 988 | ········Built·using |
| 989 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 989 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 990 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 990 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 991 | ······</p> | 991 | ······</p> |
| 992 | <p>Copyright·©·1996-202 | 992 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 993 | ····</footer> | 993 | ····</footer> |
| 994 | ··</div> | 994 | ··</div> |
| 995 | </main> | 995 | </main> |
| 996 | </div> | 996 | </div> |
| 997 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 997 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 998 | ··<script> | 998 | ··<script> |
| 999 | ··let·initialized·=·false; | 999 | ··let·initialized·=·false; |
| Offset 690, 15 lines modified | Offset 690, 15 lines modified | ||
| 690 | ······<p·class="built-using"> | 690 | ······<p·class="built-using"> |
| 691 | ········Built·using | 691 | ········Built·using |
| 692 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 692 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 693 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 693 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 694 | ······</p> | 694 | ······</p> |
| 695 | <p>Copyright·©·1996-202 | 695 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 696 | ····</footer> | 696 | ····</footer> |
| 697 | ··</div> | 697 | ··</div> |
| 698 | </main> | 698 | </main> |
| 699 | </div> | 699 | </div> |
| 700 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 700 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 701 | ··<script> | 701 | ··<script> |
| 702 | ··let·initialized·=·false; | 702 | ··let·initialized·=·false; |
| Offset 1181, 15 lines modified | Offset 1181, 15 lines modified | ||
| 1181 | ······<p·class="built-using"> | 1181 | ······<p·class="built-using"> |
| 1182 | ········Built·using | 1182 | ········Built·using |
| 1183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1183 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1184 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1185 | ······</p> | 1185 | ······</p> |
| 1186 | <p>Copyright·©·1996-202 | 1186 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1187 | ····</footer> | 1187 | ····</footer> |
| 1188 | ··</div> | 1188 | ··</div> |
| 1189 | </main> | 1189 | </main> |
| 1190 | </div> | 1190 | </div> |
| 1191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1191 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1192 | ··<script> | 1192 | ··<script> |
| 1193 | ··let·initialized·=·false; | 1193 | ··let·initialized·=·false; |
| Offset 475, 15 lines modified | Offset 475, 15 lines modified | ||
| 475 | ······<p·class="built-using"> | 475 | ······<p·class="built-using"> |
| 476 | ········Built·using | 476 | ········Built·using |
| 477 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 477 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 478 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 478 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 479 | ······</p> | 479 | ······</p> |
| 480 | <p>Copyright·©·1996-202 | 480 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 481 | ····</footer> | 481 | ····</footer> |
| 482 | ··</div> | 482 | ··</div> |
| 483 | </main> | 483 | </main> |
| 484 | </div> | 484 | </div> |
| 485 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 485 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 486 | ··<script> | 486 | ··<script> |
| 487 | ··let·initialized·=·false; | 487 | ··let·initialized·=·false; |
| Offset 374, 15 lines modified | Offset 374, 15 lines modified | ||
| 374 | ······<p·class="built-using"> | 374 | ······<p·class="built-using"> |
| 375 | ········Built·using | 375 | ········Built·using |
| 376 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 376 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 377 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 377 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 378 | ······</p> | 378 | ······</p> |
| 379 | <p>Copyright·©·1996-202 | 379 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 380 | ····</footer> | 380 | ····</footer> |
| 381 | ··</div> | 381 | ··</div> |
| 382 | </main> | 382 | </main> |
| 383 | </div> | 383 | </div> |
| 384 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 384 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 385 | ··<script> | 385 | ··<script> |
| 386 | ··let·initialized·=·false; | 386 | ··let·initialized·=·false; |
| Offset 1083, 15 lines modified | Offset 1083, 15 lines modified | ||
| 1083 | ······<p·class="built-using"> | 1083 | ······<p·class="built-using"> |
| 1084 | ········Built·using | 1084 | ········Built·using |
| 1085 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1085 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1086 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1086 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1087 | ······</p> | 1087 | ······</p> |
| 1088 | <p>Copyright·©·1996-202 | 1088 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1089 | ····</footer> | 1089 | ····</footer> |
| 1090 | ··</div> | 1090 | ··</div> |
| 1091 | </main> | 1091 | </main> |
| 1092 | </div> | 1092 | </div> |
| 1093 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1093 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1094 | ··<script> | 1094 | ··<script> |
| 1095 | ··let·initialized·=·false; | 1095 | ··let·initialized·=·false; |
| Offset 568, 15 lines modified | Offset 568, 15 lines modified | ||
| 568 | ······<p·class="built-using"> | 568 | ······<p·class="built-using"> |
| 569 | ········Built·using | 569 | ········Built·using |
| 570 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 570 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 571 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 571 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 572 | ······</p> | 572 | ······</p> |
| 573 | <p>Copyright·©·1996-202 | 573 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 574 | ····</footer> | 574 | ····</footer> |
| 575 | ··</div> | 575 | ··</div> |
| 576 | </main> | 576 | </main> |
| 577 | </div> | 577 | </div> |
| 578 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 578 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 579 | ··<script> | 579 | ··<script> |
| 580 | ··let·initialized·=·false; | 580 | ··let·initialized·=·false; |
| Offset 1153, 15 lines modified | Offset 1153, 15 lines modified | ||
| 1153 | ······<p·class="built-using"> | 1153 | ······<p·class="built-using"> |
| 1154 | ········Built·using | 1154 | ········Built·using |
| 1155 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1155 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1156 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1156 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1157 | ······</p> | 1157 | ······</p> |
| 1158 | <p>Copyright·©·1996-202 | 1158 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1159 | ····</footer> | 1159 | ····</footer> |
| 1160 | ··</div> | 1160 | ··</div> |
| 1161 | </main> | 1161 | </main> |
| 1162 | </div> | 1162 | </div> |
| 1163 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1163 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1164 | ··<script> | 1164 | ··<script> |
| 1165 | ··let·initialized·=·false; | 1165 | ··let·initialized·=·false; |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 660, 15 lines modified | Offset 660, 15 lines modified | ||
| 660 | ······<p·class="built-using"> | 660 | ······<p·class="built-using"> |
| 661 | ········Built·using | 661 | ········Built·using |
| 662 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 662 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 663 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 663 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 664 | ······</p> | 664 | ······</p> |
| 665 | <p>Copyright·©·1996-202 | 665 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 666 | ····</footer> | 666 | ····</footer> |
| 667 | ··</div> | 667 | ··</div> |
| 668 | </main> | 668 | </main> |
| 669 | </div> | 669 | </div> |
| 670 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 670 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 671 | ··<script> | 671 | ··<script> |
| 672 | ··let·initialized·=·false; | 672 | ··let·initialized·=·false; |
| Offset 759, 15 lines modified | Offset 759, 15 lines modified | ||
| 759 | ······<p·class="built-using"> | 759 | ······<p·class="built-using"> |
| 760 | ········Built·using | 760 | ········Built·using |
| 761 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 761 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 762 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 762 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 763 | ······</p> | 763 | ······</p> |
| 764 | <p>Copyright·©·1996-202 | 764 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 765 | ····</footer> | 765 | ····</footer> |
| 766 | ··</div> | 766 | ··</div> |
| 767 | </main> | 767 | </main> |
| 768 | </div> | 768 | </div> |
| 769 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 769 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 770 | ··<script> | 770 | ··<script> |
| 771 | ··let·initialized·=·false; | 771 | ··let·initialized·=·false; |
| Offset 307, 15 lines modified | Offset 307, 15 lines modified | ||
| 307 | ······<p·class="built-using"> | 307 | ······<p·class="built-using"> |
| 308 | ········Built·using | 308 | ········Built·using |
| 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 309 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 310 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 311 | ······</p> | 311 | ······</p> |
| 312 | <p>Copyright·©·1996-202 | 312 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 313 | ····</footer> | 313 | ····</footer> |
| 314 | ··</div> | 314 | ··</div> |
| 315 | </main> | 315 | </main> |
| 316 | </div> | 316 | </div> |
| 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 317 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 318 | ··<script> | 318 | ··<script> |
| 319 | ··let·initialized·=·false; | 319 | ··let·initialized·=·false; |
| Offset 773, 15 lines modified | Offset 773, 15 lines modified | ||
| 773 | ······<p·class="built-using"> | 773 | ······<p·class="built-using"> |
| 774 | ········Built·using | 774 | ········Built·using |
| 775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 775 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 776 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 777 | ······</p> | 777 | ······</p> |
| 778 | <p>Copyright·©·1996-202 | 778 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 779 | ····</footer> | 779 | ····</footer> |
| 780 | ··</div> | 780 | ··</div> |
| 781 | </main> | 781 | </main> |
| 782 | </div> | 782 | </div> |
| 783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 783 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 784 | ··<script> | 784 | ··<script> |
| 785 | ··let·initialized·=·false; | 785 | ··let·initialized·=·false; |
| Offset 394, 15 lines modified | Offset 394, 15 lines modified | ||
| 394 | ······<p·class="built-using"> | 394 | ······<p·class="built-using"> |
| 395 | ········Built·using | 395 | ········Built·using |
| 396 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 396 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 397 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 397 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 398 | ······</p> | 398 | ······</p> |
| 399 | <p>Copyright·©·1996-202 | 399 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 400 | ····</footer> | 400 | ····</footer> |
| 401 | ··</div> | 401 | ··</div> |
| 402 | </main> | 402 | </main> |
| 403 | </div> | 403 | </div> |
| 404 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 404 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 405 | ··<script> | 405 | ··<script> |
| 406 | ··let·initialized·=·false; | 406 | ··let·initialized·=·false; |
| Offset 385, 15 lines modified | Offset 385, 15 lines modified | ||
| 385 | ······<p·class="built-using"> | 385 | ······<p·class="built-using"> |
| 386 | ········Built·using | 386 | ········Built·using |
| 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 389 | ······</p> | 389 | ······</p> |
| 390 | <p>Copyright·©·1996-202 | 390 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 391 | ····</footer> | 391 | ····</footer> |
| 392 | ··</div> | 392 | ··</div> |
| 393 | </main> | 393 | </main> |
| 394 | </div> | 394 | </div> |
| 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 396 | ··<script> | 396 | ··<script> |
| 397 | ··let·initialized·=·false; | 397 | ··let·initialized·=·false; |
| Offset 1035, 15 lines modified | Offset 1035, 15 lines modified | ||
| 1035 | ······<p·class="built-using"> | 1035 | ······<p·class="built-using"> |
| 1036 | ········Built·using | 1036 | ········Built·using |
| 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1037 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1038 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1039 | ······</p> | 1039 | ······</p> |
| 1040 | <p>Copyright·©·1996-202 | 1040 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1041 | ····</footer> | 1041 | ····</footer> |
| 1042 | ··</div> | 1042 | ··</div> |
| 1043 | </main> | 1043 | </main> |
| 1044 | </div> | 1044 | </div> |
| 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1045 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1046 | ··<script> | 1046 | ··<script> |
| 1047 | ··let·initialized·=·false; | 1047 | ··let·initialized·=·false; |
| Offset 494, 15 lines modified | Offset 494, 15 lines modified | ||
| 494 | ······<p·class="built-using"> | 494 | ······<p·class="built-using"> |
| 495 | ········Built·using | 495 | ········Built·using |
| 496 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 496 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 497 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 497 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 498 | ······</p> | 498 | ······</p> |
| 499 | <p>Copyright·©·1996-202 | 499 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 500 | ····</footer> | 500 | ····</footer> |
| 501 | ··</div> | 501 | ··</div> |
| 502 | </main> | 502 | </main> |
| 503 | </div> | 503 | </div> |
| 504 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 504 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 505 | ··<script> | 505 | ··<script> |
| 506 | ··let·initialized·=·false; | 506 | ··let·initialized·=·false; |
| Offset 381, 15 lines modified | Offset 381, 15 lines modified | ||
| 381 | ······<p·class="built-using"> | 381 | ······<p·class="built-using"> |
| 382 | ········Built·using | 382 | ········Built·using |
| 383 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 383 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 384 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 384 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 385 | ······</p> | 385 | ······</p> |
| 386 | <p>Copyright·©·1996-202 | 386 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 387 | ····</footer> | 387 | ····</footer> |
| 388 | ··</div> | 388 | ··</div> |
| 389 | </main> | 389 | </main> |
| 390 | </div> | 390 | </div> |
| 391 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 391 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 392 | ··<script> | 392 | ··<script> |
| 393 | ··let·initialized·=·false; | 393 | ··let·initialized·=·false; |
| Offset 468, 15 lines modified | Offset 468, 15 lines modified | ||
| 468 | ······<p·class="built-using"> | 468 | ······<p·class="built-using"> |
| 469 | ········Built·using | 469 | ········Built·using |
| 470 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 470 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 471 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 471 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 472 | ······</p> | 472 | ······</p> |
| 473 | <p>Copyright·©·1996-202 | 473 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 474 | ····</footer> | 474 | ····</footer> |
| 475 | ··</div> | 475 | ··</div> |
| 476 | </main> | 476 | </main> |
| 477 | </div> | 477 | </div> |
| 478 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 478 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 479 | ··<script> | 479 | ··<script> |
| 480 | ··let·initialized·=·false; | 480 | ··let·initialized·=·false; |
| Offset 390, 15 lines modified | Offset 390, 15 lines modified | ||
| 390 | ······<p·class="built-using"> | 390 | ······<p·class="built-using"> |
| 391 | ········Built·using | 391 | ········Built·using |
| 392 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 392 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 393 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 393 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 394 | ······</p> | 394 | ······</p> |
| 395 | <p>Copyright·©·1996-202 | 395 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 396 | ····</footer> | 396 | ····</footer> |
| 397 | ··</div> | 397 | ··</div> |
| 398 | </main> | 398 | </main> |
| 399 | </div> | 399 | </div> |
| 400 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 400 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 401 | ··<script> | 401 | ··<script> |
| 402 | ··let·initialized·=·false; | 402 | ··let·initialized·=·false; |
| Offset 2242, 15 lines modified | Offset 2242, 15 lines modified | ||
| 2242 | ······<p·class="built-using"> | 2242 | ······<p·class="built-using"> |
| 2243 | ········Built·using | 2243 | ········Built·using |
| 2244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2244 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2245 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2246 | ······</p> | 2246 | ······</p> |
| 2247 | <p>Copyright·©·1996-202 | 2247 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2248 | ····</footer> | 2248 | ····</footer> |
| 2249 | ··</div> | 2249 | ··</div> |
| 2250 | </main> | 2250 | </main> |
| 2251 | </div> | 2251 | </div> |
| 2252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2252 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2253 | ··<script> | 2253 | ··<script> |
| 2254 | ··let·initialized·=·false; | 2254 | ··let·initialized·=·false; |
| Offset 713, 15 lines modified | Offset 713, 15 lines modified | ||
| 713 | ······<p·class="built-using"> | 713 | ······<p·class="built-using"> |
| 714 | ········Built·using | 714 | ········Built·using |
| 715 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 715 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 716 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 716 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 717 | ······</p> | 717 | ······</p> |
| 718 | <p>Copyright·©·1996-202 | 718 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 719 | ····</footer> | 719 | ····</footer> |
| 720 | ··</div> | 720 | ··</div> |
| 721 | </main> | 721 | </main> |
| 722 | </div> | 722 | </div> |
| 723 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 723 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 724 | ··<script> | 724 | ··<script> |
| 725 | ··let·initialized·=·false; | 725 | ··let·initialized·=·false; |
| Offset 1611, 15 lines modified | Offset 1611, 15 lines modified | ||
| 1611 | ······<p·class="built-using"> | 1611 | ······<p·class="built-using"> |
| 1612 | ········Built·using | 1612 | ········Built·using |
| 1613 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1613 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1614 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1614 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1615 | ······</p> | 1615 | ······</p> |
| 1616 | <p>Copyright·©·1996-202 | 1616 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1617 | ····</footer> | 1617 | ····</footer> |
| 1618 | ··</div> | 1618 | ··</div> |
| 1619 | </main> | 1619 | </main> |
| 1620 | </div> | 1620 | </div> |
| 1621 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1621 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1622 | ··<script> | 1622 | ··<script> |
| 1623 | ··let·initialized·=·false; | 1623 | ··let·initialized·=·false; |
| Offset 910, 15 lines modified | Offset 910, 15 lines modified | ||
| 910 | ······<p·class="built-using"> | 910 | ······<p·class="built-using"> |
| 911 | ········Built·using | 911 | ········Built·using |
| 912 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 912 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 913 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 913 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 914 | ······</p> | 914 | ······</p> |
| 915 | <p>Copyright·©·1996-202 | 915 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 916 | ····</footer> | 916 | ····</footer> |
| 917 | ··</div> | 917 | ··</div> |
| 918 | </main> | 918 | </main> |
| 919 | </div> | 919 | </div> |
| 920 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 920 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 921 | ··<script> | 921 | ··<script> |
| 922 | ··let·initialized·=·false; | 922 | ··let·initialized·=·false; |
| Offset 665, 15 lines modified | Offset 665, 15 lines modified | ||
| 665 | ······<p·class="built-using"> | 665 | ······<p·class="built-using"> |
| 666 | ········Built·using | 666 | ········Built·using |
| 667 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 667 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 668 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 668 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 669 | ······</p> | 669 | ······</p> |
| 670 | <p>Copyright·©·1996-202 | 670 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 671 | ····</footer> | 671 | ····</footer> |
| 672 | ··</div> | 672 | ··</div> |
| 673 | </main> | 673 | </main> |
| 674 | </div> | 674 | </div> |
| 675 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 675 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 676 | ··<script> | 676 | ··<script> |
| 677 | ··let·initialized·=·false; | 677 | ··let·initialized·=·false; |
| Offset 715, 15 lines modified | Offset 715, 15 lines modified | ||
| 715 | ······<p·class="built-using"> | 715 | ······<p·class="built-using"> |
| 716 | ········Built·using | 716 | ········Built·using |
| 717 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 717 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 718 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 718 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 719 | ······</p> | 719 | ······</p> |
| 720 | <p>Copyright·©·1996-202 | 720 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 721 | ····</footer> | 721 | ····</footer> |
| 722 | ··</div> | 722 | ··</div> |
| 723 | </main> | 723 | </main> |
| 724 | </div> | 724 | </div> |
| 725 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 725 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 726 | ··<script> | 726 | ··<script> |
| 727 | ··let·initialized·=·false; | 727 | ··let·initialized·=·false; |
| Offset 378, 15 lines modified | Offset 378, 15 lines modified | ||
| 378 | ······<p·class="built-using"> | 378 | ······<p·class="built-using"> |
| 379 | ········Built·using | 379 | ········Built·using |
| 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 380 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 381 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 382 | ······</p> | 382 | ······</p> |
| 383 | <p>Copyright·©·1996-202 | 383 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 384 | ····</footer> | 384 | ····</footer> |
| 385 | ··</div> | 385 | ··</div> |
| 386 | </main> | 386 | </main> |
| 387 | </div> | 387 | </div> |
| 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 388 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 389 | ··<script> | 389 | ··<script> |
| 390 | ··let·initialized·=·false; | 390 | ··let·initialized·=·false; |
| Offset 431, 15 lines modified | Offset 431, 15 lines modified | ||
| 431 | ······<p·class="built-using"> | 431 | ······<p·class="built-using"> |
| 432 | ········Built·using | 432 | ········Built·using |
| 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 433 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 434 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 435 | ······</p> | 435 | ······</p> |
| 436 | <p>Copyright·©·1996-202 | 436 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 437 | ····</footer> | 437 | ····</footer> |
| 438 | ··</div> | 438 | ··</div> |
| 439 | </main> | 439 | </main> |
| 440 | </div> | 440 | </div> |
| 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 441 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 442 | ··<script> | 442 | ··<script> |
| 443 | ··let·initialized·=·false; | 443 | ··let·initialized·=·false; |
| Offset 496, 15 lines modified | Offset 496, 15 lines modified | ||
| 496 | ······<p·class="built-using"> | 496 | ······<p·class="built-using"> |
| 497 | ········Built·using | 497 | ········Built·using |
| 498 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 498 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 499 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 499 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 500 | ······</p> | 500 | ······</p> |
| 501 | <p>Copyright·©·1996-202 | 501 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 502 | ····</footer> | 502 | ····</footer> |
| 503 | ··</div> | 503 | ··</div> |
| 504 | </main> | 504 | </main> |
| 505 | </div> | 505 | </div> |
| 506 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 506 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 507 | ··<script> | 507 | ··<script> |
| 508 | ··let·initialized·=·false; | 508 | ··let·initialized·=·false; |
| Offset 1295, 15 lines modified | Offset 1295, 15 lines modified | ||
| 1295 | ······<p·class="built-using"> | 1295 | ······<p·class="built-using"> |
| 1296 | ········Built·using | 1296 | ········Built·using |
| 1297 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1297 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1298 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1298 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1299 | ······</p> | 1299 | ······</p> |
| 1300 | <p>Copyright·©·1996-202 | 1300 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1301 | ····</footer> | 1301 | ····</footer> |
| 1302 | ··</div> | 1302 | ··</div> |
| 1303 | </main> | 1303 | </main> |
| 1304 | </div> | 1304 | </div> |
| 1305 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1305 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1306 | ··<script> | 1306 | ··<script> |
| 1307 | ··let·initialized·=·false; | 1307 | ··let·initialized·=·false; |
| Offset 550, 15 lines modified | Offset 550, 15 lines modified | ||
| 550 | ······<p·class="built-using"> | 550 | ······<p·class="built-using"> |
| 551 | ········Built·using | 551 | ········Built·using |
| 552 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 552 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 553 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 553 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 554 | ······</p> | 554 | ······</p> |
| 555 | <p>Copyright·©·1996-202 | 555 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 556 | ····</footer> | 556 | ····</footer> |
| 557 | ··</div> | 557 | ··</div> |
| 558 | </main> | 558 | </main> |
| 559 | </div> | 559 | </div> |
| 560 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 560 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 561 | ··<script> | 561 | ··<script> |
| 562 | ··let·initialized·=·false; | 562 | ··let·initialized·=·false; |
| Offset 477, 15 lines modified | Offset 477, 15 lines modified | ||
| 477 | ······<p·class="built-using"> | 477 | ······<p·class="built-using"> |
| 478 | ········Built·using | 478 | ········Built·using |
| 479 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 479 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 480 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 480 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 481 | ······</p> | 481 | ······</p> |
| 482 | <p>Copyright·©·1996-202 | 482 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 483 | ····</footer> | 483 | ····</footer> |
| 484 | ··</div> | 484 | ··</div> |
| 485 | </main> | 485 | </main> |
| 486 | </div> | 486 | </div> |
| 487 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 487 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 488 | ··<script> | 488 | ··<script> |
| 489 | ··let·initialized·=·false; | 489 | ··let·initialized·=·false; |
| Offset 386, 15 lines modified | Offset 386, 15 lines modified | ||
| 386 | ······<p·class="built-using"> | 386 | ······<p·class="built-using"> |
| 387 | ········Built·using | 387 | ········Built·using |
| 388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 388 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 389 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 390 | ······</p> | 390 | ······</p> |
| 391 | <p>Copyright·©·1996-202 | 391 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 392 | ····</footer> | 392 | ····</footer> |
| 393 | ··</div> | 393 | ··</div> |
| 394 | </main> | 394 | </main> |
| 395 | </div> | 395 | </div> |
| 396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 396 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 397 | ··<script> | 397 | ··<script> |
| 398 | ··let·initialized·=·false; | 398 | ··let·initialized·=·false; |
| Offset 546, 15 lines modified | Offset 546, 15 lines modified | ||
| 546 | ······<p·class="built-using"> | 546 | ······<p·class="built-using"> |
| 547 | ········Built·using | 547 | ········Built·using |
| 548 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 548 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 549 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 549 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 550 | ······</p> | 550 | ······</p> |
| 551 | <p>Copyright·©·1996-202 | 551 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 552 | ····</footer> | 552 | ····</footer> |
| 553 | ··</div> | 553 | ··</div> |
| 554 | </main> | 554 | </main> |
| 555 | </div> | 555 | </div> |
| 556 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 556 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 557 | ··<script> | 557 | ··<script> |
| 558 | ··let·initialized·=·false; | 558 | ··let·initialized·=·false; |
| Offset 607, 15 lines modified | Offset 607, 15 lines modified | ||
| 607 | ······<p·class="built-using"> | 607 | ······<p·class="built-using"> |
| 608 | ········Built·using | 608 | ········Built·using |
| 609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 609 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 610 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 611 | ······</p> | 611 | ······</p> |
| 612 | <p>Copyright·©·1996-202 | 612 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 613 | ····</footer> | 613 | ····</footer> |
| 614 | ··</div> | 614 | ··</div> |
| 615 | </main> | 615 | </main> |
| 616 | </div> | 616 | </div> |
| 617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 617 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 618 | ··<script> | 618 | ··<script> |
| 619 | ··let·initialized·=·false; | 619 | ··let·initialized·=·false; |
| Offset 1049, 15 lines modified | Offset 1049, 15 lines modified | ||
| 1049 | ······<p·class="built-using"> | 1049 | ······<p·class="built-using"> |
| 1050 | ········Built·using | 1050 | ········Built·using |
| 1051 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1051 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1052 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1052 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1053 | ······</p> | 1053 | ······</p> |
| 1054 | <p>Copyright·©·1996-202 | 1054 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1055 | ····</footer> | 1055 | ····</footer> |
| 1056 | ··</div> | 1056 | ··</div> |
| 1057 | </main> | 1057 | </main> |
| 1058 | </div> | 1058 | </div> |
| 1059 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1059 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1060 | ··<script> | 1060 | ··<script> |
| 1061 | ··let·initialized·=·false; | 1061 | ··let·initialized·=·false; |
| Offset 497, 15 lines modified | Offset 497, 15 lines modified | ||
| 497 | ······<p·class="built-using"> | 497 | ······<p·class="built-using"> |
| 498 | ········Built·using | 498 | ········Built·using |
| 499 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 499 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 500 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 500 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 501 | ······</p> | 501 | ······</p> |
| 502 | <p>Copyright·©·1996-202 | 502 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 503 | ····</footer> | 503 | ····</footer> |
| 504 | ··</div> | 504 | ··</div> |
| 505 | </main> | 505 | </main> |
| 506 | </div> | 506 | </div> |
| 507 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 507 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 508 | ··<script> | 508 | ··<script> |
| 509 | ··let·initialized·=·false; | 509 | ··let·initialized·=·false; |
| Offset 16754, 15 lines modified | Offset 16754, 15 lines modified | ||
| 16754 | ······<p·class="built-using"> | 16754 | ······<p·class="built-using"> |
| 16755 | ········Built·using | 16755 | ········Built·using |
| 16756 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 16756 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 16757 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 16757 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 16758 | ······</p> | 16758 | ······</p> |
| 16759 | <p>Copyright·©·1996-202 | 16759 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 16760 | ····</footer> | 16760 | ····</footer> |
| 16761 | ··</div> | 16761 | ··</div> |
| 16762 | </main> | 16762 | </main> |
| 16763 | </div> | 16763 | </div> |
| 16764 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 16764 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 16765 | ··<script> | 16765 | ··<script> |
| 16766 | ··let·initialized·=·false; | 16766 | ··let·initialized·=·false; |
| Offset 1172, 15 lines modified | Offset 1172, 15 lines modified | ||
| 1172 | ······<p·class="built-using"> | 1172 | ······<p·class="built-using"> |
| 1173 | ········Built·using | 1173 | ········Built·using |
| 1174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1174 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1175 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1176 | ······</p> | 1176 | ······</p> |
| 1177 | <p>Copyright·©·1996-202 | 1177 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1178 | ····</footer> | 1178 | ····</footer> |
| 1179 | ··</div> | 1179 | ··</div> |
| 1180 | </main> | 1180 | </main> |
| 1181 | </div> | 1181 | </div> |
| 1182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1182 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1183 | ··<script> | 1183 | ··<script> |
| 1184 | ··let·initialized·=·false; | 1184 | ··let·initialized·=·false; |
| Offset 293, 15 lines modified | Offset 293, 15 lines modified | ||
| 293 | ······<p·class="built-using"> | 293 | ······<p·class="built-using"> |
| 294 | ········Built·using | 294 | ········Built·using |
| 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 295 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 296 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 297 | ······</p> | 297 | ······</p> |
| 298 | <p>Copyright·©·1996-202 | 298 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 299 | ····</footer> | 299 | ····</footer> |
| 300 | ··</div> | 300 | ··</div> |
| 301 | </main> | 301 | </main> |
| 302 | </div> | 302 | </div> |
| 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 303 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 304 | ··<script> | 304 | ··<script> |
| 305 | ··let·initialized·=·false; | 305 | ··let·initialized·=·false; |
| Offset 463, 15 lines modified | Offset 463, 15 lines modified | ||
| 463 | ······<p·class="built-using"> | 463 | ······<p·class="built-using"> |
| 464 | ········Built·using | 464 | ········Built·using |
| 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 467 | ······</p> | 467 | ······</p> |
| 468 | <p>Copyright·©·1996-202 | 468 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 469 | ····</footer> | 469 | ····</footer> |
| 470 | ··</div> | 470 | ··</div> |
| 471 | </main> | 471 | </main> |
| 472 | </div> | 472 | </div> |
| 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 474 | ··<script> | 474 | ··<script> |
| 475 | ··let·initialized·=·false; | 475 | ··let·initialized·=·false; |
| Offset 422, 15 lines modified | Offset 422, 15 lines modified | ||
| 422 | ······<p·class="built-using"> | 422 | ······<p·class="built-using"> |
| 423 | ········Built·using | 423 | ········Built·using |
| 424 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 424 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 425 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 425 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 426 | ······</p> | 426 | ······</p> |
| 427 | <p>Copyright·©·1996-202 | 427 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 428 | ····</footer> | 428 | ····</footer> |
| 429 | ··</div> | 429 | ··</div> |
| 430 | </main> | 430 | </main> |
| 431 | </div> | 431 | </div> |
| 432 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 432 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 433 | ··<script> | 433 | ··<script> |
| 434 | ··let·initialized·=·false; | 434 | ··let·initialized·=·false; |
| Offset 501, 15 lines modified | Offset 501, 15 lines modified | ||
| 501 | ······<p·class="built-using"> | 501 | ······<p·class="built-using"> |
| 502 | ········Built·using | 502 | ········Built·using |
| 503 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 503 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 504 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 504 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 505 | ······</p> | 505 | ······</p> |
| 506 | <p>Copyright·©·1996-202 | 506 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 507 | ····</footer> | 507 | ····</footer> |
| 508 | ··</div> | 508 | ··</div> |
| 509 | </main> | 509 | </main> |
| 510 | </div> | 510 | </div> |
| 511 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 511 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 512 | ··<script> | 512 | ··<script> |
| 513 | ··let·initialized·=·false; | 513 | ··let·initialized·=·false; |
| Offset 285, 15 lines modified | Offset 285, 15 lines modified | ||
| 285 | ······<p·class="built-using"> | 285 | ······<p·class="built-using"> |
| 286 | ········Built·using | 286 | ········Built·using |
| 287 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 287 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 288 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 288 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 289 | ······</p> | 289 | ······</p> |
| 290 | <p>Copyright·©·1996-202 | 290 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 291 | ····</footer> | 291 | ····</footer> |
| 292 | ··</div> | 292 | ··</div> |
| 293 | </main> | 293 | </main> |
| 294 | </div> | 294 | </div> |
| 295 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 295 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 296 | ··<script> | 296 | ··<script> |
| 297 | ··let·initialized·=·false; | 297 | ··let·initialized·=·false; |
| Offset 1762, 15 lines modified | Offset 1762, 15 lines modified | ||
| 1762 | ······<p·class="built-using"> | 1762 | ······<p·class="built-using"> |
| 1763 | ········Built·using | 1763 | ········Built·using |
| 1764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1764 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1765 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1766 | ······</p> | 1766 | ······</p> |
| 1767 | <p>Copyright·©·1996-202 | 1767 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1768 | ····</footer> | 1768 | ····</footer> |
| 1769 | ··</div> | 1769 | ··</div> |
| 1770 | </main> | 1770 | </main> |
| 1771 | </div> | 1771 | </div> |
| 1772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1772 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1773 | ··<script> | 1773 | ··<script> |
| 1774 | ··let·initialized·=·false; | 1774 | ··let·initialized·=·false; |
| Offset 2410, 15 lines modified | Offset 2410, 15 lines modified | ||
| 2410 | ······<p·class="built-using"> | 2410 | ······<p·class="built-using"> |
| 2411 | ········Built·using | 2411 | ········Built·using |
| 2412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2412 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2413 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2414 | ······</p> | 2414 | ······</p> |
| 2415 | <p>Copyright·©·1996-202 | 2415 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2416 | ····</footer> | 2416 | ····</footer> |
| 2417 | ··</div> | 2417 | ··</div> |
| 2418 | </main> | 2418 | </main> |
| 2419 | </div> | 2419 | </div> |
| 2420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2420 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2421 | ··<script> | 2421 | ··<script> |
| 2422 | ··let·initialized·=·false; | 2422 | ··let·initialized·=·false; |
| Offset 463, 15 lines modified | Offset 463, 15 lines modified | ||
| 463 | ······<p·class="built-using"> | 463 | ······<p·class="built-using"> |
| 464 | ········Built·using | 464 | ········Built·using |
| 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 465 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 466 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 467 | ······</p> | 467 | ······</p> |
| 468 | <p>Copyright·©·1996-202 | 468 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 469 | ····</footer> | 469 | ····</footer> |
| 470 | ··</div> | 470 | ··</div> |
| 471 | </main> | 471 | </main> |
| 472 | </div> | 472 | </div> |
| 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 473 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 474 | ··<script> | 474 | ··<script> |
| 475 | ··let·initialized·=·false; | 475 | ··let·initialized·=·false; |
| Offset 459, 15 lines modified | Offset 459, 15 lines modified | ||
| 459 | ······<p·class="built-using"> | 459 | ······<p·class="built-using"> |
| 460 | ········Built·using | 460 | ········Built·using |
| 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 461 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 462 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 463 | ······</p> | 463 | ······</p> |
| 464 | <p>Copyright·©·1996-202 | 464 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 465 | ····</footer> | 465 | ····</footer> |
| 466 | ··</div> | 466 | ··</div> |
| 467 | </main> | 467 | </main> |
| 468 | </div> | 468 | </div> |
| 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 469 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 470 | ··<script> | 470 | ··<script> |
| 471 | ··let·initialized·=·false; | 471 | ··let·initialized·=·false; |
| Offset 551, 15 lines modified | Offset 551, 15 lines modified | ||
| 551 | ······<p·class="built-using"> | 551 | ······<p·class="built-using"> |
| 552 | ········Built·using | 552 | ········Built·using |
| 553 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 553 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 554 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 554 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 555 | ······</p> | 555 | ······</p> |
| 556 | <p>Copyright·©·1996-202 | 556 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 557 | ····</footer> | 557 | ····</footer> |
| 558 | ··</div> | 558 | ··</div> |
| 559 | </main> | 559 | </main> |
| 560 | </div> | 560 | </div> |
| 561 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 561 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 562 | ··<script> | 562 | ··<script> |
| 563 | ··let·initialized·=·false; | 563 | ··let·initialized·=·false; |
| Offset 1980, 15 lines modified | Offset 1980, 15 lines modified | ||
| 1980 | ······<p·class="built-using"> | 1980 | ······<p·class="built-using"> |
| 1981 | ········Built·using | 1981 | ········Built·using |
| 1982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1982 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1983 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1984 | ······</p> | 1984 | ······</p> |
| 1985 | <p>Copyright·©·1996-202 | 1985 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1986 | ····</footer> | 1986 | ····</footer> |
| 1987 | ··</div> | 1987 | ··</div> |
| 1988 | </main> | 1988 | </main> |
| 1989 | </div> | 1989 | </div> |
| 1990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1990 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1991 | ··<script> | 1991 | ··<script> |
| 1992 | ··let·initialized·=·false; | 1992 | ··let·initialized·=·false; |
| Offset 485, 15 lines modified | Offset 485, 15 lines modified | ||
| 485 | ······<p·class="built-using"> | 485 | ······<p·class="built-using"> |
| 486 | ········Built·using | 486 | ········Built·using |
| 487 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 487 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 488 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 488 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 489 | ······</p> | 489 | ······</p> |
| 490 | <p>Copyright·©·1996-202 | 490 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 491 | ····</footer> | 491 | ····</footer> |
| 492 | ··</div> | 492 | ··</div> |
| 493 | </main> | 493 | </main> |
| 494 | </div> | 494 | </div> |
| 495 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 495 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 496 | ··<script> | 496 | ··<script> |
| 497 | ··let·initialized·=·false; | 497 | ··let·initialized·=·false; |
| Offset 1309, 15 lines modified | Offset 1309, 15 lines modified | ||
| 1309 | ······<p·class="built-using"> | 1309 | ······<p·class="built-using"> |
| 1310 | ········Built·using | 1310 | ········Built·using |
| 1311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1311 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1312 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1313 | ······</p> | 1313 | ······</p> |
| 1314 | <p>Copyright·©·1996-202 | 1314 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1315 | ····</footer> | 1315 | ····</footer> |
| 1316 | ··</div> | 1316 | ··</div> |
| 1317 | </main> | 1317 | </main> |
| 1318 | </div> | 1318 | </div> |
| 1319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1319 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1320 | ··<script> | 1320 | ··<script> |
| 1321 | ··let·initialized·=·false; | 1321 | ··let·initialized·=·false; |
| Offset 1095, 15 lines modified | Offset 1095, 15 lines modified | ||
| 1095 | ······<p·class="built-using"> | 1095 | ······<p·class="built-using"> |
| 1096 | ········Built·using | 1096 | ········Built·using |
| 1097 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1097 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1098 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1098 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1099 | ······</p> | 1099 | ······</p> |
| 1100 | <p>Copyright·©·1996-202 | 1100 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1101 | ····</footer> | 1101 | ····</footer> |
| 1102 | ··</div> | 1102 | ··</div> |
| 1103 | </main> | 1103 | </main> |
| 1104 | </div> | 1104 | </div> |
| 1105 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1105 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1106 | ··<script> | 1106 | ··<script> |
| 1107 | ··let·initialized·=·false; | 1107 | ··let·initialized·=·false; |
| Offset 3491, 15 lines modified | Offset 3491, 15 lines modified | ||
| 3491 | ······<p·class="built-using"> | 3491 | ······<p·class="built-using"> |
| 3492 | ········Built·using | 3492 | ········Built·using |
| 3493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 3493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 3494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 3494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 3495 | ······</p> | 3495 | ······</p> |
| 3496 | <p>Copyright·©·1996-202 | 3496 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 3497 | ····</footer> | 3497 | ····</footer> |
| 3498 | ··</div> | 3498 | ··</div> |
| 3499 | </main> | 3499 | </main> |
| 3500 | </div> | 3500 | </div> |
| 3501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 3501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 3502 | ··<script> | 3502 | ··<script> |
| 3503 | ··let·initialized·=·false; | 3503 | ··let·initialized·=·false; |
| Offset 610, 15 lines modified | Offset 610, 15 lines modified | ||
| 610 | ······<p·class="built-using"> | 610 | ······<p·class="built-using"> |
| 611 | ········Built·using | 611 | ········Built·using |
| 612 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 612 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 613 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 613 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 614 | ······</p> | 614 | ······</p> |
| 615 | <p>Copyright·©·1996-202 | 615 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 616 | ····</footer> | 616 | ····</footer> |
| 617 | ··</div> | 617 | ··</div> |
| 618 | </main> | 618 | </main> |
| 619 | </div> | 619 | </div> |
| 620 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 620 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 621 | ··<script> | 621 | ··<script> |
| 622 | ··let·initialized·=·false; | 622 | ··let·initialized·=·false; |
| Offset 1491, 15 lines modified | Offset 1491, 15 lines modified | ||
| 1491 | ······<p·class="built-using"> | 1491 | ······<p·class="built-using"> |
| 1492 | ········Built·using | 1492 | ········Built·using |
| 1493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1493 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1494 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1495 | ······</p> | 1495 | ······</p> |
| 1496 | <p>Copyright·©·1996-202 | 1496 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1497 | ····</footer> | 1497 | ····</footer> |
| 1498 | ··</div> | 1498 | ··</div> |
| 1499 | </main> | 1499 | </main> |
| 1500 | </div> | 1500 | </div> |
| 1501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1501 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1502 | ··<script> | 1502 | ··<script> |
| 1503 | ··let·initialized·=·false; | 1503 | ··let·initialized·=·false; |
| Offset 986, 15 lines modified | Offset 986, 15 lines modified | ||
| 986 | ······<p·class="built-using"> | 986 | ······<p·class="built-using"> |
| 987 | ········Built·using | 987 | ········Built·using |
| 988 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 988 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 989 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 989 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 990 | ······</p> | 990 | ······</p> |
| 991 | <p>Copyright·©·1996-202 | 991 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 992 | ····</footer> | 992 | ····</footer> |
| 993 | ··</div> | 993 | ··</div> |
| 994 | </main> | 994 | </main> |
| 995 | </div> | 995 | </div> |
| 996 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 996 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 997 | ··<script> | 997 | ··<script> |
| 998 | ··let·initialized·=·false; | 998 | ··let·initialized·=·false; |
| Offset 2229, 15 lines modified | Offset 2229, 15 lines modified | ||
| 2229 | ······<p·class="built-using"> | 2229 | ······<p·class="built-using"> |
| 2230 | ········Built·using | 2230 | ········Built·using |
| 2231 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 2231 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 2232 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 2232 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 2233 | ······</p> | 2233 | ······</p> |
| 2234 | <p>Copyright·©·1996-202 | 2234 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 2235 | ····</footer> | 2235 | ····</footer> |
| 2236 | ··</div> | 2236 | ··</div> |
| 2237 | </main> | 2237 | </main> |
| 2238 | </div> | 2238 | </div> |
| 2239 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 2239 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 2240 | ··<script> | 2240 | ··<script> |
| 2241 | ··let·initialized·=·false; | 2241 | ··let·initialized·=·false; |
| Offset 466, 15 lines modified | Offset 466, 15 lines modified | ||
| 466 | ······<p·class="built-using"> | 466 | ······<p·class="built-using"> |
| 467 | ········Built·using | 467 | ········Built·using |
| 468 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 468 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 469 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 469 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 470 | ······</p> | 470 | ······</p> |
| 471 | <p>Copyright·©·1996-202 | 471 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 472 | ····</footer> | 472 | ····</footer> |
| 473 | ··</div> | 473 | ··</div> |
| 474 | </main> | 474 | </main> |
| 475 | </div> | 475 | </div> |
| 476 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 476 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 477 | ··<script> | 477 | ··<script> |
| 478 | ··let·initialized·=·false; | 478 | ··let·initialized·=·false; |
| Offset 7835, 15 lines modified | Offset 7835, 15 lines modified | ||
| 7835 | ······<p·class="built-using"> | 7835 | ······<p·class="built-using"> |
| 7836 | ········Built·using | 7836 | ········Built·using |
| 7837 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 7837 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 7838 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 7838 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 7839 | ······</p> | 7839 | ······</p> |
| 7840 | <p>Copyright·©·1996-202 | 7840 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 7841 | ····</footer> | 7841 | ····</footer> |
| 7842 | ··</div> | 7842 | ··</div> |
| 7843 | </main> | 7843 | </main> |
| 7844 | </div> | 7844 | </div> |
| 7845 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 7845 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 7846 | ··<script> | 7846 | ··<script> |
| 7847 | ··let·initialized·=·false; | 7847 | ··let·initialized·=·false; |
| Offset 289, 15 lines modified | Offset 289, 15 lines modified | ||
| 289 | ······<p·class="built-using"> | 289 | ······<p·class="built-using"> |
| 290 | ········Built·using | 290 | ········Built·using |
| 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 291 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 292 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 293 | ······</p> | 293 | ······</p> |
| 294 | <p>Copyright·©·1996-202 | 294 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 295 | ····</footer> | 295 | ····</footer> |
| 296 | ··</div> | 296 | ··</div> |
| 297 | </main> | 297 | </main> |
| 298 | </div> | 298 | </div> |
| 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 299 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 300 | ··<script> | 300 | ··<script> |
| 301 | ··let·initialized·=·false; | 301 | ··let·initialized·=·false; |
| Offset 308, 15 lines modified | Offset 308, 15 lines modified | ||
| 308 | ······<p·class="built-using"> | 308 | ······<p·class="built-using"> |
| 309 | ········Built·using | 309 | ········Built·using |
| 310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 310 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 311 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 312 | ······</p> | 312 | ······</p> |
| 313 | <p>Copyright·©·1996-202 | 313 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 314 | ····</footer> | 314 | ····</footer> |
| 315 | ··</div> | 315 | ··</div> |
| 316 | </main> | 316 | </main> |
| 317 | </div> | 317 | </div> |
| 318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 318 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 319 | ··<script> | 319 | ··<script> |
| 320 | ··let·initialized·=·false; | 320 | ··let·initialized·=·false; |
| Offset 290, 15 lines modified | Offset 290, 15 lines modified | ||
| 290 | ······<p·class="built-using"> | 290 | ······<p·class="built-using"> |
| 291 | ········Built·using | 291 | ········Built·using |
| 292 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 292 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 293 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 293 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 294 | ······</p> | 294 | ······</p> |
| 295 | <p>Copyright·©·1996-202 | 295 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 296 | ····</footer> | 296 | ····</footer> |
| 297 | ··</div> | 297 | ··</div> |
| 298 | </main> | 298 | </main> |
| 299 | </div> | 299 | </div> |
| 300 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 300 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 301 | ··<script> | 301 | ··<script> |
| 302 | ··let·initialized·=·false; | 302 | ··let·initialized·=·false; |
| Offset 1417, 15 lines modified | Offset 1417, 15 lines modified | ||
| 1417 | ······<p·class="built-using"> | 1417 | ······<p·class="built-using"> |
| 1418 | ········Built·using | 1418 | ········Built·using |
| 1419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1419 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1420 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1421 | ······</p> | 1421 | ······</p> |
| 1422 | <p>Copyright·©·1996-202 | 1422 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1423 | ····</footer> | 1423 | ····</footer> |
| 1424 | ··</div> | 1424 | ··</div> |
| 1425 | </main> | 1425 | </main> |
| 1426 | </div> | 1426 | </div> |
| 1427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1427 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1428 | ··<script> | 1428 | ··<script> |
| 1429 | ··let·initialized·=·false; | 1429 | ··let·initialized·=·false; |
| Offset 1302, 15 lines modified | Offset 1302, 15 lines modified | ||
| 1302 | ······<p·class="built-using"> | 1302 | ······<p·class="built-using"> |
| 1303 | ········Built·using | 1303 | ········Built·using |
| 1304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1304 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1305 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1306 | ······</p> | 1306 | ······</p> |
| 1307 | <p>Copyright·©·1996-202 | 1307 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1308 | ····</footer> | 1308 | ····</footer> |
| 1309 | ··</div> | 1309 | ··</div> |
| 1310 | </main> | 1310 | </main> |
| 1311 | </div> | 1311 | </div> |
| 1312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1312 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1313 | ··<script> | 1313 | ··<script> |
| 1314 | ··let·initialized·=·false; | 1314 | ··let·initialized·=·false; |
| Offset 132, 44 lines modified | Offset 132, 44 lines modified | ||
| 132 | works·like·a·regular·gen_server·module·and·creates·a·server·per·object.</p><p>NOTE:·Currently·no·form·of·inheritance·is·implemented.</p><p>The·user·module·should·export:</p><p>init(Args)·should·return<br/>{wxWindow,·State}·|·{wxWindow,·State,·Timeout}·|·ignore·|·{stop,·Reason}</p><p>Asynchronous·window·event·handling:<br/>handle_event(#wx{},·State)·should·return<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>The·user·module·can·export·the·following·callback·functions:</p><p>handle_call(Msg,·{From,·Tag},·State)·should·return<br/>{reply,·Reply,·State}·|·{reply,·Reply,·State,·Timeout}·|·{noreply,·State} | 132 | works·like·a·regular·gen_server·module·and·creates·a·server·per·object.</p><p>NOTE:·Currently·no·form·of·inheritance·is·implemented.</p><p>The·user·module·should·export:</p><p>init(Args)·should·return<br/>{wxWindow,·State}·|·{wxWindow,·State,·Timeout}·|·ignore·|·{stop,·Reason}</p><p>Asynchronous·window·event·handling:<br/>handle_event(#wx{},·State)·should·return<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>The·user·module·can·export·the·following·callback·functions:</p><p>handle_call(Msg,·{From,·Tag},·State)·should·return<br/>{reply,·Reply,·State}·|·{reply,·Reply,·State,·Timeout}·|·{noreply,·State} |
| 133 | |·{noreply,·State,·Timeout}·|·{stop,·Reason,·Reply,·State}</p><p>handle_cast(Msg,·State)·should·return<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>If·the·above·are·not·exported·but·called,·the·wx_object·process·will·crash.·The | 133 | |·{noreply,·State,·Timeout}·|·{stop,·Reason,·Reply,·State}</p><p>handle_cast(Msg,·State)·should·return<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>If·the·above·are·not·exported·but·called,·the·wx_object·process·will·crash.·The |
| 134 | user·module·can·also·export:</p><p>Info·is·message·e.g.·{'EXIT',·P,·R},·{nodedown,·N},·...<br/>handle_info(Info,·State)·should·return·,·...<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>If·a·message·is·sent·to·the·wx_object·process·when·handle_info·is·not·exported, | 134 | user·module·can·also·export:</p><p>Info·is·message·e.g.·{'EXIT',·P,·R},·{nodedown,·N},·...<br/>handle_info(Info,·State)·should·return·,·...<br/>{noreply,·State}·|·{noreply,·State,·Timeout}·|·{stop,·Reason,·State}</p><p>If·a·message·is·sent·to·the·wx_object·process·when·handle_info·is·not·exported, |
| 135 | the·message·will·be·dropped·and·ignored.</p><p>When·stop·is·returned·in·one·of·the·functions·above·with·Reason·=·normal·| | 135 | the·message·will·be·dropped·and·ignored.</p><p>When·stop·is·returned·in·one·of·the·functions·above·with·Reason·=·normal·| |
| 136 | shutdown·|·Term,·terminate(State)·is·called.·It·lets·the·user·module·clean·up, | 136 | shutdown·|·Term,·terminate(State)·is·called.·It·lets·the·user·module·clean·up, |
| 137 | it·is·always·called·when·server·terminates·or·when·wx_object()·in·the·driver·is | 137 | it·is·always·called·when·server·terminates·or·when·wx_object()·in·the·driver·is |
| 138 | deleted.·If·the·Parent·process·terminates·the·Module:terminate/2·function·is | 138 | deleted.·If·the·Parent·process·terminates·the·Module:terminate/2·function·is |
| 139 | called.<br/>terminate(Reason,·State)</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 139 | called.<br/>terminate(Reason,·State)</p><p>Example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">··</span><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="9432489180-1">(</span><span·class="ss">myDialog</span><span·class="p"·data-group-id="9432489180-1">)</span><span·class="p">.</span><span·class="w"> |
| 140 | </span><span·class="w">··</span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 140 | </span><span·class="w">··</span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9432489180-2">(</span><span·class="p"·data-group-id="9432489180-3">[</span><span·class="ss">new</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">show</span><span·class="p">/</span><span[·...·truncated·by·diffoscope;·len:·242,·SHA:·e07c30b071209570effb74745a3a37178bf2a3d5cb5f46649f48cf2f04c13581·...·]-2">)</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%%·API</span><span·class="w"> |
| 141 | </span><span·class="w">··</span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 141 | </span><span·class="w">··</span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="9432489180-4">(</span><span·class="p"·data-group-id="9432489180-5">[</span><span·class="ss">init</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_call</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">handle_event</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 142 | ···········</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id=" | 142 | ···········</span><span·class="ss">handle_info</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">code_change</span><span·class="p">/</span><span·class="mi">3</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">terminate</span><span·class="p">/</span><span·class="mi">2</span><span·class="p"·data-group-id="9432489180-5">]</span><span·class="p"·data-group-id="9432489180-4">)</span><span·class="p">.</span><span·class="w"> |
| 143 | ···········</span><span·class="ss">new</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">showModal</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">destroy</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">]</span><span·class="p">)</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%%·Callbacks</span><span·class="w"> | 143 | ···········</span><span·class="ss">new</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">showModal</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">destroy</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">]</span><span·class="p">)</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%%·Callbacks</span><span·class="w"> |
| 144 | ··</span><span·class="c1">%%·Client·API</span><span·class="w"> | 144 | ··</span><span·class="c1">%%·Client·API</span><span·class="w"> |
| 145 | ··</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 145 | ··</span><span·class="nf">new</span><span·class="p"·data-group-id="9432489180-6">(</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Msg</span><span·class="p"·data-group-id="9432489180-6">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 146 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id=" | 146 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">start</span><span·class="p"·data-group-id="9432489180-7">(</span><span·class="o">?</span><span·class="n">MODULE</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="9432489180-8">[</span><span·class="n">Parent</span><span·class="p">,</span><span·class="n">Id</span><s[·...·truncated·by·diffoscope;·len:·246,·SHA:·fbe3026786e3b6a42dc23fae81fd59e5bc8c383914b51de462ed8e4f00f8307b·...·]-7">)</span><span·class="p">.</span><span·class="w"> |
| 147 | ··</span><span·class="nf">show</span><span·class="p"·data-group-id=" | 147 | ··</span><span·class="nf">show</span><span·class="p"·data-group-id="9432489180-10">(</span><span·class="n">Dialog</span><span·class="p"·data-group-id="9432489180-10">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 148 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 148 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9432489180-11">(</span><span·class="n">Dialog</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">show_modal</span><span·class="p"·data-group-id="9432489180-11">)</span><span·class="p">.</span><span·class="w"> |
| 149 | ··</span><span·class="nf">destroy</span><span·class="p"·data-group-id=" | 149 | ··</span><span·class="nf">destroy</span><span·class="p"·data-group-id="9432489180-12">(</span><span·class="n">Dialog</span><span·class="p"·data-group-id="9432489180-12">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 150 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id=" | 150 | ·····</span><span·class="nc">wx_object</span><span·class="p">:</span><span·class="nf">call</span><span·class="p"·data-group-id="9432489180-13">(</span><span·class="n">Dialog</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">destroy</span><span·class="p"·data-group-id="9432489180-13">)</span><span·class="p">.</span><span·class="w"> |
| 151 | ··</span><span·class="c1">%%·Server·Implementation·ala·gen_server</span><span·class="w"> | 151 | ··</span><span·class="c1">%%·Server·Implementation·ala·gen_server</span><span·class="w"> |
| 152 | ··</span><span·class="nf">init</span><span·class="p"·data-group-id=" | 152 | ··</span><span·class="nf">init</span><span·class="p"·data-group-id="9432489180-14">(</span><span·class="p"·data-group-id="9432489180-15">[</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Str</span><span·class="p"·data-group-id="9432489180-15">]</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·a3a6b19f65b1f8b1fc803903d24def55b98bc43fcc0959997dadca523ba26370·...·]-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 153 | ·····</span><span·class="n">Dialog</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id=" | 153 | ·····</span><span·class="n">Dialog</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">new</span><span·class="p"·data-group-id="9432489180-16">(</span><span·class="n">Parent</span><span·class="p">,</span><span·class="w">·</span><span·class="mi">42</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"Testing"</span><span·class="p">,</span><span·class="w">[·...·truncated·by·diffoscope;·len:·157,·SHA:·31675021785f0a874e01893356bd6a42b45cc3152eb2e34855ec8c02a6298524·...·]-16">)</span><span·class="p">,</span><span·class="w"> |
| 154 | ·····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 154 | ·····</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 155 | ·····</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id=" | 155 | ·····</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">connect</span><span·class="p"·data-group-id="9432489180-18">(</span><span·class="n">Dialog</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">command_button_clicked</span><span·class="p"·data-group-id="9432489180-18">)</span><span·class="p">,</span><span·class="w"> |
| 156 | ·····</span><span·class="p"·data-group-id=" | 156 | ·····</span><span·class="p"·data-group-id="9432489180-19">{</span><span·class="n">Dialog</span><span·class="p">,</span><span·class="w">·</span><span·class="n">MyState</span><span·class="p"·data-group-id="9432489180-19">}</span><span·class="p">.</span><span·class="w"> |
| 157 | ··</span><span·class="nf">handle_call</span><span·class="p"·data-group-id=" | 157 | ··</span><span·class="nf">handle_call</span><span·class="p"·data-group-id="9432489180-20">(</span><span·class="ss">show</span><span·class="p">,</span><span·class="w">·</span><span·class="p">_</span><span·class="n">From</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id=[·...·truncated·by·diffoscope;·len:·11,·SHA:·fd79e210e0bedcb744124de9f3135bc1b10164e5c0229fff8c6744b1f01e25f1·...·]-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 158 | ·····</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id=" | 158 | ·····</span><span·class="nc">wxDialog</span><span·class="p">:</span><span·class="nf">show</span><span·class="p"·data-group-id="9432489180-21">(</span><span·class="n">State</span><span·class="o">#</span><span·class="ss">state</span><span·class="p">.</span><span·class="ss">win</span><span·class="p"·data-group-id="9432489180-21">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ·····</span><span·class="p"·data-group-id=" | 159 | ·····</span><span·class="p"·data-group-id="9432489180-22">{</span><span·class="ss">reply</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="9432489180-22">}</span><span·class="p">;</span><span·class="w"> |
| 160 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 160 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 161 | ··</span><span·class="nf">handle_event</span><span·class="p"·data-group-id=" | 161 | ··</span><span·class="nf">handle_event</span><span·class="p"·data-group-id="9432489180-23">(</span><span·class="o">#</span><span·class="ss">wx</span><span·class="p"·data-group-id="9432489180-24">{</span><span·class="p"·data-group-id="9432489180-24">}</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span[·...·truncated·by·diffoscope;·len:·42,·SHA:·307e9231b31c6941318fbf4294c7adc8b3537ccd69afa2f92e54051191626422·...·]-23">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 162 | ·····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 162 | ·····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="9432489180-25">(</span><span·class="s">"Users·clicked·button</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="9432489180-26">[</span><span·class="p"·data-group-id="9432489180-26">]</sp[·...·truncated·by·diffoscope;·len:·44,·SHA:·77ab718c5ad6598ac3c627b37aab2da9399d8a7ea5e1a61e1958f3cd34f441ca·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 163 | ·····</span><span·class="p"·data-group-id=" | 163 | ·····</span><span·class="p"·data-group-id="9432489180-27">{</span><span·class="ss">noreply</span><span·class="p">,</span><span·class="w">·</span><span·class="n">State</span><span·class="p"·data-group-id="9432489180-27">}</span><span·class="p">;</span><span·class="w"> |
| 164 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="module-data-types"·class="section-heading"> | 164 | ··</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span></code></pre><h2·id="module-data-types"·class="section-heading"> |
| 165 | ··<a·href="#module-data-types"·class="hover-link"> | 165 | ··<a·href="#module-data-types"·class="hover-link"> |
| 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 166 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 167 | ··</a> | 167 | ··</a> |
| 168 | ··<span·class="text">DATA·TYPES</span> | 168 | ··<span·class="text">DATA·TYPES</span> |
| 169 | </h2> | 169 | </h2> |
| 170 | <ul><li><p><strong><a·href=""·id="type-request_id"></a>·request_id()·=·term()</strong></p></li><li><p><strong><a·href=""·id="type-server_ref"></a>·server_ref()·= | 170 | <ul><li><p><strong><a·href=""·id="type-request_id"></a>·request_id()·=·term()</strong></p></li><li><p><strong><a·href=""·id="type-server_ref"></a>·server_ref()·= |
| Offset 1319, 15 lines modified | Offset 1319, 15 lines modified | ||
| 1319 | ······<p·class="built-using"> | 1319 | ······<p·class="built-using"> |
| 1320 | ········Built·using | 1320 | ········Built·using |
| 1321 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1321 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1322 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1322 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1323 | ······</p> | 1323 | ······</p> |
| 1324 | <p>Copyright·©·1996-202 | 1324 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1325 | ····</footer> | 1325 | ····</footer> |
| 1326 | ··</div> | 1326 | ··</div> |
| 1327 | </main> | 1327 | </main> |
| 1328 | </div> | 1328 | </div> |
| 1329 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1329 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1330 | ··<script> | 1330 | ··<script> |
| 1331 | ··let·initialized·=·false; | 1331 | ··let·initialized·=·false; |
| Offset 26, 15 lines modified | Offset 26, 15 lines modified | ||
| 26 | dist/lato-latin-300-normal-YUMVEFOL.woff2 | 26 | dist/lato-latin-300-normal-YUMVEFOL.woff2 |
| 27 | dist/lato-latin-400-normal-W7754I4D.woff2 | 27 | dist/lato-latin-400-normal-W7754I4D.woff2 |
| 28 | dist/lato-latin-700-normal-2XVSBPG4.woff2 | 28 | dist/lato-latin-700-normal-2XVSBPG4.woff2 |
| 29 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 | 29 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 |
| 30 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 | 30 | dist/lato-latin-ext-400-normal-N27NCBWW.woff2 |
| 31 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 | 31 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 |
| 32 | dist/remixicon-NKANDIL5.woff2 | 32 | dist/remixicon-NKANDIL5.woff2 |
| 33 | dist/search_data- | 33 | dist/search_data-2C01025C.js |
| 34 | dist/sidebar_items-7ADBDE09.js | 34 | dist/sidebar_items-7ADBDE09.js |
| 35 | index.html | 35 | index.html |
| 36 | notes.html | 36 | notes.html |
| 37 | search.html | 37 | search.html |
| 38 | xmerl.html | 38 | xmerl.html |
| 39 | xmerl_eventp.html | 39 | xmerl_eventp.html |
| 40 | xmerl_examples.html | 40 | xmerl_examples.html |
| Offset 139, 15 lines modified | Offset 139, 15 lines modified | ||
| 139 | ······<p·class="built-using"> | 139 | ······<p·class="built-using"> |
| 140 | ········Built·using | 140 | ········Built·using |
| 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 141 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 142 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 143 | ······</p> | 143 | ······</p> |
| 144 | <p>Copyright·©·1996-202 | 144 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 145 | ····</footer> | 145 | ····</footer> |
| 146 | ··</div> | 146 | ··</div> |
| 147 | </main> | 147 | </main> |
| 148 | </div> | 148 | </div> |
| 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 149 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 150 | ··<script> | 150 | ··<script> |
| 151 | ··let·initialized·=·false; | 151 | ··let·initialized·=·false; |
| Offset 231, 15 lines modified | Offset 231, 15 lines modified | ||
| 231 | ······<p·class="built-using"> | 231 | ······<p·class="built-using"> |
| 232 | ········Built·using | 232 | ········Built·using |
| 233 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 233 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 234 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 234 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 235 | ······</p> | 235 | ······</p> |
| 236 | <p>Copyright·©·1996-202 | 236 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 237 | ····</footer> | 237 | ····</footer> |
| 238 | ··</div> | 238 | ··</div> |
| 239 | </main> | 239 | </main> |
| 240 | </div> | 240 | </div> |
| 241 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 241 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 242 | ··<script> | 242 | ··<script> |
| 243 | ··let·initialized·=·false; | 243 | ··let·initialized·=·false; |
| Offset 1385, 15 lines modified | Offset 1385, 15 lines modified | ||
| 1385 | ······<p·class="built-using"> | 1385 | ······<p·class="built-using"> |
| 1386 | ········Built·using | 1386 | ········Built·using |
| 1387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1387 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1388 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1389 | ······</p> | 1389 | ······</p> |
| 1390 | <p>Copyright·©·1996-202 | 1390 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1391 | ····</footer> | 1391 | ····</footer> |
| 1392 | ··</div> | 1392 | ··</div> |
| 1393 | </main> | 1393 | </main> |
| 1394 | </div> | 1394 | </div> |
| 1395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1395 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1396 | ··<script> | 1396 | ··<script> |
| 1397 | ··let·initialized·=·false; | 1397 | ··let·initialized·=·false; |
| Offset 118, 15 lines modified | Offset 118, 15 lines modified | ||
| 118 | <div·id="search"> | 118 | <div·id="search"> |
| 119 | ··<h1> | 119 | ··<h1> |
| 120 | ····<span></span> | 120 | ····<span></span> |
| 121 | ··</h1> | 121 | ··</h1> |
| 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> | 122 | ··<div·class="loading"><div></div><div></div><div></div><div></div></div> |
| 123 | </div> | 123 | </div> |
| 124 | <script·src="dist/search_data- | 124 | <script·src="dist/search_data-2C01025C.js"></script> |
| 125 | ····<footer·class="footer"> | 125 | ····<footer·class="footer"> |
| 126 | ······<p> | 126 | ······<p> |
| 127 | ········<span·class="line"> | 127 | ········<span·class="line"> |
| 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> | 128 | ··········<button·class="a-main·footer-button·display-quick-switch"·title="Search·HexDocs·packages"> |
| 129 | ············Search·HexDocs | 129 | ············Search·HexDocs |
| 130 | ··········</button> | 130 | ··········</button> |
| Offset 137, 15 lines modified | Offset 137, 15 lines modified | ||
| 137 | ······<p·class="built-using"> | 137 | ······<p·class="built-using"> |
| 138 | ········Built·using | 138 | ········Built·using |
| 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 139 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 140 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 141 | ······</p> | 141 | ······</p> |
| 142 | <p>Copyright·©·1996-202 | 142 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 143 | ····</footer> | 143 | ····</footer> |
| 144 | ··</div> | 144 | ··</div> |
| 145 | </main> | 145 | </main> |
| 146 | </div> | 146 | </div> |
| 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 147 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 148 | ··<script> | 148 | ··<script> |
| 149 | ··let·initialized·=·false; | 149 | ··let·initialized·=·false; |
| Offset 1087, 15 lines modified | Offset 1087, 15 lines modified | ||
| 1087 | ······<p·class="built-using"> | 1087 | ······<p·class="built-using"> |
| 1088 | ········Built·using | 1088 | ········Built·using |
| 1089 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1089 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1090 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1090 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1091 | ······</p> | 1091 | ······</p> |
| 1092 | <p>Copyright·©·1996-202 | 1092 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1093 | ····</footer> | 1093 | ····</footer> |
| 1094 | ··</div> | 1094 | ··</div> |
| 1095 | </main> | 1095 | </main> |
| 1096 | </div> | 1096 | </div> |
| 1097 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1097 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1098 | ··<script> | 1098 | ··<script> |
| 1099 | ··let·initialized·=·false; | 1099 | ··let·initialized·=·false; |
| Offset 538, 15 lines modified | Offset 538, 15 lines modified | ||
| 538 | ······<p·class="built-using"> | 538 | ······<p·class="built-using"> |
| 539 | ········Built·using | 539 | ········Built·using |
| 540 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 540 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 541 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 541 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 542 | ······</p> | 542 | ······</p> |
| 543 | <p>Copyright·©·1996-202 | 543 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 544 | ····</footer> | 544 | ····</footer> |
| 545 | ··</div> | 545 | ··</div> |
| 546 | </main> | 546 | </main> |
| 547 | </div> | 547 | </div> |
| 548 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 548 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 549 | ··<script> | 549 | ··<script> |
| 550 | ··let·initialized·=·false; | 550 | ··let·initialized·=·false; |
| Offset 142, 100 lines modified | Offset 142, 100 lines modified | ||
| 142 | forms·are·<code·class="inline">{Tag, Fun}</code>,·or·<code·class="inline">{Tag, Fun, LocalState}</code>.·The·second·form·can·be·used | 142 | forms·are·<code·class="inline">{Tag, Fun}</code>,·or·<code·class="inline">{Tag, Fun, LocalState}</code>.·The·second·form·can·be·used |
| 143 | to·initialize·the·state·variable·in·question.</p><h4>1.1·User·State</h4><p>All·customization·functions·are·free·to·access·a·"User·state"·variable.·Care | 143 | to·initialize·the·state·variable·in·question.</p><h4>1.1·User·State</h4><p>All·customization·functions·are·free·to·access·a·"User·state"·variable.·Care |
| 144 | must·of·course·be·taken·to·coordinate·the·use·of·this·state.·It·is·recommended | 144 | must·of·course·be·taken·to·coordinate·the·use·of·this·state.·It·is·recommended |
| 145 | that·functions,·which·do·not·really·have·anything·to·contribute·to·the·"global" | 145 | that·functions,·which·do·not·really·have·anything·to·contribute·to·the·"global" |
| 146 | user·state,·use·their·own·state·variable·instead.·Another·option·(used·in·e.g. | 146 | user·state,·use·their·own·state·variable·instead.·Another·option·(used·in·e.g. |
| 147 | <code·class="inline">xmerl_eventp.erl</code>)·is·for·customization·functions·to·share·one·of·the·local | 147 | <code·class="inline">xmerl_eventp.erl</code>)·is·for·customization·functions·to·share·one·of·the·local |
| 148 | states·(in·<code·class="inline">xmerl_eventp.erl</code>,·the·continuation·function·and·the·fetch·function | 148 | states·(in·<code·class="inline">xmerl_eventp.erl</code>,·the·continuation·function·and·the·fetch·function |
| 149 | both·access·the·cont_state.)</p><p>Functions·to·access·user·state:</p><ul><li>··<code·class="inline">xmerl_scan:user_state(GlobalState)</code></li><li>··<code·class="inline">xmerl_scan:user_state(UserState,·GlobalState)</code></li></ul><h4>1.2·Event·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 149 | both·access·the·cont_state.)</p><p>Functions·to·access·user·state:</p><ul><li>··<code·class="inline">xmerl_scan:user_state(GlobalState)</code></li><li>··<code·class="inline">xmerl_scan:user_state(UserState,·GlobalState)</code></li></ul><h4>1.2·Event·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1547392287-1">{</span><span·class="ss">event_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="1547392287-2">(</span><span·class="p"·data-group-id="1547392287-2">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·494,·SHA:·28b08bc5ee2407b033de207a88863aea04ed72dbed5fec4d75a76d5c72c642eb·...·]-3">}</span></code></pre><p>The·event·function·is·called·at·the·beginning·and·at·the·end·of·a·parsed·entity. |
| 150 | It·has·the·following·format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 150 | It·has·the·following·format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="9744045096-1">(</span><span·class="n">Event</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="9744045096-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 151 | ···</span><span·class="n">EventState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">event_state</span><span·class="p"·data-group-id=" | 151 | ···</span><span·class="n">EventState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">event_state</span><span·class="p"·data-group-id="9744045096-2">(</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="9744045096-2">)</span><span·class="p">,</span><span·class="w"> |
| 152 | ···</span><span·class="n">EventState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id=" | 152 | ···</span><span·class="n">EventState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="9744045096-3">(</span><span·class="n">Event</span><span·class="p">,</span><span·class="w">·</span><span·class="n">EventState</span><span·class="p"·data-group-id="9744045096-3">)</span><span·class="p">,</span><span·class="w"> |
| 153 | ···</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">event_state</span><span·class="p"·data-group-id=" | 153 | ···</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">event_state</span><span·class="p"·data-group-id="9744045096-4">(</span><span·class="n">EventState2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="9744045096-4">)</span><span·class="w"> |
| 154 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><h4>1.3·Hook·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="4779584636-1">{</span><span·class="ss">hook_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="4779584636-2">(</span><span·class="p"·data-group-id="4779584636-2">)</span><span·class="p"·data-group-id="4779584636-1">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="4779584636-3">{</span><span·class="ss">hook_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="4779584636-4">(</span><span·class="p"·data-group-id="4779584636-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HookState</span><span·class="p"·data-group-id="4779584636-3">}</span></code></pre><p>The·hook·function·is·called·when·the·processor·has·parsed·a·complete·entity. | ||
| 155 | 154 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><h4>1.3·Hook·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5181120516-1">{</span><span·class="ss">hook_fun</span><span·class="p">,</span><sp[·...·truncated·by·diffoscope;·len:·770,·SHA:·4f6c249915ee7ace5cbe066cf90d610f5e1ab7950363d7e23ebed60e6cf587ba·...·] | |
| 155 | Format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="5778961406-1">(</span><span·class="n">Entity</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="5778961406-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | ||
| 156 | ···</span><span·class="n">HookState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">hook_state</span><span·class="p"·data-group-id=" | 156 | ···</span><span·class="n">HookState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">hook_state</span><span·class="p"·data-group-id="5778961406-2">(</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="5778961406-2">)</span><span·class="p">,</span><span·class="w"> |
| 157 | ···</span><span·class="p"·data-group-id=" | 157 | ···</span><span·class="p"·data-group-id="5778961406-3">{</span><span·class="n">TransformedEntity</span><span·class="p">,</span><span·class="w">·</span><span·class="n">HookState2</span><span·class="p"·data-group-id="5778961406-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class=[·...·truncated·by·diffoscope;·len:·241,·SHA:·739b9187b40491bb5a52d182361d788eef3ce1351c7ec7303c7e2798f898488d·...·]6-4">)</span><span·class="p">,</span><span·class="w"> |
| 158 | ···</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">hook_state</span><span·class="p"·data-group-id=" | 158 | ···</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">hook_state</span><span·class="p"·data-group-id="5778961406-5">(</span><span·class="n">HookState2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="5778961406-5">)</span><span·class="p">,</span><span·class="w"> |
| 159 | ···</span><span·class="p"·data-group-id=" | 159 | ···</span><span·class="p"·data-group-id="5778961406-6">{</span><span·class="n">TransformedEntity</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState2</span><span·class="p"·data-group-id="5778961406-6">}</span><span·class="w"> |
| 160 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·relationship·between·the·event·function,·the·hook·function·and·the | 160 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><p>The·relationship·between·the·event·function,·the·hook·function·and·the |
| 161 | accumulator·function·is·as·follows:</p><ol><li>·The·event·function·is·first·called·with·an·'ended'·event·for·the·parsed | 161 | accumulator·function·is·as·follows:</p><ol><li>·The·event·function·is·first·called·with·an·'ended'·event·for·the·parsed |
| 162 | entity.</li><li>·The·hook·function·is·called,·possibly·re-formatting·the·entity.</li><li>·The·acc·function·is·called·in·order·to·(optionally)·add·the·re-formatted | 162 | entity.</li><li>·The·hook·function·is·called,·possibly·re-formatting·the·entity.</li><li>·The·acc·function·is·called·in·order·to·(optionally)·add·the·re-formatted |
| 163 | entity·to·the·contents·of·its·parent·element.</li></ol><h4>1.4·Fetch·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 163 | entity·to·the·contents·of·its·parent·element.</li></ol><h4>1.4·Fetch·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5669386665-1">{</span><span·class="ss">fetch_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5669386665-2">(</span><span·class="p"·data-group-id="5669386665-2">)</span><span·class="p"·data[·...·truncated·by·diffoscope;·len:·494,·SHA:·142572f87f62a9a27f40e64c1c54c58a8778f31803ce289d86cf0a871a96328f·...·]-3">}</span></code></pre><p>The·fetch·function·is·called·in·order·to·fetch·an·external·resource·(e.g.·a |
| 164 | DTD).</p><p>The·fetch·function·can·respond·with·three·different·return·values:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Result</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:=</span><span·class="w"> | 164 | DTD).</p><p>The·fetch·function·can·respond·with·three·different·return·values:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Result</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:=</span><span·class="w"> |
| 165 | ···</span><span·class="p"·data-group-id=" | 165 | ···</span><span·class="p"·data-group-id="2884440204-1">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2884440204-2">{</span><span·class="ss">file</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Filename</span>[·...·truncated·by·diffoscope;·len:·179,·SHA:·03b9eca775df4379c8852de6f51b9ef40c9f489d1f872544101f992c98a41681·...·]-1">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 166 | ···</span><span·class="p"·data-group-id=" | 166 | ···</span><span·class="p"·data-group-id="2884440204-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="p"·data-group-id="2884440204-4">{</span><span·class="ss">string</span><span·class="p">,</span><span·class="w">·</span><span·class="n">String</span>[·...·truncated·by·diffoscope;·len:·179,·SHA:·4cde60682059a24ee9bac43337615ea15d1cbafb83186a773163ad9cc75ba135·...·]-3">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> |
| 167 | ···</span><span·class="p"·data-group-id=" | 167 | ···</span><span·class="p"·data-group-id="2884440204-5">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">not_fetched</span><span·class="p">,</span><span·class="w">·</span><span·class="n">NewGlobalState</span><span·class="p"·data-group-id="288444020[·...·truncated·by·diffoscope;·len:·331,·SHA:·57768aed0d096b69532107b37647991a33476677eb162a5d6ef527d99952d36f·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 168 | ···</span><span·class="n">FetchState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">fetch_state</span><span·class="p"·data-group-id=" | 168 | ···</span><span·class="n">FetchState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">fetch_state</span><span·class="p"·data-group-id="8223319566-2">(</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="8223319566-2">)</span><span·class="p">,</span><span·class="w"> |
| 169 | ···</span><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="1314696587-3">(</span><span·class="n">URI</span><span·class="p">,</span><span·class="w">·</span><span·class="n">FetchState</span><span·class="p"·data-group-id="1314696587-3">)</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%·Result·being·one·of·the·above</span><span·class="w"> | ||
| 170 | </span><span·class=" | 169 | ···</span><span·class="n">Result</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">foo</span><span·class="p"·data-group-id="8223319566-3">(</span><span·class="n">URI</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·215,·SHA:·dd7db785e7db729a444cc367743a22e08fbc55a7ac4611edc82877d93e80e275·...·] |
| 170 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><h4>1.5·Continuation·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="0526960509-1">{</span><span·class="ss">continuation_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0526960509-2">(</span><span·class="p"·data-group-id="0526960509-2">)</span><span·class="p"·data-group-id="0526960509-1">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="0526960509-3">{</span><span·class="ss">continuation_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="0526960509-4">(</span><span·class="p"·data-group-id="0526960509-4">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ContinuationState</span><span·class="p"·data-group-id="0526960509-3">}</span></code></pre><p>The·continuation·function·is·called·when·the·parser·encounters·the·end·of·the | ||
| 171 | byte·stream.·Format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 171 | byte·stream.·Format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="2333917013-1">(</span><span·class="n">Continue</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Exception</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="2333917013-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 172 | ···</span><span·class="n">ContState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id=" | 172 | ···</span><span·class="n">ContState</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id="2333917013-2">(</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="2333917013-2">)</span><span·class="p">,</span><span·class="w"> |
| 173 | ···</span><span·class="p"·data-group-id=" | 173 | ···</span><span·class="p"·data-group-id="2333917013-3">{</span><span·class="n">Result</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ContState2</span><span·class="p"·data-group-id="2333917013-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span[·...·truncated·by·diffoscope;·len:·165,·SHA:·6a64b126dfc7d7695b79a70e5c54aef1f12710b018115b78ac4cf5a88ead3712·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 174 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Result</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> | 174 | ···</span><span·class="k">case</span><span·class="w">·</span><span·class="n">Result</span><span·class="w">·</span><span·class="k">of</span><span·class="w"> |
| 175 | ······</span><span·class="p"·data-group-id=" | 175 | ······</span><span·class="p"·data-group-id="2333917013-5">[</span><span·class="p"·data-group-id="2333917013-5">]</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 176 | ·········</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id=" | 176 | ·········</span><span·class="n">GlobalState2</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id="2333917013-6">(</span><span·class="n">ContState2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="2333917013-6">)</span><span·class="p">,</span><span·class="w"> |
| 177 | ·········</span><span·class="n">Exception</span><span·class="p"·data-group-id=" | 177 | ·········</span><span·class="n">Exception</span><span·class="p"·data-group-id="2333917013-7">(</span><span·class="n">GlobalState2</span><span·class="p"·data-group-id="2333917013-7">)</span><span·class="p">;</span><span·class="w"> |
| 178 | ······</span><span·class="n">MoreBytes</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> | 178 | ······</span><span·class="n">MoreBytes</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 179 | ·········</span><span·class="p"·data-group-id=" | 179 | ·········</span><span·class="p"·data-group-id="2333917013-8">{</span><span·class="n">MoreBytes2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Rest</span><span·class="p"·data-group-id="2333917013-8">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·171,·SHA:·bba4a4e6db871ac2fabd51c37d4f9e918516a93344ec99c97cf38f6f5fc89876·...·]-9">)</span><span·class="p">,</span><span·class="w"> |
| 180 | ·········</span><span·class="n">ContState3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">update_cont_state</span><span·class="p"·data-group-id=" | 180 | ·········</span><span·class="n">ContState3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nf">update_cont_state</span><span·class="p"·data-group-id="2333917013-10">(</span><span·class="n">Rest</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ContState2</span><span·class="p"·data-group-id="2333917013-10">)</span><span·class="p">,</span><span·class="w"> |
| 181 | ·········</span><span·class="n">GlobalState3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id=" | 181 | ·········</span><span·class="n">GlobalState3</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">cont_state</span><span·class="p"·data-group-id="2333917013-11">(</span><span·class="n">ContState3</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="2333917013-11">)</span><span·class="p">,</span><span·class="w"> |
| 182 | ·········</span><span·class="n">Continue</span><span·class="p"·data-group-id=" | 182 | ·········</span><span·class="n">Continue</span><span·class="p"·data-group-id="2333917013-12">(</span><span·class="n">MoreBytes2</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState3</span><span·class="p"·data-group-id="2333917013-12">)</span><span·class="w"> |
| 183 | ···</span><span·class="k">end</span><span·class="w"> | 183 | ···</span><span·class="k">end</span><span·class="w"> |
| 184 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><h4>1.6·Rules·Functions</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="5398555328-1">{</span><span·class="ss">rules</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ReadFun</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5398555328-2">(</span><span·class="p"·data-group-id="5398555328-2">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">WriteFun</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="5398555328-3">(</span><span·class="p"·data-group-id="5398555328-3">)</span><span·class="p">,</span><span·class="w">·</span><span·class="n">RulesState</span><span·class="p"·data-group-id="5398555328-1">}</span><span·class="w">·</span><span·class="p">|</span><span·class="w"> | ||
| 185 | </span><span·class=" | 184 | </span><span·class="k">end</span><span·class="p">.</span></code></pre><h4>1.6·Rules·Functions</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="9216241156-1">{</span><span·class="ss">rules</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·717,·SHA:·c9b351ee0248b3829a7ee8f7ea5a8438475f9df686c25f20a7c0a5c54a4ba20e·...·] |
| 185 | </span><span·class="p"·data-group-id="9216241156-4">{</span><span·class="ss">rules</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Table</span><span·class="w">·</span><span·class="p">:</span><span·class="w">·</span><span·class="nf">ets</span><span·class="p"·data-group-id="9216241156-5">(</span><span·class="p"·data-group-id="9216241156-5">)</span><span·class="p"·data-group-id="9216241156-4">}</span></code></pre><p>The·rules·functions·take·care·of·storing·scanner·information·in·a·rules | ||
| 186 | database.·User-provided·rules·functions·may·opt·to·store·the·information·in | 186 | database.·User-provided·rules·functions·may·opt·to·store·the·information·in |
| 187 | mnesia,·or·perhaps·in·the·user_state(RulesState).</p><p>The·following·modes·exist:</p><ul><li>··If·the·user·doesn't·specify·an·option,·the·scanner·creates·an·ets·table,·and | 187 | mnesia,·or·perhaps·in·the·user_state(RulesState).</p><p>The·following·modes·exist:</p><ul><li>··If·the·user·doesn't·specify·an·option,·the·scanner·creates·an·ets·table,·and |
| 188 | uses·built-in·functions·to·read·and·write·data·to·it.·When·the·scanner·is | 188 | uses·built-in·functions·to·read·and·write·data·to·it.·When·the·scanner·is |
| 189 | done,·the·ets·table·is·deleted.</li><li>··If·the·user·specifies·an·ets·table·via·the·<code·class="inline">{rules, Table}</code>·option,·the | 189 | done,·the·ets·table·is·deleted.</li><li>··If·the·user·specifies·an·ets·table·via·the·<code·class="inline">{rules, Table}</code>·option,·the |
| 190 | scanner·uses·this·table.·When·the·scanner·is·done,·it·does·<em>not</em>·delete·the | 190 | scanner·uses·this·table.·When·the·scanner·is·done,·it·does·<em>not</em>·delete·the |
| 191 | table.</li><li>··If·the·user·specifies·read·and·write·functions,·the·scanner·will·use·them | 191 | table.</li><li>··If·the·user·specifies·read·and·write·functions,·the·scanner·will·use·them |
| 192 | instead.</li></ul><p>The·format·for·the·read·and·write·functions·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="n">WriteFun</span><span·class="p"·data-group-id=" | 192 | instead.</li></ul><p>The·format·for·the·read·and·write·functions·are·as·follows:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">·</span><span·class="n">WriteFun</span><span·class="p"·data-group-id="8861898591-1">(</span><span·class="n">Context</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Definition</span><span·class="p">,</span><span·class="w">·</span>[·...·truncated·by·diffoscope;·len:·76,·SHA:·3c51e7dc2c87ae4e3cb71293e4c9860def2b459a4c2ec6f2440d4746496be810·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">NewScannerState</span><span·class="p">.</span><span·class="w"> |
| 193 | ·</span><span·class="n">ReadFun</span><span·class="p"·data-group-id=" | 193 | ·</span><span·class="n">ReadFun</span><span·class="p"·data-group-id="8861898591-2">(</span><span·class="n">Context</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Name</span><span·class="p">,</span><span·class="w">·</span><span·class="n">ScannerState</span><span·class="p"·data-group-id="8861898591-2">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Definition</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">undefined</span><span·class="p">.</span></code></pre><p>Here·is·a·summary·of·the·data·objects·currently·being·written·by·the·scanner:</p><table><thead><tr><th·style="text-align:·left;">Context</th><th·style="text-align:·left;">Key·Value</th><th·style="text-align:·left;">Definition</th></tr></thead><tbody><tr><td·style="text-align:·left;">notation</td><td·style="text-align:·left;">NotationName</td><td·style="text-align:·left;"><code·class="inline">{system, SL}·|·{public, PIDL, SL}</code></td></tr><tr><td·style="text-align:·left;">elem_def</td><td·style="text-align:·left;">ElementName</td><td·style="text-align:·left;"><code·class="inline">#xmlElement{content·=·ContentSpec}</code></td></tr><tr><td·style="text-align:·left;">parameter_entity</td><td·style="text-align:·left;">PEName</td><td·style="text-align:·left;"><code·class="inline">PEDef</code></td></tr><tr><td·style="text-align:·left;">entity</td><td·style="text-align:·left;">EntityName</td><td·style="text-align:·left;"><code·class="inline">EntityDef</code></td></tr></tbody></table><p><strong>·Table·1:</strong>·Scanner·data·objects</p><p>where</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">ContentSpec</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">empty</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">any</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">ElemContent</span><span·class="w"> |
| 194 | </span><span·class="n">ElemContent</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 194 | </span><span·class="n">ElemContent</span><span·class="w">·</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="p"·data-group-id="9039310982-1">{</span><span·class="n">Mode</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Elems</span><span·class="p"·data-group-id="9039310982-1">}</span><span·class="w"> |
| 195 | </span><span·class="n">Mode</span><span·class="w">········</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">seq</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">choice</span><span·class="w"> | 195 | </span><span·class="n">Mode</span><span·class="w">········</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">seq</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">choice</span><span·class="w"> |
| 196 | </span><span·class="n">Elems</span><span·class="w">·······</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="p"·data-group-id=" | 196 | </span><span·class="n">Elems</span><span·class="w">·······</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="p"·data-group-id="9039310982-2">[</span><span·class="n">Elem</span><span·class="p"·data-group-id="9039310982-2">]</span><span·class="w"> |
| 197 | </span><span·class="n">Elem</span><span·class="w">········</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">'#PCDATA'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">ElemContent</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id=" | 197 | </span><span·class="n">Elem</span><span·class="w">········</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">'#PCDATA'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">Name</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="n">ElemContent</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="p"·data-group-id="9039310982-3">{</span><span·class="n">Occurrence</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Elems</span><span·class="p"·data-group-id="9039310982-3">}</span><span·class="w"> |
| 198 | </span><span·class="n">Occurrence</span><span·class="w">··</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">'*'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'?'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'+'</span></code></pre><p>NOTE:·<em>When·<Elem>·is·not·wrapped·with·<Occurrence>,·(Occurrence·=·once)·is | 198 | </span><span·class="n">Occurrence</span><span·class="w">··</span><span·class="p">:</span><span·class="p">:=</span><span·class="w">·</span><span·class="ss">'*'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'?'</span><span·class="w">·</span><span·class="p">|</span><span·class="w">·</span><span·class="ss">'+'</span></code></pre><p>NOTE:·<em>When·<Elem>·is·not·wrapped·with·<Occurrence>,·(Occurrence·=·once)·is |
| 199 | implied.</em></p><h4>1.7·Accumulator·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id=" | 199 | implied.</em></p><h4>1.7·Accumulator·Function</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="p"·data-group-id="1078929286-1">{</span><span·class="ss">acc_fun</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="1078929286-2">(</span><span·class="p"·data-group-id="1078929286-2">)</span><span·class="p"·data-g[·...·truncated·by·diffoscope;·len:·19,·SHA:·f48112bc58d5c73f9b330843043c016720b24e1d43d0467edcd08ae133f58b83·...·]-1">}</span></code></pre><p>The·accumulator·function·is·called·to·accumulate·the·contents·of·an·entity.When |
| 200 | parsing·very·large·files,·it·may·not·be·desirable·to·do·so.In·this·case,·an·acc | 200 | parsing·very·large·files,·it·may·not·be·desirable·to·do·so.In·this·case,·an·acc |
| 201 | function·can·be·provided·that·simply·doesn't·accumulate.</p><p>Note·that·it·is·possible·to·even·modify·the·parsed·entity·before·accumulating | 201 | function·can·be·provided·that·simply·doesn't·accumulate.</p><p>Note·that·it·is·possible·to·even·modify·the·parsed·entity·before·accumulating |
| 202 | it,·but·this·must·be·done·with·care.·xmerl_scan·performs·post-processing·of·the | 202 | it,·but·this·must·be·done·with·care.·xmerl_scan·performs·post-processing·of·the |
| 203 | element·for·namespace·management.·Thus,·the·element·must·keep·its·original | 203 | element·for·namespace·management.·Thus,·the·element·must·keep·its·original |
| 204 | structure·for·this·to·work.</p><p>The·acc·function·has·the·following·format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·default·accumulating·acc·fun</span><span·class="w"> | 204 | structure·for·this·to·work.</p><p>The·acc·function·has·the·following·format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="c1">%%·default·accumulating·acc·fun</span><span·class="w"> |
| 205 | </span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 205 | </span><span·class="nf">fun</span><span·class="p"·data-group-id="3126575129-1">(</span><span·class="n">ParsedEntity</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="3126575129-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 206 | ···</span><span·class="p"·data-group-id=" | 206 | ···</span><span·class="p"·data-group-id="3126575129-2">{</span><span·class="p"·data-group-id="3126575129-3">[</span><span·class="n">ParsedEntity</span><span·class="p">|</span><span·class="n">Acc</span><span·class="p"·data-group-id="3126575129-3">]</span><span·class="p">,</span><span·class="w">·</[·...·truncated·by·diffoscope;·len:·80,·SHA:·14fe97b062ac0ef6a510d76ac0ff3dd190f78f7b75dde9ea90bf67a48e655bbc·...·]-2">}</span><span·class="p">.</span><span·class="w"> |
| 207 | </span><span·class="c1">%%·non-accumulating·acc·fun</span><span·class="w"> | 207 | </span><span·class="c1">%%·non-accumulating·acc·fun</span><span·class="w"> |
| 208 | </span><span·class="nf">fun</span><span·class="p"·data-group-id=" | 208 | </span><span·class="nf">fun</span><span·class="p"·data-group-id="3126575129-4">(</span><span·class="n">ParsedEntity</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="3126575129-4">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 209 | ···</span><span·class="p"·data-group-id=" | 209 | ···</span><span·class="p"·data-group-id="3126575129-5">{</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="3126575129-5">}</span><span·class="p">.</span></code></pre><h4>1.8·Close·Function</h4><p>The·close·function·is·called·when·a·document·(either·the·main·document·or·an |
| 210 | external·DTD)·has·been·completely·parsed.·When·xmerl_scan·was·started·using | 210 | external·DTD)·has·been·completely·parsed.·When·xmerl_scan·was·started·using |
| 211 | <code·class="inline">xmerl_scan:file/[1,2]</code>,·the·file·will·be·read·in·full,·and·closed·immediately, | 211 | <code·class="inline">xmerl_scan:file/[1,2]</code>,·the·file·will·be·read·in·full,·and·closed·immediately, |
| 212 | before·the·parsing·starts,·so·when·the·close·function·is·called,·it·will·not | 212 | before·the·parsing·starts,·so·when·the·close·function·is·called,·it·will·not |
| 213 | need·to·actually·close·the·file.·In·this·case,·the·close·function·will·be·a·good | 213 | need·to·actually·close·the·file.·In·this·case,·the·close·function·will·be·a·good |
| 214 | place·to·modify·the·state·variables.</p><p>Format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id=" | 214 | place·to·modify·the·state·variables.</p><p>Format·and·semantics:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">fun</span><span·class="p"·data-group-id="9519767018-1">(</span><span·class="n">GlobalState</span><span·class="p"·data-group-id="9519767018-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 215 | ···</span><span·class="n">GlobalState1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%·state·variables·may·be·altered</span></code></pre><h3·id="2-examples"·class="section-heading"> | 215 | ···</span><span·class="n">GlobalState1</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w">··</span><span·class="c1">%·state·variables·may·be·altered</span></code></pre><h3·id="2-examples"·class="section-heading"> |
| 216 | ··<a·href="#2-examples"·class="hover-link"> | 216 | ··<a·href="#2-examples"·class="hover-link"> |
| 217 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 217 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 218 | ··</a> | 218 | ··</a> |
| 219 | ··<span·class="text">2·Examples</span> | 219 | ··<span·class="text">2·Examples</span> |
| 220 | </h3> | 220 | </h3> |
| 221 | <p>See·<code·class="inline">xmerl_test.erl</code>·for·more·examples.</p><h4>2.1·Handling·spaces</h4><p>The·following·sample·program·illustrates·three·ways·of·scanning·a·document:</p><ol><li>·the·default·scan,·which·leaves·whitespace·untouched</li><li>·normalizing·spaces</li><li>·normalizing·spaces,·then·removing·text·elements·that·only·contain·one·space.</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id=" | 221 | <p>See·<code·class="inline">xmerl_test.erl</code>·for·more·examples.</p><h4>2.1·Handling·spaces</h4><p>The·following·sample·program·illustrates·three·ways·of·scanning·a·document:</p><ol><li>·the·default·scan,·which·leaves·whitespace·untouched</li><li>·normalizing·spaces</li><li>·normalizing·spaces,·then·removing·text·elements·that·only·contain·one·space.</li></ol><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">module</span><span·class="p"·data-group-id="8615853962-1">(</span><span·class="ss">tmp</span><span·class="p"·data-group-id="8615853962-1">)</span><span·class="p">.</span><span·class="w"> |
| 222 | </span><span·class="w"> | 222 | </span><span·class="w"> |
| 223 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 223 | </span><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="8615853962-2">(</span><span·class="s">"xmerl.hrl"</span><span·class="p"·data-group-id="8615853962-2">)</span><span·class="p">.</span><span·class="w"> |
| 224 | </span><span·class="w"> | 224 | </span><span·class="w"> |
| 225 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id=" | 225 | </span><span·class="p">-</span><span·class="na">export</span><span·class="p"·data-group-id="8615853962-3">(</span><span·class="p"·data-group-id="8615853962-4">[</span><span·class="ss">file1</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">file2</span><span·class="p">/</span><s[·...·truncated·by·diffoscope;·len:·243,·SHA:·c81c33d19666cb7649f0199cf8054010d82461e9d55e2c818d2b4044cd941c02·...·]-3">)</span><span·class="p">.</span><span·class="w"> |
| 226 | </span><span·class="nf">file1</span><span·class="p"·data-group-id=" | 226 | </span><span·class="nf">file1</span><span·class="p"·data-group-id="8615853962-5">(</span><span·class="n">F</span><span·class="p"·data-group-id="8615853962-5">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">file</[·...·truncated·by·diffoscope;·len:·123,·SHA:·873757ad25b7222cd7e967506107cd0aedafbcaebdfeee605970d7ed5a05b04f·...·]-6">)</span><span·class="p">.</span><span·class="w"> |
| 227 | </span><span·class="nf">file2</span><span·class="p"·data-group-id=" | 227 | </span><span·class="nf">file2</span><span·class="p"·data-group-id="8615853962-7">(</span><span·class="n">F</span><span·class="p"·data-group-id="8615853962-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">file</[·...·truncated·by·diffoscope;·len:·471,·SHA:·5b85367b65877f844699db30c34fb71bfa2cd51b4a15d79fc853ade83474b7ee·...·]-8">)</span><span·class="p">.</span><span·class="w"> |
| 228 | </span><span·class="nf">file3</span><span·class="p"·data-group-id=" | 228 | </span><span·class="nf">file3</span><span·class="p"·data-group-id="8615853962-11">(</span><span·class="n">F</span><span·class="p"·data-group-id="8615853962-11">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w">·</span><span·class="n">Acc</span><span·class="w">·</span><span·class="o">=</span><span[·...·truncated·by·diffoscope;·len:·888,·SHA:·5bc7da4a352f6df87986cef008f510bced3311c5650b86bab0e98f34f3dea508·...·]-14">{</span><span·class="n">Acc</span><span·class="p">,</span><span·class="w">·</span><span·class="n">P</span><span·class="p">,</span><span·class="w"> |
| 229 | </span><span·class="n">S</span><span·class="p"·data-group-id=" | 229 | </span><span·class="n">S</span><span·class="p"·data-group-id="8615853962-14">}</span><span·class="p">;</span><span·class="w">·</span><span·class="c1">%·new·return·format·(X,·Acc,·S)·->·{[X|Acc],·S}·end,·xmerl_scan:file(F,</span><span·class="w"> |
| 230 | </span><span·class="p"·data-group-id=" | 230 | </span><span·class="p"·data-group-id="8615853962-15">[</span><span·class="p"·data-group-id="8615853962-16">{</span><span·class="ss">space</span><span·class="p">,</span><span·class="ss">normalize</span><span·class="p"·data-group-id="8615853962-16">}</span><span·class="p">,</span><span·class="w"[·...·truncated·by·diffoscope;·len:·263,·SHA:·5586d20d4f1f43db08a33ed38417a92599b23fafbe965893126af08c771fe8d5·...·]-15">]</span><span·class="p">)</span><span·class="p">.</span></code></pre> |
| 231 | </div> | 231 | </div> |
| 232 | <div·class="bottom-actions"·id="bottom-actions"> | 232 | <div·class="bottom-actions"·id="bottom-actions"> |
| 233 | ··<div·class="bottom-actions-item"> | 233 | ··<div·class="bottom-actions-item"> |
| 234 | ······<a·href="xmerl_ug.html"·class="bottom-actions-button"·rel="prev"> | 234 | ······<a·href="xmerl_ug.html"·class="bottom-actions-button"·rel="prev"> |
| 235 | ········<span·class="subheader"> | 235 | ········<span·class="subheader"> |
| Offset 274, 15 lines modified | Offset 274, 15 lines modified | ||
| 274 | ······<p·class="built-using"> | 274 | ······<p·class="built-using"> |
| 275 | ········Built·using | 275 | ········Built·using |
| 276 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 276 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 277 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 277 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 278 | ······</p> | 278 | ······</p> |
| 279 | <p>Copyright·©·1996-202 | 279 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 280 | ····</footer> | 280 | ····</footer> |
| 281 | ··</div> | 281 | ··</div> |
| 282 | </main> | 282 | </main> |
| 283 | </div> | 283 | </div> |
| 284 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 284 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 285 | ··<script> | 285 | ··<script> |
| 286 | ··let·initialized·=·false; | 286 | ··let·initialized·=·false; |
| Offset 771, 15 lines modified | Offset 771, 15 lines modified | ||
| 771 | ······<p·class="built-using"> | 771 | ······<p·class="built-using"> |
| 772 | ········Built·using | 772 | ········Built·using |
| 773 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 773 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 774 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 774 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 775 | ······</p> | 775 | ······</p> |
| 776 | <p>Copyright·©·1996-202 | 776 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 777 | ····</footer> | 777 | ····</footer> |
| 778 | ··</div> | 778 | ··</div> |
| 779 | </main> | 779 | </main> |
| 780 | </div> | 780 | </div> |
| 781 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 781 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 782 | ··<script> | 782 | ··<script> |
| 783 | ··let·initialized·=·false; | 783 | ··let·initialized·=·false; |
| Offset 1099, 15 lines modified | Offset 1099, 15 lines modified | ||
| 1099 | ······<p·class="built-using"> | 1099 | ······<p·class="built-using"> |
| 1100 | ········Built·using | 1100 | ········Built·using |
| 1101 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 1101 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 1102 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 1102 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 1103 | ······</p> | 1103 | ······</p> |
| 1104 | <p>Copyright·©·1996-202 | 1104 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 1105 | ····</footer> | 1105 | ····</footer> |
| 1106 | ··</div> | 1106 | ··</div> |
| 1107 | </main> | 1107 | </main> |
| 1108 | </div> | 1108 | </div> |
| 1109 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 1109 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 1110 | ··<script> | 1110 | ··<script> |
| 1111 | ··let·initialized·=·false; | 1111 | ··let·initialized·=·false; |
| Offset 189, 24 lines modified | Offset 189, 24 lines modified | ||
| 189 | first·element·in·each·tuple·is·the·name·of·the·parent·element.·The·list·is·in | 189 | first·element·in·each·tuple·is·the·name·of·the·parent·element.·The·list·is·in |
| 190 | reverse·order.</p><p>The·record·<code·class="inline">#xmlAttribute{}</code>·holds·the·name·and·value·of·an·attribute | 190 | reverse·order.</p><p>The·record·<code·class="inline">#xmlAttribute{}</code>·holds·the·name·and·value·of·an·attribute |
| 191 | in·the·fields·<code·class="inline">name</code>·and·<code·class="inline">value</code>.·All·attributes·of·an·element·is·a·list·of | 191 | in·the·fields·<code·class="inline">name</code>·and·<code·class="inline">value</code>.·All·attributes·of·an·element·is·a·list·of |
| 192 | <code·class="inline">#xmlAttribute{}</code>·in·the·field·<code·class="inline">attributes</code>·of·the·<code·class="inline">#xmlElement{}</code>·record.</p><p>The·<code·class="inline">content</code>·field·of·the·top·element·is·a·list·of·records·that·shows·the | 192 | <code·class="inline">#xmlAttribute{}</code>·in·the·field·<code·class="inline">attributes</code>·of·the·<code·class="inline">#xmlElement{}</code>·record.</p><p>The·<code·class="inline">content</code>·field·of·the·top·element·is·a·list·of·records·that·shows·the |
| 193 | structure·and·data·of·the·document.·If·it·is·a·simple·document·like:</p><pre><code·class="text"><?xml·version="1.0"?> | 193 | structure·and·data·of·the·document.·If·it·is·a·simple·document·like:</p><pre><code·class="text"><?xml·version="1.0"?> |
| 194 | <dog> | 194 | <dog> |
| 195 | Grand·Danois | 195 | Grand·Danois |
| 196 | </dog></code></pre><p>The·parse·result·will·be:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="9 | 196 | </dog></code></pre><p>The·parse·result·will·be:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="9532151182-1">{</span><span·class="ss">name</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="ss">dog</span><span·class="p">,</span><span·class="w"> |
| 197 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 197 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 198 | ············</span><span·class="ss">parents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 198 | ············</span><span·class="ss">parents</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9532151182-2">[</span><span·class="p"·data-group-id="9532151182-2">]</span><span·class="p">,</span><span·class="w"> |
| 199 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 199 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 200 | ············</span><span·class="ss">attributes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 200 | ············</span><span·class="ss">attributes</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9532151182-3">[</span><span·class="p"·data-group-id="9532151182-3">]</span><span·class="p">,</span><span·class="w"> |
| 201 | ············</span><span·class="ss">content</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9 | 201 | ············</span><span·class="ss">content</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="p"·data-group-id="9532151182-4">[</span><span·class="p"·data-group-id="9532151182-5">{</span><span·class="ss">xmlText</span><span·class="p">,</span><span·class="p"·data-group-id="9532151182-6">[</span><span·class="p"·data-group-id="9532151182-7">{</span><span·class="ss">dog<[·...·truncated·by·diffoscope;·len:·328,·SHA:·ffb8604eec0f3b7e9022e8671024430546f96e1f777b06f367ee36da7884013f·...·]-8">]</span><span·class="p">,</span><span·class="s">"\ |
| 202 | Grand·Danois\ | 202 | Grand·Danois\ |
| 203 | "</span><span·class="p">,</span><span·class="ss">text</span><span·class="p"·data-group-id="9 | 203 | "</span><span·class="p">,</span><span·class="ss">text</span><span·class="p"·data-group-id="9532151182-5">}</span><span·class="p"·data-group-id="9532151182-4">]</span><span·class="p">,</span><span·class="w"> |
| 204 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 204 | ············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 205 | ············</span><span·class="p"·data-group-id="9 | 205 | ············</span><span·class="p"·data-group-id="9532151182-1">}</span></code></pre><p>Where·the·content·of·the·top·element·is: |
| 206 | <code·class="inline">[{xmlText,[{dog,1}],1,[],"\·Grand·Danois\·",text}]</code>.·Text·will·be·returned·in | 206 | <code·class="inline">[{xmlText,[{dog,1}],1,[],"\·Grand·Danois\·",text}]</code>.·Text·will·be·returned·in |
| 207 | <code·class="inline">xmlText</code>·records.·Though,·usually·documents·are·more·complex,·and·the·content | 207 | <code·class="inline">xmlText</code>·records.·Though,·usually·documents·are·more·complex,·and·the·content |
| 208 | of·the·top·element·will·in·that·case·be·a·nested·structure·with·<code·class="inline">#xmlElement{}</code> | 208 | of·the·top·element·will·in·that·case·be·a·nested·structure·with·<code·class="inline">#xmlElement{}</code> |
| 209 | records·that·in·turn·may·have·complex·content.·All·of·this·reflects·the | 209 | records·that·in·turn·may·have·complex·content.·All·of·this·reflects·the |
| 210 | structure·of·the·XML·document.</p><p>Space·characters·between·mark-up·as·<code·class="inline">space</code>,·<code·class="inline">tab</code>·and·<code·class="inline">line·feed</code>·are | 210 | structure·of·the·XML·document.</p><p>Space·characters·between·mark-up·as·<code·class="inline">space</code>,·<code·class="inline">tab</code>·and·<code·class="inline">line·feed</code>·are |
| 211 | normalized·and·returned·as·xmlText·records.</p><h3·id="errors"·class="section-heading"> | 211 | normalized·and·returned·as·xmlText·records.</p><h3·id="errors"·class="section-heading"> |
| 212 | ··<a·href="#errors"·class="hover-link"> | 212 | ··<a·href="#errors"·class="hover-link"> |
| Offset 267, 49 lines modified | Offset 267, 49 lines modified | ||
| 267 | <!--·Date·of·the·format·yyyy.mm.dd·--> | 267 | <!--·Date·of·the·format·yyyy.mm.dd·--> |
| 268 | <!ELEMENT·date··············(#PCDATA)> | 268 | <!ELEMENT·date··············(#PCDATA)> |
| 269 | <!ATTLIST··bike·year·NMTOKEN·#REQUIRED | 269 | <!ATTLIST··bike·year·NMTOKEN·#REQUIRED |
| 270 | ················color·NMTOKENS·#REQUIRED | 270 | ················color·NMTOKENS·#REQUIRED |
| 271 | ················condition·(useless·|·bad·|·serviceable·|·moderate·|·good·| | 271 | ················condition·(useless·|·bad·|·serviceable·|·moderate·|·good·| |
| 272 | ···························excellent·|·new·|·outstanding)·"excellent"·></code></pre><p>If·you·want·to·parse·the·XML·file·motorcycles.xml·you·run·it·in·the·Erlang·shell | 272 | ···························excellent·|·new·|·outstanding)·"excellent"·></code></pre><p>If·you·want·to·parse·the·XML·file·motorcycles.xml·you·run·it·in·the·Erlang·shell |
| 273 | like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="p"·data-group-id=" | 273 | like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="gp·unselectable">3>·</span><span·class="p"·data-group-id="2198408518-1">{</span><span·class="n">ParseResult</span><span·class="p">,</span><span·class="n">Misc</span><span·class="p"·data-group-id="2198408518-1">}</span><span·class="o">=</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="n[·...·truncated·by·diffoscope;·len:·158,·SHA:·34f271879cbabf0bbd9f149c342d41e3d82d6f4ca2f230b3ae6455d8ae938f0a·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 274 | </span><span·class="p"·data-group-id=" | 274 | </span><span·class="p"·data-group-id="2198408518-3">{</span><span·class="p"·data-group-id="2198408518-4">{</span><span·class="ss">xmlElement</span><span·class="p">,</span><span·class="ss">motorcycles</span><span·class="p">,</span><span·class="w"> |
| 275 | ·············</span><span·class="ss">motorcycles</span><span·class="p">,</span><span·class="w"> | 275 | ·············</span><span·class="ss">motorcycles</span><span·class="p">,</span><span·class="w"> |
| 276 | ·············</span><span·class="p"·data-group-id=" | 276 | ·············</span><span·class="p"·data-group-id="2198408518-5">[</span><span·class="p"·data-group-id="2198408518-5">]</span><span·class="p">,</span><span·class="w"> |
| 277 | ·············</span><span·class="p"·data-group-id=" | 277 | ·············</span><span·class="p"·data-group-id="2198408518-6">{</span><span·class="ss">xmlNamespace</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-7">[</span><span·class="p"·data-group-id="2198408518-7">]</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-8"[·...·truncated·by·diffoscope;·len:·103,·SHA:·7b31daf1f6f238036d7afb9a636084390391bc41b80b3c1401a3330eb2c13cf6·...·]-6">}</span><span·class="p">,</span><span·class="w"> |
| 278 | ·············</span><span·class="p"·data-group-id=" | 278 | ·············</span><span·class="p"·data-group-id="2198408518-9">[</span><span·class="p"·data-group-id="2198408518-9">]</span><span·class="p">,</span><span·class="w"> |
| 279 | ·············</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 279 | ·············</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 280 | ·············</span><span·class="p"·data-group-id=" | 280 | ·············</span><span·class="p"·data-group-id="2198408518-10">[</span><span·class="p"·data-group-id="2198408518-10">]</span><span·class="p">,</span><span·class="w"> |
| 281 | ·············</span><span·class="p"·data-group-id=" | 281 | ·············</span><span·class="p"·data-group-id="2198408518-11">[</span><span·class="p"·data-group-id="2198408518-12">{</span><span·class="ss">xmlText</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-13">[</span><span·class="p"·data-group-id="2198408518-14">{</span><span·class="ss"[·...·truncated·by·diffoscope;·len:·344,·SHA:·96670a67da560423e1e3b2fed6e00145a6bda34a84960d071ca5bf91d7f38c61·...·]-15">]</span><span·class="p">,</span><span·class="s">"\ |
| 282 | ··"</span><span·class="p">,</span><span·class="ss">text</span><span·class="p"·data-group-id=" | 282 | ··"</span><span·class="p">,</span><span·class="ss">text</span><span·class="p"·data-group-id="2198408518-12">}</span><span·class="p">,</span><span·class="w"> |
| 283 | ··············</span><span·class="p"·data-group-id=" | 283 | ··············</span><span·class="p"·data-group-id="2198408518-16">{</span><span·class="ss">xmlElement</span><span·class="p">,</span><span·class="ss">bike</span><span·class="p">,</span><span·class="w"> |
| 284 | ··························</span><span·class="ss">bike</span><span·class="p">,</span><span·class="w"> | 284 | ··························</span><span·class="ss">bike</span><span·class="p">,</span><span·class="w"> |
| 285 | ··························</span><span·class="p"·data-group-id=" | 285 | ··························</span><span·class="p"·data-group-id="2198408518-17">[</span><span·class="p"·data-group-id="2198408518-17">]</span><span·class="p">,</span><span·class="w"> |
| 286 | ··························</span><span·class="p"·data-group-id=" | 286 | ··························</span><span·class="p"·data-group-id="2198408518-18">{</span><span·class="ss">xmlNamespace</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-19">[</span><span·class="p"·data-group-id="2198408518-19">]</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518[·...·truncated·by·diffoscope;·len:·108,·SHA:·457a062b6f13b2f8d95bea521c22aa5e3da5e8e1836c639b15aa5123051b67cc·...·]-18">}</span><span·class="p">,</span><span·class="w"> |
| 287 | ··························</span><span·class="p"·data-group-id=" | 287 | ··························</span><span·class="p"·data-group-id="2198408518-21">[</span><span·class="p"·data-group-id="2198408518-22">{</span><span·class="ss">motorcycles</span><span·class="p">,</span><span·class="mi">1</span><span·class="p"·data-group-id="2198408518-22">}</span><span·class="p"·data-group-id="2198408518-21">]</span><span·class="p">,</span><span·class="w"> |
| 288 | ··························</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> | 288 | ··························</span><span·class="mi">2</span><span·class="p">,</span><span·class="w"> |
| 289 | ··························</span><span·class="p"·data-group-id=" | 289 | ··························</span><span·class="p"·data-group-id="2198408518-23">[</span><span·class="p"·data-group-id="2198408518-24">{</span><span·class="ss">xmlAttribute</span><span·class="p">,</span><span·class="ss">year</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-25">[</span><span·class="[·...·truncated·by·diffoscope;·len:·574,·SHA:·49b89155561e91888bda4ac3573a2f9f9a1be7bb23447371a80920b948a43504·...·]-24">}</span><span·class="p">,</span><span·class="w"> |
| 290 | ···························</span><span·class="p"·data-group-id=" | 290 | ···························</span><span·class="p"·data-group-id="2198408518-29">{</span><span·class="ss">xmlAttribute</span><span·class="p">,</span><span·class="ss">color</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-30">[</span><span·class="p"·data-group-id="2198408518-30">]</span><span·class=[·...·truncated·by·diffoscope;·len:·443,·SHA:·932fb8bc430434a2719c8fe8404bbd798e96b655af6886e666707b71d6761aa6·...·]-23">]</span><span·class="p">,</span><span·class="w"> |
| 291 | ··························</span><span·class="p"·data-group-id=" | 291 | ··························</span><span·class="p"·data-group-id="2198408518-33">[</span><span·class="p"·data-group-id="2198408518-34">{</span><span·class="ss">xmlText</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-35">[</span><span·class="p"·data-group-id="2198408518-36">{</span><span·class="ss"[·...·truncated·by·diffoscope;·len:·419,·SHA:·bedaaf7af2b330ac24ed8760f1bc920cc51202c5701a79bf650958cb3374db50·...·]-35">]</span><span·class="p">,</span><span·class="w"> |
| 292 | ····································</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> | 292 | ····································</span><span·class="mi">1</span><span·class="p">,</span><span·class="w"> |
| 293 | ····································</span><span·class="p"·data-group-id=" | 293 | ····································</span><span·class="p"·data-group-id="2198408518-38">[</span><span·class="p"·data-group-id="2198408518-38">]</span><span·class="p">|</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2198408518-34">}</span><span·class="p">,</span><span·class="w"> |
| 294 | ···························</span><span·class="p"·data-group-id=" | 294 | ···························</span><span·class="p"·data-group-id="2198408518-39">{</span><span·class="ss">xmlElement</span><span·class="p">,</span><span·class="ss">name</span><span·class="p">,</span><span·class="ss">name</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-40">[</span><span·class="p"·d[·...·truncated·by·diffoscope;·len:·174,·SHA:·f51f80586e08110dbbc52d1a29878314aa356f7774c53f0b8dad709de15f9dfe·...·]-39">}</span><span·class="p">,</span><span·class="w"> |
| 295 | ···························</span><span·class="p"·data-group-id=" | 295 | ···························</span><span·class="p"·data-group-id="2198408518-41">{</span><span·class="ss">xmlText</span><span·class="p">,</span><span·class="p"·data-group-id="2198408518-42">[</span><span·class="p"·data-group-id="2198408518-43">{</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</spa[·...·truncated·by·diffoscope;·len:·392,·SHA:·a2b6a1025a23bfa180c40829fe34467aa92d25e39b6f8940f448d6a5e7d60492·...·]-41">}</span><span·class="p">,</span><span·class="w"> |
| 296 | ···························</span><span·class="p"·data-group-id=" | 296 | ···························</span><span·class="p"·data-group-id="2198408518-44">{</span><span·class="ss">xmlElement</span><span·class="p">,</span><span·class="ss">engine</span><span·class="p">|</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2198408518-44">}</span><span·class="p">,</span><span·class="w"> |
| 297 | ···························</span><span·class="p"·data-group-id=" | 297 | ···························</span><span·class="p"·data-group-id="2198408518-45">{</span><span·class="ss">xmlText</span><span·class="p">|</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2198408518-45">}</span><span·class="p">,</span><span·class="w"> |
| 298 | ···························</span><span·class="p"·data-group-id=" | 298 | ···························</span><span·class="p"·data-group-id="2198408518-46">{</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="p"·data-group-id="2198408518-46">}</span><span·class="p">|</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class[·...·truncated·by·diffoscope;·len:·30,·SHA:·64de0839169c7facf02529576e6570cff70e66f138c73db0381ec52c24e49031·...·]-33">]</span><span·class="p">,</span><span·class="w"> |
| 299 | ··························</span><span·class="p"·data-group-id=" | 299 | ··························</span><span·class="p"·data-group-id="2198408518-47">[</span><span·class="p"·data-group-id="2198408518-47">]</span><span·class="p">,</span><span·class="w"> |
| 300 | ··························</span><span·class="s">"."</span><span·class="p">,</span><span·class="w"> | 300 | ··························</span><span·class="s">"."</span><span·class="p">,</span><span·class="w"> |
| 301 | ··························</span><span·class="ss">undeclared</span><span·class="p"·data-group-id=" | 301 | ··························</span><span·class="ss">undeclared</span><span·class="p"·data-group-id="2198408518-16">}</span><span·class="p">,</span><span·class="w"> |
| 302 | ··············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> | 302 | ··············</span><span·class="p">.</span><span·class="p">.</span><span·class="p">.</span><span·class="w"> |
| 303 | ··············</span><span·class="p"·data-group-id=" | 303 | ··············</span><span·class="p"·data-group-id="2198408518-11">]</span><span·class="p">,</span><span·class="w"> |
| 304 | ·············</span><span·class="p"·data-group-id=" | 304 | ·············</span><span·class="p"·data-group-id="2198408518-48">[</span><span·class="p"·data-group-id="2198408518-48">]</span><span·class="p">,</span><span·class="w"> |
| 305 | ·············</span><span·class="s">"."</span><span·class="p">,</span><span·class="w"> | 305 | ·············</span><span·class="s">"."</span><span·class="p">,</span><span·class="w"> |
| 306 | ·············</span><span·class="ss">undeclared</span><span·class="p"·data-group-id=" | 306 | ·············</span><span·class="ss">undeclared</span><span·class="p"·data-group-id="2198408518-4">}</span><span·class="p">,</span><span·class="w"> |
| 307 | ·</span><span·class="p"·data-group-id=" | 307 | ·</span><span·class="p"·data-group-id="2198408518-49">[</span><span·class="p"·data-group-id="2198408518-49">]</span><span·class="p"·data-group-id="2198408518-3">}</span><span·class="w"> |
| 308 | </span><span·class="mi">4</span><span·class="o">></span></code></pre><p>If·you·instead·receives·the·XML·doc·as·a·string·you·can·parse·it·by | 308 | </span><span·class="mi">4</span><span·class="o">></span></code></pre><p>If·you·instead·receives·the·XML·doc·as·a·string·you·can·parse·it·by |
| 309 | <a·href="xmerl_scan.html#string/1"><code·class="inline">xmerl_scan:string/1</code></a>.·Both·file/2·and·string/2·exists·where·the·second·argument | 309 | <a·href="xmerl_scan.html#string/1"><code·class="inline">xmerl_scan:string/1</code></a>.·Both·file/2·and·string/2·exists·where·the·second·argument |
| 310 | is·a·list·of·options·to·the·parser,·see·the·<a·href="xmerl_scan.html">reference·manual</a>.</p><h2·id="example-extracting-data-from-xml-content"·class="section-heading"> | 310 | is·a·list·of·options·to·the·parser,·see·the·<a·href="xmerl_scan.html">reference·manual</a>.</p><h2·id="example-extracting-data-from-xml-content"·class="section-heading"> |
| 311 | ··<a·href="#example-extracting-data-from-xml-content"·class="hover-link"> | 311 | ··<a·href="#example-extracting-data-from-xml-content"·class="hover-link"> |
| 312 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 312 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 313 | ··</a> | 313 | ··</a> |
| 314 | ··<span·class="text">Example:·Extracting·Data·From·XML·Content</span> | 314 | ··<span·class="text">Example:·Extracting·Data·From·XML·Content</span> |
| Offset 338, 30 lines modified | Offset 338, 30 lines modified | ||
| 338 | fields·of·the·appropriate·element.</p><p>There·is·support·for·this·in·Xmerl·by·the·"simple-form"·format.·You·can·put·your | 338 | fields·of·the·appropriate·element.</p><p>There·is·support·for·this·in·Xmerl·by·the·"simple-form"·format.·You·can·put·your |
| 339 | data·in·a·simple-form·data·structure·and·feed·it·into | 339 | data·in·a·simple-form·data·structure·and·feed·it·into |
| 340 | <code·class="inline">xmerl:export_simple(Content,Callback,RootAttributes)</code>.·Content·may·be·a·mixture | 340 | <code·class="inline">xmerl:export_simple(Content,Callback,RootAttributes)</code>.·Content·may·be·a·mixture |
| 341 | of·simple-form·and·Xmerl·records·as·<code·class="inline">#xmlElement{}</code>·and·<code·class="inline">#xmlText{}</code>.</p><p>The·Types·are:</p><ul><li>Content·=·[Element]</li><li>Callback·=·atom()</li><li>RootAttributes·=·[Attributes]</li></ul><p>Element·is·any·of:</p><ul><li>{Tag,·Attributes,·Content}</li><li>{Tag,·Content}</li><li>Tag</li><li>IOString</li><li>#xmlText{}</li><li>#xmlElement{}</li><li>#xmlPI{}</li><li>#xmlComment{}</li><li>#xmlDecl{}</li></ul><p>The·simple-form·structure·is·any·of·<code·class="inline">{Tag,·Attributes,·Content}</code>, | 341 | of·simple-form·and·Xmerl·records·as·<code·class="inline">#xmlElement{}</code>·and·<code·class="inline">#xmlText{}</code>.</p><p>The·Types·are:</p><ul><li>Content·=·[Element]</li><li>Callback·=·atom()</li><li>RootAttributes·=·[Attributes]</li></ul><p>Element·is·any·of:</p><ul><li>{Tag,·Attributes,·Content}</li><li>{Tag,·Content}</li><li>Tag</li><li>IOString</li><li>#xmlText{}</li><li>#xmlElement{}</li><li>#xmlPI{}</li><li>#xmlComment{}</li><li>#xmlDecl{}</li></ul><p>The·simple-form·structure·is·any·of·<code·class="inline">{Tag,·Attributes,·Content}</code>, |
| 342 | <code·class="inline">{Tag,·Content}</code>·or·<code·class="inline">Tag</code>·where:</p><ul><li>Tag·=·atom()</li><li>Attributes·=·[{Name,·Value}|·#xmlAttribute{}]</li><li>Name·=·atom()</li><li><p>Value·=·IOString·|·atom()·|·integer()</p></li></ul><p>See·also·reference·manual·for·<a·href="xmerl.html#export_simple/3">xmerl</a></p><p>If·you·want·to·add·the·information·about·a·black·Harley·Davidsson·1200·cc | 342 | <code·class="inline">{Tag,·Content}</code>·or·<code·class="inline">Tag</code>·where:</p><ul><li>Tag·=·atom()</li><li>Attributes·=·[{Name,·Value}|·#xmlAttribute{}]</li><li>Name·=·atom()</li><li><p>Value·=·IOString·|·atom()·|·integer()</p></li></ul><p>See·also·reference·manual·for·<a·href="xmerl.html#export_simple/3">xmerl</a></p><p>If·you·want·to·add·the·information·about·a·black·Harley·Davidsson·1200·cc |
| 343 | Sportster·motorcycle·from·2003·that·is·in·shape·as·new·in·the·motorcycles.xml | 343 | Sportster·motorcycle·from·2003·that·is·in·shape·as·new·in·the·motorcycles.xml |
| 344 | document·you·can·put·the·data·in·a·simple-form·data·structure·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 344 | document·you·can·put·the·data·in·a·simple-form·data·structure·like:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 345 | ··</span><span·class="p"·data-group-id="5 | 345 | ··</span><span·class="p"·data-group-id="2505739899-1">{</span><span·class="ss">bike</span><span·class="p">,</span><span·class="w"> |
| 346 | ·····</span><span·class="p"·data-group-id="5 | 346 | ·····</span><span·class="p"·data-group-id="2505739899-2">[</span><span·class="p"·data-group-id="2505739899-3">{</span><span·class="ss">year</span><span·class="p">,</span><span·class="s">"2003"</span><span·class="p"·data-group-id="2505739899-3">}</span><span·class="p">,</span><span·class="[·...·truncated·by·diffoscope;·len:·452,·SHA:·b11fa2dd95e5c7a3a10f0f9fd43560820f65af7e3138ba788956c898e04599bf·...·]-2">]</span><span·class="p">,</span><span·class="w"> |
| 347 | ·····</span><span·class="p"·data-group-id="5 | 347 | ·····</span><span·class="p"·data-group-id="2505739899-6">[</span><span·class="p"·data-group-id="2505739899-7">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="w"> |
| 348 | ·········</span><span·class="p"·data-group-id="5 | 348 | ·········</span><span·class="p"·data-group-id="2505739899-8">[</span><span·class="p"·data-group-id="2505739899-9">{</span><span·class="ss">manufacturer</span><span·class="p">,</span><span·class="p"·data-group-id="2505739899-10">[</span><span·class="s">"Harley·Davidsson"</span><span·class="p"·[·...·truncated·by·diffoscope;·len:·79,·SHA:·570d8d8236fe677013211bd2f136e290763f933b44e7bfa9b424682c1289101e·...·]-9">}</span><span·class="p">,</span><span·class="w"> |
| 349 | ··········</span><span·class="p"·data-group-id="5 | 349 | ··········</span><span·class="p"·data-group-id="2505739899-11">{</span><span·class="ss">brandName</span><span·class="p">,</span><span·class="p"·data-group-id="2505739899-12">[</span><span·class="s">"XL1200C"</span><span·class="p"·data-group-id="2505739899-12">]</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·aa00ecca5631ae9041dd7042e25da015fc3ff014d832bb564b66a718fa063b46·...·]-11">}</span><span·class="p">,</span><span·class="w"> |
| 350 | ··········</span><span·class="p"·data-group-id="5 | 350 | ··········</span><span·class="p"·data-group-id="2505739899-13">{</span><span·class="ss">additionalName</span><span·class="p">,</span><span·class="p"·data-group-id="2505739899-14">[</span><span·class="s">"Sportster"</span><span·class="p"·data-group-id="2505739899-14">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·129,·SHA:·a649df3f00005dac6218ff68b73b5ff40c65f166abcdf14a156ba9c015414d31·...·]-7">}</span><span·class="p">,</span><span·class="w"> |
| 351 | ······</span><span·class="p"·data-group-id="5 | 351 | ······</span><span·class="p"·data-group-id="2505739899-15">{</span><span·class="ss">engine</span><span·class="p">,</span><span·class="w"> |
| 352 | ·········</span><span·class="p"·data-group-id="5 | 352 | ·········</span><span·class="p"·data-group-id="2505739899-16">[</span><span·class="s">"V-engine,·2-cylinders,·1200·cc"</span><span·class="p"·data-group-id="2505739899-16">]</span><span·class="p"·data-group-id="2505739899-15">}</span><span·class="p">,</span><span·class="w"> |
| 353 | ······</span><span·class="p"·data-group-id="5 | 353 | ······</span><span·class="p"·data-group-id="2505739899-17">{</span><span·class="ss">kind</span><span·class="p">,</span><span·class="p"·data-group-id="2505739899-18">[</span><span·class="s">"custom"</span><span·class="p"·data-group-id="2505739899-18">]</span><span·class="p"·data-group-id="2[·...·truncated·by·diffoscope;·len:·9,·SHA:·cc2af5f64c2d8e1af099ed4c2438dde7ccb36b0115e2b17cbbcb0d73ae337125·...·]-17">}</span><span·class="p">,</span><span·class="w"> |
| 354 | ······</span><span·class="p"·data-group-id="5 | 354 | ······</span><span·class="p"·data-group-id="2505739899-19">{</span><span·class="ss">drive</span><span·class="p">,</span><span·class="p"·data-group-id="2505739899-20">[</span><span·class="s">"belt"</span><span·class="p"·data-group-id="2505739899-20">]</span><span·class="p"·data-group-id="25[·...·truncated·by·diffoscope;·len:·115,·SHA:·9876695aa6847044aaf86b440d304490989eb17e6a9358d6a466023ecbe6d01d·...·]-1">}</span></code></pre><p>In·order·to·append·this·data·to·the·end·of·the·motorcycles.xml·document·you·have |
| 355 | to·parse·the·file·and·add·Data·to·the·end·of·the·root·element·content.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id=" | 355 | to·parse·the·file·and·add·Data·to·the·end·of·the·root·element·content.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="p"·data-group-id="6439088486-1">{</span><span·class="n">RootEl</span><span·class="p">,</span><span·class="n">Misc</span><span·class="p"·data-group-id="6439088486-1">}</span><span·class="o">=</span><span·class="nc">xmerl_scan</span><span·class="p">:</span><span·class="nf">fi[·...·truncated·by·diffoscope;·len:·152,·SHA:·2d5bc90f2b9c14aa233b63cef1773233001e0548d5036d64e549923d5f38e2a8·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 356 | ····</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id=" | 356 | ····</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="6439088486-3">{</span><span·class="ss">content</span><span·class="o">=</span><span·class="n">Content</span><span·class="p"·data-group-id="6439088486-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="n">RootEl</span><span·class="p">,</span><span·class="w"> |
| 357 | ····</span><span·class="n">NewContent</span><span·class="o">=</span><span·class="n">Content</span><span·class="o">++</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id=" | 357 | ····</span><span·class="n">NewContent</span><span·class="o">=</span><span·class="n">Content</span><span·class="o">++</span><span·class="nc">lists</span><span·class="p">:</span><span·class="nf">flatten</span><span·class="p"·data-group-id="6439088486-4">(</span><span·class="p"·data-group-id="6439088486-5">[</span><span·class="n">Data</span><span·class="p"·data-group-id="6439088486-5">]</span><span·class="p"·data-group-id="6439088486-4">)</span><span·class="p">,</span><span·class="w"> |
| 358 | ····</span><span·class="n">NewRootEl</span><span·class="o">=</span><span·class="n">RootEl</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id=" | 358 | ····</span><span·class="n">NewRootEl</span><span·class="o">=</span><span·class="n">RootEl</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="6439088486-6">{</span><span·class="ss">content</span><span·class="o">=</span><span·class="n">NewContent</span><span·class="p"·data-group-id="6439088486-6">}</span><span·class="p">,</span></code></pre><p>Then·you·can·run·it·through·the·export_simple/2·funct[·...·truncated·by·diffoscope;·len:·675,·SHA:·995d4819abd9bc5871d95fe0493bd3a65875a9db6a576db2795e254cf489be20·...·]-2">)</span><span·class="p">,</span><span·class="w"> |
| 359 | ····</span><span·class="n">Export</span><span·class="o">=</span><span·class="nc">xmerl</span><span·class="p">:</span><span·class="nf">export_simple</span><span·class="p"·data-group-id=" | 359 | ····</span><span·class="n">Export</span><span·class="o">=</span><span·class="nc">xmerl</span><span·class="p">:</span><span·class="nf">export_simple</span><span·class="p"·data-group-id="4087772976-4">(</span><span·class="p"·data-group-id="4087772976-5">[</span><span·class="n">NewRootEl</span><span·class="p"·data-group-id="4087772976-5">]</span><span·class="p">,</span><span·class="ss">xmerl_xml</span><span·class="p"·data-group-id="40877729[·...·truncated·by·diffoscope;·len:·2,·SHA:·f74efabef12ea619e30b79bddef89cffa9dda494761681ca862cff2871a85980·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 360 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id=" | 360 | ····</span><span·class="nc">io</span><span·class="p">:</span><span·class="nf">format</span><span·class="p"·data-group-id="4087772976-6">(</span><span·class="n">IOF</span><span·class="p">,</span><span·class="s">"</span><span·class="si">~s</span><span·class="si">~n</span><span·class="s">"</span><span·class="p">,</span><span·class="p"·data-group-id="4087772976-7">[</sp[·...·truncated·by·diffoscope;·len:·316,·SHA:·21bd6ec477e1b4737a5e2fc400e4eb5f3a41c4cebec4e6c980d11a2f494f8bca·...·]-6">)</span><span·class="p">,</span></code></pre><p><a·href=""·id="new_motorcyclesxml"></a></p><p>The·result·would·be:</p><pre><code·class="text"> |
| 361 | <?xml·version="1.0"?><motorcycles> | 361 | <?xml·version="1.0"?><motorcycles> |
| 362 | ··<bike·year="2000"·color="black"> | 362 | ··<bike·year="2000"·color="black"> |
| 363 | ····<name> | 363 | ····<name> |
| 364 | ······<manufacturer>Suzuki</manufacturer> | 364 | ······<manufacturer>Suzuki</manufacturer> |
| 365 | ······<brandName>Suzuki·VL·1500</brandName> | 365 | ······<brandName>Suzuki·VL·1500</brandName> |
| 366 | ······<additionalName>Intruder</additionalName> | 366 | ······<additionalName>Intruder</additionalName> |
| 367 | ····</name> | 367 | ····</name> |
| Offset 383, 48 lines modified | Offset 383, 48 lines modified | ||
| 383 | ··</bike> | 383 | ··</bike> |
| 384 | <bike·year="2003"·color="black"·condition="new"><name><manufacturer>Harley·Davidsson</manufacturer><brandName>XL1200C</brandName><additionalName>Sportster</additionalName></name><engine>V-engine,·2-cylinders,·1200·cc</engine><kind>custom</kind><drive>belt</drive></bike></motorcycles></code></pre><p>If·it·is·important·to·get·similar·indentation·and·newlines·as·in·the·original | 384 | <bike·year="2003"·color="black"·condition="new"><name><manufacturer>Harley·Davidsson</manufacturer><brandName>XL1200C</brandName><additionalName>Sportster</additionalName></name><engine>V-engine,·2-cylinders,·1200·cc</engine><kind>custom</kind><drive>belt</drive></bike></motorcycles></code></pre><p>If·it·is·important·to·get·similar·indentation·and·newlines·as·in·the·original |
| 385 | document·you·have·to·add·<code·class="inline">#xmlText{}</code>·records·with·space·and·newline·values·in | 385 | document·you·have·to·add·<code·class="inline">#xmlText{}</code>·records·with·space·and·newline·values·in |
| 386 | appropriate·places.·It·may·also·be·necessary·to·keep·the·original·prolog·where | 386 | appropriate·places.·It·may·also·be·necessary·to·keep·the·original·prolog·where |
| 387 | the·DTD·is·referenced.·If·so,·it·is·possible·to·pass·a·RootAttribute | 387 | the·DTD·is·referenced.·If·so,·it·is·possible·to·pass·a·RootAttribute |
| 388 | <code·class="inline">{prolog,Value}</code>·to·<code·class="inline">export_simple/3</code>.·The·following·example·code·fixes·those | 388 | <code·class="inline">{prolog,Value}</code>·to·<code·class="inline">export_simple/3</code>.·The·following·example·code·fixes·those |
| 389 | changes·in·the·previous·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> | 389 | changes·in·the·previous·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="w">····</span><span·class="n">Data</span><span·class="w">·</span><span·class="o">=</span><span·class="w"> |
| 390 | ······</span><span·class="p"·data-group-id=" | 390 | ······</span><span·class="p"·data-group-id="6516146266-1">[</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-2">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"··"</span><span·class="p"·data-group-id="65161[·...·truncated·by·diffoscope;·len:·5,·SHA:·7c8140fab247827392e19072adf8c32bee637ddb2a4de8102f4f5838afe156c5·...·]-2">}</span><span·class="p">,</span><span·class="w"> |
| 391 | ·······</span><span·class="p"·data-group-id=" | 391 | ·······</span><span·class="p"·data-group-id="6516146266-3">{</span><span·class="ss">bike</span><span·class="p">,</span><span·class="p"·data-group-id="6516146266-4">[</span><span·class="p"·data-group-id="6516146266-5">{</span><span·class="ss">year</span><span·class="p">,</span><span·class="s">"20[·...·truncated·by·diffoscope;·len:·557,·SHA:·695b42d02b8b272e8d982816721cb6f9db49036bd5e4cb83655a66934f61acde·...·]-4">]</span><span·class="p">,</span><span·class="w"> |
| 392 | ·············</span><span·class="p"·data-group-id=" | 392 | ·············</span><span·class="p"·data-group-id="6516146266-8">[</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-9">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"\ |
| 393 | ····"</span><span·class="p"·data-group-id=" | 393 | ····"</span><span·class="p"·data-group-id="6516146266-9">}</span><span·class="p">,</span><span·class="w"> |
| 394 | ··············</span><span·class="p"·data-group-id=" | 394 | ··············</span><span·class="p"·data-group-id="6516146266-10">{</span><span·class="ss">name</span><span·class="p">,</span><span·class="p"·data-group-id="6516146266-11">[</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-12">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"\ |
| 395 | ······"</span><span·class="p"·data-group-id=" | 395 | ······"</span><span·class="p"·data-group-id="6516146266-12">}</span><span·class="p">,</span><span·class="w"> |
| 396 | ·····················</span><span·class="p"·data-group-id=" | 396 | ·····················</span><span·class="p"·data-group-id="6516146266-13">{</span><span·class="ss">manufacturer</span><span·class="p">,</span><span·class="p"·data-group-id="6516146266-14">[</span><span·class="s">"Harley·Davidsson"</span><span·class="p"·data-group-id="6516146266-14">]</span><span·class="p[·...·truncated·by·diffoscope;·len:·27,·SHA:·00a5a3af42eeb585d0c6cada842b3b053334f66f9659484b9e95a6f2e1c5bb3c·...·]-13">}</span><span·class="p">,</span><span·class="w"> |
| 397 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id=" | 397 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-15">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"\ |
| 398 | ······"</span><span·class="p"·data-group-id=" | 398 | ······"</span><span·class="p"·data-group-id="6516146266-15">}</span><span·class="p">,</span><span·class="w"> |
| 399 | ·····················</span><span·class="p"·data-group-id=" | 399 | ·····················</span><span·class="p"·data-group-id="6516146266-16">{</span><span·class="ss">brandName</span><span·class="p">,</span><span·class="p"·data-group-id="6516146266-17">[</span><span·class="s">"XL1200C"</span><span·class="p"·data-group-id="6516146266-17">]</span><span·class="p"·data-group[·...·truncated·by·diffoscope;·len:·15,·SHA:·03c7b19dd67e9ca373273f123d3e779fa3cd7b708d031c2d5a2e19506f98c2c1·...·]-16">}</span><span·class="p">,</span><span·class="w"> |
| 400 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id=" | 400 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-18">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"\ |
| 401 | ······"</span><span·class="p"·data-group-id=" | 401 | ······"</span><span·class="p"·data-group-id="6516146266-18">}</span><span·class="p">,</span><span·class="w"> |
| 402 | ·····················</span><span·class="p"·data-group-id=" | 402 | ·····················</span><span·class="p"·data-group-id="6516146266-19">{</span><span·class="ss">additionalName</span><span·class="p">,</span><span·class="p"·data-group-id="6516146266-20">[</span><span·class="s">"Sportster"</span><span·class="p"·data-group-id="6516146266-20">]</span><span·class="p"·dat[·...·truncated·by·diffoscope;·len:·22,·SHA:·5f92fe3fc3060fa75ac345d1961459dc31859ac75cc77ba415344673a40ebb9c·...·]-19">}</span><span·class="p">,</span><span·class="w"> |
| 403 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id=" | 403 | ·····················</span><span·class="o">#</span><span·class="ss">xmlText</span><span·class="p"·data-group-id="6516146266-21">{</span><span·class="ss">value</span><span·class="o">=</span><span·class="s">"\ |
| Max diff block lines reached; 102636/163616 bytes (62.73%) of diff not shown. | |||
| Offset 490, 15 lines modified | Offset 490, 15 lines modified | ||
| 490 | ······<p·class="built-using"> | 490 | ······<p·class="built-using"> |
| 491 | ········Built·using | 491 | ········Built·using |
| 492 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 492 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 493 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 493 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 494 | ······</p> | 494 | ······</p> |
| 495 | <p>Copyright·©·1996-202 | 495 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 496 | ····</footer> | 496 | ····</footer> |
| 497 | ··</div> | 497 | ··</div> |
| 498 | </main> | 498 | </main> |
| 499 | </div> | 499 | </div> |
| 500 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 500 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 501 | ··<script> | 501 | ··<script> |
| 502 | ··let·initialized·=·false; | 502 | ··let·initialized·=·false; |
| Offset 367, 15 lines modified | Offset 367, 15 lines modified | ||
| 367 | ······<p·class="built-using"> | 367 | ······<p·class="built-using"> |
| 368 | ········Built·using | 368 | ········Built·using |
| 369 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 369 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 370 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 370 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 371 | ······</p> | 371 | ······</p> |
| 372 | <p>Copyright·©·1996-202 | 372 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 373 | ····</footer> | 373 | ····</footer> |
| 374 | ··</div> | 374 | ··</div> |
| 375 | </main> | 375 | </main> |
| 376 | </div> | 376 | </div> |
| 377 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 377 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 378 | ··<script> | 378 | ··<script> |
| 379 | ··let·initialized·=·false; | 379 | ··let·initialized·=·false; |
| Offset 131, 21 lines modified | Offset 131, 21 lines modified | ||
| 131 | ··</a> | 131 | ··</a> |
| 132 | ··<span·class="text">Examples</span> | 132 | ··<span·class="text">Examples</span> |
| 133 | </h3> | 133 | </h3> |
| 134 | <hr·class="thin"/><h4>Example·1·Using·xslapply</h4><p>original·XSLT:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"doc/title"</span><span·class="o">></span><span·class="w"> | 134 | <hr·class="thin"/><h4>Example·1·Using·xslapply</h4><p>original·XSLT:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"doc/title"</span><span·class="o">></span><span·class="w"> |
| 135 | ····</span><span·class="o"><</span><span·class="ss">h1</span><span·class="o">></span><span·class="w"> | 135 | ····</span><span·class="o"><</span><span·class="ss">h1</span><span·class="o">></span><span·class="w"> |
| 136 | ······</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="o">/</span><span·class="o">></span><span·class="w"> | 136 | ······</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="o">/</span><span·class="o">></span><span·class="w"> |
| 137 | ····</span><span·class="o"><</span><span·class="o">/</span><span·class="ss">h1</span><span·class="o">></span><span·class="w"> | 137 | ····</span><span·class="o"><</span><span·class="o">/</span><span·class="ss">h1</span><span·class="o">></span><span·class="w"> |
| 138 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>becomes·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id=" | 138 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>becomes·in·Erlang:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id="2937263090-1">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="2937263090-2">{</span><span·class="w">·</span><sp[·...·truncated·by·diffoscope;·len:·630,·SHA:·5c261d3731a36c73b1bb54767d1e46c8bc9a30f55c44ecdac5ea61e6ade998b5·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 139 | ····</span><span·class="p"·data-group-id=" | 139 | ····</span><span·class="p"·data-group-id="2937263090-5">[</span><span·class="s">"<h1>"</span><span·class="p">,</span><span·class="w"> |
| 140 | ·········</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 140 | ·········</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="2937263090-6">(</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·class="p"·data-group-id="[·...·truncated·by·diffoscope;·len:·10,·SHA:·e838a3f219e74d10c5b0a0ac4b74853e6266f720ea482dcda942be1f5293f299·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 141 | ·····</span><span·class="s">"</h1>"</span><span·class="p"·data-group-id=" | 141 | ·····</span><span·class="s">"</h1>"</span><span·class="p"·data-group-id="2937263090-5">]</span><span·class="p">;</span></code></pre><hr·class="thin"/><hr·class="thin"/><h4>Example·2·Using·value_of·and·select</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"title"</span><span·class="o">></span><span·class="w"> |
| 142 | ··</span><span·class="o"><</span><span·class="ow">div</span><span·class="w">·</span><span·class="ss">align</span><span·class="o">=</span><span·class="s">"center"</span><span·class="o">></span><span·class="o"><</span><span·class="ss">h1</span><span·class="o">></span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">value</span><span·class="o">-</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"."</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ss">h1</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ow">div</span><span·class="o">></span><span·class="w"> | 142 | ··</span><span·class="o"><</span><span·class="ow">div</span><span·class="w">·</span><span·class="ss">align</span><span·class="o">=</span><span·class="s">"center"</span><span·class="o">></span><span·class="o"><</span><span·class="ss">h1</span><span·class="o">></span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">value</span><span·class="o">-</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"."</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ss">h1</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ow">div</span><span·class="o">></span><span·class="w"> |
| 143 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>becomes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id=" | 143 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>becomes:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id="5565557269-1">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="5565557269-2">{</span><span·class="ss">name</span[·...·truncated·by·diffoscope;·len:·158,·SHA:·057999d650baaba7ca0093af345d2047bde47ee3545083d8d4369ef65dad3f0b·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 144 | ····</span><span·class="p"·data-group-id=" | 144 | ····</span><span·class="p"·data-group-id="5565557269-3">[</span><span·class="s">"<div·align=\"center\"><h1>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="5565557269-4">(</span><span·class="nf">s[·...·truncated·by·diffoscope;·len:·426,·SHA:·c72b423a8786ec161889ea9dd01f76d74e2ca1f056451dd829f6a766bf5a5fea·...·]-3">]</span><span·class="p">;</span></code></pre><hr·class="thin"/><hr·class="thin"/><h4>Example·3·Simple·xsl·stylesheet</h4><p>A·complete·example·with·the·XSLT·sheet·in·the·xmerl·distribution.</p><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">stylesheet</span><span·class="w">·</span><span·class="ss">version</span><span·class="o">=</span><span·class="s">"1.0"</span><span·class="w"> |
| 145 | ········</span><span·class="nc">xmlns</span><span·class="p">:</span><span·class="ss">xsl</span><span·class="o">=</span><span·class="s">"http://www.w3.org/1999/XSL/Transform"</span><span·class="w"> | 145 | ········</span><span·class="nc">xmlns</span><span·class="p">:</span><span·class="ss">xsl</span><span·class="o">=</span><span·class="s">"http://www.w3.org/1999/XSL/Transform"</span><span·class="w"> |
| 146 | ········</span><span·class="ss">xmlns</span><span·class="o">=</span><span·class="s">"http://www.w3.org/TR/xhtml1/strict"</span><span·class="o">></span><span·class="w"> | 146 | ········</span><span·class="ss">xmlns</span><span·class="o">=</span><span·class="s">"http://www.w3.org/TR/xhtml1/strict"</span><span·class="o">></span><span·class="w"> |
| 147 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">strip</span><span·class="o">-</span><span·class="ss">space</span><span·class="w">·</span><span·class="ss">elements</span><span·class="o">=</span><span·class="s">"doc·chapter·section"</span><span·class="o">/</span><span·class="o">></span><span·class="w"> | 147 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">strip</span><span·class="o">-</span><span·class="ss">space</span><span·class="w">·</span><span·class="ss">elements</span><span·class="o">=</span><span·class="s">"doc·chapter·section"</span><span·class="o">/</span><span·class="o">></span><span·class="w"> |
| 148 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">output</span><span·class="w"> | 148 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">output</span><span·class="w"> |
| 149 | ····</span><span·class="ss">method</span><span·class="o">=</span><span·class="s">"xml"</span><span·class="w"> | 149 | ····</span><span·class="ss">method</span><span·class="o">=</span><span·class="s">"xml"</span><span·class="w"> |
| 150 | ····</span><span·class="ss">indent</span><span·class="o">=</span><span·class="s">"yes"</span><span·class="w"> | 150 | ····</span><span·class="ss">indent</span><span·class="o">=</span><span·class="s">"yes"</span><span·class="w"> |
| Offset 198, 68 lines modified | Offset 198, 68 lines modified | ||
| 198 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"emph"</span><span·class="o">></span><span·class="w"> | 198 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"emph"</span><span·class="o">></span><span·class="w"> |
| 199 | ····</span><span·class="o"><</span><span·class="ss">em</span><span·class="o">></span><span·class="w"> | 199 | ····</span><span·class="o"><</span><span·class="ss">em</span><span·class="o">></span><span·class="w"> |
| 200 | ······</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="o">/</span><span·class="o">></span><span·class="w"> | 200 | ······</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="o">/</span><span·class="o">></span><span·class="w"> |
| 201 | ····</span><span·class="o"><</span><span·class="o">/</span><span·class="ss">em</span><span·class="o">></span><span·class="w"> | 201 | ····</span><span·class="o"><</span><span·class="o">/</span><span·class="ss">em</span><span·class="o">></span><span·class="w"> |
| 202 | ··</span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span><span·class="w"> | 202 | ··</span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span><span·class="w"> |
| 203 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">stylesheet</span><span·class="o">></span></code></pre><hr·class="thin"/><hr·class="thin"/><h4>Example·4·Erlang·version</h4><p>Erlang·transformation·of·previous·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id=" | 203 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">stylesheet</span><span·class="o">></span></code></pre><hr·class="thin"/><hr·class="thin"/><h4>Example·4·Erlang·version</h4><p>Erlang·transformation·of·previous·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="p">-</span><span·class="na">include</span><span·class="p"·data-group-id="7645851890-1">(</span><span·class="s">"xmerl.hrl"</span><span·class="p"·data-group-id="7645851890-1">)</span><span·class="p">.</span><span·class="w"> |
| 204 | </span><span·class="w"> | 204 | </span><span·class="w"> |
| 205 | </span><span·class="p">-</span><span·class="na">import</span><span·class="p"·data-group-id=" | 205 | </span><span·class="p">-</span><span·class="na">import</span><span·class="p"·data-group-id="7645851890-2">(</span><span·class="ss">xmerl_xs</span><span·class="p">,</span><span·class="w"> |
| 206 | ····</span><span·class="p"·data-group-id=" | 206 | ····</span><span·class="p"·data-group-id="7645851890-3">[</span><span·class="w">·</span><span·class="ss">xslapply</span><span·class="p">/</span><span·class="mi">2</span><span·class="p">,</span><span·class="w">·</span><span·class="ss">value_of</span><span·class="p">/</span><span·class="mi">1</span>[·...·truncated·by·diffoscope;·len:·380,·SHA:·d60a0286b86555195a9970e595cf204120533ed33fe92f5148ea5d20e3a9759b·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 207 | </span><span·class="nf">doctype</span><span·class="p"·data-group-id=" | 207 | </span><span·class="nf">doctype</span><span·class="p"·data-group-id="7645851890-4">(</span><span·class="p"·data-group-id="7645851890-4">)</span><span·class="p">-></span><span·class="w"> |
| 208 | ····</span><span·class="s">"<!DOCTYPE·html·PUBLIC·\"-//W3C//DTD·XHTML·1.0·Transitional//EN\"\ | 208 | ····</span><span·class="s">"<!DOCTYPE·html·PUBLIC·\"-//W3C//DTD·XHTML·1.0·Transitional//EN\"\ |
| 209 | ·\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd·\">"</span><span·class="p">.</span><span·class="w"> | 209 | ·\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd·\">"</span><span·class="p">.</span><span·class="w"> |
| 210 | </span><span·class="nf">process_xml</span><span·class="p"·data-group-id=" | 210 | </span><span·class="nf">process_xml</span><span·class="p"·data-group-id="7645851890-5">(</span><span·class="n">Doc</span><span·class="p"·data-group-id="7645851890-5">)</span><span·class="p">-></span><span·class="w"> |
| 211 | ····</span><span·class="nf">template</span><span·class="p"·data-group-id=" | 211 | ····</span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-6">(</span><span·class="n">Doc</span><span·class="p"·data-group-id="7645851890-6">)</span><span·class="p">.</span><span·class="w"> |
| 212 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 212 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-7">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-8">{</span><span·class="ss">name</span[·...·truncated·by·diffoscope;·len:·156,·SHA:·71cc0b264784b17f2b8adcaa1c788ad556ed7d47c65ab60d7c296ef8b2914db0·...·]-7">)</span><span·class="p">-></span><span·class="w"> |
| 213 | ····</span><span·class="p"·data-group-id=" | 213 | ····</span><span·class="p"·data-group-id="7645851890-9">[</span><span·class="w">·</span><span·class="s">"<\?xml·version=\"1.0\"·encoding=\"iso-8859-1\"\?>"</span><span·class="p">,</span><span·class="w"> |
| 214 | ······</span><span·class="nf">doctype</span><span·class="p"·data-group-id=" | 214 | ······</span><span·class="nf">doctype</span><span·class="p"·data-group-id="7645851890-10">(</span><span·class="p"·data-group-id="7645851890-10">)</span><span·class="p">,</span><span·class="w"> |
| 215 | ······</span><span·class="s">"<html·xmlns=\"http://www.w3.org/1999/xhtml\"·>"</span><span·class="w"> | 215 | ······</span><span·class="s">"<html·xmlns=\"http://www.w3.org/1999/xhtml\"·>"</span><span·class="w"> |
| 216 | ······</span><span·class="s">"<head>"</span><span·class="w"> | 216 | ······</span><span·class="s">"<head>"</span><span·class="w"> |
| 217 | ······</span><span·class="s">"<title>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id=" | 217 | ······</span><span·class="s">"<title>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="7645851890-11">(</span><span·class="nf">select</span><span·class="p"·data-group-id="7645851890-12">(</span><span·class="s">"title"</span><span·class="p">,</span><span·class="n">E</span><span·class="p"·data-group-id="7645851890-12">)</span><span·c[·...·truncated·by·diffoscope;·len:·34,·SHA:·452b20401062aa412717707f0edd4ebf337375bfcfa76c7a903c29f1bf1b36ea·...·]-11">)</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"</title>"</span><span·class="w"> |
| 218 | ······</span><span·class="s">"</head>"</span><span·class="w"> | 218 | ······</span><span·class="s">"</head>"</span><span·class="w"> |
| 219 | ······</span><span·class="s">"<body>"</span><span·class="p">,</span><span·class="w"> | 219 | ······</span><span·class="s">"<body>"</span><span·class="p">,</span><span·class="w"> |
| 220 | ······</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 220 | ······</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-13">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-13">)</span><span·class="p">,</span><span·class="w"> |
| 221 | ······</span><span·class="s">"</body>"</span><span·class="w"> | 221 | ······</span><span·class="s">"</body>"</span><span·class="w"> |
| 222 | ······</span><span·class="s">"</html>"</span><span·class="w">·</span><span·class="p"·data-group-id=" | 222 | ······</span><span·class="s">"</html>"</span><span·class="w">·</span><span·class="p"·data-group-id="7645851890-9">]</span><span·class="p">;</span><span·class="w"> |
| 223 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 223 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-14">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-15">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·637,·SHA:·aa8dae15d44673efaa829f9da825a095446a7a8a8d308935a651d2b99551f48a·...·]-14">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 224 | ····</span><span·class="p"·data-group-id=" | 224 | ····</span><span·class="p"·data-group-id="7645851890-18">[</span><span·class="s">"<h1>"</span><span·class="p">,</span><span·class="w"> |
| 225 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 225 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-19">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-19">)</span><span·class="p">,</span><span·class="w"> |
| 226 | ·····</span><span·class="s">"</h1>"</span><span·class="p"·data-group-id=" | 226 | ·····</span><span·class="s">"</h1>"</span><span·class="p"·data-group-id="7645851890-18">]</span><span·class="p">;</span><span·class="w"> |
| 227 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 227 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-20">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-21">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·641,·SHA:·9282ad4bcf0aca2567a7fb09fd78c5673e38c234fa6e4a871b499c706f11f01f·...·]-20">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 228 | ····</span><span·class="p"·data-group-id=" | 228 | ····</span><span·class="p"·data-group-id="7645851890-24">[</span><span·class="s">"<h2>"</span><span·class="p">,</span><span·class="w"> |
| 229 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 229 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-25">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-25">)</span><span·class="p">,</span><span·class="w"> |
| 230 | ·····</span><span·class="s">"</h2>"</span><span·class="p"·data-group-id=" | 230 | ·····</span><span·class="s">"</h2>"</span><span·class="p"·data-group-id="7645851890-24">]</span><span·class="p">;</span><span·class="w"> |
| 231 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 231 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-26">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-27">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·641,·SHA:·1c95b6b3a7864eca8734c2fb577847fef70d86cfe7735447d2e1011993cf9f05·...·]-26">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 232 | ····</span><span·class="p"·data-group-id=" | 232 | ····</span><span·class="p"·data-group-id="7645851890-30">[</span><span·class="s">"<h3>"</span><span·class="p">,</span><span·class="w"> |
| 233 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 233 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-31">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-31">)</span><span·class="p">,</span><span·class="w"> |
| 234 | ·····</span><span·class="s">"</h3>"</span><span·class="p"·data-group-id=" | 234 | ·····</span><span·class="s">"</h3>"</span><span·class="p"·data-group-id="7645851890-30">]</span><span·class="p">;</span><span·class="w"> |
| 235 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 235 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-32">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-33">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·184,·SHA:·7f20042b9b8fa2269681202462ce1647e08fc23650a487f1c8ad19b55742c6ec·...·]-32">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 236 | ····</span><span·class="p"·data-group-id=" | 236 | ····</span><span·class="p"·data-group-id="7645851890-34">[</span><span·class="s">"<p>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-35">(</span><span·class="w">·</span><span·class="k">fun</span><span[·...·truncated·by·diffoscope;·len:·360,·SHA:·535e64046831144f3aa91f5c770e2fc845d583d362fd28bbf62c032f9adc18b8·...·]-34">]</span><span·class="p">;</span><span·class="w"> |
| 237 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 237 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-36">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-37">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·184,·SHA:·4e7cfec6c80669090da40a4f1f0497cffac06fae53d509ea695766875bd5fd78·...·]-36">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 238 | ····</span><span·class="p"·data-group-id=" | 238 | ····</span><span·class="p"·data-group-id="7645851890-38">[</span><span·class="s">"<p·class=\"note\">"</span><span·class="w"> |
| 239 | ·····</span><span·class="s">"<b>NOTE:·</b>"</span><span·class="p">,</span><span·class="w"> | 239 | ·····</span><span·class="s">"<b>NOTE:·</b>"</span><span·class="p">,</span><span·class="w"> |
| 240 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id=" | 240 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-39">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-39">)</span><span·class="p">,</span><span·class="w"> |
| 241 | ·····</span><span·class="s">"</p>"</span><span·class="p"·data-group-id=" | 241 | ·····</span><span·class="s">"</p>"</span><span·class="p"·data-group-id="7645851890-38">]</span><span·class="p">;</span><span·class="w"> |
| 242 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 242 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-40">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7645851890-41">{</span><span·class="w">·</span><[·...·truncated·by·diffoscope;·len:·184,·SHA:·6cea2512255f3c3c0a2b0da2bbb0273c9d939960209c2324123f138338ab53e0·...·]-40">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 243 | ····</span><span·class="p"·data-group-id=" | 243 | ····</span><span·class="p"·data-group-id="7645851890-42">[</span><span·class="s">"<em>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7645851890-43">(</span><span·class="w">·</span><span·class="k">fun</span><spa[·...·truncated·by·diffoscope;·len:·362,·SHA:·b3e65d13dd267b90e925c2bc7081880e800df2f7be2c10edf086c561ee8ba6cc·...·]-42">]</span><span·class="p">;</span><span·class="w"> |
| 244 | </span><span·class="nf">template</span><span·class="p"·data-group-id=" | 244 | </span><span·class="nf">template</span><span·class="p"·data-group-id="7645851890-44">(</span><span·class="n">E</span><span·class="p"·data-group-id="7645851890-44">)</span><span·class="p">-></span><span·class="w"> |
| 245 | ····</span><span·class="nf">built_in_rules</span><span·class="p"·data-group-id=" | 245 | ····</span><span·class="nf">built_in_rules</span><span·class="p"·data-group-id="7645851890-45">(</span><span·class="w">·</span><span·class="k">fun</span><span·class="w">·</span><span·class="ss">template</span><span·class="p">/</span><span·class="mi">1</span><span·class="p">,</span><span·class="w">·</span><span·class="n">E</span><span·[·...·truncated·by·diffoscope;·len:·35,·SHA:·54a88bd9d08a5613a1c3ba86a6d8c8d7d97e628a57cfb45e82d4b19b0da92113·...·]-45">)</span><span·class="p">.</span></code></pre><p>It·is·important·to·end·with·a·call·to·<a·href="xmerl_xs.html#built_in_rules/2"><code·class="inline">xmerl_xs:built_in_rules/2</code></a>·if·you·want·any |
| 246 | text·to·be·written·in·"push"·transforms.·That·are·the·ones·using·a·lot·<code·class="inline">xslapply(·fun·template/1,·E·)</code>·instead·of·<code·class="inline">value_of(select("xpath",E))</code>,·which·is·pull...</p><hr·class="thin"/><p>The·largest·example·is·the·stylesheet·to·transform·this·document·from·the | 246 | text·to·be·written·in·"push"·transforms.·That·are·the·ones·using·a·lot·<code·class="inline">xslapply(·fun·template/1,·E·)</code>·instead·of·<code·class="inline">value_of(select("xpath",E))</code>,·which·is·pull...</p><hr·class="thin"/><p>The·largest·example·is·the·stylesheet·to·transform·this·document·from·the |
| 247 | Simplified·Docbook·XML·format·to·xhtml.·The·source·file·is·sdocbook2xhtml.erl.</p><h3·id="tips-and-tricks"·class="section-heading"> | 247 | Simplified·Docbook·XML·format·to·xhtml.·The·source·file·is·sdocbook2xhtml.erl.</p><h3·id="tips-and-tricks"·class="section-heading"> |
| 248 | ··<a·href="#tips-and-tricks"·class="hover-link"> | 248 | ··<a·href="#tips-and-tricks"·class="hover-link"> |
| 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> | 249 | ····<i·class="ri-link-m"·aria-hidden="true"></i> |
| 250 | ··</a> | 250 | ··</a> |
| 251 | ··<span·class="text">Tips·and·tricks</span> | 251 | ··<span·class="text">Tips·and·tricks</span> |
| 252 | </h3> | 252 | </h3> |
| Offset 270, 29 lines modified | Offset 270, 29 lines modified | ||
| 270 | position·in·Erlang.</p><hr·class="thin"/><h4>Example·5·Counting·positions</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"stanza"</span><span·class="o">></span><span·class="w"> | 270 | position·in·Erlang.</p><hr·class="thin"/><h4>Example·5·Counting·positions</h4><pre><code·class="makeup·erlang"·translate="no"><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"stanza"</span><span·class="o">></span><span·class="w"> |
| 271 | ··</span><span·class="o"><</span><span·class="ss">p</span><span·class="o">></span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"line"</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ss">p</span><span·class="o">></span><span·class="w"> | 271 | ··</span><span·class="o"><</span><span·class="ss">p</span><span·class="o">></span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="nb">apply</span><span·class="o">-</span><span·class="ss">templates</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"line"</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="o">/</span><span·class="ss">p</span><span·class="o">></span><span·class="w"> |
| 272 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span><span·class="w"> | 272 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span><span·class="w"> |
| 273 | </span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"line"</span><span·class="o">></span><span·class="w"> | 273 | </span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="w">·</span><span·class="ss">match</span><span·class="o">=</span><span·class="s">"line"</span><span·class="o">></span><span·class="w"> |
| 274 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="k">if</span><span·class="w">·</span><span·class="ss">test</span><span·class="o">=</span><span·class="s">"position()·mod·2·=·0"</span><span·class="o">></span><span·class="err">&</span><span·class="p">#</span><span·class="mi">160</span><span·class="p">;</span><span·class="err">&</span><span·class="p">#</span><span·class="mi">160</span><span·class="p">;</span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="k">if</span><span·class="o">></span><span·class="w"> | 274 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="k">if</span><span·class="w">·</span><span·class="ss">test</span><span·class="o">=</span><span·class="s">"position()·mod·2·=·0"</span><span·class="o">></span><span·class="err">&</span><span·class="p">#</span><span·class="mi">160</span><span·class="p">;</span><span·class="err">&</span><span·class="p">#</span><span·class="mi">160</span><span·class="p">;</span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="k">if</span><span·class="o">></span><span·class="w"> |
| 275 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">value</span><span·class="o">-</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"."</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="ss">br</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="w"> | 275 | ··</span><span·class="o"><</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">value</span><span·class="o">-</span><span·class="k">of</span><span·class="w">·</span><span·class="ss">select</span><span·class="o">=</span><span·class="s">"."</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="o"><</span><span·class="ss">br</span><span·class="w">·</span><span·class="o">/</span><span·class="o">></span><span·class="w"> |
| 276 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>Can·be·written·as</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id=" | 276 | </span><span·class="o"><</span><span·class="o">/</span><span·class="nc">xsl</span><span·class="p">:</span><span·class="ss">template</span><span·class="o">></span></code></pre><p>Can·be·written·as</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id="3235303655-1">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="3235303655-2">{</span><span·class="ss">name</span[·...·truncated·by·diffoscope;·len:·159,·SHA:·88922104addf01f979414bea27f23205dd0b4f52b589100f65fd279c710919d1·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 277 | ····</span><span·class="p"·data-group-id=" | 277 | ····</span><span·class="p"·data-group-id="3235303655-3">{</span><span·class="n">Lines</span><span·class="p">,</span><span·class="n">LineNo</span><span·class="p"·data-group-id="3235303655-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">lists</span[·...·truncated·by·diffoscope;·len:·654,·SHA:·c9ff1b6be84b8a405586971c8f3b139dbfb6e21afec153dfded86f32d87643e1·...·]-4">)</span><span·class="p">,</span><span·class="w"> |
| 278 | ····</span><span·class="p"·data-group-id=" | 278 | ····</span><span·class="p"·data-group-id="3235303655-6">[</span><span·class="s">"<p>"</span><span·class="p">,</span><span·class="w">·</span><span·class="n">Lines</span><span·class="p">,</span><span·class="w">·</span><span·class="s">"</p>"</span><span·class="p"·data-[·...·truncated·by·diffoscope;·len:·20,·SHA:·5e2188d79e6b11899cdc1024c32a05a8cc39c64d6eddf3c6fe164dce64a9023e·...·]-6">]</span><span·class="p">.</span><span·class="w"> |
| 279 | </span><span·class="nf">template_pos</span><span·class="p"·data-group-id=" | 279 | </span><span·class="nf">template_pos</span><span·class="p"·data-group-id="3235303655-7">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="3235303655-8">{</span><span·class="ss">name</span[·...·truncated·by·diffoscope;·len:·229,·SHA:·9e41e17e28da916b8e9c3af4fb9c9e8c141b777db3215929af5c066508d5f528·...·]-7">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 280 | ····</span><span·class="p"·data-group-id=" | 280 | ····</span><span·class="p"·data-group-id="3235303655-9">{</span><span·class="p"·data-group-id="3235303655-10">[</span><span·class="nf">indent_line</span><span·class="p"·data-group-id="3235303655-11">(</span><span·class="n">P</span><span·class="w">·</span><span·class="ow">rem</span><span·class="w">[·...·truncated·by·diffoscope;·len:·795,·SHA:·b7772ddb194fa748e58a973fbe64d78e6ac42fdbdafb908c158b04f271d25891·...·]-9">}</span><span·class="p">.</span><span·class="w"> |
| 281 | </span><span·class="nf">indent_line</span><span·class="p"·data-group-id=" | 281 | </span><span·class="nf">indent_line</span><span·class="p"·data-group-id="3235303655-13">(</span><span·class="mi">0</span><span·class="p"·data-group-id="3235303655-13">)</span><span·class="p">-></span><span·class="s">"&#160;&#160;"</span><span·class="p">;</span><span·class="w"> |
| 282 | </span><span·class="nf">indent_line</span><span·class="p"·data-group-id=" | 282 | </span><span·class="nf">indent_line</span><span·class="p"·data-group-id="3235303655-14">(</span><span·class="p">_</span><span·class="p"·data-group-id="3235303655-14">)</span><span·class="p">-></span><span·class="s">""</span><span·class="p">.</span></code></pre><hr·class="thin"/><h4>Global·tree·awareness</h4><p>In·XSLT·you·have·"root"·access·to·the·top·of·the·tree·with·XPath,·even·though |
| 283 | you·are·somewhere·deep·in·your·tree.</p><p>The·xslapply/2·function·only·carries·back·the·child·part·of·the·tree·to·the | 283 | you·are·somewhere·deep·in·your·tree.</p><p>The·xslapply/2·function·only·carries·back·the·child·part·of·the·tree·to·the |
| 284 | template·fun.·But·it·is·quite·easy·to·write·template·funs·that·handles·both·the | 284 | template·fun.·But·it·is·quite·easy·to·write·template·funs·that·handles·both·the |
| 285 | child·and·top·tree.</p><hr·class="thin"/><h4>Example·6·Passing·the·root·tree</h4><p>The·following·example·piece·will·prepend·the·article·title·to·any·section·title</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id="7 | 285 | child·and·top·tree.</p><hr·class="thin"/><h4>Example·6·Passing·the·root·tree</h4><p>The·following·example·piece·will·prepend·the·article·title·to·any·section·title</p><pre><code·class="makeup·erlang"·translate="no"><span·class="nf">template</span><span·class="p"·data-group-id="7812857367-1">(</span><span·class="n">E</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="o">#</span><span·class="ss">xmlElement</span><span·class="p"·data-group-id="7812857367-2">{</span><span·class="ss">name</span>[·...·truncated·by·diffoscope;·len:·256,·SHA:·774552fd788133e9774868ad091aa91a06a4d55a40da322e41f7441548d59db5·...·]-1">)</span><span·class="w">·</span><span·class="p">-></span><span·class="w"> |
| 286 | ····</span><span·class="p"·data-group-id="7 | 286 | ····</span><span·class="p"·data-group-id="7812857367-3">[</span><span·class="s">"<h3>"</span><span·class="p">,</span><span·class="w">·</span><span·class="nf">value_of</span><span·class="p"·data-group-id="7812857367-4">(</span><span·class="nf">select</span><span·class="p"·data-group-[·...·truncated·by·diffoscope;·len:·235,·SHA:·1e2e99e366825f0be27b73bf828c86a85798f6a03c28f101dc9453b3f7fd0ba0·...·]-4">)</span><span·class="p">,</span><span·class="s">"·-·"</span><span·class="p">,</span><span·class="w"> |
| 287 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7 | 287 | ·····</span><span·class="nf">xslapply</span><span·class="p"·data-group-id="7812857367-6">(</span><span·class="w">·</span><span·class="nf">fun</span><span·class="p"·data-group-id="7812857367-7">(</span><span·class="n">A</span><span·class="p"·data-group-id="7812857367-7">)</span><span·class="w">·</span><span·class="p">-></span><s[·...·truncated·by·diffoscope;·len:·422,·SHA:·f0f2adb50ba3bb5b4206aee396f195c45c0e28183c471701a52beb77176f829c·...·]-6">)</span><span·class="p">,</span><span·class="w"> |
| 288 | ·····</span><span·class="s">"</h3>"</span><span·class="p"·data-group-id="7 | 288 | ·····</span><span·class="s">"</h3>"</span><span·class="p"·data-group-id="7812857367-3">]</span><span·class="p">;</span></code></pre><hr·class="thin"/> |
| 289 | </div> | 289 | </div> |
| 290 | <div·class="bottom-actions"·id="bottom-actions"> | 290 | <div·class="bottom-actions"·id="bottom-actions"> |
| 291 | ··<div·class="bottom-actions-item"> | 291 | ··<div·class="bottom-actions-item"> |
| 292 | ······<a·href="xmerl_examples.html"·class="bottom-actions-button"·rel="prev"> | 292 | ······<a·href="xmerl_examples.html"·class="bottom-actions-button"·rel="prev"> |
| 293 | ········<span·class="subheader"> | 293 | ········<span·class="subheader"> |
| Offset 322, 15 lines modified | Offset 322, 15 lines modified | ||
| 322 | ······<p·class="built-using"> | 322 | ······<p·class="built-using"> |
| 323 | ········Built·using | 323 | ········Built·using |
| 324 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 324 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 325 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 325 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| Max diff block lines reached; 341/61074 bytes (0.56%) of diff not shown. | |||
| Offset 772, 17 lines modified | Offset 772, 17 lines modified | ||
| 772 | parsed·XML·<a·href="xmerl.html#t:xmlElement/0"><code·class="inline">Element :: #xmlElement{}</code></a> | 772 | parsed·XML·<a·href="xmerl.html#t:xmlElement/0"><code·class="inline">Element :: #xmlElement{}</code></a> |
| 773 | and·a·State,·<a·href="#t:global_state/0"><code·class="inline">global_state/0</code></a>,·which·holds·necessary·information | 773 | and·a·State,·<a·href="#t:global_state/0"><code·class="inline">global_state/0</code></a>,·which·holds·necessary·information |
| 774 | from·an·already·processed·schema.··Thus·validate·enables·reuse | 774 | from·an·already·processed·schema.··Thus·validate·enables·reuse |
| 775 | of·the·schema·information·and·therefore·if·one·shall·validate | 775 | of·the·schema·information·and·therefore·if·one·shall·validate |
| 776 | several·times·towards·the·same·schema·it·reduces·time·consumption.</p><p>The·result,·<code·class="inline">ValidElement</code>,·is·the·valid·element·that·conforms·to·the | 776 | several·times·towards·the·same·schema·it·reduces·time·consumption.</p><p>The·result,·<code·class="inline">ValidElement</code>,·is·the·valid·element·that·conforms·to·the |
| 777 | post-schema-validation·infoset.·When·the·validator·finds·an·error·it·tries·to | 777 | post-schema-validation·infoset.·When·the·validator·finds·an·error·it·tries·to |
| 778 | continue·and·reports·a·list·of·all·errors·found.·In·those·cases·an·unexpected | 778 | continue·and·reports·a·list·of·all·errors·found.·In·those·cases·an·unexpected |
| 779 | error·is·found·it·may·cause·a·single·error·reason.</p><p>Usage·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">1</span><span·class="o">></span><span·class="p"·data-group-id=" | 779 | error·is·found·it·may·cause·a·single·error·reason.</p><p>Usage·example:</p><pre><code·class="makeup·erlang"·translate="no"><span·class="mi">1</span><span·class="o">></span><span·class="p"·data-group-id="6931813346-1">{</span><span·class="n">E</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="6931813346-1">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_scan</span><sp[·...·truncated·by·diffoscope;·len:·197,·SHA:·4e5c4da78170ff60020a356f433f237464025ad46b494357b82f0cef924750d9·...·]-2">)</span><span·class="p">.</span><span·class="w"> |
| 780 | </span><span·class="mi">2</span><span·class="o">></span><span·class="p"·data-group-id=" | 780 | </span><span·class="mi">2</span><span·class="o">></span><span·class="p"·data-group-id="6931813346-3">{</span><span·class="ss">ok</span><span·class="p">,</span><span·class="n">S</span><span·class="p"·data-group-id="6931813346-3">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_xsd</span><s[·...·truncated·by·diffoscope;·len:·206,·SHA:·3ed6b39952176a40d2339aa4b555c499aae0f735ba9b903e96f308e6259c1cb3·...·]-4">)</span><span·class="p">.</span><span·class="w"> |
| 781 | </span><span·class="mi">3</span><span·class="o">></span><span·class="p"·data-group-id=" | 781 | </span><span·class="mi">3</span><span·class="o">></span><span·class="p"·data-group-id="6931813346-5">{</span><span·class="n">E2</span><span·class="p">,</span><span·class="p">_</span><span·class="p"·data-group-id="6931813346-5">}</span><span·class="w">·</span><span·class="o">=</span><span·class="w">·</span><span·class="nc">xmerl_xsd</span><sp[·...·truncated·by·diffoscope;·len:·219,·SHA:·c97e867c07095b5a564e81797841ee72c7fc4acf3742c0c387352545c5ca11fd·...·]-6">)</span><span·class="p">.</span></code></pre><p>Observe·that·E2·may·differ·from·E·if·for·instance·there·are·default·values |
| 782 | defined·in·<code·class="inline">my_XML_Schema.xsd</code>.</p> | 782 | defined·in·<code·class="inline">my_XML_Schema.xsd</code>.</p> |
| 783 | ··</section> | 783 | ··</section> |
| 784 | </section> | 784 | </section> |
| 785 | ····</div> | 785 | ····</div> |
| 786 | ··</section> | 786 | ··</section> |
| Offset 800, 15 lines modified | Offset 800, 15 lines modified | ||
| 800 | ······<p·class="built-using"> | 800 | ······<p·class="built-using"> |
| 801 | ········Built·using | 801 | ········Built·using |
| 802 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the | 802 | ········<a·href="https://github.com/elixir-lang/ex_doc"·title="ExDoc"·target="_blank"·rel="help·noopener"·translate="no">ExDoc</a>·(v0.35.1)·for·the |
| 803 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> | 803 | ··········<a·href="https://erlang.org"·title="Erlang"·target="_blank"·translate="no">Erlang·programming·language</a> |
| 804 | ······</p> | 804 | ······</p> |
| 805 | <p>Copyright·©·1996-202 | 805 | <p>Copyright·©·1996-2025·<a·href="https://www.ericsson.com">Ericsson·AB</a></p> |
| 806 | ····</footer> | 806 | ····</footer> |
| 807 | ··</div> | 807 | ··</div> |
| 808 | </main> | 808 | </main> |
| 809 | </div> | 809 | </div> |
| 810 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> | 810 | ··<script·defer·src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script> |
| 811 | ··<script> | 811 | ··<script> |
| 812 | ··let·initialized·=·false; | 812 | ··let·initialized·=·false; |
| Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
| 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2025-07-08·07:27:28.000000·debian-binary |
| 2 | -rw-r--r--···0········0········0······836·2025-07-08·07:27:28.000000·control.tar.xz | 2 | -rw-r--r--···0········0········0······836·2025-07-08·07:27:28.000000·control.tar.xz |
| 3 | -rw-r--r--···0········0········0···1127 | 3 | -rw-r--r--···0········0········0···112768·2025-07-08·07:27:28.000000·data.tar.xz |